moonbit-plasma

A MoonBit plasma numerics toolkit for teaching, research prototypes, and lightweight engineering calculations.

plasma
simulation
pic
vlasov
numerics
moon add mohongquan0630/moonbit-plasma@0.2.0
Download zip
Version
0.2.0
License
Apache-2.0
Last updated
1 hour ago
Downloads
8
README

#moonbit-plasma

moonbit-plasma is a pure MoonBit toolkit for deterministic one-dimensional electrostatic plasma models. It provides inspectable numerical kernels for teaching laboratories, research prototypes, regression fixtures, and lightweight engineering calculations.

#Project positioning

The library provides a composable path from physical parameters to a reproducible result: construct a grid and species, sample particles or a distribution, deposit charge, solve the electrostatic field, advance the state, and export diagnostics. Its scope is intentionally explicit: this is a 1D electrostatic toolkit, not a claim of a validated MPI/GPU production solver.

#Core capabilities

  • SI plasma relations, thermal scales, damping estimates, beta, and Alfvén-related helpers.
  • Periodic grids, interpolation, profiles, finite-difference derivatives, and periodic or bounded Poisson solvers.
  • PIC with NGP/CIC/TSC shape functions, multiple species, deterministic sampling, and boundary policies.
  • Simplified Vlasov-Poisson advection with density, velocity marginal, entropy, kinetic energy, positivity, and mass diagnostics.
  • Boris and Verlet integration, analytic fields, collision models, fluid fluxes, spectra, phase-space histograms, and invariant checks.
  • Stable CSV snapshots, benchmark records, verification bundles, and generated public API summaries.

#Quick start

moon update moon check --deny-warn moon test --deny-warn moon run cmd/main

///|
test {
let grid = Grid1D::new(8, 1.0)
let state = PicState::new(grid, two_stream_particles(16, 1.0, 1.0e5))
let next = state.run(1.0e-12, 2)
assert_eq(next.particles.length(), 16)
}

#CLI

moon run cmd/main prints benchmark rows, an aggregate summary, and a deterministic fingerprint. The reported workload is cells × particles × steps; errors are calculated from each run. Custom experiments can use SimulationScenario, PipelineConfig, ExperimentConfig, or PicConfig and export CSV through the library.

#Architecture

AreaRepresentative modules
Physical relations and unitsconstants.mbt, formulas.mbt, physics_relations_ext.mbt, units.mbt
Grid and field numericsgrid*.mbt, interpolation.mbt, field*.mbt, poisson.mbt, solver_tools.mbt
Particle and distribution modelspic*.mbt, multispecies.mbt, sampling.mbt, shapes.mbt, vlasov*.mbt
Boundaries and dynamicsboundary*.mbt, integrators.mbt, magnetic.mbt, collisions.mbt, fluid.mbt
Analysis and exportmoments.mbt, diagnostics*.mbt, spectra.mbt, phase_space.mbt, dataset.mbt, serialization.mbt
Reproducibilityscenarios.mbt, orchestration.mbt, benchmark_report.mbt, reproducibility.mbt, verification_bundle.mbt

Public interfaces are generated with moon info --target all into pkg.generated.mbti.

#Benchmarks

The deterministic tiny, medium, and large PIC scenarios report configured sizes, computed charge error, energy drift, work units, and a checksum. Run:

moon run cmd/main

The checked-in benchmark report records the output observed during verification; rerun it after changing the toolchain or numerical kernels.

#Tests and numerical boundaries

The suite exercises formulas, degenerate grids, periodic wrapping, field reconstruction, charge deposition, Poisson residuals, shape partition of unity, deterministic sampling, species totals, particle boundaries, Vlasov moments, PIC stepping, spectra, phase-space counts, serialization, and benchmark contracts.

moon test acceptance_test.mbt moon test advanced_test.mbt moon test benchmark_test.mbt moon test physics_test.mbt moon test system_test.mbt

#CI and release

GitHub Actions tests Linux, macOS, and Windows with the current stable MoonBit installer. It runs dependency update, format verification, warning-free checks across stable targets, all tests, generated API verification, and the CLI smoke test. A separate benchmark workflow uploads CLI output, and the release workflow publishes the package to Mooncakes after the same checks.

#License

Apache-2.0. See LICENSE.

#
ApiEntry

pub(all) struct ApiEntry {
name : String
category : String
description : String
} derive(ToJson,
Debug
)

#
BenchmarkRecord

pub(all) struct BenchmarkRecord {
name : String
cells : Int
particles : Int
steps : Int
work_units : Int
final_particles : Int
charge_error : Double
energy_drift : Double
} derive(ToJson,
Debug
)

#
BenchmarkSample

pub(all) struct BenchmarkSample {
name : String
cells : Int
particles : Int
steps : Int
energy : Double
} derive(ToJson,
Debug
)

#
BenchmarkSuite

pub(all) struct BenchmarkSuite {
records : Array[BenchmarkRecord]
} derive(ToJson,
Debug
)

#
BenchmarkSuite::maximum_charge_error

fn BenchmarkSuite::maximum_charge_error(suite : BenchmarkSuite) -> Double

#
BenchmarkSuite::maximum_energy_drift

fn BenchmarkSuite::maximum_energy_drift(suite : BenchmarkSuite) -> Double

#
BenchmarkSuite::total_work

fn BenchmarkSuite::total_work(suite : BenchmarkSuite) -> Int

#
Boundary1D

pub(all) enum Boundary1D {
Periodic
Reflecting
Absorbing
} derive(Eq, ToJson,
Debug
)

#
BoundaryBatchResult

pub(all) struct BoundaryBatchResult {
alive : Array[Particle]
absorbed : Int
reflected : Int
wrapped : Int
} derive(ToJson,
Debug
)

#
BoundaryResult

pub(all) struct BoundaryResult {
x : Double
v : Double
alive : Bool
} derive(ToJson,
Debug
)

#
CflReport

pub(all) struct CflReport {
recommended_dt : Double
max_displacement : Double
stable : Bool
} derive(ToJson,
Debug
)

#
CollisionKind

pub(all) enum CollisionKind {
Elastic
Drag
Langevin
Thermalize
} derive(Eq, ToJson,
Debug
)

#
CollisionModel

pub(all) struct CollisionModel {
kind : CollisionKind
rate : Double
background_velocity : Double
thermal_speed : Double
} derive(ToJson,
Debug
)

#
ConservationReport

pub(all) struct ConservationReport {
initial_charge : Double
final_charge : Double
charge_drift : Double
initial_energy : Double
final_energy : Double
energy_drift : Double
particle_count_preserved : Bool
} derive(ToJson,
Debug
)

#
ElectricFieldKind

pub(all) enum ElectricFieldKind {
Constant
Sinusoidal
Gaussian
Linear
Pulse
} derive(Eq, ToJson,
Debug
)

#
ElectricFieldModel

pub(all) struct ElectricFieldModel {
kind : ElectricFieldKind
amplitude : Double
offset : Double
wave_number : Double
center : Double
width : Double
slope : Double
} derive(ToJson,
Debug
)

#
EnsembleMember

pub(all) struct EnsembleMember {
id : Int
seed : Int
diagnostics : Array[PicDiagnostics]
} derive(ToJson,
Debug
)

#
EnsembleSummary

pub(all) struct EnsembleSummary {
members : Int
mean_final_energy : Double
spread_final_energy : Double
mean_charge_error : Double
maximum_particle_loss : Int
} derive(ToJson,
Debug
)

#
ExperimentConfig

pub(all) struct ExperimentConfig {
name : String
grid : Grid1D
steps : Int
dt : Double
} derive(ToJson,
Debug
)

#
ExperimentConfig::new

fn ExperimentConfig::new(name : String, grid : Grid1D, steps : Int, dt : Double) -> ExperimentConfig

#
ExperimentReport

pub(all) struct ExperimentReport {
name : String
samples : Array[ExperimentSample]
final_state : PicState
} derive(ToJson,
Debug
)

#
ExperimentSample

pub(all) struct ExperimentSample {
step : Int
time : Double
particles : Int
total_charge : Double
kinetic_energy : Double
field_energy : Double
total_energy : Double
charge_error : Double
} derive(ToJson,
Debug
)

#
Field1D

pub(all) struct Field1D {
grid : Grid1D
charge_density : Array[Double]
electric : Array[Double]
potential : Array[Double]
} derive(ToJson,
Debug
)

#
Field1D::charge_neutrality_error

fn Field1D::charge_neutrality_error(field : Field1D) -> Double

#
Field1D::electric_energy

fn Field1D::electric_energy(field : Field1D) -> Double

#
Field1D::electric_range

fn Field1D::electric_range(field : Field1D) -> (Double, Double)

#
Field1D::new

fn Field1D::new(grid : Grid1D) -> Field1D

#
Field1D::potential_range

fn Field1D::potential_range(field : Field1D) -> (Double, Double)

#
FluidFlux

pub(all) struct FluidFlux {
mass : Double
momentum : Double
energy : Double
} derive(ToJson,
Debug
)

#
FluidState

pub(all) struct FluidState {
density : Double
velocity : Double
pressure : Double
energy : Double
} derive(ToJson,
Debug
)

#
FluidState::new

fn FluidState::new(density : Double, velocity : Double, pressure : Double, energy : Double) -> FluidState

#
Grid1D

pub(all) struct Grid1D {
cells : Int
length : Double
dx : Double
} derive(ToJson,
Debug
)

#
Grid1D::cell_index

fn Grid1D::cell_index(grid : Grid1D, x : Double) -> Int

#
Grid1D::cell_width

fn Grid1D::cell_width(grid : Grid1D) -> Double

#
Grid1D::cells_count

fn Grid1D::cells_count(grid : Grid1D) -> Int

#
Grid1D::domain_length

fn Grid1D::domain_length(grid : Grid1D) -> Double

#
Grid1D::is_valid

fn Grid1D::is_valid(grid : Grid1D) -> Bool

#
Grid1D::new

fn Grid1D::new(cells : Int, length : Double) -> Grid1D

#
Grid1D::position

fn Grid1D::position(grid : Grid1D, index : Int) -> Double

#
Grid1D::wrap

fn Grid1D::wrap(grid : Grid1D, x : Double) -> Double

#
GridDescriptor

pub(all) struct GridDescriptor {
grid : Grid1D
cell_centers : Array[Double]
cell_edges : Array[Double]
} derive(ToJson,
Debug
)

#
GridReduction

pub(all) struct GridReduction {
source_cells : Int
target_cells : Int
source_length : Double
values : Array[Double]
} derive(ToJson,
Debug
)

#
HealthCheck

pub(all) struct HealthCheck {
name : String
passed : Bool
metric : Double
threshold : Double
message : String
} derive(ToJson,
Debug
)

#
InterpolationMode

pub(all) enum InterpolationMode {
Nearest
Linear
Quadratic
} derive(Eq, ToJson,
Debug
)

#
InterpolationResult

pub(all) struct InterpolationResult {
value : Double
left : Int
right : Int
fraction : Double
} derive(ToJson,
Debug
)

#
InvariantCheck

pub(all) struct InvariantCheck {
name : String
passed : Bool
observed : Double
tolerance : Double
} derive(ToJson,
Debug
)

#
MagneticField3D

pub(all) struct MagneticField3D {
origin : Vector3
uniform : Vector3
gradient : Vector3
} derive(ToJson,
Debug
)

#
MagneticField3D::flux_through_area

fn MagneticField3D::flux_through_area(field : MagneticField3D, position : Vector3, normal : Vector3, area : Double) -> Double

#
MagneticField3D::magnitude

fn MagneticField3D::magnitude(field : MagneticField3D, position : Vector3) -> Double

#
MagneticField3D::sample

fn MagneticField3D::sample(field : MagneticField3D, position : Vector3) -> Vector3

#
Matrix2

pub(all) struct Matrix2 {
a11 : Double
a12 : Double
a21 : Double
a22 : Double
} derive(ToJson,
Debug
)

#
Matrix2::add

fn Matrix2::add(a : Matrix2, b : Matrix2) -> Matrix2

#
Matrix2::determinant

fn Matrix2::determinant(matrix : Matrix2) -> Double

#
Matrix2::identity

fn Matrix2::identity() -> Matrix2

#
Matrix2::inverse

fn Matrix2::inverse(matrix : Matrix2) -> Matrix2

#
Matrix2::multiply

fn Matrix2::multiply(a : Matrix2, b : Matrix2) -> Matrix2

#
Matrix2::multiply_vector

fn Matrix2::multiply_vector(matrix : Matrix2, vector : MatrixVector2) -> MatrixVector2

#
Matrix2::new

fn Matrix2::new(a11 : Double, a12 : Double, a21 : Double, a22 : Double) -> Matrix2

#
Matrix2::scale

fn Matrix2::scale(a : Matrix2, factor : Double) -> Matrix2

#
Matrix2::transpose

fn Matrix2::transpose(matrix : Matrix2) -> Matrix2

#
Matrix2::zero

fn Matrix2::zero() -> Matrix2

#
MatrixVector2

pub(all) struct MatrixVector2 {
x : Double
y : Double
} derive(Eq, ToJson,
Debug
)

#
MatrixVector2::add

#
MatrixVector2::distance

fn MatrixVector2::distance(a : MatrixVector2, b : MatrixVector2) -> Double

#
MatrixVector2::dot

fn MatrixVector2::dot(a : MatrixVector2, b : MatrixVector2) -> Double

#
MatrixVector2::new

fn MatrixVector2::new(x : Double, y : Double) -> MatrixVector2

#
MatrixVector2::norm

