Two-Fluid-1D Configuration Reference
The tf-1d solver evolves a 1D electrostatic two-fluid (electron + ion) system
closed with a kinetic dispersion table and an optional particle-trapping model:
∂n/∂t + ∂x(n u) = 0
∂u/∂t + u ∂x u = −(∂x p)/n − (q/m) E + ν_L[u, E, δ]
∂p/∂t + u ∂x p + γ p ∂x u = −2 n u (q/m) E
∂δ/∂t = −v_φ ∂x δ + Γ(E) |E| / (1 + δ²)
with p ≡ P/m the mass-normalized pressure. The field is obtained spectrally
from the charge density, E_k = i (q_i n_{i,k} + q_e n_{e,k}) / k.
The Landau damping term ν_L is interpolated from a complex-frequency table
(see adept.electrostatic.get_complex_frequency_table) and may be reduced
locally by the trapping variable δ, whose growth rate Γ comes from the
optional learned closure (see models).
Example configs live in configs/tf-1d/.
Top-level keys
Key |
Required |
Description |
|---|---|---|
|
yes |
Must be |
|
yes |
Experiment name and run name. |
|
yes |
Plasma normalization. |
|
yes |
Spatial and temporal grid. |
|
yes |
Output / diagnostic save points. |
|
yes |
Per-species fluid and closure parameters. |
|
yes |
External electrostatic drivers. |
|
no |
Learned-closure (neural network) specification. |
|
no |
Adjoint method hint. Currently unused by the solver. |
mlflow
mlflow:
experiment: tf1d-epw-test
run: test
units
units:
normalizing_temperature: 2000eV
normalizing_density: 1.5e21/cc
Sets n0, T0, v0 = √(T0/m_e), ωp0, and x0 = v0/ωp0. Lengths in the
config are in Debye lengths and times in 1/ωp0.
grid
grid:
nx: 16
xmin: 0.0
xmax: 20.94
tmin: 0.0
tmax: 500.0
Field |
Type |
Description |
|---|---|---|
|
int |
Number of spatial cells (periodic, spectral derivatives). |
|
float |
Box extent in Debye lengths. |
|
float |
Simulation time window in |
dx, dt = 0.05 dx, and nt are derived at runtime; tmax is snapped to a
whole number of steps and the step count is capped at 1e6.
save
save:
t:
tmin: 0.5
tmax: 500.0
nt: 1000
x:
xmin: 0.0
xmax: 20.94
nx: 16
kx: # optional
kxmin: 0.0
kxmax: 0.3
nkx: 2
Block |
Required |
Fields |
Description |
|---|---|---|---|
|
yes |
|
Save times. All three are required — |
|
yes |
|
Real-space interpolation grid for the saved fields. |
|
no |
|
k-space diagnostic. Omit the block entirely to skip it. |
physics
Both ion and electron blocks are required, even when a species is frozen
with is_on: false.
physics:
electron:
is_on: true
landau_damping: true
mass: 1.0
charge: -1.0
T0: 1.0
gamma: kinetic
trapping:
is_on: true
model: zk
kld: 0.3
nuee: 1.0e-7
nn: 8|8
ion:
is_on: false
landau_damping: false
mass: 1836.0
charge: 1.0
T0: 1.0
gamma: 3
trapping:
is_on: false
kld: 0.3
nuee: 1.0e-9
Field |
Type |
Default |
Description |
|---|---|---|---|
|
bool |
— |
Evolve this species. When false, |
|
bool |
— |
Apply the tabulated Landau damping rate |
|
float |
— |
Species mass normalized to |
|
float |
— |
Species charge normalized to |
|
float |
— |
Initial temperature normalized to the reference |
|
int | float | str |
— |
Adiabatic index. The literal string |
|
block |
— |
Particle trapping model, see below. |
physics.<species>.trapping
Field |
Type |
Default |
Description |
|---|---|---|---|
|
bool |
— |
Evolve the trapping variable |
|
float |
— |
|
|
|
|
Damping-reduction model. Only read when |
|
float |
|
Electron–electron collision frequency normalized to |
|
str |
|
Legacy neural-network shape hint (e.g. `8 |
Note
trapping.is_on: true with no model key falls back to none, meaning δ is
evolved but does not feed back on the damping rate. Set model explicitly if
you want trapping to modify the physics.
Warning
trapping.is_on: true is currently not runnable. ParticleTrapper reads
the growth-rate network from args["nu_g"], but nothing in the live code path
builds it from the models block, so the solve fails with KeyError: 'nu_g'
on the first step. Only trapping.is_on: false configs run end to end today.
drivers
drivers:
ex:
"0":
k0: 0.3
w0: 1.1598
dw0: 0.0
t_c: 80
t_w: 100
t_r: 20
x_c: 600
x_w: 800
x_r: 80
a0: 4.e-3
drivers.ex is a dictionary of independently-enveloped electrostatic drivers
keyed by a string index; their contributions are summed.
Field |
Type |
Description |
|---|---|---|
|
float |
Wavenumber in |
|
float |
Angular frequency in |
|
float |
Frequency offset added to |
|
float |
Temporal envelope center, width, and rise/fall length. |
|
float |
Spatial envelope center, width, and rise/fall length. Use a very large |
|
float |
Driver amplitude. The applied field is scaled by ` |
models
Optional learned-closure specification used by the trapping growth rate
nu_g (and, when implemented, a damping model nu_d). Set models: false to
disable learned closures entirely.
Warning
This block is currently accepted and validated but not consumed — the live
solver never instantiates these networks. See the warning under
trapping.
models:
file: models/weights.eqx # or false for untrained weights
nu_g:
in_size: 3
out_size: 1
width_size: 8
depth: 4
activation: tanh
final_activation: tanh
Field |
Type |
Default |
Description |
|---|---|---|---|
|
str | bool |
|
Path to serialized |
|
block |
|
|
|
block |
|
|
Each MLP block takes in_size, out_size, width_size, depth, activation,
and an optional final_activation.