Plasma models, orderings, and scales
Two pages answer different questions. Computational layers says where a computation belongs in VAFT (Formula, Process, Code). This page says what physical model the computation represents.
New here? Start with Plasma models: a guide (#1739). It explains the model families and places every VAFT mode, with generated tables; this page holds the evidence behind each classification.
What this page is. It is the Phase A audit of #1723, under issue #1725: a reviewed scientific classification.
What it is not. It is not an API: no enum and no model class is introduced here. Phase B (#1727) will encode only the distinctions that survive this audit.
How confidence is marked. Every classification carries a confidence:
| confidence | meaning |
|---|---|
| verified | backed by a primary theory publication, upstream solver documentation, or upstream source |
| provisional | backed by literature, but not checked against source, or a citation detail is unconfirmed |
| unresolved | the evidence needed has not been found |
A VAFT name is never evidence for the physics.
1. Why one “fidelity” axis does not work
The models VAFT drives differ along several independent axes, listed in the table below.
Resistive MHD and gyrokinetics are not two rungs of one ladder. Their orderings differ:
- resistive MHD averages over all particle phase space and closes the layer with a resistivity;
- gyrokinetics keeps $k_\perp\rho\sim1$ and phase-space structure, but removes the fast gyro-motion.
Neither reduces to the other. Collisional electromagnetic gyrokinetics does contain tearing and microtearing layer physics, but under a different ordering.
The axes the audit found to be physically meaningful are:
| axis | question it answers | examples of values |
|---|---|---|
| scientific operation | what is being computed | stability, perturbed equilibrium, neoclassical transport, turbulence, orbit/loss, source deposition |
| bulk description | what represents the bulk plasma | fluid, hybrid (fluid + kinetic response), kinetic, particle (test particles), reduced |
| fluid model | which fluid closure, when there is one | ideal MHD, resistive MHD, extended MHD |
| kinetic equation | which kinetic equation is solved, when one is | none, drift kinetic, gyrokinetic, Fokker–Planck (test species) |
| kinetic population | which species obey it | all species, thermal ions (+ electrons), fast ions, energetic particles |
| kinetic coupling | how a kinetic result re-enters a fluid model | energy (δW_k), pressure, current, closure on a given displacement, sources |
| distribution formulation | $f$ split | δf, full-f, N/A |
| orbit representation | particle motion | full orbit, guiding centre, bounce/transit averaged, N/A |
| spatial domain | radial extent | local (flux tube or single surface), radially global, whole volume |
| topology domain | field-line topology covered | closed flux surfaces, open field lines, across the separatrix |
| regime | dynamics | linear, nonlinear, quasilinear, steady state, static (marginal) |
| field model | perturbed fields | MHD displacement, electrostatic, electromagnetic ($A_\parallel$, $\delta B_\parallel$) |
Two points this audit settled:
- Orbit representation is a separate axis from the kinetic equation. ASCOT5 and NUBEAM solve a Fokker–Planck equation by Monte Carlo orbit following, while SIMPLE follows orbits and evolves no distribution.
- “Kinetic-profile input” is not an axis at all. It is a property of the inputs (§6).
How the tables write “not applicable”. In the tables below, “—”, “none” and “N/A” all mean not applicable:
for example, a fluid model solves no kinetic equation. The record of §10 writes that as None.
2. Theory foundations
2.1 Fluid hierarchy
Ideal MHD.
- Single fluid, ideal Ohm’s law $E + v\times B = 0$, scalar pressure with an adiabatic or incompressible closure.
- Valid at $\rho/L\ll1$ and $\omega\ll\Omega_i$, on scales above $d_i$.
- The scalar-pressure closure also assumes collisions keep the pressure isotropic, or treats the anisotropy as negligible.
- References: Bernstein, Frieman, Kruskal & Kulsrud, Proc. R. Soc. A 244, 17 (1958); Freidberg, Ideal MHD (2014).
Resistive MHD.
- Adds $\eta J$ to Ohm’s law. In a tokamak this matters only in thin layers around rational surfaces.
- Glasser, Greene & Johnson, Phys. Fluids 18, 875 (1975).
Hall, two-fluid and extended MHD.
- These add, separately, the Hall term $J\times B/ne$, the electron pressure gradient, electron inertia, gyroviscosity (FLR) and anisotropic pressure. They come from Braginskii’s two-fluid equations, Rev. Plasma Phys. 1, 205 (1965).
- “Extended MHD” is a family of fluid closures.
- It is not a synonym for kinetic MHD (§2.5).
Reduced MHD.
- An expansion in $\epsilon=a/R$, $\beta$ and $k_\parallel/k_\perp$; Strauss, Phys. Fluids 19, 134 (1976).
- It is an ordering applied to a fluid model, not a different fluid model. Low aspect ratio weakens its premise (#1627).
2.2 Drift kinetics
Ordering.
- $\omega/\Omega_c\ll1$ and $\rho/L\ll1$.
- The gyro-phase is averaged out.
- Particles move as guiding centres: parallel streaming, $E\times B$ drift, $\nabla B$ and curvature drifts.
- Collisions are retained as needed.
The equation is derived systematically by Hazeltine, Plasma Phys. 15, 77 (1973). The neoclassical application is reviewed by Hinton & Hazeltine, Rev. Mod. Phys. 48, 239 (1976).
Three related things that are not equivalent:
- Guiding-centre dynamics: single-particle equations of motion. Littlejohn, J. Plasma Phys. 29, 111 (1983); Cary & Brizard, Rev. Mod. Phys. 81, 693 (2009).
- The drift-kinetic equation: evolves the guiding-centre distribution.
- Neoclassical transport: one application of the drift-kinetic equation, as a steady first-order solution driven by equilibrium gradients.
2.3 Gyrokinetics
Ordering.
- Low frequency, $\omega/\Omega_i\sim\rho_*$.
- Strong anisotropy, $k_\parallel/k_\perp\sim\rho_*$.
- Small fluctuations, $\delta f/F\sim\rho_*$.
- But $k_\perp\rho\sim1$ is allowed: the gyro-phase is removed by gyro-averaging, not by assuming $k_\perp\rho\ll1$.
References: Frieman & Chen, Phys. Fluids 25, 502 (1982); Brizard & Hahm, Rev. Mod. Phys. 79, 421 (2007). The multiscale treatment with rotation is Abel, Plunk, Wang, Barnes, Cowley, Dorland & Schekochihin, Rep. Prog. Phys. 76, 116201 (2013).
Relation to drift kinetics. In the limit $k_\perp\rho\to0$, the gyrokinetic equation reduces to a drift-kinetic form. Gyrokinetics is therefore not “higher-fidelity drift kinetics”:
- it keeps finite-$k_\perp\rho$ physics that drift kinetics orders out;
- its δf is a small fluctuation about the equilibrium;
- neoclassical drift kinetics is also δf ($f_1/F_0\sim\rho_*$), but $f_1$ is a steady, axisymmetric departure, not a fluctuation.
2.4 Particle-orbit descriptions
There are three descriptions:
- full orbit: the Lorentz force;
- guiding-centre orbit: first-order guiding-centre equations;
- distribution evolution: a kinetic equation for $f$.
Monte Carlo codes connect the first two to the third. A test-particle Fokker–Planck equation can be solved by following markers with stochastic collision kicks (ASCOT5, NUBEAM). This is still a statement about a test population in a fixed background, not about the bulk plasma.
An orbit integrator alone is not a drift-kinetic plasma solver. SIMPLE is one example: it evolves no distribution.
2.5 Kinetic-MHD and hybrid models
Shared structure. The bulk plasma is fluid (MHD). A kinetic equation for selected populations supplies part of the force through a pressure tensor, a current, or an energy term. The family:
- Kruskal & Oberman, Phys. Fluids 1, 275 (1958): the collisionless kinetic energy principle;
- Antonsen & Lane, Phys. Fluids 23, 1205 (1980);
- Cheng, Phys. Rep. 211, 1 (1992): the kinetic-MHD review;
- Park et al., Phys. Fluids B 4, 2033 (1992): hybrid gyrokinetic-MHD.
Distinctions to keep:
- MHD plus a drift-kinetic response (DCON kinetic, MARS-K);
- MHD plus a gyrokinetic response (the hybrid gyrokinetic-MHD of Park et al. 1992);
- MHD plus kinetic energetic particles (M3D-K, MEGA, NIMROD kinetic);
- a fully kinetic or gyrokinetic plasma (CGYRO, GENE, GTC, ORB5).
Kinetic-MHD is a family, not one model. What varies inside it is the coupling (pressure or current), the population, and the orbit treatment (§8).
3. The GPEC suite, mode by mode
Sources.
- Upstream:
~/git/GPECat e68d7ac2 (2026-08-04). - VAFT adapter:
vaft/code/gpec/. Packaged namelists:vaft/data/gpec/*.in.
Main finding. DCON’s kinetic mode is not a separate kinetic solver:
- with
kin_flag=t, DCON calls PENTRC’s drift-kinetic operator at every surface and every bounce harmonic $\ell$; - it adds the complex result into the ideal Euler–Lagrange coefficient matrices (
dcon/fourfit.F:1062-1085, 1153-1158).
| mode | operation | bulk | fluid model | kinetic equation | kinetic population | coupling | FLR | collisions | regime | confidence |
|---|---|---|---|---|---|---|---|---|---|---|
DCON ideal (kin_flag=f) |
$n\neq0$ stability: Newcomb criterion on the Euler–Lagrange ODE, δW eigenvalues | fluid | linear ideal MHD energy principle | none | — | — | N/A | none | linear, static | verified |
DCON kinetic (kin_flag=t) |
same ODE with a complex, non-self-adjoint δW + δW_k; Im δW gives the torque | hybrid | ideal MHD | linear drift kinetics in a bounce/transit-harmonic (action-angle) decomposition (PENTRC operator) | one thermal main ion; electrons if electron_flag=t; Maxwellian $f_0$ by default (f0type also allows jkp, cgl); no energetic particles |
energy (δW_k matrices added to the EL coefficients), self-consistent | none (zero Larmor radius) | pentrc.in nutype: zero / small / Krook / harmonic |
linear, zero lab-frame frequency | verified (equation class); provisional (the name “drift-kinetic MHD”) |
| GPEC ideal | perturbed equilibrium under an external 3-D field | fluid | ideal MHD | none | — | — | N/A | none | linear, static | verified |
| GPEC kinetic | self-consistent kinetic perturbed equilibrium; dw_flag energy and torque profiles |
hybrid | ideal MHD | inherited from DCON’s matrices, nothing separate | inherited | inherited | none | inherited | linear, static | verified |
GPEC thresholds (singthresh_*) |
critical resonant field / island width per surface | reduced layer models | SLAYER: “linear drift MHD” slab; Callen: analytic cubic | none (kinetic profiles only) | — | — | unresolved | unresolved | linear layer | provisional |
| PENTRC on a GPEC ξ | NTV torque, non-ambipolar flux for a given displacement | kinetic closure on a fluid displacement, not self-consistent | (ideal or kinetic GPEC ξ is input) | linear drift kinetics, bounce-harmonic decomposition; reduced variants: large aspect ratio, CGL fluid limit | one species per run: main ion or electrons | torque from the anti-Hermitian part | none | zero / small / Krook / harmonic | linear, static | verified |
| RDCON + RMATCH | Δ′ matrix and matched resistive growth rates | fluid | outer: ideal MHD; inner: linear resistive MHD (GGJ) | none | — | — | N/A | scalar η per surface | linear eigenvalue | verified |
| STRIDE | ideal stability and free-boundary Δ′ | fluid | ideal MHD (outer region only; no η) | none | — | — | N/A | none | linear | verified |
MATCH (ideal_flag=t, as shipped) |
reconstruct DCON’s ideal eigenfunction | fluid | ideal MHD | none | — | — | N/A | none | linear | provisional |
3.1 DCON ideal
The governing model.
- Linear ideal MHD energy principle, the BFKK δW.
- Integrated as Newcomb’s Euler–Lagrange ODE in a Fourier poloidal basis.
- The ideal jump condition at rational surfaces.
References: Newcomb, Ann. Phys. 10, 232 (1960); Glasser, Phys. Plasmas 23, 072505 (2016).
Numerical and boundary-condition choices, not physics:
vac_flag: free or fixed boundary;psiedge,sas_flag,qhigh: edge truncation;delta_m*;con_flag: integrate through singular layers instead of applying the ideal jump. It changes eigenvalues and turns off GPECsingfld. VAFT’s packageddcon.insetscon_flag = t, sosingfldis off in VAFT runs by default.
Local diagnostics alongside:
- the Mercier criterion;
- high-$n$ ballooning: Connor, Hastie & Taylor, Proc. R. Soc. A 365, 1 (1979);
- the GGJ $D_I$, $D_R$, $H$ from
resist_eval, as diagnostics only.
3.2 DCON kinetic
The flags, from source:
| flag | effect | source |
|---|---|---|
kin_flag |
builds PENTRC kinetic matrices and adds them to the EL coefficients; singular surfaces then move off the rationals and are found as zeros of det F (ksing_find) |
dcon_mod.f:108; dcon.F:214-245; sing.f:1486 |
passing_flag, trapped_flag |
choose the pitch-angle domain, i.e. the PENTRC method prefix f/t/p. Upstream defaults F/T, so a default kinetic run is trapped-only. VAFT’s template sets both to t | fourfit.F:959-968 |
ion_flag, electron_flag |
add main-ion and/or electron δW_k; the contributions are summed | fourfit.F:1066-1085 |
dcon_kin_threads |
OpenMP thread count; numerical only | dcon.F:89-95 |
Kinetic physics (all from PENTRC).
- Linear δf about a Maxwellian $f_0$ by default, decomposed into bounce/transit harmonics $\ell$. The $\ell=0$ term is the bounce average; $\ell\neq0$ terms are resonances where $n(\omega_E+\omega_D)\sim\ell\omega_b$, so the operator is not restricted to $\omega\ll\omega_b$.
- The drive term contains $\omega_E+\omega_{n}+\omega_{T}(x-3/2)$.
- The denominator is $i(\ell\omega_b\sqrt{x}+n(\omega_E+\omega_D x))-\nu$ (
pentrc/energy.f90:374). The mode frequency does not appear: the response is at zero lab-frame frequency. - Resonances retained: bounce, transit, precession and $E\times B$.
- No gyro-average appears anywhere in
pentrc/, so FLR is zero. Zero orbit width is inferred from the flux-surface bounce averaging, not stated in the source.
The species model. One thermal ion, $Z$ and $m$ from pentrc.in. The collision frequencies and $\ln\Lambda$ are
computed internally from $n$ and $T$, and $Z_{\rm eff}$ from $n_i/n_e$ with one impurity.
Configuration split. DCON-kinetic physics is partly configured outside dcon.in: nl, nutype, f0type, zi,
mi and the kinetic file come from pentrc.in. The kinetic-file rotation column is $\omega_E$, not $\omega_\phi$
(pentrc/inputs.f90:162-167).
References (upstream-cited): Park, Phys. Plasmas 18, 110702 (2011), the kinetic energy principle; Logan, Park, Kim, Wang & Berkery, Phys. Plasmas 20, 122507 (2013); Park & Logan, Phys. Plasmas 24, 032505 (2017).
3.3 GPEC kinetic
Not a gpec.in switch. GPEC reads kin_flag and con_flag back from DCON’s euler.bin (gpec/idcon.f:62), so
its kinetic content is entirely inherited from DCON.
Thresholds (singthresh_*). They use kinetic profiles through initialize_pentrc(op_kin=T), but no kinetic
equation.
3.4 RDCON, STRIDE and RMATCH
No kinetic equation in either. Neither rdcon/ nor rmatch/ reads a kinetic file.
What VAFT’s inputs do. VAFT supplies $T_e$, $n_e$, $Z_{\rm eff}$ and $\ln\Lambda$ (RDCONOptions). These fill
only RMATCH’s per-surface eta (NRL Spitzer) and massden, through vaft/code/gpec/_solvers.py:385-457.
Classification. This is kinetic-profile-informed resistive parameters. It is not
kinetic_equation = drift_kinetic.
References: Glasser, Wang & Park, Phys. Plasmas 23, 112506 (2016); Glasser & Kolemen, Phys. Plasmas 25, 082502 (2018).
3.5 PENTRC
Classification:
- linear drift kinetics in a bounce/transit-harmonic decomposition;
- the general-aspect-ratio methods are
fgar,tgarandpgar(full = trapped + passing); - reduced variants:
rlarandclar(large aspect ratio), andfcgl, a CGL fluid limit; - one species per run;
- torque from the anti-Hermitian part.
Use with GPEC. It is a kinetic closure evaluated on a fluid displacement, not a self-consistent model. Inside DCON-kinetic, the same operator is self-consistent.
Factorization. PENTRC is best described by attributes: drift kinetic, bounce-harmonic, linear δf, closure on a given ξ. A single “neoclassical” label does not cover it. The older PENT code was not audited; VAFT drives PENTRC only.
References: Park, Boozer & Menard, Phys. Rev. Lett. 102, 065002 (2009); Logan et al. (2013).
4. GACODE
Sources. Upstream ~/git/gacode; VAFT vaft/code/gacode/.
| mode | operation | bulk | kinetic equation | population | distribution | FLR | collisions | domain | regime | confidence |
|---|---|---|---|---|---|---|---|---|---|---|
| NEO as VAFT runs it | neoclassical fluxes, bootstrap $j_\parallel$, poloidal flow | kinetic (all species) | drift kinetic, first order: steady $f_1$ driven by $\nabla F_M$ and $E_r$ | all species (≤6, VAFT’s guard); electrons kinetic | δf | none | full linearized Fokker–Planck (COLLISION_MODEL=4) | local; several radii are independent local solves | steady state | verified |
| NEO analytic companions (HS, NCLASS, Sauter) | closed-form neoclassical fluxes | reduced | none | — | N/A | N/A | model-specific | local | steady | verified (existence) |
| CGYRO linear ES/EM (VAFT default ES) | microstability: γ, ω, eigenfunction | kinetic | gyrokinetic | all species, gyrokinetic electrons | δf | full gyro-average | Sugama (4) by default | local flux tube | linear initial value | verified |
| CGYRO nonlinear | turbulent fluxes | kinetic | gyrokinetic, nonlinear | as above | δf | full | as above | local | nonlinear | verified |
| TGLF (single $k_y$ / QL with SAT 0–3) | linear eigenmodes; quasilinear fluxes | reduced | none solved: a gyro-Landau-fluid moment system derived from gyrokinetics | trapped and passing species | N/A | approximate (gyro-averaged moments) | reduced model | local | linear / quasilinear | verified (reduction) |
| TGLF-NN | quasilinear fluxes | reduced (learned surrogate) | none; inherits its parent TGLF variant | as parent | N/A | inherited | inherited | local | quasilinear | provisional |
NEO.
- Neoclassical drift kinetics here means solving for the steady first-order distribution of all species.
- That is a different operation from DCON-kinetic’s orbit-averaged response inside δW, though both are drift kinetic.
- References: Belli & Candy, Plasma Phys. Control. Fusion 50, 095010 (2008); 54, 015015 (2012).
CGYRO.
- References: Candy, Belli & Bravenec, J. Comput. Phys. 324, 73 (2016). Collisions: Sugama, Watanabe & Nunami, Phys. Plasmas 16, 112503 (2009).
- Its existing record,
vaft.code.gacode.cgyro.formalism(), maps onto the axes in §1 as below.
| CGYRO field | values today | broad axis (#1723) | gyrokinetic-specific (#1353) | implementation detail |
|---|---|---|---|---|
distribution_formulation |
delta_f |
yes | — | — |
spatial_domain |
local |
yes | the global-spectral variant | — |
numerical_representation |
continuum |
no | continuum vs PIC matters for GK comparisons | yes |
field_model |
es, em-aperp, em-aperp-bpar |
coarse: ES vs EM | the $A_\parallel$ / $\delta B_\parallel$ split | the integer N_FIELD |
regime |
linear, nonlinear |
yes | — | — |
topology_domain |
closed_flux_surface |
yes | — | — |
geometry_model |
miller |
no | Miller / MXH / s-α | partly |
species_model |
kinetic_electrons |
as kinetic population | adiabatic vs gyrokinetic electrons | — |
Not in the record, though they are physics: kinetic_equation = gyrokinetic (implicit), the collision model, and the
fact that VAFT pins $\gamma_E=\gamma_p=M=0$ (no rotation or shear).
TGLF.
- References: Staebler, Kinsey & Waltz, Phys. Plasmas 14, 055909 (2007), with Hammett & Perkins, Phys. Rev. Lett. 64, 3019 (1990) for the Landau-fluid closure.
- SAT1: Staebler, Candy, Howard & Holland, Phys. Plasmas 23, 062518 (2016). SAT2: Staebler et al., Nucl. Fusion 61, 116007 (2021). SAT3: Dudding et al., Nucl. Fusion 62, 096005 (2022).
TGLF-NN.
- Its physical meaning is that of the TGLF variant it was trained on.
- Its computational realization is a learned surrogate, which is a separate fact.
- In VAFT the variant is known only from the model name, and a SAT mismatch is reported but not refused
(
tglf/surrogate/inference.py:149-178).
5. Orbit and fast-ion codes
| mode | operation | bulk | equation | population | orbit | collisions | coupling | confidence |
|---|---|---|---|---|---|---|---|---|
ASCOT5 SIM_MODE=1 |
fast-ion orbits, distribution, losses | particle (test) | Fokker–Planck for the test species, by Monte Carlo | minority / test species | full orbit | test-particle Coulomb on a Maxwellian background | none (fixed fields and background) | verified (upstream docs) |
ASCOT5 SIM_MODE=2 (default) |
same | particle (test) | same | same | guiding centre (first-order transform) | guiding-centre operator | none | verified |
ASCOT5 SIM_MODE=3 |
same, wall loads | particle (test) | same | same | guiding centre, switching to full orbit near the wall | as above | none | verified |
| NUBEAM (standard FLR) | beam deposition, slowing down, heating, current drive, torque | particle (test) inside a transport code | Fokker–Planck for fast ions, by Monte Carlo | beam ions, fusion products | guiding centre + FLR position sampling | drag, energy diffusion, pitch scattering; charge exchange | sources and fast-ion pressure returned; no field feedback | verified (code) |
NUBEAM VEST case (nlbgflr=1) |
as above | as above | as above | as above | enhanced FLR (gyro-orbit deformed by $\nabla B$), meant for low-field STs | as above | as above | verified |
| SIMPLE | collisionless guiding-centre confinement / loss fraction | particle (test) | none: orbit integration | alphas / test particles | guiding centre, symplectic | none | none | provisional; no VAFT adapter |
ASCOT5. Option names come from a5py/ascot5io/options.py. SIM_MODE=4 (field-line tracing) is omitted: it
evolves no particles. References: Hirvijoki et al., Comput. Phys. Commun.
185, 1310 (2014) for ASCOT4; Varje et al., arXiv:1908.02482 (2019) for ASCOT5.
NUBEAM. References: Goldston et al., J. Comput. Phys. 43, 61 (1981); Pankin et al., Comput. Phys. Commun. 159, 157 (2004).
SIMPLE. Albert, Kasilov & Kernbichler, J. Comput. Phys. 403, 109065 (2020).
VAFT coverage. ASCOT5 appears in VAFT only as a diagram catalogue entry. SIMPLE does not appear at all.
6. What “kinetic” means in VAFT names
The word carries seven distinct meanings (categories A–G below) across VAFT’s public surface. Each name below is classified so that documentation can say which one it means. No name is changed by this audit.
| category | meaning | representative names | say instead |
|---|---|---|---|
| A. measurement/data | Thomson, CES/ion Doppler data, or slices that have them | “kinetic diagnostics” (Profiles.md), kinetic_overview_profiles, n_kinetic / supports_kinetic_efit (vest_upstream.py), kineticEfit/ sample directory |
profile diagnostics; slices with measured $T_i$ |
| B. profile container | $n$, $T$, ω on a radial grid | KineticProfiles, read_kin/write_kin, SyntheticKineticProfiles, build_kinetic_core_profiles, GPEC/PENTRC kinetic_file |
kinetic-profile set |
| C. kinetically constrained reconstruction | EFIT with a pressure constraint from profiles | vaft.code.efit.kinetic, run_kinetic_efit, stages kinetic_efit / electron_efit, lineage electron_kinetic, KINETIC_FAMILIES, equilibrium_family: kinetic |
kinetic-pressure-constrained EFIT (measured $T_i$, or assumed $T_i/T_e$) |
| D. profile-informed closure or coefficient | profiles set a closure or coefficient of a fluid calculation | chease_kinetic_iteration, closure="kinetic_pressure", RDCON’s $T_e$/$n_e$ → η |
kinetic-profile-pressure closure; profile-informed resistivity |
| E. hybrid fluid-kinetic model | a kinetic response inside a fluid model | kin_flag / “kinetic DCON”, NTV “kinetic response” |
kinetic-MHD (δW_k) DCON; drift-kinetic response |
| F. kinetic governing equation | the code solves a kinetic equation | NEO (“drift-kinetic solver”), gyrokinetics_local_from_cgyro, “kinetic electrons” (CGYRO) |
drift-kinetic neoclassical; gyrokinetic; gyrokinetic (non-adiabatic) electrons |
| G. derived from kinetic theory | a reduced or analytic model fitted to kinetic results | Sauter/Redl fits, TGLF, NTV formulas, Porcelli “kinetic effects” | drift-kinetic-derived fit; quasilinear gyro-Landau-fluid |
The names most likely to mislead:
kinetic_efitversusrun_kinetic_efit.- The function runs both the
electron_efitstage (Thomson + assumed $T_i/T_e$) and thekinetic_efitstage (measured $T_i$). - The stage name means “measured $T_i$” only.
- The function runs both the
- The lineage
electron_kinetic(vaft/validation/kinetic_state.py) is theelectron_efitstage under a second name. - “Kinetic state” names three unrelated things:
- the lane-K Thomson-vs-reconstruction slice table;
- a synthetic self-consistent equilibrium/profile state (
Profiles.md); - the NEO-ready local plasma state.
kinetic_pressuremeans five things:- measured thermal pressure in validation;
- EFIT constraint points;
- a CHEASE closure mode;
- a synthetic-profile pressure constraint;
- a plot alias.
kin_flagversus the.kinfile.kin_flag=tswitches DCON to kinetic-MHD.- A
.kinfile withkin_flag=fonly feeds profiles to PENTRC or the threshold models.
EFIT_KINETIC_FAMILIES(_summary.py) includes MSE and $j_\phi$, so there “kinetic” means “non-magnetic”.kinetic_energy*:kinetic_energy_from_beta_p_B_pa_V_pis the thermal stored energy;virial_kinetic_energyis bulk-flow energy.
Kinetic-profile input never implies a kinetic governing equation. The RDCON row of §3, the CHEASE iteration and the EFIT names all show the same pattern: a fluid model whose inputs or closures come from measured or assumed profiles.
7. Orderings and scales
Purpose of this section. It is a compact map from scales to the classifications above. The full reference for
characteristic scales and orderings is Characteristic scales and orderings (#1724). The ordering parameters themselves are #1627. The ordering contracts
each mode of §3–§5 and §12 consumes are vaft.validation.model_contracts.ADAPTER_MODES (#1823), drawn under the
contract map in Asymptotic orderings.
Frequencies. For thermal ions they are typically ordered as
\[\Omega_{ci} \gg \omega_{t,i},\ \omega_{b,i} \gg \omega_{D,i} \quad;\quad \tau_A^{-1} \gtrsim \omega_{t,i} \sim c_s/qR \gg \tau_E^{-1} \gg \tau_R^{-1}.\]Caveats:
- The first chain is for ions. For electrons in a low-field device it can fail. In VEST ($T_e\approx100$ eV, $qR\approx1.2$ m, $B\approx0.1$ T), $\omega_{t,e}\approx5\times10^6$ against $\Omega_{ci}\approx10^7$ rad/s.
- $\omega_E\ll\omega_{t,i}$ holds only for sub-sonic flow.
- The collision frequency $\nu$ is not in either chain, because it can sit anywhere. Its ratio to the bounce frequency, $\nu_*$, sets the neoclassical regime, and its ratio to $\omega$ separates collisional fluid closure from kinetic treatment.
- The second chain is the conventional tokamak hierarchy. VEST’s short pulse can compress it.
Lengths:
- $\rho_s$ and $\rho_i$ against gradient lengths $L_n$, $L_T$ and the minor radius $a$;
- $k_\perp\rho$;
- the connection length $qR$;
- the banana orbit width $\sim q\rho/\sqrt\epsilon$;
- the resistive layer width;
- the radial simulation domain.
| model family | what it removes | ordering that justifies it |
|---|---|---|
| ideal MHD | particle phase space; resistivity | $\rho/L\ll1$, $\omega\ll\Omega_i$, $S\gg1$, scales $\gg d_i$ |
| resistive MHD (layer) | phase space; keeps η only in the layer | as ideal MHD outside the layer |
| drift kinetics | the gyro-phase | $\omega/\Omega\ll1$, $\rho/L\ll1$, $k_\perp\rho\ll1$ |
| gyrokinetics | the gyro-phase, keeping $k_\perp\rho\sim1$ | $\omega/\Omega\sim\rho_$, $k_\parallel/k_\perp\sim\rho_$, $\delta f/F\sim\rho_*$ |
| bounce-harmonic drift kinetics (PENTRC, DCON-kinetic) | gyro-phase; bounce phase as a harmonic sum | $\omega/\Omega\ll1$, $\rho/L\ll1$; the $\ell=0$ term is the bounce average, and $\ell\neq0$ keeps the resonances at $n(\omega_E+\omega_D)\sim\ell\omega_b$ |
| guiding-centre orbit following | the gyro-phase for one particle | $\rho/L_B\ll1$ (fails for fast ions at low field, hence NUBEAM’s FLR options) |
Why the hierarchy is not a ladder.
- Ideal MHD averages over phase space completely; drift kinetics keeps phase space but drops the gyro-phase.
- Gyrokinetics keeps phase space at finite $k_\perp\rho$, but orders $\omega/\Omega$ and the fluctuation amplitude.
- Resistive MHD closes a thin layer with a resistivity. Collisional electromagnetic gyrokinetics resolves such layers kinetically, under a different ordering. Neither model reduces to the other.
- A guiding-centre orbit integrator follows a particle and evolves no distribution.
8. Unresolved
Each item says what evidence is missing.
DCON and GPEC:
- Whether DCON-kinetic should be called “drift-kinetic MHD”. The operator is drift kinetic and bounce averaged at zero lab-frame frequency. The exact ordering statement of Park (2011) and Park & Logan (2017) has not been checked against it.
- The Kruskal–Oberman correspondence. PENTRC implements a CGL limit (
f0type="cgl"); no KO-labelled limit exists in the source. - How the fluid compressional term and δW_k are partitioned (double counting). No adiabatic-γ term was found in DCON’s matrix construction.
- Finite orbit width in PENTRC: inferred absent, not stated.
- The “harmonic” collision model: an energy- and ℓ-dependent Krook model; its derivation reference was not found.
- SLAYER’s physics: only “linear drift MHD” in its README. Callen’s threshold rests on an internal report (UW-CPTC 16-4, 2016).
GACODE:
- The CGYRO collision-operator class, and whether NEO’s and CGYRO’s operators belong to one generic category. NEO’s “4” and CGYRO’s “4” are different operators.
- The FLR content of TGLF’s gyro-Landau-fluid moments.
- The training provenance of the TGLF-NN models VAFT resolves.
Taxonomy design:
- NUBEAM’s guiding centre + FLR sampling (and
nlbgflr) does not fit a guiding-centre / full-orbit binary. - Whether full orbit belongs under the kinetic equation or the orbit representation. This audit puts it under orbit representation (§1); Phase B must confirm.
- Pressure versus current coupling. MEGA’s coupling scheme, and MARS-K’s FLR and collision content, are unconfirmed from source.
- How kinetic reduced MHD (KRMHD) terminology should be represented.
External codes: GTC-X has no identified primary reference.
9. Stress test against external codes
These rows check that the axes are not overfitted to VAFT’s backends. All are provisional: from literature, not source.
| code | bulk | fluid model | kinetic equation | population | coupling | domain | reference |
|---|---|---|---|---|---|---|---|
| MARS-F | fluid | linear resistive MHD + flow, wall | none | — | — | whole volume + vacuum | Liu et al., Phys. Plasmas 7, 3681 (2000) |
| MARS-K | hybrid | linear MHD | bounce/precession-resonant drift kinetics, perturbative or self-consistent | thermal + energetic | pressure ($p_\parallel$, $p_\perp$) | whole volume | Liu, Chu, Gimblett & Hastie, Phys. Plasmas 15, 112503 (2008) |
| GENE (local / global) | kinetic | — | gyrokinetic | all | — | flux tube / radially global | Jenko et al., Phys. Plasmas 7, 1904 (2000); Görler et al., J. Comput. Phys. 230, 7053 (2011) |
| GENE-X | kinetic | — | gyrokinetic, full-f, EM, across the separatrix | all | — | whole volume incl. SOL | Michels et al., Comput. Phys. Commun. 264, 107986 (2021) |
| GTC | kinetic (PIC) | — | gyrokinetic ions and energetic particles; fluid-kinetic hybrid electrons in EM runs | all | — | global | Lin et al., Science 281, 1835 (1998) (electrostatic); Lin & Chen, Phys. Plasmas 8, 1447 (2001) (hybrid electrons) |
| ORB5 | kinetic (PIC) | — | gyrokinetic, δf with control variates | all | — | global | Jolliet et al., Comput. Phys. Commun. 177, 409 (2007); Lanti et al., Comput. Phys. Commun. 251, 107072 (2020) |
| M3D-K | hybrid | nonlinear resistive MHD | drift-/gyro-kinetic energetic particles (PIC) | energetic particles | pressure | global | Fu et al., Phys. Plasmas 13, 052517 (2006) |
| MEGA | hybrid | nonlinear MHD | guiding-centre energetic particles | energetic particles | current (unresolved) | global | Todo & Sato, Phys. Plasmas 5, 1321 (1998) |
| NIMROD kinetic | hybrid | extended (two-fluid) MHD | drift-kinetic δf PIC | energetic particles | pressure | global | Kim, Sovinec & Parker, Comput. Phys. Commun. 164, 448 (2004) |
Fit. Every row is expressible with the §1 axes, without a fidelity score and without inventing values: an absent axis is “N/A”.
Strain. The axes are strained in three places, all already listed in §8:
- the coupling type of hybrid codes;
- the orbit-representation question;
- NUBEAM’s guiding centre + FLR sampling, which fits neither guiding centre nor full orbit.
10. Recommended minimal vocabulary for Phase B (#1727)
Proposed, not implemented.
Required fields:
scientific_operation;bulk_description, one offluid/hybrid/kinetic/particle/reduced.
Conditional fields, each None when not applicable:
fluid_model:ideal_mhd/resistive_mhd/extended_mhd;kinetic_equation:drift_kinetic/gyrokinetic/fokker_planck_test_particle;kinetic_population;kinetic_coupling:energy/pressure/current/closure(on a given displacement) /sources.
Independent axes, carried over from CGYRO’s record where they exist:
distribution_formulation;orbit_representation:full_orbit/guiding_centre/bounce_averaged;spatial_domain;topology_domain;regime;field_model, coarse: ES/EM.
Not in the common record:
- input provenance: kinetic profiles measured, fitted or assumed;
- collision operators, saturation rules, geometry models, the integer encodings;
- confidence.
Input provenance stays with the inputs (§6). The rest stays solver-specific. Confidence describes our knowledge, not the model, so it stays separate.
Distinguish unknown from not applicable. None means not applicable; an explicit "unknown" marks a legacy mode
whose physics is not documented.
Backend gaps this audit found, for Phase C:
- GPEC (#1734), resolved. Every GPEC-suite run now records its formalism from the prepared
dcon.in/pentrc.in/gpec.in(see “GPEC suite” in §11), so a kinetic run is distinguishable from an ideal one. - GACODE (#1735), resolved.
- CGYRO reads
AE_FLAG,EQUILIBRIUM_MODEL,GLOBAL_FLAG, the collision model and the rotation inputs from the written input. - NEO records its geometry the way NEO reads it, so
equilibrium_model=0withprofile_model=1is recorded as s-α (see “GACODE suite” in §11).
- CGYRO reads
11. The implemented record (#1727)
Phase B encodes the vocabulary of §10 as vaft.code.formalism.PlasmaFormalism. It is an immutable record with
controlled values and is not a model class:
from vaft.code.gacode import cgyro
cgyro.plasma_formalism(config).as_dict() # versioned, JSON-ready
What the record enforces:
Nonemeans not applicable and"unknown"means undocumented. The two required fields can be neither.- Only generically impossible combinations are refused:
- fluid: a kinetic equation, or no fluid model;
- kinetic: a fluid model, no kinetic equation, or the test-species
fokker_planckequation; - hybrid: missing a fluid model, a kinetic equation or a coupling;
- particle: a fluid model, an equation other than
fokker_planck, or no orbit representation; - reduced: a kinetic equation or a fluid model, since its parent theory goes in
derived_from; - any bulk description:
derived_fromoutside a reduced model;- a coupling outside hybrid and particle formulations;
- a drift-kinetic or gyrokinetic equation with full orbits (both remove the gyro-phase);
- a distribution formulation without a kinetic equation;
- an orbit representation or a population where neither has meaning.
- There is no field for “kinetic profiles were used”: that is a property of the inputs.
- Solver-specific physics goes in
extensions. These are JSON values only, copied and frozen on construction, so the record pickles, deep-copies and round-trips throughto_json()unchanged. - Mixed modes. A mode that switches representation mid-run records its dominant representation, with the
switch in
extensions. Examples: ASCOT5SIM_MODE=3, guiding centre then full orbit near the wall; NUBEAM’s guiding centre plus FLR sampling.
Where the implemented names differ from the §10 proposal:
fokker_planck(proposed asfokker_planck_test_particle) andguiding_center(proposed asguiding_centre).- New values:
gyrocenter(the gyrokinetic orbit representation);mhd_displacementandprescribedfield models;time_dependent; and theequilibriumoperation. reduced_mhdis not a fluid model: it is an ordering on one (§2.1).numerical_representation(continuum vs PIC) is deliberately not a common axis. It changes no physics, so it stays inextensions.SCHEMA_VERSIONchanges with any field or vocabulary change, andfrom_dictreads only its own version.
IMAS. The record is not mapped to an IMAS field. No standard location for it has been identified (#1727 §12), so
VAFT run provenance stays authoritative. CGYRO runs store the record as provenance["plasma_formalism"], beside
the #1353 provenance["formalism"] that the gyrokinetics_local mapping already writes.
| theory concept (§2) | field | example backend mode |
|---|---|---|
| ideal / resistive MHD | bulk_description="fluid", fluid_model |
DCON ideal; RDCON + RMATCH |
| MHD + drift-kinetic response | "hybrid", kinetic_equation="drift_kinetic", kinetic_coupling="energy", orbit_representation="bounce_averaged" |
DCON kin_flag=t |
| kinetic closure on a given displacement | "hybrid", kinetic_coupling="closure" |
PENTRC on a GPEC ξ |
| standalone drift kinetics | "kinetic", "drift_kinetic" |
NEO |
| local δf gyrokinetics | "kinetic", "gyrokinetic", spatial_domain="local", distribution_formulation="delta_f" |
CGYRO |
| gyrokinetic-derived reduced model | "reduced", derived_from="gyrokinetic", regime="quasilinear" |
TGLF, TGLF-NN |
| test particles | "particle", kinetic_equation="fokker_planck" or None, orbit_representation |
ASCOT5, NUBEAM; SIMPLE (no equation) |
CGYRO is the reference integration.
cgyro.plasma_formalism(config)builds the shared record.- The existing #1353 record,
cgyro.formalism(), is now read from it, with unchanged keys and values. The two cannot disagree. - CGYRO’s own detail stays in
extensions: theem-aperp/em-aperp-bparsplit, the continuum representation, Miller geometry and gyrokinetic electrons.
Deferred to Phase C.
- GPEC suite (#1734): done – see below.
- GACODE (#1735): done – see below.
- NUBEAM and ASCOT5: no Phase C issue yet.
GACODE suite (#1735). Every NEO, TGLF and CGYRO run, and every TGLF-NN prediction, stores its record as
provenance["plasma_formalism"]. The record is derived from the KEY=VALUE input the run was written with
(vaft.code.gacode._formalism), with upstream defaults for absent keys. A shared input format does not imply shared
governing physics:
GACODE suite
|
+-- NEO kinetic / drift_kinetic, neoclassical_transport, steady_state
| (SIM_MODEL 0/3/5 analytic theory, 4 neural network: reduced, derived_from drift_kinetic)
+-- TGLF reduced, derived_from gyrokinetic: gyro-Landau-fluid quasilinear transport
| (microstability / linear with USE_TRANSPORT_MODEL=F)
+-- TGLF-NN the TGLF variant it was trained on, realized as a learned surrogate (extensions.realization)
+-- CGYRO kinetic / gyrokinetic, local delta-f continuum (microstability or turbulent_transport)
- NEO.
AE_FLAG=1removes the electrons from the kinetic population.- The analytic models carry no kinetic population, because they solve for no distribution.
EQUILIBRIUM_MODEL(s-α / large aspect ratio / Miller) applies only withPROFILE_MODEL=1. WithPROFILE_MODEL=2, VAFT’s default, the shape isinput_gacode_shape.- The collision, rotation, Spitzer and 3-D switches stay in
extensions.
- TGLF.
- The saturation rule is recorded with the linear controls TGLF’s start-up presets impose with it (
XNU_MODEL,WDIA_TRAPPED,UNITS,NMODES), as the effective values, together with the field switches, the geometry and the electron model. vaft.code.mitim.compare.effective_tglf_controls, used to compare MITIM’s inputs with VAFT’s, keeps its own implementation. A test pins that the two agree on every canonical input.
- The saturation rule is recorded with the linear controls TGLF’s start-up presets impose with it (
- TGLF-NN.
- The physical fields are those of the TGLF variant, read from the model identity (SAT rule, field model), never
from the request;
unknownwhere the model does not say. - The SAT rule implies
XNU_MODELandWDIA_TRAPPED. The variant’sUNITSandNMODESare recorded asunknown. - The realization is
extensions.realization="learned_surrogate",surrogate_of="tglf". No kinetic equation is “neural network”.
- The physical fields are those of the TGLF variant, read from the model identity (SAT rule, field model), never
from the request;
- CGYRO.
plasma_formalism(config, parameters=...)reads the field model (N_FIELD), the regime (NONLINEAR_FLAG), the electron model, the geometry (EQUILIBRIUM_MODEL1 s-α, 2 MXH, recorded as VAFT’s historicalmiller),GLOBAL_FLAG(1 givesspatial_domain="unknown", never a bare global), the collision model and the rotation. The rotation is"none"whenGAMMA_E,GAMMA_PandMACHare all zero, andunknownwithPROFILE_MODEL=2, which takes them frominput.gacode.- The #1353
formalism()is still derived from this record.
- Not covered. The classical (Braginskii) result in
vaft.process.transport_statehas no record yet: the vocabulary has no operation for classical collisional transport, and adding one is aSCHEMA_VERSIONchange for #1727, not part of this phase.
GPEC suite (#1734). vaft.code.gpec resolves a record for every DCON, RDCON, STRIDE, ideal-GPEC and PENTRC run
from the namelists the cell was prepared with (upstream defaults where a key is absent), stores it on
GPECModuleRun.plasma_formalism (the versioned as_dict(), so run manifests carry it) and inside each mhd_linear
fragment as <plasma_formalism>, read back by extract_dcon_stability / extract_rdcon_stability. The physics
map – a classification, not the software dependency graph:
GPEC software suite
|
+-- DCON kin_flag=f ideal_stability fluid / ideal_mhd static
| kin_flag=t ideal_stability hybrid / drift_kinetic, coupling energy, bounce_averaged, delta_f
| populations from ion_flag / electron_flag (never "all")
+-- RDCON resistive_stability fluid / resistive_mhd when RMATCH solved the inner layer
| (match_flag writes delta.out), else ideal_mhd (outer region);
| an RPEC run (globalsol.bin) is perturbed_equilibrium; Te/ne ->
| Spitzer eta stays an extension, never a kinetic equation
+-- STRIDE resistive_stability fluid / ideal_mhd (outer-region Delta-prime, no eta)
+-- GPEC perturbed_equilibrium fluid or hybrid, inherited from the DCON run it reads
| (singthresh_* layer models stay auxiliary, in extensions)
`-- PENTRC toroidal_torque hybrid / drift_kinetic, coupling closure on the GPEC xi,
one species per run; methods, nutype, f0type in extensions
A run whose governing namelist is absent, or whose physics flag cannot be read, gets no record rather than
the upstream defaults. MATCH and RMATCH get no record of their own: they are numerical stages of the DCON and RDCON calculations they
complete, recorded in those runs’ extensions. No named kinetic limit (Kruskal-Oberman, …) is recorded from
kin_flag alone.
12. Equilibrium codes
Added with #1823, so that every adapter whose results feed the ordering contracts has a classified mode.
| mode | operation | bulk | fluid model | topology | regime | ordering contract | confidence |
|---|---|---|---|---|---|---|---|
| EFIT reconstruction (magnetic, kinetic) | Grad–Shafranov fit to measurements | fluid | ideal MHD (static force balance) | across the separatrix | static | equilibrium sequence | verified (equation class) |
| CHEASE fixed boundary | Grad–Shafranov solve for given $p’$, $FF’$ or $j$ | fluid | ideal MHD (static force balance) | closed flux surfaces | static | equilibrium sequence | verified (equation class) |
| TokaMaker, TES free boundary | Grad–Shafranov with coils and conductors | fluid | ideal MHD (static force balance) | across the separatrix | static | equilibrium sequence | verified (equation class) |
| NICE reconstruction | Grad–Shafranov fit to measurements | fluid | ideal MHD (static force balance) | across the separatrix | static | equilibrium sequence | provisional (experimental adapter) |
Notes:
- An equilibrium solves $\mathbf j\times\mathbf B = \nabla p$ with a scalar pressure and no flow. Its ordering is that force balance is re-established faster than the state moves, $\tau_{evol}/\tau_A \gg 1$, with subsonic and sub-Alfvénic flow. It is not the ideal-MHD stability contract: an equilibrium makes no claim about $S$, $k\,d_i$ or $k_\perp\rho_i$, which concern perturbations.
- A kinetic-profile constraint (§6 category C) does not change this classification.
- A time series of reconstructions is a sequence of equilibria, not a time-dependent MHD calculation.