fn MatrixVector2::norm(a : MatrixVector2) -> Double

#
MatrixVector2::scale

fn MatrixVector2::scale(a : MatrixVector2, factor : Double) -> MatrixVector2

#
Moments1D

pub(all) struct Moments1D {
density : Array[Double]
momentum : Array[Double]
temperature_like : Array[Double]
} derive(ToJson,
Debug
)

#
MultiSpeciesState

pub(all) struct MultiSpeciesState {
grid : Grid1D
populations : Array[SpeciesPopulation]
charge_density : Array[Double]
field : Field1D
time : Double
} derive(ToJson,
Debug
)

#
MultiSpeciesState::current_density

fn MultiSpeciesState::current_density(state : MultiSpeciesState) -> Array[Double]

#
MultiSpeciesState::flatten

#
MultiSpeciesState::kinetic_energy

fn MultiSpeciesState::kinetic_energy(state : MultiSpeciesState) -> Double

#
MultiSpeciesState::new

#
MultiSpeciesState::number_density

fn MultiSpeciesState::number_density(state : MultiSpeciesState) -> Array[Double]

#
MultiSpeciesState::particle_count

fn MultiSpeciesState::particle_count(state : MultiSpeciesState) -> Int

#
MultiSpeciesState::population

fn MultiSpeciesState::population(state : MultiSpeciesState, index : Int) -> SpeciesPopulation?

#
MultiSpeciesState::run

fn MultiSpeciesState::run(state : MultiSpeciesState, dt : Double, steps : Int) -> MultiSpeciesState

#
MultiSpeciesState::species_count

fn MultiSpeciesState::species_count(state : MultiSpeciesState) -> Int

#
MultiSpeciesState::step

fn MultiSpeciesState::step(state : MultiSpeciesState, dt : Double) -> MultiSpeciesState

#
MultiSpeciesState::total_charge

fn MultiSpeciesState::total_charge(state : MultiSpeciesState) -> Double

#
MultiSpeciesState::total_energy

fn MultiSpeciesState::total_energy(state : MultiSpeciesState) -> Double

#
MultiSpeciesState::total_mass

fn MultiSpeciesState::total_mass(state : MultiSpeciesState) -> Double

#
NumericTable

pub(all) struct NumericTable {
columns : Array[String]
rows : Array[Array[Double]]
} derive(ToJson,
Debug
)

#
NumericTable::add_row

fn NumericTable::add_row(table : NumericTable, row : Array[Double]) -> Unit

#
NumericTable::column

fn NumericTable::column(table : NumericTable, index : Int) -> String?

#
NumericTable::column_count

fn NumericTable::column_count(table : NumericTable) -> Int

#
NumericTable::new

fn NumericTable::new(columns : Array[String]) -> NumericTable

#
NumericTable::row

fn NumericTable::row(table : NumericTable, index : Int) -> Array[Double]?

#
NumericTable::row_count

fn NumericTable::row_count(table : NumericTable) -> Int

#
NumericTable::to_csv

fn NumericTable::to_csv(table : NumericTable) -> String

#
NumericTable::transpose

fn NumericTable::transpose(table : NumericTable) -> NumericTable

#
Observable

pub(all) struct Observable {
name : String
unit : String
values : Array[Double]
} derive(ToJson,
Debug
)

#
Observable::count

fn Observable::count(observable : Observable) -> Int

#
Observable::maximum

fn Observable::maximum(observable : Observable) -> Double

#
Observable::mean

fn Observable::mean(observable : Observable) -> Double

#
Observable::minimum

fn Observable::minimum(observable : Observable) -> Double

#
Observable::new

fn Observable::new(name : String, unit : String, values : Array[Double]) -> Observable

#
Observable::normalize

fn Observable::normalize(observable : Observable) -> Observable

#
Observable::range

fn Observable::range(observable : Observable) -> Double

#
Observable::scale

fn Observable::scale(observable : Observable, factor : Double) -> Observable

#
Observable::shift

fn Observable::shift(observable : Observable, amount : Double) -> Observable

#
Observable::summary

fn Observable::summary(observable : Observable) -> SeriesSummary

#
Observable::to_csv

fn Observable::to_csv(observable : Observable) -> String

#
Particle

pub(all) struct Particle {
x : Double
v : Double
weight : Double
charge : Double
mass : Double
} derive(ToJson,
Debug
)

#
Particle::new

fn Particle::new(x~ : Double, v~ : Double, weight? : Double, charge? : Double, mass? : Double) -> Particle

#
PhaseSpaceGrid

pub(all) struct PhaseSpaceGrid {
x_bins : Int
v_bins : Int
x_min : Double
x_max : Double
v_min : Double
v_max : Double
counts : Array[Int]
} derive(ToJson,
Debug
)

#
PhaseSpaceGrid::index

fn PhaseSpaceGrid::index(grid : PhaseSpaceGrid, x_index : Int, v_index : Int) -> Int

#
PhaseSpaceGrid::new

fn PhaseSpaceGrid::new(x_bins : Int, v_bins : Int, x_min : Double, x_max : Double, v_min : Double, v_max : Double) -> PhaseSpaceGrid

#
PhaseSpaceGrid::total_count

fn PhaseSpaceGrid::total_count(grid : PhaseSpaceGrid) -> Int

#
PhaseSpaceGrid::v_index

fn PhaseSpaceGrid::v_index(grid : PhaseSpaceGrid, v : Double) -> Int

#
PhaseSpaceGrid::v_width

fn PhaseSpaceGrid::v_width(grid : PhaseSpaceGrid) -> Double

#
PhaseSpaceGrid::x_index

fn PhaseSpaceGrid::x_index(grid : PhaseSpaceGrid, x : Double) -> Int

#
PhaseSpaceGrid::x_width

fn PhaseSpaceGrid::x_width(grid : PhaseSpaceGrid) -> Double

#
PicConfig

pub(all) struct PicConfig {
grid : Grid1D
dt : Double
steps : Int
shape : ShapeKind
boundary : Boundary1D
} derive(ToJson,
Debug
)

#
PicConfig::new

fn PicConfig::new(grid : Grid1D, dt : Double, steps : Int) -> PicConfig

#
PicConfig::validate

fn PicConfig::validate(config : PicConfig) -> ValidationReport

#
PicConfig::with_boundary

fn PicConfig::with_boundary(config : PicConfig, boundary : Boundary1D) -> PicConfig

#
PicConfig::with_shape

fn PicConfig::with_shape(config : PicConfig, shape : ShapeKind) -> PicConfig

#
PicDiagnostics

pub(all) struct PicDiagnostics {
time : Double
particles : Int
total_charge : Double
kinetic_energy : Double
field_energy : Double
center_of_mass : Double
mean_velocity : Double
velocity_variance : Double
} derive(ToJson,
Debug
)

#
PicDiagnostics::from_state

fn PicDiagnostics::from_state(state : PicState) -> PicDiagnostics

#
PicDiagnostics::total_energy

fn PicDiagnostics::total_energy(d : PicDiagnostics) -> Double

#
PicQuality

pub(all) struct PicQuality {
finite : Bool
nonnegative_density : Bool
energy_drift : Double
charge_error : Double
} derive(ToJson,
Debug
)

#
PicSeriesSummary

pub(all) struct PicSeriesSummary {
samples : Int
particles_initial : Int
particles_final : Int
charge_drift : Double
energy_drift : Double
maximum_field : Double
} derive(ToJson,
Debug
)

#
PicState

pub(all) struct PicState {
grid : Grid1D
particles : Array[Particle]
field : Field1D
time : Double
} derive(ToJson,
Debug
)

#
PicState::new

fn PicState::new(grid : Grid1D, particles : Array[Particle]) -> PicState

#
PicState::run

fn PicState::run(state : PicState, dt : Double, steps : Int) -> PicState

#
PicState::step

fn PicState::step(state : PicState, dt : Double) -> PicState

#
PipelineConfig

pub(all) struct PipelineConfig {
name : String
grid : Grid1D
particles : Int
steps : Int
dt : Double
shape : ShapeKind
boundary : Boundary1D
} derive(ToJson,
Debug
)

#
PipelineConfig::new

fn PipelineConfig::new(name : String, grid : Grid1D, particles : Int, steps : Int, dt : Double) -> PipelineConfig

#
PipelineConfig::with_boundary

fn PipelineConfig::with_boundary(config : PipelineConfig, boundary : Boundary1D) -> PipelineConfig

#
PipelineConfig::with_shape

fn PipelineConfig::with_shape(config : PipelineConfig, shape : ShapeKind) -> PipelineConfig

#
PipelineFrame

pub(all) struct PipelineFrame {
step : Int
state : PicState
diagnostics : PicDiagnostics
} derive(ToJson,
Debug
)

#
PipelineResult

pub(all) struct PipelineResult {
config : PipelineConfig
frames : Array[PipelineFrame]
} derive(ToJson,
Debug
)

#
PipelineResult::charge_errors

fn PipelineResult::charge_errors(result : PipelineResult) -> Array[Double]

#
PipelineResult::energies

fn PipelineResult::energies(result : PipelineResult) -> Array[Double]

#
PipelineResult::final_frame

fn PipelineResult::final_frame(result : PipelineResult) -> PipelineFrame?

#
PipelineResult::times

fn PipelineResult::times(result : PipelineResult) -> Array[Double]

#
PlasmaBenchmarkCase

pub(all) struct PlasmaBenchmarkCase {
name : String
cells : Int
particles : Int
steps : Int
initial_energy : Double
final_energy : Double
charge_error : Double
} derive(ToJson,
Debug
)

#
PlasmaBenchmarkReport

pub(all) struct PlasmaBenchmarkReport {
cases : Array[PlasmaBenchmarkCase]
total_steps : Int
} derive(ToJson,
Debug
)

#
PoissonResult

pub(all) struct PoissonResult {
potential : Array[Double]
residual : Double
iterations : Int
converged : Bool
} derive(ToJson,
Debug
)

#
Profile1D

pub(all) struct Profile1D {
kind : ProfileKind
base : Double
amplitude : Double
center : Double
width : Double
wave_number : Double
floor : Double
} derive(ToJson,
Debug
)

#
ProfileKind

pub(all) enum ProfileKind {
Constant
Gaussian
Sinusoid
Ramp
DoubleHump
TopHat
} derive(Eq, ToJson,
Debug
)

#
QualityMetric

pub(all) struct QualityMetric {
name : String
value : Double
tolerance : Double
passed : Bool
} derive(ToJson,
Debug
)

#
RandomStream

pub(all) struct RandomStream {
state : Int
} derive(ToJson,
Debug
)

#
RandomStream::new

fn RandomStream::new(seed : Int) -> RandomStream

#
RandomStream::next_int

fn RandomStream::next_int(stream : RandomStream) -> Int

#
RandomStream::next_signed

fn RandomStream::next_signed(stream : RandomStream) -> Double

#
RandomStream::next_unit

fn RandomStream::next_unit(stream : RandomStream) -> Double

#
RelaxationResult

pub(all) struct RelaxationResult {
values : Array[Double]
residuals : Array[Double]
iterations : Int
converged : Bool
} derive(ToJson,
Debug
)

#
ReproducibilityManifest

pub(all) struct ReproducibilityManifest {
name : String
seed : Int
cells : Int
particles : Int
steps : Int
dt : Double
shape : String
boundary : String
toolchain : String
} derive(ToJson,
Debug
)

#
ResultFingerprint

pub(all) struct ResultFingerprint {
sample_count : Int
work_units : Int
charge_error : Double
energy_drift : Double
checksum : Int
} derive(ToJson,
Debug
)

#
SamplingConfig

pub(all) struct SamplingConfig {
count : Int
seed : Int
drift : Double
spread : Double
profile : Profile1D
} derive(ToJson,
Debug
)

#
SamplingConfig::new

fn SamplingConfig::new(count : Int, seed : Int, drift : Double, spread : Double) -> SamplingConfig

#
SamplingConfig::sample

fn SamplingConfig::sample(config : SamplingConfig, grid : Grid1D) -> Array[Particle]

#
SamplingConfig::validate

#
SeriesSummary

pub(all) struct SeriesSummary {
name : String
count : Int
minimum : Double
maximum : Double
mean : Double
rms : Double
span : Double
} derive(ToJson,
Debug
)

#
ShapeContribution

pub(all) struct ShapeContribution {
index : Int
weight : Double
} derive(ToJson,
Debug
)

#
ShapeKind

pub(all) enum ShapeKind {
NGP
CIC
TSC
} derive(Eq, ToJson,
Debug
)

#
ShapeWeights

pub(all) struct ShapeWeights {
contributions : Array[ShapeContribution]
total : Double
count : Int
} derive(ToJson,
Debug
)

#
SimulationScenario

pub(all) struct SimulationScenario {
name : String
grid : Grid1D
particles : Int
steps : Int
dt : Double
boundary : Boundary1D
shape : ShapeKind
seed : Int
} derive(ToJson,
Debug
)

#
Species

pub(all) struct Species {
name : String
charge : Double
mass : Double
} derive(ToJson,
Debug
)

#
Species::electron

fn Species::electron() -> Species

#
Species::gyro_frequency

fn Species::gyro_frequency(species : Species, magnetic_field_t : Double) -> Double

#
Species::ion

fn Species::ion(name : String, charge_state : Int, mass_kg : Double) -> Species

#
Species::plasma_frequency

fn Species::plasma_frequency(species : Species, density_m3 : Double) -> Double

#
Species::proton

fn Species::proton() -> Species

#
Species::thermal_velocity

fn Species::thermal_velocity(species : Species, temperature_k : Double) -> Double

#
SpeciesPopulation

pub(all) struct SpeciesPopulation {
species : Species
particles : Array[Particle]
} derive(ToJson,
Debug
)

#
SpeciesPopulation::charge

fn SpeciesPopulation::charge(population : SpeciesPopulation) -> Double

#
SpeciesPopulation::count

fn SpeciesPopulation::count(population : SpeciesPopulation) -> Int

#
SpeciesPopulation::mass

fn SpeciesPopulation::mass(population : SpeciesPopulation) -> Double

#
SpeciesPopulation::new

fn SpeciesPopulation::new(species : Species, particles : Array[Particle]) -> SpeciesPopulation

#
SpectrumBin

pub(all) struct SpectrumBin {
mode : Int
frequency : Double
real : Double
imaginary : Double
power : Double
} derive(ToJson,
Debug
)

#
TimeSeries

pub(all) struct TimeSeries {
name : String
times : Array[Double]
values : Array[Double]
} derive(ToJson,
Debug
)

#
TimeSeries::derivative

fn TimeSeries::derivative(series : TimeSeries) -> Array[Double]

#
TimeSeries::difference

fn TimeSeries::difference(first : TimeSeries, second : TimeSeries) -> TimeSeries

#
TimeSeries::integral

fn TimeSeries::integral(series : TimeSeries) -> Double

#
TimeSeries::is_monotonic_time

fn TimeSeries::is_monotonic_time(series : TimeSeries) -> Bool

#
TimeSeries::last_time

fn TimeSeries::last_time(series : TimeSeries) -> Double

#
TimeSeries::last_value

fn TimeSeries::last_value(series : TimeSeries) -> Double

#
TimeSeries::length

fn TimeSeries::length(series : TimeSeries) -> Int

#
TimeSeries::maximum

fn TimeSeries::maximum(series : TimeSeries) -> Double

#
TimeSeries::mean

fn TimeSeries::mean(series : TimeSeries) -> Double

#
TimeSeries::minimum

fn TimeSeries::minimum(series : TimeSeries) -> Double

#
TimeSeries::moving_average

fn TimeSeries::moving_average(series : TimeSeries, width : Int) -> Array[Double]

#
TimeSeries::new

fn TimeSeries::new(name : String) -> TimeSeries

#
TimeSeries::push

fn TimeSeries::push(series : TimeSeries, time : Double, value : Double) -> Unit

#
TimeSeries::resample

fn TimeSeries::resample(series : TimeSeries, count : Int) -> TimeSeries

#
TimeSeries::scale

fn TimeSeries::scale(series : TimeSeries, factor : Double) -> TimeSeries

#
TimeSeries::shift

fn TimeSeries::shift(series : TimeSeries, amount : Double) -> TimeSeries

#
TimeSeries::summary

fn TimeSeries::summary(series : TimeSeries) -> SeriesSummary

#
TimeSeries::time_span

fn TimeSeries::time_span(series : TimeSeries) -> Double

#
TimeSeries::to_csv

fn TimeSeries::to_csv(series : TimeSeries) -> String

#
UnitScales

pub(all) struct UnitScales {
length : Double
density : Double
time : Double
mass : Double
charge : Double
temperature : Double
magnetic : Double
} derive(ToJson,
Debug
)

#
UnitScales::si

fn UnitScales::si(length : Double, density : Double, time : Double) -> UnitScales

#
ValidationIssue

pub(all) struct ValidationIssue {
code : String
message : String
value : Double
} derive(ToJson,
Debug
)

#
ValidationReport

pub(all) struct ValidationReport {
valid : Bool
issues : Array[ValidationIssue]
} derive(ToJson,
Debug
)

#
Vector3

pub(all) struct Vector3 {
x : Double
y : Double
z : Double
} derive(Eq, ToJson,
Debug
)

#
Vector3::add

fn Vector3::add(a : Vector3, b : Vector3) -> Vector3

#
Vector3::component_max

fn Vector3::component_max(a : Vector3, b : Vector3) -> Vector3

#
Vector3::component_min

fn Vector3::component_min(a : Vector3, b : Vector3) -> Vector3

#
Vector3::cross

fn Vector3::cross(a : Vector3, b : Vector3) -> Vector3

#
Vector3::distance

fn Vector3::distance(a : Vector3, b : Vector3) -> Double

#
Vector3::dot

fn Vector3::dot(a : Vector3, b : Vector3) -> Double

#
Vector3::new

fn Vector3::new(x : Double, y : Double, z : Double) -> Vector3

#
Vector3::norm

fn Vector3::norm(a : Vector3) -> Double

#
Vector3::normalized

fn Vector3::normalized(a : Vector3) -> Vector3

#
Vector3::scale

fn Vector3::scale(a : Vector3, factor : Double) -> Vector3

#
Vector3::sub

fn Vector3::sub(a : Vector3, b : Vector3) -> Vector3

#
Vector3::zero

fn Vector3::zero() -> Vector3

#
VerificationBundle

pub(all) struct VerificationBundle {
scenario : SimulationScenario
manifest : ReproducibilityManifest
fingerprint : ResultFingerprint
metrics : Array[QualityMetric]
invariants : Array[InvariantCheck]
} derive(ToJson,
Debug
)

#
VerificationBundle::invariant_report

fn VerificationBundle::invariant_report(bundle : VerificationBundle) -> String

#
VerificationBundle::metric_report

fn VerificationBundle::metric_report(bundle : VerificationBundle) -> String

#
VerificationBundle::passed

fn VerificationBundle::passed(bundle : VerificationBundle) -> Bool

#
VerificationBundle::reproducibility_report

fn VerificationBundle::reproducibility_report(bundle : VerificationBundle) -> String

#
VerificationBundle::summary

fn VerificationBundle::summary(bundle : VerificationBundle) -> String

#
VerificationBundle::to_csv

fn VerificationBundle::to_csv(bundle : VerificationBundle) -> String

#
VerificationBundle::work_units

fn VerificationBundle::work_units(bundle : VerificationBundle) -> Int

#
VerletState

pub(all) struct VerletState {
position : Double
velocity : Double
acceleration : Double
} derive(ToJson,
Debug
)

#
VerletState::new

fn VerletState::new(position : Double, velocity : Double, acceleration : Double) -> VerletState

#
VlasovConfig

pub(all) struct VlasovConfig {
grid : Grid1D
velocity_min : Double
velocity_max : Double
velocity_bins : Int
dt : Double
} derive(ToJson,
Debug
)

#
VlasovConfig::dv

fn VlasovConfig::dv(config : VlasovConfig) -> Double

#
VlasovConfig::new

fn VlasovConfig::new(grid : Grid1D, velocity_min~ : Double, velocity_max~ : Double, velocity_bins~ : Int, dt~ : Double) -> VlasovConfig

#
VlasovConfig::velocity

fn VlasovConfig::velocity(config : VlasovConfig, bin : Int) -> Double

#
VlasovState

pub(all) struct VlasovState {
config : VlasovConfig
distribution : Array[Double]
charge_density : Array[Double]
time : Double
} derive(ToJson,
Debug
)

#
VlasovState::step

fn VlasovState::step(state : VlasovState) -> VlasovState

#
VlasovStepReport

pub(all) struct VlasovStepReport {
before_mass : Double
after_mass : Double
mass_error : Double
minimum : Double
maximum : Double
time : Double
} derive(ToJson,
Debug
)

#
VlasovSummary

pub(all) struct VlasovSummary {
density_mean : Double
density_minimum : Double
density_maximum : Double
momentum_mean : Double
kinetic_energy : Double
entropy : Double
} derive(ToJson,
Debug
)

#
accelerate_particles

fn accelerate_particles(particles : ArrayView[Particle], acceleration : Double, dt : Double) -> Array[Particle]

#
acceleration_from_field

fn acceleration_from_field(particle : Particle, electric : Double) -> Double

#
acceptance_benchmark_csv

fn acceptance_benchmark_csv() -> String

#
acceptance_benchmark_summary

fn acceptance_benchmark_summary() -> String

#
acceptance_fingerprint_csv

fn acceptance_fingerprint_csv() -> String

#
acoustic_mach

fn acoustic_mach(velocity : Double, sound : Double) -> Double

#
add_profile

fn add_profile(a : ArrayView[Double], b : ArrayView[Double]) -> Array[Double]

#
advance_leapfrog

fn advance_leapfrog(position : Double, velocity : Double, acceleration : Double, dt : Double) -> (Double, Double)

#
advance_particles

fn advance_particles(grid : Grid1D, particles : ArrayView[Particle], electric : ArrayView[Double], dt : Double) -> Array[Particle]

#
advance_verlet

fn advance_verlet(state : VerletState, dt : Double, next_acceleration : Double) -> VerletState

#
alfven_speed

fn alfven_speed(magnetic_field : Double, density : Double, mass : Double) -> Double

#
all_close

fn all_close(a : ArrayView[Double], b : ArrayView[Double], absolute : Double, relative : Double) -> Bool

#
all_metrics_pass

fn all_metrics_pass(metrics : ArrayView[QualityMetric]) -> Bool

#
analysis_summary

fn analysis_summary(values : ArrayView[Double]) -> String

#
angular_frequency

fn angular_frequency(charge : Double, magnetic : Vector3, mass : Double) -> Double

#
angular_frequency_from_frequency

fn angular_frequency_from_frequency(frequency : Double) -> Double

#
api_catalog

fn api_catalog() -> Array[ApiEntry]

#
api_catalog_categories

fn api_catalog_categories() -> Array[String]

#
api_catalog_contains

fn api_catalog_contains(name : String) -> Bool

#
api_catalog_to_csv

fn api_catalog_to_csv() -> String

#
apply_boundary

fn apply_boundary(grid : Grid1D, boundary : Boundary1D, x : Double, v : Double) -> BoundaryResult

#
apply_boundary_to_particle

fn apply_boundary_to_particle(grid : Grid1D, boundary : Boundary1D, particle : Particle) -> Particle?

#
apply_collision

fn apply_collision(particle : Particle, model : CollisionModel, dt : Double, noise : Double) -> Particle

#
apply_collisions

fn apply_collisions(particles : ArrayView[Particle], model : CollisionModel, dt : Double, noise : ArrayView[Double]) -> Array[Particle]

#
apply_drag

fn apply_drag(particle : Particle, rate : Double, dt : Double, background_velocity : Double) -> Particle

#
apply_particle_boundary_batch

fn apply_particle_boundary_batch(grid : Grid1D, boundary : Boundary1D, particles : ArrayView[Particle]) -> BoundaryBatchResult

#
apply_reflecting_position

fn apply_reflecting_position(grid : Grid1D, x : Double, v : Double) -> (Double, Double)

#
approximate_log

fn approximate_log(value : Double) -> Double

#
assess_pic_cfl

fn assess_pic_cfl(grid : Grid1D, maximum_speed~ : Double, dt~ : Double, safety_factor~ : Double) -> CflReport

#
assess_pic_quality

fn assess_pic_quality(state : PicState) -> PicQuality

#
assess_vlasov_cfl

fn assess_vlasov_cfl(config : VlasovConfig) -> CflReport

#
autocorrelation

fn autocorrelation(signal : ArrayView[Double], lag : Int) -> Double

#
autocorrelation_series

fn autocorrelation_series(signal : ArrayView[Double]) -> Array[Double]

#
average_reductions

fn average_reductions(reductions : ArrayView[GridReduction]) -> Array[Double]

#
backward_difference

fn backward_difference(grid : Grid1D, values : ArrayView[Double], index : Int) -> Double

#
benchmark_fingerprint_suite

fn benchmark_fingerprint_suite(suite : BenchmarkSuite) -> Array[ResultFingerprint]

#
benchmark_health

fn benchmark_health(record : BenchmarkRecord) -> Array[HealthCheck]

#
benchmark_record_to_json_like

fn benchmark_record_to_json_like(record : BenchmarkRecord) -> String

#
benchmark_report_csv

fn benchmark_report_csv(report : PlasmaBenchmarkReport) -> String

#
benchmark_scenario

fn benchmark_scenario(scenario : SimulationScenario) -> BenchmarkRecord

#
benchmark_suite

fn benchmark_suite() -> BenchmarkSuite

#
benchmark_suite_summary

fn benchmark_suite_summary(suite : BenchmarkSuite) -> String

#
benchmark_suite_to_csv

fn benchmark_suite_to_csv(suite : BenchmarkSuite) -> String

#
benchmark_to_csv

fn benchmark_to_csv(sample : BenchmarkSample) -> String

#
boltzmann_constant

let boltzmann_constant : Double

#
boris_position

fn boris_position(position : Vector3, velocity : Vector3, dt : Double) -> Vector3

#
boris_push

fn boris_push(velocity : Vector3, electric : Vector3, magnetic : Vector3, dt : Double, charge : Double, mass : Double) -> Vector3

#
boundary_loss_fraction

fn boundary_loss_fraction(result : BoundaryBatchResult, original_count : Int) -> Double

#
boundary_name

fn boundary_name(boundary : Boundary1D) -> String

#
boundary_positions

fn boundary_positions(grid : Grid1D, particles : ArrayView[Particle]) -> Array[Double]

#
boundary_reflection_fraction

fn boundary_reflection_fraction(result : BoundaryBatchResult, original_count : Int) -> Double

#
boundary_valid

fn boundary_valid(grid : Grid1D, particles : ArrayView[Particle]) -> Bool

#
boundary_velocity_flux

fn boundary_velocity_flux(grid : Grid1D, particles : ArrayView[Particle]) -> Double

#
boundary_wrap_fraction

fn boundary_wrap_fraction(result : BoundaryBatchResult, original_count : Int) -> Double

#
build_verification_bundle

fn build_verification_bundle(scenario : SimulationScenario, toolchain : String) -> VerificationBundle

#
center_of_mass

fn center_of_mass(grid : Grid1D, particles : ArrayView[Particle]) -> Double

#
central_difference

fn central_difference(grid : Grid1D, values : ArrayView[Double], index : Int) -> Double

#
central_interpolate

fn central_interpolate(first : Double, second : Double, fraction : Double) -> Double

#
cfl_ratio

fn cfl_ratio(report : CflReport) -> Double

#
charge_conservation_error

fn charge_conservation_error(grid : Grid1D, densities : ArrayView[Array[Double]], expected : Double) -> Double

#
charge_neutralize

fn charge_neutralize(_grid : Grid1D, density : ArrayView[Double]) -> Array[Double]

#
charge_series

fn charge_series(grid : Grid1D, densities : ArrayView[Array[Double]]) -> Array[Double]

#
clamp

fn clamp(value : Double, low : Double, high : Double) -> Double

#
clamp_index

fn clamp_index(index : Int, length : Int) -> Int

#
clamp_int

fn clamp_int(value : Int, low : Int, high : Int) -> Int

#
clamp_time_step

fn clamp_time_step(value : Double, minimum : Double, maximum : Double) -> Double

#
cli_help

fn cli_help() -> String

#
collision_energy_loss

fn collision_energy_loss(particle : Particle, after : Particle) -> Double

#
collision_frequency

fn collision_frequency(density : Double, charge : Double, mass : Double, temperature : Double, log_lambda : Double) -> Double

#
collision_model

fn collision_model(kind : CollisionKind, rate : Double, background_velocity : Double, thermal_speed : Double) -> CollisionModel

#
collision_probability

fn collision_probability(rate : Double, dt : Double) -> Double

#
collision_rate_for_species

fn collision_rate_for_species(species : Species, density : Double, temperature : Double, log_lambda : Double) -> Double

#
collision_summary

fn collision_summary(particles : ArrayView[Particle], model : CollisionModel, dt : Double) -> (Double, Double)

#
collision_temperature

fn collision_temperature(particles : ArrayView[Particle], mass : Double) -> Double

#
combine_electric_models

fn combine_electric_models(first : ElectricFieldModel, second : ElectricFieldModel) -> ElectricFieldModel

#
compare_metric_sets

fn compare_metric_sets(first : ArrayView[QualityMetric], second : ArrayView[QualityMetric]) -> Double

#
compare_scenarios

fn compare_scenarios(first : SimulationScenario, second : SimulationScenario) -> Bool

#
config_to_csv

fn config_to_csv(config : PicConfig) -> String

#
conservation_report

fn conservation_report(charges : ArrayView[Double], energies : ArrayView[Double]) -> ConservationReport

#
constant_electric_field

fn constant_electric_field(value : Double) -> ElectricFieldModel

#
convergence_order

fn convergence_order(errors : ArrayView[Double], step_ratio : Double) -> Double

#
copy_values

fn copy_values(values : ArrayView[Double]) -> Array[Double]

#
correlation

fn correlation(first : ArrayView[Double], second : ArrayView[Double]) -> Double

#
coulomb_logarithm

fn coulomb_logarithm(debye_length_m : Double, impact_parameter_m : Double) -> Double

#
covariance

fn covariance(first : ArrayView[Double], second : ArrayView[Double]) -> Double

#
csv_escape

fn csv_escape(value : String) -> String

#
csv_header

fn csv_header(columns : ArrayView[String]) -> String

#
csv_row

fn csv_row(values : ArrayView[Double]) -> String

#
cumulative_series

fn cumulative_series(values : ArrayView[Double], spacing : Double) -> Array[Double]

#
curl_1d

fn curl_1d(grid : Grid1D, values : ArrayView[Double]) -> Array[Double]

#
cyclotron_period

fn cyclotron_period(charge : Double, magnetic : Vector3, mass : Double) -> Double

#
debye_length

fn debye_length(electron_temperature_k : Double, electron_density_m3 : Double) -> Double

#
denormalize_charge

fn denormalize_charge(scales : UnitScales, value : Double) -> Double

#
denormalize_density

fn denormalize_density(scales : UnitScales, value : Double) -> Double

#
denormalize_electric_field

fn denormalize_electric_field(scales : UnitScales, value : Double) -> Double

#
denormalize_length

fn denormalize_length(scales : UnitScales, value : Double) -> Double

#
denormalize_mass

fn denormalize_mass(scales : UnitScales, value : Double) -> Double

#
denormalize_temperature

fn denormalize_temperature(scales : UnitScales, value : Double) -> Double

#
denormalize_time

fn denormalize_time(scales : UnitScales, value : Double) -> Double

#
denormalize_velocity

fn denormalize_velocity(scales : UnitScales, value : Double) -> Double

#
deposit_charge

fn deposit_charge(grid : Grid1D, particles : ArrayView[Particle]) -> Array[Double]

#
deposit_charge_with_shape

fn deposit_charge_with_shape(grid : Grid1D, particles : ArrayView[Particle], kind : ShapeKind) -> Array[Double]

#
deposit_number_with_shape

fn deposit_number_with_shape(grid : Grid1D, particles : ArrayView[Particle], kind : ShapeKind) -> Array[Double]

#
deposit_with_shape

fn deposit_with_shape(grid : Grid1D, positions : ArrayView[Double], values : ArrayView[Double], kind : ShapeKind) -> Array[Double]

#
describe_grid

fn describe_grid(grid : Grid1D) -> GridDescriptor

#
deterministic_seed

fn deterministic_seed(name : String, salt : Int) -> Int

#
diagnostics_to_csv

fn diagnostics_to_csv(samples : ArrayView[PicDiagnostics]) -> String

#
diagonal_solve

fn diagonal_solve(diagonal : ArrayView[Double], right_hand_side : ArrayView[Double]) -> Array[Double]

#
dimensionless_length

fn dimensionless_length(length : Double, scale : Double) -> Double

#
dimensionless_time

fn dimensionless_time(time : Double, frequency : Double) -> Double

#
dipole_magnetic_field

fn dipole_magnetic_field(moment : Vector3, position : Vector3, coefficient : Double) -> Vector3

#
discrete_spectrum

fn discrete_spectrum(signal : ArrayView[Double]) -> Array[SpectrumBin]

#
distribution_entropy

fn distribution_entropy(state : VlasovState) -> Double

#
distribution_integral

fn distribution_integral(state : VlasovState) -> Double

#
distribution_is_nonnegative

fn distribution_is_nonnegative(distribution : ArrayView[Double]) -> Bool

#
distribution_kinetic_energy

fn distribution_kinetic_energy(state : VlasovState, mass : Double) -> Double

#
distribution_mass_error

fn distribution_mass_error(config : VlasovConfig, left : ArrayView[Double], right : ArrayView[Double]) -> Double

#
distribution_maximum

fn distribution_maximum(state : VlasovState) -> Double

#
distribution_mean_velocity

fn distribution_mean_velocity(config : VlasovConfig, distribution : ArrayView[Double]) -> Double

#
distribution_minimum

fn distribution_minimum(state : VlasovState) -> Double

#
distribution_negative_mass

fn distribution_negative_mass(state : VlasovState) -> Double

#
distribution_positive_part

fn distribution_positive_part(state : VlasovState) -> Array[Double]

#
distribution_sum

fn distribution_sum(config : VlasovConfig, distribution : ArrayView[Double]) -> Double

#
distribution_temperature_like

fn distribution_temperature_like(config : VlasovConfig, distribution : ArrayView[Double]) -> Double

#
divergence_periodic

fn divergence_periodic(grid : Grid1D, values : ArrayView[Double]) -> Array[Double]

#
dominant_frequency

fn dominant_frequency(spectrum : ArrayView[SpectrumBin]) -> Int

#
downsample_mean

fn downsample_mean(values : ArrayView[Double], factor : Int) -> Array[Double]

#
drag_factor

fn drag_factor(rate : Double, dt : Double) -> Double

#
drift_series

fn drift_series(values : ArrayView[Double]) -> Array[Double]

#
electric_field_value

fn electric_field_value(model : ElectricFieldModel, x : Double) -> Double

#
electric_field_values

fn electric_field_values(grid : Grid1D, model : ElectricFieldModel) -> Array[Double]

#
electric_force

fn electric_force(charge : Double, electric : Vector3) -> Vector3

#
electric_from_potential

fn electric_from_potential(grid : Grid1D, potential : ArrayView[Double]) -> Array[Double]

#
electric_potential_value

fn electric_potential_value(model : ElectricFieldModel, x : Double) -> Double

#
electron_mass

let electron_mass : Double

#
electron_plasma_frequency

fn electron_plasma_frequency(electron_density_m3 : Double) -> Double

#
electron_thermal_velocity

fn electron_thermal_velocity(temperature_k : Double) -> Double

#
electrostatic_energy

fn electrostatic_energy(grid : Grid1D, electric : ArrayView[Double]) -> Double

#
electrostatic_energy_density

fn electrostatic_energy_density(electric : ArrayView[Double]) -> Array[Double]

#
elementary_charge

let elementary_charge : Double

#
energy_series

fn energy_series(particles : ArrayView[Array[Particle]], fields : ArrayView[Field1D]) -> Array[Double]

#
ensemble_charge_errors

fn ensemble_charge_errors(members : ArrayView[EnsembleMember]) -> Array[Double]

#
ensemble_diagnostics_to_csv

fn ensemble_diagnostics_to_csv(members : ArrayView[EnsembleMember]) -> String

#
ensemble_final_energies

fn ensemble_final_energies(members : ArrayView[EnsembleMember]) -> Array[Double]

#
ensemble_particle_losses

fn ensemble_particle_losses(members : ArrayView[EnsembleMember]) -> Array[Int]

#
ensemble_passes

fn ensemble_passes(summary : EnsembleSummary, charge_tolerance : Double, energy_spread_tolerance : Double) -> Bool

#
ensemble_summary_to_csv

fn ensemble_summary_to_csv(summary : EnsembleSummary) -> String

#
estimate_landau_rate

fn estimate_landau_rate(wave_number : Double, temperature : Double, density : Double) -> Double

#
euler_flux

fn euler_flux(state : FluidState, _gamma : Double) -> FluidFlux

#
expected_output_schema

fn expected_output_schema() -> String

#
expected_sample_count

fn expected_sample_count(scenario : SimulationScenario) -> Int

#
expected_work_units

fn expected_work_units(scenario : SimulationScenario) -> Int

#
experiment_charge_error

fn experiment_charge_error(report : ExperimentReport) -> Double

#
experiment_energy_drift

fn experiment_energy_drift(report : ExperimentReport) -> Double

#
experiment_energy_series

fn experiment_energy_series(report : ExperimentReport) -> Array[Double]

#
experiment_particle_counts

fn experiment_particle_counts(report : ExperimentReport) -> Array[Int]

#
experiment_passes_charge_tolerance

fn experiment_passes_charge_tolerance(report : ExperimentReport, tolerance : Double) -> Bool

#
experiment_passes_energy_tolerance

fn experiment_passes_energy_tolerance(report : ExperimentReport, tolerance : Double) -> Bool

#
experiment_summary

fn experiment_summary(report : ExperimentReport) -> String

#
experiment_times

fn experiment_times(report : ExperimentReport) -> Array[Double]

#
experiment_to_csv

fn experiment_to_csv(report : ExperimentReport) -> String

#
field_add

fn field_add(first : ArrayView[Double], second : ArrayView[Double]) -> Array[Double]

#
field_difference

fn field_difference(first : ArrayView[Double], second : ArrayView[Double]) -> Array[Double]

#
field_energy

fn field_energy(field : Field1D) -> Double

#
field_invariants

fn field_invariants(field : Field1D) -> Array[InvariantCheck]

#
field_l2_error

fn field_l2_error(first : ArrayView[Double], second : ArrayView[Double]) -> Double

#
field_line_step

fn field_line_step(position : Vector3, field : MagneticField3D, step : Double) -> Vector3

#
field_maximum

fn field_maximum(values : ArrayView[Double]) -> Double

#
field_mean_abs

fn field_mean_abs(values : ArrayView[Double]) -> Double

#
field_model_energy

fn field_model_energy(grid : Grid1D, model : ElectricFieldModel) -> Double

#
field_model_force

fn field_model_force(model : ElectricFieldModel, charge : Double, x : Double) -> Double

#
field_model_mean

fn field_model_mean(grid : Grid1D, model : ElectricFieldModel) -> Double

#
field_model_name

fn field_model_name(model : ElectricFieldModel) -> String

#
field_model_work

fn field_model_work(model : ElectricFieldModel, charge : Double, start : Double, stop : Double, samples : Int) -> Double

#
field_quality_metrics

fn field_quality_metrics(grid : Grid1D, field : Field1D) -> Array[QualityMetric]

#
field_residual

fn field_residual(grid : Grid1D, electric : ArrayView[Double], charge_density : ArrayView[Double]) -> Array[Double]

#
field_residual_norm

fn field_residual_norm(grid : Grid1D, electric : ArrayView[Double], charge_density : ArrayView[Double]) -> Double

#
field_scale

fn field_scale(values : ArrayView[Double], factor : Double) -> Array[Double]

#
field_to_csv

fn field_to_csv(field : Field1D) -> String

#
fill_like

fn fill_like(values : ArrayView[Double], value : Double) -> Array[Double]

#
fingerprint_diagnostics

fn fingerprint_diagnostics(values : ArrayView[PicDiagnostics]) -> Int

#
fingerprint_from_scenario

fn fingerprint_from_scenario(scenario : SimulationScenario) -> ResultFingerprint

#
fingerprint_integer

fn fingerprint_integer(value : Double) -> Int

#
fingerprint_suite_to_csv

fn fingerprint_suite_to_csv(suite : BenchmarkSuite) -> String

#
fingerprint_to_csv

fn fingerprint_to_csv(fingerprint : ResultFingerprint) -> String

#
fingerprint_values

fn fingerprint_values(values : ArrayView[Double]) -> Int

#
fingerprints_equal

fn fingerprints_equal(first : ResultFingerprint, second : ResultFingerprint) -> Bool

#
finite_difference_first

fn finite_difference_first(values : ArrayView[Double], spacing : Double) -> Array[Double]

#
finite_difference_second

fn finite_difference_second(values : ArrayView[Double], spacing : Double) -> Array[Double]

#
finite_difference_series

fn finite_difference_series(values : ArrayView[Double], spacing : Double) -> Array[Double]

#
fluid_cfl_dt

fn fluid_cfl_dt(states : ArrayView[FluidState], gamma : Double, cell_width : Double, cfl : Double) -> Double

#
fluid_clamp_physical

fn fluid_clamp_physical(state : FluidState) -> FluidState

#
fluid_compressibility

fn fluid_compressibility(state : FluidState, gamma : Double) -> Double

#
fluid_energy

fn fluid_energy(density : Double, velocity : Double, pressure : Double, gamma : Double) -> Double

#
fluid_enthalpy

fn fluid_enthalpy(state : FluidState) -> Double

#
fluid_mach_number

fn fluid_mach_number(state : FluidState, gamma : Double) -> Double

#
fluid_mean_density

fn fluid_mean_density(states : ArrayView[FluidState]) -> Double

#
fluid_mean_pressure

fn fluid_mean_pressure(states : ArrayView[FluidState]) -> Double

#
fluid_mean_velocity

fn fluid_mean_velocity(states : ArrayView[FluidState]) -> Double

#
fluid_pressure

fn fluid_pressure(density : Double, temperature : Double, gas_constant : Double) -> Double

#
fluid_state_from_primitive

fn fluid_state_from_primitive(density : Double, velocity : Double, pressure : Double, gamma : Double) -> FluidState

#
fluid_state_is_physical

fn fluid_state_is_physical(state : FluidState) -> Bool

#
fluid_temperature

fn fluid_temperature(state : FluidState, gas_constant : Double) -> Double

#
fluid_update

fn fluid_update(state : FluidState, flux_difference : FluidFlux, dt : Double, cell_width : Double) -> FluidState

#
fluid_wave_speed

fn fluid_wave_speed(state : FluidState, gamma : Double) -> Double

#
forward_difference

fn forward_difference(grid : Grid1D, values : ArrayView[Double], index : Int) -> Double

#
frequency_from_angular_frequency

fn frequency_from_angular_frequency(angular : Double) -> Double

#
gather_with_shape

fn gather_with_shape(grid : Grid1D, values : ArrayView[Double], positions : ArrayView[Double], kind : ShapeKind) -> Array[Double]

#
gaussian_electric_field

fn gaussian_electric_field(amplitude : Double, center : Double, width : Double, offset : Double) -> ElectricFieldModel

#
geometric_schedule

fn geometric_schedule(start : Double, factor : Double, count : Int) -> Array[Double]

#
gradient_periodic

fn gradient_periodic(grid : Grid1D, values : ArrayView[Double]) -> Array[Double]

#
grid_cell_edges

fn grid_cell_edges(grid : Grid1D) -> Array[Double]

#
grid_cell_volume

fn grid_cell_volume(grid : Grid1D) -> Double

#
grid_center_of_mass

fn grid_center_of_mass(grid : Grid1D, density : ArrayView[Double]) -> Double

#
grid_clip

fn grid_clip(grid : Grid1D, values : ArrayView[Double], low : Double, high : Double) -> Array[Double]

#
grid_coordinates

fn grid_coordinates(grid : Grid1D) -> Array[Double]

#
grid_distance

fn grid_distance(grid : Grid1D, first : Double, second : Double) -> Double

#
grid_index_at

fn grid_index_at(grid : Grid1D, x : Double) -> Int

#
grid_integral

fn grid_integral(grid : Grid1D, values : ArrayView[Double]) -> Double

#
grid_interpolate_coordinates

fn grid_interpolate_coordinates(grid : Grid1D, count : Int) -> Array[Double]

#
grid_l2_difference

fn grid_l2_difference(grid : Grid1D, first : ArrayView[Double], second : ArrayView[Double]) -> Double

#
grid_neighbor_indices

fn grid_neighbor_indices(grid : Grid1D, index : Int) -> (Int, Int)

#
grid_periodic_copy

fn grid_periodic_copy(grid : Grid1D, values : ArrayView[Double], shift : Int) -> Array[Double]

#
grid_periodic_mean

fn grid_periodic_mean(_grid : Grid1D, values : ArrayView[Double]) -> Double

#
grid_regrid

fn grid_regrid(source : Grid1D, values : ArrayView[Double], target : Grid1D) -> Array[Double]

#
grid_roll

fn grid_roll(grid : Grid1D, values : ArrayView[Double], shift : Int) -> Array[Double]

#
grid_smooth

fn grid_smooth(grid : Grid1D, values : ArrayView[Double], passes : Int) -> Array[Double]

#
grid_variance

fn grid_variance(grid : Grid1D, values : ArrayView[Double]) -> Double

#
grid_weighted_integral

fn grid_weighted_integral(grid : Grid1D, values : ArrayView[Double], weight : ArrayView[Double]) -> Double

#
gyro_frequency

fn gyro_frequency(charge_c : Double, magnetic_field_t : Double, mass_kg : Double) -> Double

#
gyroradius

fn gyroradius(mass : Double, speed : Double, charge : Double, magnetic : Double) -> Double

#
hann_window

fn hann_window(signal : ArrayView[Double]) -> Array[Double]

#
health_charge

fn health_charge(grid : Grid1D, density : ArrayView[Double], expected : Double, tolerance : Double) -> HealthCheck

#
health_check

fn health_check(name : String, metric : Double, threshold : Double, message : String) -> HealthCheck

#
health_energy

fn health_energy(initial : Double, final_value : Double, tolerance : Double) -> HealthCheck

#
health_particles

fn health_particles(expected : Int, actual : Int) -> HealthCheck

#
health_report

fn health_report(checks : ArrayView[HealthCheck]) -> Bool

#
health_report_to_csv

fn health_report_to_csv(checks : ArrayView[HealthCheck]) -> String

#
health_residual

fn health_residual(residual : Double, tolerance : Double) -> HealthCheck

#
histogram_edges

fn histogram_edges(low : Double, high : Double, bins : Int) -> Array[Double]

#
histogram_particles

fn histogram_particles(grid : PhaseSpaceGrid, particles : ArrayView[Particle]) -> PhaseSpaceGrid

#
integrate_position

fn integrate_position(position : Double, velocity : Double, acceleration : Double, dt : Double) -> Double

#
integrate_trapezoid

fn integrate_trapezoid(grid : Grid1D, values : ArrayView[Double]) -> Double

#
integrate_velocity

fn integrate_velocity(velocity : Double, acceleration : Double, dt : Double) -> Double

#
interpolate_pair

fn interpolate_pair(left : Double, right : Double, fraction : Double, mode : InterpolationMode) -> Double

#
interpolate_periodic

fn interpolate_periodic(grid : Grid1D, values : ArrayView[Double], x : Double) -> Double

#
interpolate_series

fn interpolate_series(values : ArrayView[Double], count : Int) -> Array[Double]

#
interpolation_error

fn interpolation_error(grid : Grid1D, values : ArrayView[Double], points : ArrayView[Double], expected : ArrayView[Double]) -> Double

#
interquartile_range

fn interquartile_range(values : ArrayView[Double]) -> Double

#
invariant

fn invariant(name : String, observed : Double, tolerance : Double) -> InvariantCheck

#
invariant_all

fn invariant_all(checks : ArrayView[InvariantCheck]) -> Bool

#
invariant_bounds

fn invariant_bounds(name : String, values : ArrayView[Double], low : Double, high : Double) -> InvariantCheck

#
invariant_charge

fn invariant_charge(grid : Grid1D, density : ArrayView[Double], expected : Double, tolerance : Double) -> InvariantCheck

#
invariant_close

fn invariant_close(name : String, actual : Double, expected : Double, tolerance : Double) -> InvariantCheck

#
invariant_max_error

fn invariant_max_error(checks : ArrayView[InvariantCheck]) -> Double

#
invariant_positive

fn invariant_positive(name : String, values : ArrayView[Double]) -> InvariantCheck

#
invariant_report

fn invariant_report(checks : ArrayView[InvariantCheck]) -> String

#
invariant_shape

fn invariant_shape(name : String, actual : Int, expected : Int) -> InvariantCheck

#
invariant_to_csv

fn invariant_to_csv(checks : ArrayView[InvariantCheck]) -> String

#
invariant_zero_mean

fn invariant_zero_mean(name : String, values : ArrayView[Double], tolerance : Double) -> InvariantCheck

#
inverse_lerp

fn inverse_lerp(a : Double, b : Double, value : Double) -> Double

#
kinetic_energy

fn kinetic_energy(particles : ArrayView[Particle]) -> Double

#
kinetic_energy_vector

fn kinetic_energy_vector(mass : Double, velocity : Vector3) -> Double

#
kinetic_temperature

fn kinetic_temperature(particles : ArrayView[Particle]) -> Double

#
kinetic_to_thermal_ratio

fn kinetic_to_thermal_ratio(velocity : Double, temperature : Double, mass : Double) -> Double

#
l2_distance

fn l2_distance(left : ArrayView[Double], right : ArrayView[Double]) -> Double

#
l2_norm

fn l2_norm(values : ArrayView[Double]) -> Double

#
landau_damping_rate

fn landau_damping_rate(wave_number_m : Double, electron_temperature_k : Double, electron_density_m3 : Double) -> Double

#
laplacian_periodic

fn laplacian_periodic(grid : Grid1D, values : ArrayView[Double]) -> Array[Double]

#
lax_friedrichs_flux

fn lax_friedrichs_flux(left : FluidState, right : FluidState, gamma : Double, wave_speed : Double) -> FluidFlux

#
lerp

fn lerp(a : Double, b : Double, t : Double) -> Double

#
linear_electric_field

fn linear_electric_field(offset : Double, slope : Double, center : Double) -> ElectricFieldModel

#
linear_magnetic_field

fn linear_magnetic_field(origin : Vector3, uniform : Vector3, gradient : Vector3) -> MagneticField3D

#
linear_schedule

fn linear_schedule(start : Double, stop : Double, count : Int) -> Array[Double]

#
linspace

fn linspace(start : Double, stop : Double, count : Int) -> Array[Double]

#
locate_periodic

fn locate_periodic(grid : Grid1D, x : Double) -> InterpolationResult

#
lorentz_force

fn lorentz_force(charge : Double, velocity : Vector3, electric : Vector3, magnetic : Vector3) -> Vector3

#
magnetic_energy_density

fn magnetic_energy_density(field : Vector3) -> Double

#
magnetic_force

fn magnetic_force(charge : Double, velocity : Vector3, magnetic : Vector3) -> Vector3

#
magnetic_pressure

fn magnetic_pressure(field : Vector3) -> Double

#
magnetic_pressure_si

fn magnetic_pressure_si(magnetic_field : Double) -> Double

#
make_landau_initial

fn make_landau_initial(config : VlasovConfig, density0~ : Double, thermal_speed~ : Double, perturbation? : Double, mode? : Int) -> VlasovState

#
manifest_fingerprint

fn manifest_fingerprint(scenario : SimulationScenario, toolchain : String) -> String

#
manifest_from_scenario

fn manifest_from_scenario(scenario : SimulationScenario, toolchain : String) -> ReproducibilityManifest

#
manifest_seed

fn manifest_seed(manifest : ReproducibilityManifest) -> Int

#
manifest_to_csv

fn manifest_to_csv(manifest : ReproducibilityManifest) -> String

#
manifest_work_units

fn manifest_work_units(manifest : ReproducibilityManifest) -> Int

#
map_field

fn map_field(field : Field1D, transform : (Double) -> Double) -> Field1D

#
map_particles

fn map_particles(particles : ArrayView[Particle], transform : (Particle) -> Particle) -> Array[Particle]

#
mass_series

fn mass_series(particles : ArrayView[Array[Particle]]) -> Array[Double]

#
matrix_frobenius_norm

fn matrix_frobenius_norm(matrix : Matrix2) -> Double

#
matrix_trace

fn matrix_trace(matrix : Matrix2) -> Double

#
max_abs_value

fn max_abs_value(values : ArrayView[Double]) -> Double

#
max_value

fn max_value(values : ArrayView[Double], fallback : Double) -> Double

#
maximum_metric

fn maximum_metric(metrics : ArrayView[QualityMetric]) -> Double

#
maxwellian

fn maxwellian(v : Double, thermal_speed : Double) -> Double

#
mean

fn mean(values : ArrayView[Double]) -> Double

#
mean_absolute_error

fn mean_absolute_error(actual : ArrayView[Double], predicted : ArrayView[Double]) -> Double

#
mean_subtract

fn mean_subtract(signal : ArrayView[Double]) -> Array[Double]

#
median

fn median(values : ArrayView[Double]) -> Double

#
merge_observables

fn merge_observables(first : Observable, second : Observable) -> Observable

#
merge_populations

fn merge_populations(first : SpeciesPopulation, second : SpeciesPopulation) -> SpeciesPopulation

#
metric

fn metric(name : String, value : Double, tolerance : Double) -> QualityMetric

#
metric_count

fn metric_count(name : String, actual : Int, expected : Int) -> QualityMetric

#
metric_l2

fn metric_l2(name : String, actual : ArrayView[Double], expected : ArrayView[Double], tolerance : Double) -> QualityMetric

#
metric_max_abs

fn metric_max_abs(name : String, values : ArrayView[Double], tolerance : Double) -> QualityMetric

#
metric_names

fn metric_names(metrics : ArrayView[QualityMetric]) -> Array[String]

#
metric_relative

fn metric_relative(name : String, actual : Double, expected : Double, tolerance : Double) -> QualityMetric

#
metrics_to_csv

fn metrics_to_csv(metrics : ArrayView[QualityMetric]) -> String

#
min_value

fn min_value(values : ArrayView[Double], fallback : Double) -> Double

#
mix_fields

fn mix_fields(first : Field1D, second : Field1D, fraction : Double) -> Field1D

#
modulo_index

fn modulo_index(index : Int, count : Int) -> Int

#
momentum_series

fn momentum_series(particles : ArrayView[Array[Particle]]) -> Array[Double]

#
momentum_vector

fn momentum_vector(mass : Double, velocity : Vector3) -> Vector3

#
monotonic_time

fn monotonic_time(values : ArrayView[Double]) -> Bool

#
moving_average

fn moving_average(values : ArrayView[Double], width : Int) -> Array[Double]

#
multiply_profile

fn multiply_profile(a : ArrayView[Double], b : ArrayView[Double]) -> Array[Double]

#
nearest_index

fn nearest_index(grid : Grid1D, x : Double) -> Int

#
normalize_charge

fn normalize_charge(scales : UnitScales, value : Double) -> Double

#
normalize_density

fn normalize_density(scales : UnitScales, value : Double) -> Double

#
normalize_electric_field

fn normalize_electric_field(scales : UnitScales, value : Double) -> Double

#
normalize_field

fn normalize_field(field : Field1D) -> Field1D

#
normalize_length

fn normalize_length(scales : UnitScales, value : Double) -> Double

#
normalize_mass

fn normalize_mass(scales : UnitScales, value : Double) -> Double

#
normalize_profile

fn normalize_profile(grid : Grid1D, values : ArrayView[Double], target_integral : Double) -> Array[Double]

#
normalize_series

fn normalize_series(values : ArrayView[Double]) -> Array[Double]

#
normalize_shape_weights

fn normalize_shape_weights(weights : ArrayView[ShapeContribution]) -> Array[ShapeContribution]

#
normalize_sum

fn normalize_sum(values : ArrayView[Double]) -> Array[Double]

#
normalize_temperature

fn normalize_temperature(scales : UnitScales, value : Double) -> Double

#
normalize_time

fn normalize_time(scales : UnitScales, value : Double) -> Double

#
normalize_velocity

fn normalize_velocity(scales : UnitScales, value : Double) -> Double

#
normalize_wave_number

fn normalize_wave_number(wave_number : Double, debye : Double) -> Double

#
numerical_epsilon

fn numerical_epsilon(scale : Double) -> Double

#
observable_correlation

fn observable_correlation(first : Observable, second : Observable) -> Double

#
observable_difference

fn observable_difference(first : Observable, second : Observable) -> Observable

#
observable_summary_csv

fn observable_summary_csv(values : ArrayView[Observable]) -> String

#
observables_from_diagnostics

fn observables_from_diagnostics(values : ArrayView[PicDiagnostics]) -> Array[Observable]

#
outer_product

fn outer_product(first : MatrixVector2, second : MatrixVector2) -> Matrix2

#
package_description

fn package_description() -> String

#
package_keywords

fn package_keywords() -> Array[String]

#
package_license

fn package_license() -> String

#
package_metadata_csv

fn package_metadata_csv() -> String

#
package_name

fn package_name() -> String

#
package_ready

fn package_ready() -> Bool

#
package_repository

fn package_repository() -> String

#
package_version

fn package_version() -> String

#
particle_charge_series

fn particle_charge_series(states : ArrayView[Array[Particle]]) -> Array[Double]

#
particle_current_density

fn particle_current_density(grid : Grid1D, particles : ArrayView[Particle]) -> Array[Double]

#
particle_energy_series

fn particle_energy_series(states : ArrayView[Array[Particle]]) -> Array[Double]

#
particle_for_species

fn particle_for_species(species : Species, x~ : Double, v~ : Double, weight? : Double) -> Particle

#
particle_mean_shift

fn particle_mean_shift(particles : ArrayView[Particle]) -> Array[Particle]

#
particle_merge

fn particle_merge(first : ArrayView[Particle], second : ArrayView[Particle]) -> Array[Particle]

#
particle_momentum_series

fn particle_momentum_series(states : ArrayView[Array[Particle]]) -> Array[Double]

#
particle_number_density

fn particle_number_density(grid : Grid1D, particles : ArrayView[Particle]) -> Array[Double]

#
particle_position_bounds

fn particle_position_bounds(particles : ArrayView[Particle]) -> (Double, Double)

#
particle_quality_metrics

fn particle_quality_metrics(grid : Grid1D, particles : ArrayView[Particle]) -> Array[QualityMetric]

#
particle_speed

fn particle_speed(particle : Particle) -> Double

#
particle_speed_range

fn particle_speed_range(particles : ArrayView[Particle]) -> (Double, Double)

#
particle_speeds

fn particle_speeds(particles : ArrayView[Particle]) -> Array[Double]

#
particle_thermalize

fn particle_thermalize(particles : ArrayView[Particle], temperature : Double) -> Array[Particle]

#
particle_total_momentum

fn particle_total_momentum(particles : ArrayView[Particle]) -> Double

#
particle_velocity_bounds

fn particle_velocity_bounds(particles : ArrayView[Particle]) -> (Double, Double)

#
particle_velocity_center

fn particle_velocity_center(particles : ArrayView[Particle]) -> Array[Particle]

#
particles_in_cell

fn particles_in_cell(grid : Grid1D, particles : ArrayView[Particle], cell : Int) -> Array[Particle]

#
particles_to_csv

fn particles_to_csv(particles : ArrayView[Particle]) -> String

#
particles_with_position_range

fn particles_with_position_range(particles : ArrayView[Particle], low : Double, high : Double) -> Array[Particle]

#
particles_with_speed_limit

fn particles_with_speed_limit(particles : ArrayView[Particle], limit : Double) -> Array[Particle]

#
percentile

fn percentile(values : ArrayView[Double], fraction : Double) -> Double

#
periodic_average

fn periodic_average(grid : Grid1D, values : ArrayView[Double], radius : Int) -> Array[Double]

#
periodic_cumulative

fn periodic_cumulative(grid : Grid1D, values : ArrayView[Double]) -> Array[Double]

#
periodic_gradient

fn periodic_gradient(grid : Grid1D, values : ArrayView[Double]) -> Array[Double]

#
periodic_index

fn periodic_index(index : Int, length : Int) -> Int

#
periodic_laplacian

fn periodic_laplacian(grid : Grid1D, values : ArrayView[Double]) -> Array[Double]

#
phase_space_density

fn phase_space_density(grid : PhaseSpaceGrid, particles : ArrayView[Particle]) -> Array[Double]

#
phase_space_energy

fn phase_space_energy(grid : PhaseSpaceGrid, histogram : ArrayView[Double], mass : Double) -> Double

#
phase_space_entropy

fn phase_space_entropy(histogram : ArrayView[Double]) -> Double

#
phase_space_marginal_v

fn phase_space_marginal_v(grid : PhaseSpaceGrid, histogram : ArrayView[Double]) -> Array[Double]

#
phase_space_marginal_x

fn phase_space_marginal_x(grid : PhaseSpaceGrid, histogram : ArrayView[Double]) -> Array[Double]

#
phase_space_mean_velocity

fn phase_space_mean_velocity(grid : PhaseSpaceGrid, histogram : ArrayView[Double]) -> Double

#
phase_space_peak

fn phase_space_peak(grid : PhaseSpaceGrid, histogram : ArrayView[Double]) -> (Int, Int)

#
phase_space_to_csv

fn phase_space_to_csv(grid : PhaseSpaceGrid, histogram : ArrayView[Double]) -> String

let pi : Double

#
pic_charge_drift

fn pic_charge_drift(values : ArrayView[PicDiagnostics]) -> Double

#
pic_config_summary

fn pic_config_summary(config : PicConfig) -> String

#
pic_diagnostics_charges

fn pic_diagnostics_charges(values : ArrayView[PicDiagnostics]) -> Array[Double]

#
pic_diagnostics_energies

fn pic_diagnostics_energies(values : ArrayView[PicDiagnostics]) -> Array[Double]

#
pic_diagnostics_pass

fn pic_diagnostics_pass(values : ArrayView[PicDiagnostics], charge_tolerance : Double, energy_tolerance : Double) -> Bool

#
pic_diagnostics_times

fn pic_diagnostics_times(values : ArrayView[PicDiagnostics]) -> Array[Double]

#
pic_diagnostics_to_table

fn pic_diagnostics_to_table(values : ArrayView[PicDiagnostics]) -> NumericTable

#
pic_energy_drift

fn pic_energy_drift(values : ArrayView[PicDiagnostics]) -> Double

#
pic_invariants

fn pic_invariants(state : PicState, expected_charge : Double) -> Array[InvariantCheck]

#
pic_series_summary_to_csv

fn pic_series_summary_to_csv(summary : PicSeriesSummary) -> String

#
pic_state_charge_error

fn pic_state_charge_error(state : PicState) -> Double

#
pic_state_energy

fn pic_state_energy(state : PicState) -> Double

#
pic_state_is_finite

fn pic_state_is_finite(state : PicState) -> Bool

#
pic_state_to_snapshot

fn pic_state_to_snapshot(state : PicState) -> String

#
pipeline_frame

fn pipeline_frame(_config : PipelineConfig, step : Int, state : PicState) -> PipelineFrame

#
pipeline_initial_state

fn pipeline_initial_state(config : PipelineConfig) -> PicState

#
pipeline_step

fn pipeline_step(config : PipelineConfig, state : PicState) -> PicState

#
pipeline_summary

fn pipeline_summary(result : PipelineResult) -> String

#
pipeline_to_csv

fn pipeline_to_csv(result : PipelineResult) -> String

#
plasma_beta

fn plasma_beta(temperature : Double, density : Double, magnetic_field : Double) -> Double

#
plasma_frequency

fn plasma_frequency(density_m3 : Double, charge_c? : Double, mass_kg? : Double) -> Double

#
plasma_parameter

fn plasma_parameter(electron_density_m3 : Double, debye_length_m : Double) -> Double

#
plasma_parameter_from_state

fn plasma_parameter_from_state(temperature : Double, density : Double) -> Double

#
plasma_time_unit

fn plasma_time_unit(scales : UnitScales, density : Double, mass : Double, charge : Double) -> Double

#
poisson_converges

fn poisson_converges(grid : Grid1D, source : ArrayView[Double], tolerance : Double, max_iterations : Int) -> Bool

#
poisson_electric_field

fn poisson_electric_field(grid : Grid1D, potential : ArrayView[Double]) -> Array[Double]

#
poisson_energy

fn poisson_energy(grid : Grid1D, potential : ArrayView[Double]) -> Double

#
poisson_iteration_history

fn poisson_iteration_history(grid : Grid1D, source : ArrayView[Double], steps : Int) -> Array[Double]

#
poisson_mean_free

fn poisson_mean_free(potential : ArrayView[Double]) -> Array[Double]

#
poisson_residual

fn poisson_residual(grid : Grid1D, potential : ArrayView[Double], source : ArrayView[Double]) -> Double

#
poisson_residual_series

fn poisson_residual_series(grid : Grid1D, potentials : ArrayView[Array[Double]], source : ArrayView[Double]) -> Array[Double]

#
poisson_solution_range

fn poisson_solution_range(result : PoissonResult) -> Double

#
poisson_source

fn poisson_source(charge_density : ArrayView[Double]) -> Array[Double]

#
polynomial_basis

fn polynomial_basis(x : Double, order : Int) -> Array[Double]

#
polynomial_derivative

fn polynomial_derivative(coefficients : ArrayView[Double]) -> Array[Double]

#
polynomial_evaluate

fn polynomial_evaluate(coefficients : ArrayView[Double], x : Double) -> Double

#
polynomial_fit_constant

fn polynomial_fit_constant(values : ArrayView[Double]) -> Array[Double]

#
population_charge_density

fn population_charge_density(grid : Grid1D, populations : ArrayView[SpeciesPopulation], kind : ShapeKind) -> Array[Double]

#
population_charge_summary

fn population_charge_summary(state : MultiSpeciesState) -> Array[Double]

#
population_mass_summary

fn population_mass_summary(state : MultiSpeciesState) -> Array[Double]

#
population_names

fn population_names(state : MultiSpeciesState) -> Array[String]

#
position_marginal

fn position_marginal(state : VlasovState) -> Array[Double]

#
potential_from_electric

fn potential_from_electric(grid : Grid1D, electric : ArrayView[Double]) -> Array[Double]

#
power_spectrum

fn power_spectrum(signal : ArrayView[Double]) -> Array[Double]

#
profile_ceiling

fn profile_ceiling(values : ArrayView[Double], ceiling : Double) -> Array[Double]

#
profile_constant

fn profile_constant(value : Double) -> Profile1D

#
profile_double_hump

fn profile_double_hump(base : Double, amplitude : Double, center : Double, width : Double) -> Profile1D

#
profile_floor

fn profile_floor(values : ArrayView[Double], floor : Double) -> Array[Double]

#
profile_gaussian

fn profile_gaussian(base : Double, amplitude : Double, center : Double, width : Double) -> Profile1D

#
profile_integral

fn profile_integral(grid : Grid1D, profile : Profile1D) -> Double

#
profile_maximum

fn profile_maximum(values : ArrayView[Double]) -> Double

#
profile_mean

fn profile_mean(grid : Grid1D, profile : Profile1D) -> Double

#
profile_minimum

fn profile_minimum(values : ArrayView[Double]) -> Double

#
profile_ramp

fn profile_ramp(start : Double, end : Double, center : Double, width : Double) -> Profile1D

#
profile_range

fn profile_range(values : ArrayView[Double]) -> Double

#
profile_sinusoid

fn profile_sinusoid(base : Double, amplitude : Double, wave_number : Double, phase : Double) -> Profile1D

#
profile_top_hat

fn profile_top_hat(low : Double, high : Double, center : Double, width : Double) -> Profile1D

#
profile_value

fn profile_value(profile : Profile1D, x : Double) -> Double

#
profile_values

fn profile_values(grid : Grid1D, profile : Profile1D) -> Array[Double]

#
project_field

fn project_field(field : Field1D) -> Field1D

#
project_zero_mean

fn project_zero_mean(values : ArrayView[Double]) -> Array[Double]

#
prolongate_linear

fn prolongate_linear(source : Grid1D, values : ArrayView[Double], target : Grid1D) -> Array[Double]

#
proton_mass

let proton_mass : Double

#
public_api_summary

fn public_api_summary() -> String

#
pulse_electric_field

fn pulse_electric_field(amplitude : Double, center : Double, width : Double, offset : Double) -> ElectricFieldModel

#
push_particle

fn push_particle(grid : Grid1D, particle : Particle, electric~ : Double, dt~ : Double) -> Particle

#
push_particle_unbounded

fn push_particle_unbounded(particle : Particle, electric : Double, dt : Double) -> Particle

#
push_particles

fn push_particles(particles : ArrayView[Particle], electric : ArrayView[Double], dt : Double) -> Array[Particle]

#
quality_report

fn quality_report(metrics : ArrayView[QualityMetric]) -> String

#
reduce_average

fn reduce_average(source : Grid1D, values : ArrayView[Double], target_cells : Int) -> GridReduction

#
reduction_converges

fn reduction_converges(errors : ArrayView[Double], tolerance : Double) -> Bool

#
reduction_error

fn reduction_error(source : Grid1D, values : ArrayView[Double], reduction : GridReduction) -> Double

#
reduction_errors

fn reduction_errors(source : Grid1D, values : ArrayView[Double], reductions : ArrayView[GridReduction]) -> Array[Double]

#
reduction_integral

fn reduction_integral(_grid : Grid1D, reduction : GridReduction) -> Double

#
reduction_maximum

fn reduction_maximum(reduction : GridReduction) -> Double

#
reduction_minimum

fn reduction_minimum(reduction : GridReduction) -> Double

#
reduction_series

fn reduction_series(source : Grid1D, values : ArrayView[Double], resolutions : ArrayView[Int]) -> Array[GridReduction]

#
reduction_summary

fn reduction_summary(reduction : GridReduction) -> String

#
reduction_to_csv

fn reduction_to_csv(reduction : GridReduction) -> String

#
reflect_position

fn reflect_position(grid : Grid1D, x : Double) -> Double

#
relative_change

fn relative_change(initial : Double, final_value : Double) -> Double

#
relative_energy_drift

fn relative_energy_drift(initial : Double, ending : Double) -> Double

#
relative_error

fn relative_error(actual : Double, predicted : Double) -> Double

#
relative_l2_error

fn relative_l2_error(reference : ArrayView[Double], actual : ArrayView[Double]) -> Double

#
relative_residual

fn relative_residual(values : ArrayView[Double], target : ArrayView[Double]) -> Double

#
relax_to_target

fn relax_to_target(initial : Array[Double], target : Array[Double], factor : Double, max_iterations : Int) -> RelaxationResult

#
relaxation_time

fn relaxation_time(rate : Double) -> Double

#
reproducibility_report

fn reproducibility_report(scenario : SimulationScenario, toolchain : String) -> String

#
reproducible_run

fn reproducible_run(scenario : SimulationScenario) -> Bool

#
resample_periodic

fn resample_periodic(source_grid : Grid1D, source : ArrayView[Double], target_grid : Grid1D, mode : InterpolationMode) -> Array[Double]

#
rescale_particle_weights

fn rescale_particle_weights(particles : ArrayView[Particle], factor : Double) -> Array[Particle]

#
residual_norm

fn residual_norm(residual : ArrayView[Double]) -> Double

#
residual_sum_of_squares

fn residual_sum_of_squares(actual : ArrayView[Double], predicted : ArrayView[Double]) -> Double

#
result_is_well_formed

fn result_is_well_formed(scenario : SimulationScenario, fingerprint : ResultFingerprint) -> Bool

#
rms

fn rms(values : ArrayView[Double]) -> Double

#
run_ensemble

fn run_ensemble(scenario : SimulationScenario, members : Int) -> Array[EnsembleMember]

#
run_experiment

fn run_experiment(config : ExperimentConfig) -> ExperimentReport

#
run_pic_benchmark

fn run_pic_benchmark(cells? : Int, particles? : Int, steps? : Int) -> BenchmarkSample

#
run_pipeline

fn run_pipeline(config : PipelineConfig) -> PipelineResult

#
run_plasma_benchmark_catalog

fn run_plasma_benchmark_catalog() -> PlasmaBenchmarkReport

#
running_maximum

fn running_maximum(values : ArrayView[Double]) -> Array[Double]

#
running_minimum

fn running_minimum(values : ArrayView[Double]) -> Array[Double]

#
safe_grid

fn safe_grid(cells : Int, length : Double) -> Grid1D?

#
safe_ratio

fn safe_ratio(numerator : Double, denominator : Double, fallback : Double) -> Double

#
sample_beam

fn sample_beam(count : Int, seed : Int, drift : Double, spread : Double) -> Array[Double]

#
sample_clone

fn sample_clone(particles : ArrayView[Particle]) -> Array[Particle]

#
sample_histogram

fn sample_histogram(values : ArrayView[Double], low : Double, high : Double, bins : Int) -> Array[Int]

#
sample_lattice

fn sample_lattice(grid : Grid1D, velocity : Double, count : Int) -> Array[Particle]

#
sample_linear

fn sample_linear(grid : Grid1D, values : ArrayView[Double], x : Double) -> Double

#
sample_mean

fn sample_mean(values : ArrayView[Double]) -> Double

#
sample_normal

fn sample_normal(count : Int, seed : Int, mean_value : Double, standard_deviation : Double) -> Array[Double]

#
sample_particles

fn sample_particles(grid : Grid1D, count : Int, seed : Int, drift : Double, spread : Double) -> Array[Particle]

#
sample_periodic

fn sample_periodic(grid : Grid1D, values : ArrayView[Double], x : Double, mode : InterpolationMode) -> Double

#
sample_periodic_linear

fn sample_periodic_linear(grid : Grid1D, values : ArrayView[Double], x : Double) -> Double

#
sample_positions

fn sample_positions(count : Int, length : Double, phase : Double) -> Array[Double]

#
sample_profile

fn sample_profile(grid : Grid1D, profile : Profile1D, count : Int, seed : Int) -> Array[Double]

#
sample_quantiles

fn sample_quantiles(values : ArrayView[Double], count : Int) -> Array[Double]

#
sample_rejection

fn sample_rejection(grid : Grid1D, profile : Profile1D, count : Int, seed : Int, upper : Double) -> Array[Double]

#
sample_span

fn sample_span(values : ArrayView[Double]) -> Double

#
sample_two_beam

fn sample_two_beam(count : Int, seed : Int, drift : Double, spread : Double) -> Array[Double]

#
sample_uniform

fn sample_uniform(count : Int, seed : Int, low : Double, high : Double) -> Array[Double]

#
sample_uniform_grid

fn sample_uniform_grid(grid : Grid1D, count : Int, seed : Int) -> Array[Double]

#
sample_variance

fn sample_variance(values : ArrayView[Double]) -> Double

#
sample_weighted_particles

fn sample_weighted_particles(grid : Grid1D, count : Int, seed : Int, profile : Profile1D) -> Array[Particle]

#
sampled_beam

fn sampled_beam(config : VlasovConfig, density~ : Double, center_velocity~ : Double, thermal_speed~ : Double) -> Array[Double]

#
sampled_maxwellian

fn sampled_maxwellian(config : VlasovConfig, density~ : Double, thermal_speed~ : Double) -> Array[Double]

#
sampling_config_summary

fn sampling_config_summary(config : SamplingConfig) -> String

#
scale_field

fn scale_field(field : Field1D, factor : Double) -> Field1D

#
scales_summary

fn scales_summary(scales : UnitScales) -> String

#
scenario_charge_error

fn scenario_charge_error(scenario : SimulationScenario) -> Double

#
scenario_description

fn scenario_description(scenario : SimulationScenario) -> String

#
scenario_diagnostics_csv

fn scenario_diagnostics_csv(scenario : SimulationScenario) -> String

#
scenario_health

fn scenario_health(scenario : SimulationScenario) -> Array[HealthCheck]

#
scenario_initial_state

fn scenario_initial_state(scenario : SimulationScenario) -> PicState

#
scenario_manifest_summary

fn scenario_manifest_summary(scenario : SimulationScenario) -> String

#
scenario_particle_count

fn scenario_particle_count(scenario : SimulationScenario) -> Int

#
scenario_quality_metrics

fn scenario_quality_metrics(scenario : SimulationScenario) -> Array[QualityMetric]

#
scenario_run

fn scenario_run(scenario : SimulationScenario) -> PicState

#
scenario_step

fn scenario_step(state : PicState, scenario : SimulationScenario) -> PicState

#
scenario_trace

fn scenario_trace(scenario : SimulationScenario) -> Array[PicDiagnostics]

#
scenario_with_boundary

fn scenario_with_boundary(scenario : SimulationScenario, boundary : Boundary1D) -> SimulationScenario

#
scenario_with_dt

fn scenario_with_dt(scenario : SimulationScenario, dt : Double) -> SimulationScenario

#
scenario_with_shape

fn scenario_with_shape(scenario : SimulationScenario, shape : ShapeKind) -> SimulationScenario

#
scenario_work_units

fn scenario_work_units(scenario : SimulationScenario) -> Int

#
serialize_benchmark

fn serialize_benchmark(suite : BenchmarkSuite) -> String

#
serialize_config

fn serialize_config(config : ExperimentConfig) -> String

#
serialize_field_snapshot

fn serialize_field_snapshot(field : Field1D) -> String

#
serialize_grid_values

fn serialize_grid_values(grid : Grid1D, name : String, values : ArrayView[Double]) -> String

#
serialize_named_values

fn serialize_named_values(names : ArrayView[String], values : ArrayView[Double]) -> String

#
serialize_particles_snapshot

fn serialize_particles_snapshot(particles : ArrayView[Particle]) -> String

#
serialize_pipeline

fn serialize_pipeline(result : PipelineResult) -> String

#
serialize_scalar_series

fn serialize_scalar_series(name : String, values : ArrayView[Double]) -> String

#
serialize_shape_weights

fn serialize_shape_weights(weights : ShapeWeights) -> String

#
serialize_summary

fn serialize_summary(name : String, values : ArrayView[Double]) -> String

#
serialize_validation

fn serialize_validation(report : ValidationReport) -> String

#
serialize_vector_series

fn serialize_vector_series(name : String, values : ArrayView[Vector3]) -> String

#
serialize_vlasov

fn serialize_vlasov(state : VlasovState) -> String

#
series_from_pairs

fn series_from_pairs(name : String, pairs : Array[(Double, Double)]) -> TimeSeries

#
series_mean

fn series_mean(values : ArrayView[Double]) -> Double

#
series_range

fn series_range(values : ArrayView[Double]) -> Double

#
series_rms

fn series_rms(values : ArrayView[Double]) -> Double

#
shape_blend

fn shape_blend(grid : Grid1D, x : Double, first : ShapeKind, second : ShapeKind, fraction : Double) -> Array[Double]

#
shape_charge_error

fn shape_charge_error(grid : Grid1D, particles : ArrayView[Particle], kind : ShapeKind) -> Double

#
shape_kind_from_index

fn shape_kind_from_index(index : Int) -> ShapeKind

#
shape_moment

fn shape_moment(grid : Grid1D, positions : ArrayView[Double], values : ArrayView[Double], kind : ShapeKind, order : Int) -> Double

#
shape_name

fn shape_name(kind : ShapeKind) -> String

#
shape_partition_error

fn shape_partition_error(grid : Grid1D, x : Double, kind : ShapeKind) -> Double

#
shape_reconstruct

fn shape_reconstruct(grid : Grid1D, deposited : ArrayView[Double], positions : ArrayView[Double], kind : ShapeKind) -> Array[Double]

#
shape_support

fn shape_support(kind : ShapeKind) -> Int

#
shape_weight

fn shape_weight(grid : Grid1D, x : Double, index : Int, kind : ShapeKind) -> Double

#
shape_weights

fn shape_weights(grid : Grid1D, x : Double, kind : ShapeKind) -> ShapeWeights

#
shift_field

fn shift_field(grid : Grid1D, field : Field1D, shift : Double) -> Field1D

#
shift_profile

fn shift_profile(grid : Grid1D, values : ArrayView[Double], shift : Double) -> Array[Double]

#
simpson_integral

fn simpson_integral(values : ArrayView[Double], spacing : Double) -> Double

#
sinusoidal_electric_field

fn sinusoidal_electric_field(amplitude : Double, offset : Double, wave_number : Double, phase : Double) -> ElectricFieldModel

#
sliding_windows

fn sliding_windows(values : ArrayView[Double], width : Int, stride : Int) -> Array[Array[Double]]

#
solve_2x2

fn solve_2x2(matrix : Matrix2, rhs : MatrixVector2) -> MatrixVector2

#
solve_periodic_field

fn solve_periodic_field(grid : Grid1D, charge_density : ArrayView[Double]) -> Field1D

#
solve_periodic_poisson

fn solve_periodic_poisson(grid : Grid1D, source : ArrayView[Double], max_iterations? : Int, tolerance? : Double) -> PoissonResult

Compatibility wrapper with a source-density API.

#
solve_periodic_potential_field

fn solve_periodic_potential_field(grid : Grid1D, source : ArrayView[Double], max_iterations? : Int, tolerance? : Double) -> Field1D

#
solve_poisson_dirichlet

fn solve_poisson_dirichlet(grid : Grid1D, source : ArrayView[Double], left_value : Double, right_value : Double) -> Array[Double]

#
solve_poisson_jacobi

fn solve_poisson_jacobi(grid : Grid1D, charge_density : ArrayView[Double], max_iterations : Int, tolerance : Double) -> PoissonResult

#
solve_poisson_periodic

fn solve_poisson_periodic(grid : Grid1D, charge_density : ArrayView[Double], max_iterations : Int, tolerance : Double) -> PoissonResult

#
solver_convergence_rate

fn solver_convergence_rate(residuals : ArrayView[Double]) -> Double

#
solver_is_decreasing

fn solver_is_decreasing(residuals : ArrayView[Double]) -> Bool

#
solver_residual_csv

fn solver_residual_csv(residuals : ArrayView[Double]) -> String

#
sound_speed

fn sound_speed(state : FluidState, gamma : Double) -> Double

#
sound_speed_ideal

fn sound_speed_ideal(temperature : Double, mass : Double, gamma : Double) -> Double

#
species_gyro_frequency

fn species_gyro_frequency(species : Species, field : Double) -> Double

#
species_gyroradius

fn species_gyroradius(species : Species, temperature : Double, field : Double) -> Double

#
species_particles

fn species_particles(species : Species, count : Int, spacing : Double, drift : Double) -> Array[Particle]

#
species_plasma_frequency

fn species_plasma_frequency(species : Species, density : Double) -> Double

#
specific_internal_energy

fn specific_internal_energy(state : FluidState) -> Double

#
spectral_centroid

fn spectral_centroid(spectrum : ArrayView[SpectrumBin]) -> Double

#
spectrum_band_power

fn spectrum_band_power(spectrum : ArrayView[SpectrumBin], low : Double, high : Double) -> Double

#
spectrum_to_csv

fn spectrum_to_csv(spectrum : ArrayView[SpectrumBin]) -> String

#
stable_pic_dt

fn stable_pic_dt(grid : Grid1D, maximum_speed : Double, safety_factor : Double) -> Double

#
stable_time_step

fn stable_time_step(cell_width : Double, speed : Double, cfl : Double) -> Double

#
standard_scenario

fn standard_scenario(name : String, cells : Int, particles : Int, steps : Int) -> SimulationScenario

#
sum_values

fn sum_values(values : ArrayView[Double]) -> Double

#
summarize_ensemble

fn summarize_ensemble(members : ArrayView[EnsembleMember]) -> EnsembleSummary

#
summarize_pic_series

fn summarize_pic_series(values : ArrayView[PicDiagnostics]) -> PicSeriesSummary

#
summarize_series

fn summarize_series(name : String, values : ArrayView[Double]) -> SeriesSummary

#
summarize_vlasov

fn summarize_vlasov(state : VlasovState, mass : Double) -> VlasovSummary

#
summary_array

fn summary_array(values : ArrayView[Array[Double]]) -> Array[SeriesSummary]

#
summary_to_csv

fn summary_to_csv(summary : SeriesSummary) -> String

#
table_append_column

fn table_append_column(table : NumericTable, name : String, values : ArrayView[Double]) -> NumericTable

#
table_column_sums

fn table_column_sums(table : NumericTable) -> Array[Double]

#
table_column_values

fn table_column_values(table : NumericTable, index : Int) -> Array[Double]

#
table_filter_rows

fn table_filter_rows(table : NumericTable, column : Int, low : Double, high : Double) -> NumericTable

#
table_from_series

fn table_from_series(names : Array[String], series : Array[Array[Double]]) -> NumericTable

#
table_maximum

fn table_maximum(table : NumericTable, index : Int) -> Double

#
table_mean

fn table_mean(table : NumericTable, index : Int) -> Double

#
table_minimum

fn table_minimum(table : NumericTable, index : Int) -> Double

#
table_row_sums

fn table_row_sums(table : NumericTable) -> Array[Double]

#
table_summary

fn table_summary(table : NumericTable) -> String

#
thermal_debye_length

fn thermal_debye_length(temperature : Double, density : Double, charge : Double) -> Double

#
thermal_energy

fn thermal_energy(temperature : Double) -> Double

#
thermal_speed

fn thermal_speed(temperature : Double, mass : Double) -> Double

#
thermal_speed_from_temperature

fn thermal_speed_from_temperature(temperature : Double, mass : Double) -> Double

#
thermal_unit

fn thermal_unit(scales : UnitScales) -> Double

#
thermal_velocity

fn thermal_velocity(temperature_k : Double, mass_kg~ : Double) -> Double

#
total_charge

fn total_charge(grid : Grid1D, charge_density : ArrayView[Double]) -> Double

#
total_particle_charge

fn total_particle_charge(particles : ArrayView[Particle]) -> Double

#
trace_field_line

fn trace_field_line(position : Vector3, field : MagneticField3D, step : Double, count : Int) -> Array[Vector3]

#
trace_pic

fn trace_pic(state : PicState, dt : Double, steps : Int, every? : Int) -> Array[PicDiagnostics]

#
trace_pic_diagnostics

fn trace_pic_diagnostics(state : PicState, dt : Double, steps : Int) -> Array[PicDiagnostics]

#
translate_particles

fn translate_particles(particles : ArrayView[Particle], shift : Double) -> Array[Particle]

#
trapezoid_integral

fn trapezoid_integral(grid : Grid1D, values : ArrayView[Double]) -> Double

#
trapezoid_integral_uniform

fn trapezoid_integral_uniform(values : ArrayView[Double], spacing : Double) -> Double

#
tridiagonal_jacobi

fn tridiagonal_jacobi(diagonal : ArrayView[Double], lower : ArrayView[Double], upper : ArrayView[Double], rhs : ArrayView[Double], iterations : Int) -> RelaxationResult

#
tridiagonal_residual

fn tridiagonal_residual(diagonal : ArrayView[Double], lower : ArrayView[Double], upper : ArrayView[Double], solution : ArrayView[Double], rhs : ArrayView[Double]) -> Array[Double]

#
two_stream_particles

fn two_stream_particles(count : Int, length : Double, speed : Double) -> Array[Particle]

#
uniform_magnetic_field

fn uniform_magnetic_field(field : Vector3) -> MagneticField3D

#
vacuum_permittivity

let vacuum_permittivity : Double

#
validate_count

fn validate_count(value : Int, name : String) -> ValidationReport

#
validate_grid

fn validate_grid(cells : Int, length : Double) -> ValidationReport

#
validate_non_negative

fn validate_non_negative(value : Double, name : String) -> ValidationReport

#
validate_positive

fn validate_positive(value : Double, name : String) -> ValidationReport

#
validate_range

fn validate_range(value : Double, low : Double, high : Double, name : String) -> ValidationReport

#
validate_simulation_inputs

fn validate_simulation_inputs(grid : Grid1D, dt : Double, particles : Int, steps : Int) -> ValidationReport

#
validation_health

fn validation_health(report : ValidationReport) -> HealthCheck

#
validation_message

fn validation_message(report : ValidationReport) -> String

#
vector_distance

fn vector_distance(a : ArrayView[Double], b : ArrayView[Double]) -> Double

#
velocity_marginal

fn velocity_marginal(state : VlasovState) -> Array[Double]

#
velocity_mean

fn velocity_mean(particles : ArrayView[Particle]) -> Double

#
velocity_variance

fn velocity_variance(particles : ArrayView[Particle]) -> Double

#
verification_bundle_check_count

fn verification_bundle_check_count(bundle : VerificationBundle) -> Int

#
verification_bundle_checksum

fn verification_bundle_checksum(bundle : VerificationBundle) -> Int

#
verification_bundle_expected_work

fn verification_bundle_expected_work(bundle : VerificationBundle) -> Int

#
verification_bundle_is_deterministic

fn verification_bundle_is_deterministic(scenario : SimulationScenario, toolchain : String) -> Bool

#
verification_bundle_matches_work

fn verification_bundle_matches_work(bundle : VerificationBundle) -> Bool

#
verification_bundle_passes_thresholds

fn verification_bundle_passes_thresholds(bundle : VerificationBundle, charge : Double, energy : Double) -> Bool

#
verification_bundle_records

fn verification_bundle_records(bundle : VerificationBundle) -> Array[QualityMetric]

#
verification_bundle_schema

fn verification_bundle_schema() -> String

#
verification_bundle_status

fn verification_bundle_status(bundle : VerificationBundle) -> String

#
verification_bundle_to_text

fn verification_bundle_to_text(bundle : VerificationBundle) -> String

#
vlasov_advect_x

fn vlasov_advect_x(state : VlasovState, velocity : Double) -> VlasovState

#
vlasov_cfl

fn vlasov_cfl(config : VlasovConfig) -> Double

#
vlasov_charge_from_density

fn vlasov_charge_from_density(_state : VlasovState, density : ArrayView[Double]) -> Array[Double]

#
vlasov_clip_negative

fn vlasov_clip_negative(state : VlasovState) -> VlasovState

#
vlasov_conservative_mass_correction

fn vlasov_conservative_mass_correction(state : VlasovState, reference_mass : Double) -> VlasovState

#
vlasov_density

fn vlasov_density(config : VlasovConfig, distribution : ArrayView[Double]) -> Array[Double]

#
vlasov_density_error

fn vlasov_density_error(state : VlasovState, expected : Double) -> Double

#
vlasov_distribution_difference

fn vlasov_distribution_difference(first : VlasovState, second : VlasovState) -> Array[Double]

#
vlasov_invariants

fn vlasov_invariants(state : VlasovState, expected_mass : Double) -> Array[InvariantCheck]

#
vlasov_is_normalized

fn vlasov_is_normalized(state : VlasovState, expected : Double, tolerance : Double) -> Bool

#
vlasov_is_positive

fn vlasov_is_positive(state : VlasovState) -> Bool

#
vlasov_l2_difference

fn vlasov_l2_difference(first : VlasovState, second : VlasovState) -> Double

#
vlasov_mass_error

fn vlasov_mass_error(first : VlasovState, second : VlasovState) -> Double

#
vlasov_moments

fn vlasov_moments(state : VlasovState) -> Moments1D

#
vlasov_report_to_csv

fn vlasov_report_to_csv(reports : ArrayView[VlasovStepReport]) -> String

#
vlasov_rescale_mass

fn vlasov_rescale_mass(state : VlasovState, target : Double) -> VlasovState

#
vlasov_run_reports

fn vlasov_run_reports(state : VlasovState, steps : Int) -> Array[VlasovStepReport]

#
vlasov_shift_distribution

fn vlasov_shift_distribution(state : VlasovState, shift : Double) -> VlasovState

#
vlasov_snapshot_to_csv

fn vlasov_snapshot_to_csv(state : VlasovState) -> String

#
vlasov_step_report

fn vlasov_step_report(state : VlasovState) -> VlasovStepReport

#
vlasov_summary_to_csv

fn vlasov_summary_to_csv(values : ArrayView[VlasovSummary]) -> String

#
vlasov_time_series

fn vlasov_time_series(state : VlasovState, steps : Int) -> Array[VlasovSummary]

#
wave_group_speed

fn wave_group_speed(omega_first : Double, omega_second : Double, wave_first : Double, wave_second : Double) -> Double

#
wave_phase_speed

fn wave_phase_speed(omega : Double, wave_number : Double) -> Double

#
wavelength_from_wavenumber

fn wavelength_from_wavenumber(wave_number : Double) -> Double

#
wavenumber_from_wavelength

fn wavenumber_from_wavelength(wavelength : Double) -> Double

#
weighted_histogram_particles

fn weighted_histogram_particles(grid : PhaseSpaceGrid, particles : ArrayView[Particle]) -> Array[Double]

#
weighted_mean

fn weighted_mean(values : ArrayView[Double], weights : ArrayView[Double]) -> Double

#
weighted_sum

fn weighted_sum(values : ArrayView[Double], weights : ArrayView[Double]) -> Double

#
window_means

fn window_means(values : ArrayView[Double], width : Int, stride : Int) -> Array[Double]

#
z_scores

fn z_scores(values : ArrayView[Double]) -> Array[Double]

#
zeros

fn zeros(n : Int) -> Array[Double]