Validation
Every public number in GKX has one row in the evidence ledger,
tools/evidence_ledger.toml; the coverage manifest lists every source
module. Coverage is a guardrail: a test counts when it protects an equation, a
numerical method, a diagnostic convention, an artifact contract or an autodiff
guarantee. A row’s status is passing, provisional, open,
failing or superseded; a provisional row states what is
unresolved. Benchmark figures and cross-code comparisons follow the matrix.
Evidence ledger
tools/evidence_ledger.toml has one [[row]] per public number or claim,
with id, claim, observable, artifact, generator,
reference, reference_rank (1 analytic; 2 published; 3 reference-code
golden; 4 open dataset; 5 self-run), tier (0 on push under 60 s; 1 on push,
bitwise; 2 nightly physics; 3 campaign or GPU) and status. A claim cites the
highest-ranked reference available; a self-run reference is rank 5 and never
described as published. tests/release/test_release_gates.py enforces:
required keys and valid rank, tier and status; artifacts and generators exist;
a
provisionalrow hasnotessaying what is unresolved;a rank-3 row pins its reference file with
reference_sha256, and linked-boundary GX references record their end-damping clamp state;the README parity table and the ledger list the same cases, and each README percentage recomputes from its artifact as
100 max|gkx - ref| / max|ref|;every linear row declares its velocity-space regularization, and a collisionless row with no Laguerre-space sink reports its velocity limit.
Claim scope
A passing test or a covered line does not promote a claim: the artifact must
record the observable, reference, tolerance and accepted claim level.
Features and Claim Scope is the human-readable claim ledger and stays in step with
benchmarks/references/gkx_1_7_release_contract.json. An example that runs is
a release claim only when labeled release-gated and tied to its artifact.
Coverage manifest
tools/validation_coverage_manifest.toml gives each module a source path,
owning lane, reference anchors, physics and numerics contracts, fast tests,
artifacts and next tests (ownership rules in Design and Code Map).
scripts/checks/check_validation_coverage_manifest.py checks structure and
paths; with --coverage-xml ... --enforce-package-coverage it fails below the
95% package target, and gate-index writes
docs/_static/validation_gate_index.json. Testing gives the current
result.
Verification matrix
The ledger table below is generated from the ledger, and the release gates fail when they disagree. The last part lists lanes that have artifacts but no ledger row; they are not public claims.
Ledger tools/evidence_ledger.toml, schema 1, updated 2026-10-07: 21 rows, 10 provisional, 1 open, 10 passing.
Ledger rows
Measured for the linear parity rows is 100 max|gkx - ref| / max|ref| over the tracked scan, recomputed from the artifact. Reference ranks: 1 analytic; 2 published; 3 reference-code golden; 4 open dataset; 5 self-run.
ID |
Claim |
Measured |
Reference (rank) |
Status |
Artifact |
|---|---|---|---|---|---|
|
README linear parity table, KAW |
gamma 0.0004%, omega 0.051% |
analytic kinetic-Alfven-wave dispersion; GX benchmarks/linear/KAW golden retained as a cross-check (rank 1) |
passing |
|
|
README linear parity table, ETG |
gamma 0.040%, omega 0.074% |
GX ETG comparison scan generated by this campaign (rank 5) |
passing |
|
|
README linear parity table, W7-X |
gamma 0.265%, omega 0.296% |
GX benchmarks/linear/ITG_w7x, run by this campaign; upstream ships the deck and eik but no *_correct.out.nc (rank 5) |
passing |
|
|
README linear parity table, HSX |
gamma 0.577%, omega 0.273% |
GX output supplied through the unrecorded HSX_IMPORTED_ARGS environment variable (rank 5) |
provisional |
|
|
README linear parity table, Cyclone Miller |
gamma 5.51%, omega 1.25% |
GX benchmarks/linear/ITG_cyclone/itg_miller_adiabatic_electrons_correct.out.nc (rank 3) |
provisional |
|
|
README linear parity table, Cyclone ITG |
gamma 6.83%, omega 1.59% |
GX benchmarks/linear/ITG_cyclone/itg_salpha_adiabatic_electrons_correct.out.nc (rank 3) |
provisional |
|
|
README linear parity table, KBM |
gamma 20.0%, omega 11.1% |
GX benchmarks/linear/KBM/kbm_miller_correct.out.nc (rank 3) |
provisional |
|
|
Landau damping against the exact roots of 1 + T_i/T_e + zeta Z(zeta) = 0 |
relative error of the extrapolated GKX root against the exact root |
analytic plasma dispersion function roots (rank 1) |
passing |
|
|
collision operator coefficients, invariants and projections in an eight-moment basis |
conservation, self-adjointness and published-coefficient residuals |
Frei, Ernst & Ricci (2022) Appendix C closed forms (rank 2) |
passing |
|
|
checkpointed nonlinear window derivative against centered finite differences, and its memory |
AD/FD relative agreement versus window length; measured temporary state |
centered finite differences on the same detached state and discrete map (rank 1) |
passing |
|
|
README performance figure: cold wall time and peak memory across tracked cases |
cold wall time and peak resident set size per case and backend |
self-measured on named hardware; not a cross-code speed claim (rank 5) |
passing |
|
|
the stopping policy replayed on three tracked runs, each stopped by a different gate |
stop time as a fraction of t_max, and the binding gate |
replay of tracked runs under the shipped policy (rank 5) |
provisional |
|
|
QA shape optimization through turbulence: initial and candidate equilibria, and matched heat-flux traces |
heat-flux reduction across nominal pairs with its conditional interval |
matched paired GKX runs; no external reference (rank 5) |
provisional |
|
|
initial and candidate QA boundaries and Boozer contours |
boundary shape, aspect ratio, mean iota and QA residual |
VMEX equilibria solved for this campaign (rank 5) |
passing |
|
|
README Analytic benchmarks: zonal residual against Xiao-Catto within 2.4% on circular cases |
fitted phi_inf / Xiao-Catto closed form |
Rosenbluth & Hinton PRL 80 724 (1998); Xiao & Catto PoP 13 082307 (2006) (rank 1) |
passing |
|
|
README Analytic benchmarks: GAM frequency within 3.5% of the Sugama-Watanabe root |
fitted omega_G and gamma_G / root of SW Eq. (2.7) at the run’s k_x |
Sugama & Watanabe JPP 72 825 (2006) (rank 1) |
provisional |
|
|
README Analytic benchmarks: Cyclone KBM onset 1.04% against GENE 1.14% |
zero of the linear gamma(beta) fit through the three lowest unstable betas, ky 0.2 |
Pueschel, Kammerer & Jenko PoP 15 102310 (2008) (rank 2) |
provisional |
|
|
README Analytic benchmarks: strongly driven KBM omega_r / (omega_*pi/2) = 1.06-1.10 (s-alpha) |
omega / (ky (fprim + tprim)/2) at beta 1.5%, R/L_T 35 and 15 |
Tang, Connor & Hastie NF 20 1439 (1980); Aleynikova & Zocco PoP 24 092106 (2017) (rank 1) |
provisional |
|
|
Cyclone ITG adiabatic, s-alpha and Miller: certified GKX eigenpairs against the clamp-repaired GX goldens and converged GS2/gyaradax |
relative gamma difference per ky, GKX Nl16/Nm48 certified Krylov eigenpair vs GX rerun with the dampEnds_linked grid-stride fix (s-alpha ky .15/.20/.30/.40, Miller .15/.30/.40/.55) and vs GS2 r3/r4 (Miller .15/.30/.40/.55, s-alpha .30) and gyaradax g2 (s-alpha .30) |
GX 3865a537 + dampEnds_linked grid-stride loop (self-run, sha256 96a53403…); GS2 8.2.1; gyaradax 8d9dc2d2 (rank 5) |
passing |
|
|
Cyclone Miller with kinetic electrons (m_e/m_i 2.7e-4, beta 1e-5, A_par), linear: GKX certified eigenpairs against repaired GX and GS2 |
relative gamma and omega difference at ky .30 and .50, GKX Nl16/Nm48 with damp_ends_rate 160.6 (GX’s 0.1/dt at its settled dt 6.228e-4) |
GX 3865a537 + dampEnds_linked grid-stride loop (self-run, t = 40); GS2 8.2.1 rung e3 (ntheta 48, nperiod 3, negrid 16, ngauss 8) (rank 5) |
provisional |
|
|
Collisionless TEM, Dannert & Jenko PoP 12 072309 (2005) nominal case, linear: GKX against GS2 at matched physics |
relative gamma and omega difference at ky rho_s 0.3 along a GKX (Nl, Nm) ladder with the banded eigensolver; GKX (8, 32) scan ky rho_s 0.2-0.6 against GS2; end-damping rate and parallel-domain scans |
GS2 8.2.1 rungs t1 (ntheta 32, nperiod 2, negrid 12, ngauss 6) and t2 (ntheta 48, nperiod 3, negrid 16, ngauss 8); deck tools/comparison/fixtures/parity/tem_dannert_jenko_2005.toml (rank 5) |
open |
|
|
Miller CBC kinetic ballooning, ky 0.3, beta 0.005-0.020, A_par, linear: GKX against GS2 along an |
relative gamma and omega difference at four beta, GKX (16, 48) nperiod 2 and 3 against GS2 (negrid 16, ngauss 8) at matched |
GS2 8.2.1, ntheta 32-128, nperiod 2-4, bishop 4, betaprim 0; GX 3865a537 + dampEnds_linked grid-stride loop self-run at ntheta 32 and 64 (rank 5) |
provisional |
|
|
W7-X standard configuration ITG, adiabatic electrons, s = 0.64, 6 poloidal turns, linear: GKX against repaired GX |
relative gamma and omega difference over ky 0.8-2.4 at Nl 8, Nm 16 with GX’s damp_ends rate 0.1/dt = 17 |
GX 3865a537 + dampEnds_linked grid-stride loop, deck benchmarks/linear/ITG_w7x, self-run to t = 200 (rank 5) |
provisional |
|
|
HSX QHS vacuum ITG, adiabatic electrons, s = 0.64, 4 poloidal turns, linear: GKX against repaired GX |
relative gamma and omega difference over ky 0.3-1.5 at Nl 8, Nm 16 with GX’s damp_ends rate 0.1/dt = 9.9 |
GX 3865a537 + dampEnds_linked grid-stride loop, W7-X deck with the HSX QHS vacuum VMEC (ns 201) and npol 4, self-run to t = 200 (rank 5) |
provisional |
|
Row notes
L-lin-hsx: the tube is the Nuhrenberg-Zille 1988 QHS equilibrium (regenerable fromexamples/vmec/input.NuhrenbergZille_1988_QHS), not literally HSX. Provisional until theHSX_IMPORTED_ARGSvalue that carries the GX reference is recorded; the same gap applies to W7-X.L-lin-cyclone-miller,L-lin-cyclone-salpha: the reference applies no end damping to Hermite m >= 42 of 48, so the 5.51%/1.25% and 6.83%/1.59% disagreements are not attributable to GKX until the reference is regenerated.L-lin-kbm: largest disagreement (20.0%/11.1%); the reference omits end damping on its top Hermite moments and delta B_parallel.F-nonlinear-autodiff: 1e-11 at 512 steps and 2.7e-9 at 1024, degrading by 2048 as trajectories separate; this bounds the useful gradient horizon.F-qa-transport: historical traces predate the periodic hypercollision correction. The 12.26% reduction is not statistically resolved (4 of 48 nominal traces fail the drift test).A-gam: damping is off by 11-25%, gated at 30%.A-kbm-pkj: 8% below GENE, gated at 10%.A-kbm-strong-drive: s-alpha sets omega_kappa = omega_gradB, so this is not AZ’s equation; gated at 12%.X-cyclone-repaired-gx(passing): GKX against repaired GX is <= 0.30% at 7 of 8 points and +1.45% at Miller ky .15; against GS2 <= 0.3% at Miller .30/.40, +1.0% at s-alpha .30, +2.4% at Miller .15. The repair moves GX’s adiabatic goldens by 0.06% above ky 0.1.X-ke-miller: ky .30 GKX 0.23128/0.23603 against GX 0.23209/0.23651 (-0.35%/-0.20%) and GS2 (-1.5%); ky .50 +0.27%/-0.16% against GX. Only two ky are measured.X-tem-dj2005(open): GS2 converged at gamma 0.8694, omega -1.2723 at ky rho_s 0.3. GKX banded eigenpairs (Nl 8, nperiod 2, damp_ends_rate 100) rise with Nm: 16 0.490, 24 0.611, 32 0.673, 48 0.744, 64 0.773, 96 0.825 (-5.1%); omega +1.0% at Nm 96. At Nm 24, Nl = 4, 6, 8, 10, 12 gives 0.480, 0.623, 0.611, 0.513, 0.552: not monotone. At (8, 24) gamma is 0.871, 0.668, 0.611 and 0.607 at damp_ends_rate 5, 20, 100 and 400; at (4, 16) the spread between rates 5 and 100 shrinks from 0.29 (nperiod 2) to 0.07 (nperiod 5). The absorber and parallel domain are part of the answer until Nm converges. A Laguerre-only sink (nu_hyper_l 0.03, Nm 24) makes the Nl sequence monotone (0.493, 0.507, 0.554, 0.567 for Nl 4-10) at a lower gamma; not tested above Nm 24.X-kbm-beta-gs2(provisional): the 6-20% gaps against GS2 are the parallel grid, not the electromagnetic model. The reference deck’sntheta32 does not resolve the Miller KBM in either code, and the two err in opposite directions. At beta 0.015, nperiod 2, GKX gamma/omega is 0.3128/1.0775, 0.2999/1.0884, 0.2953/1.0923 and 0.2920/1.0954 atntheta32, 48, 64, 96 (error falling asntheta-2, limit 0.2895/1.097); GS2 is 0.2619/1.0336, 0.2733/1.0495, 0.2795/1.0569, 0.2860/1.0639, 0.2894/1.0672 at 32, 48, 64, 96, 128 (error falling as 1/ntheta, the first-order upwinding of its theta derivative; limit 0.299/1.078). Atntheta32 GKX is +19%/+4% against GS2 at nperiod 2, 3 and 4 (nperiod 3: 0.3384/1.0155 against 0.2856/0.9803). At the limits it is -3.2%/+1.8% (nperiod 2) and +1.5%/+0.8% (nperiod 3: GKX 0.3154/1.031 from 32, 48, 64, GS2 0.3108/1.023 from 48, 64, 96). Beta 0.02, nperiod 2: GKX 0.5941/0.8637 and 0.5810/0.8707 atntheta32 and 64, limits 0.5766/0.873 against GS2 0.5763/0.864 (+0.05%/+1.0%). GX at ntheta 32 and 64 gives 0.3134/1.0759 and 0.2942/1.0939, within 0.4% of GKX.Nm96 moves the beta 0.015 rate by -0.5%/+0.4%. With B_par added at beta 0.015 (nperiod 2) GKX is 0.4055/1.0098 and 0.3876/1.0214 atntheta32 and 64 against GS2 0.3577/0.9689, 0.3714/0.9908, 0.3768/0.9974 at 32, 64, 96: +13%/+4% at 32 and -1.5%/+1.5% at the limits (0.3816/1.025 against 0.3875/1.011). Beta 0.01 (ntheta64, t = 70, two near-degenerate branches): 0.1612/0.3165 against GS2 0.1693/0.3029 (-4.8%/+4.5%). Beta 0.005: 0.2087/0.2703 atntheta64 against GS2 0.2144/0.2570 (-2.7%/+5.2%), converged innthetafor both; the omega excess is the electron Hermite ladder, as at beta 1e-5 (omega 0.2350 atNm48, 0.2315 at 96, GS2 about 0.225): at beta 0.005Nm96 gives 0.2113/0.2653. With m_e/m_i 0.04 the Hermite ladder is not the limit and GKX is within 1.1%/0.6% of GS2 at beta 0.015 (0.6795/0.5602 against 0.6718/0.5571) and 0.02%/1.9% at beta 1e-5, bothntheta32, nperiod 2. The earlier garbage rates at beta 0.01 (1.32/2.21, read as an explicit-step instability) were the log-linear fallback of the growth fit choosing a one-time-unit transient window; the trace itself settles at 0.16/0.32.X-w7x-itg-gx,X-hsx-itg-gx(provisional): GKX eigenpairs match repaired GX to 3e-4 at W7-X ky 1.1-2.4 and HSX ky 0.5-1.5. On W7-X at ky 0.9-1.0 the eigensolver returns the fastest of near-degenerate bulk modes (ky 1.0: omega 0.2645 against GX’s 0.1489, gamma within 2e-4); GKX’s time route reproduces GX at ky 1.0. stella, run on the same field line, does not reproduce either code’s growth-rate curve and is not used.
Linear rows declare their velocity-space regularization: KAW and ETG use
none; W7-X, HSX, Cyclone Miller and KBM use hermite-kz-hypercollision
with no Laguerre ladder run (velocity limit unmeasured); Cyclone s-alpha is
truncation-limited at ky .55 (Nm 96, certified gamma .03301/.02485/.01835 at Nl
24/32/48, with a Laguerre pile-up that moves to 0.79-0.85 of each new Nl).
Cross-code linear parity matrix
tools/gx_parity_matrix_manifest.toml drives six linear cases against GX with
one convention. Each imports the GX run’s geometry, scans \(k_y\) at the GX
deck’s \((N_l, N_m)\), fits \(\gamma\) and \(\omega\) over the last
30% of the trajectory, and repeats at half the integration time. A \(k_y\)
whose growth rate moves by more than 5% is unsettled; the headline is the
largest \(|\Delta\gamma|\) over settled \(k_y\). Integration times:
t=150 Cyclone, t=200 W7-X and HSX, t=20 the two electromagnetic
cases. Metadata is in docs/_static/gkx_gx_linear_parity_matrix.json and
per-\(k_y\) rows in the .csv. Status is the ledger row above (the
generator is retired; Retired generators).
Case |
geometry |
|
settled |
max |
|
|
|---|---|---|---|---|---|---|
Cyclone ITG, s-alpha |
s-alpha analytic |
|
10 of 11 |
|
|
|
Cyclone ITG, Miller |
Miller |
|
15 of 15 |
|
|
|
Cyclone ITG, Miller, kinetic electrons |
Miller |
|
1 of 7 |
|
|
|
KBM, Miller |
Miller |
|
3 of 5 |
|
|
|
W7-X ITG, VMEC |
VMEC flux tube |
|
22 of 27 |
|
|
|
HSX QHS ITG, VMEC |
VMEC flux tube |
|
9 of 11 |
|
|
|
Integration length. At the Cyclone peak \(k_y\rho_i = 0.3\), a
t=10fit gives +2.24% in \(\gamma\); the GX deck’st=150gives +0.02%.Kinetic electrons. Only 1 of 7 \(k_y\) settles; at \(k_y\rho_i = 0.1\) GKX returns a different branch (the electrostatic shear-Alfvén response). Use the certified eigenpairs of
X-ke-miller.Build floor. Rebuilding GX with
-prec-sqrt=truemoves KBM by 0.16-0.20% and every other case by at most 0.07% (build_reproducibility_floor = 0.003).Coverage. Linear only; GX ships no ETG or TEM deck. The HSX tube comes from a GX geometry patch; GKX’s own VMEC tube reproduces its \(|B|\) to 1.2e-6.
Cost per unit simulated time on one RTX A4000 (GX single precision, GKX float64): Cyclone 3.58 s against 2.44 s, W7-X 1.58 s against 2.20 s, HSX 0.70 s against 0.51 s; GKX device memory 178-636 MB against 1547 MB for GX.
Lanes outside the ledger
Tracked artifacts without a ledger row. Nothing here is a public claim.
Linear.
TEM (open,
X-tem-dj2005): GKX matches the GS2 frequency to 1.0% but the growth rate rises with Hermite resolution (5.1% low at (8, 96)).With \(\nu_{ee} = 0.01\) (Dougherty; GS2 default model operator, ions at the physical ratio) GS2 gives \(\gamma = 0.7674\), \(\omega = -1.2991\). GKX banded eigenpairs at \(N_l = 8\) against it: \(N_m\) = 32, 64, 96 give \(\gamma\) -16.8%, -4.4%, +1.5% and \(\omega\) -4.7%, -1.5%, -0.9%. \(N_l = 16\) does not fit in 62 GB, and the time route at the deck’s
dtexceeds the electron-streaming CFL bound and diverges.W7-X high-mirror bean tube (
X-w7x-itg-paper, passing): the equilibrium built from the INDATA in the appendix of Gonzalez-Jerez et al. (2022) has \(a = 0.4944\) m, \(R_0 = 5.485\) m, \(\beta = 3.0\%\) and \(\iota(s = 0.64) = 0.910\), as published. At \(k_y\rho_i = 2.1\) (\(\rho_i\) with \(v_{th} = \sqrt{2T/m}\), \(a/L_{Ti} = 3\), \(a/L_{ni} = 1\)) GKX gives \(a\gamma/v_{th} = 0.1750\), \(a\omega/v_{th} = 0.2628\) at (8, 16), (4, 8) and (16, 32) within 1.5%, independent of the number of poloidal turns (1, 3, 6) to 3e-4; repaired GX gives 0.1750 and 0.2628. The paper’s curve reads 0.172 and 0.27. Across \(k_y\rho_i\) = 1.0-4.0 GKX is within 5% of the curve read off Fig. 5 (0.087 at 1.0 with 6 turns, 0.176 at 2.3, 0.159 at 3.0, 0.140 at 4.0), and within 0.5% of GX at seven points (one turn); below \(k_y\rho_i \approx 1.3\) the mode needs 6 poloidal turns (1 turn: 0.070 at 1.0), and GX’s time fit selects a different branch there.Miller kinetic electrons (provisional,
X-ke-miller): certified eigenpairs within 0.35% of repaired GX and 1.5% of GS2; the deck states GX’s end-damping rate, and a rate 1000x weaker puts the growth rate 54% high (Parallel boundary and end damping).Shaped-tokamak zonal flow/GAM (open): residual 0.192 against about 0.19, \(\omega_{GAM}R_0/v_i \approx 2.20\) against 2.24, all from published figures (
docs/_static/miller_zonal_response_pilot.json).W7-X TEM (open) and W7-X zonal flow (failing): residuals fail at \(k_x\rho_i = 0.07, 0.10, 0.30\). The artifact is not regenerable: it used
dt=0.1, 3.3 times the streaming CFL bound; the deck now pinsdt=0.02. A rerun of the tracked deck atdt=0.02on the W7-X standard-configuration VMEC (the paper’s high-mirror equilibrium was not available) is finite to t = 60 with a CFL ratio of 0.27; it is not compared with the paper.W7-X fluctuation spectra: a simulation diagnostic, not an experimental validation. Stellarator electromagnetic: finite-beta geometry tests only.
Nonlinear. Windowed comparisons of
Wg,Wphi,Waparand heat flux against self-run GX (rank 5) pass at a mean relative mismatch of 0.10: Cyclone 0.096 (t=100..400), Cyclone Miller 0.092, KBM 0.0094, HSX 0.036, W7-X 0.097 (docs/_static/nonlinear_<case>_gate_summary.json). None is a statistical validation of saturated transport. Kinetic-electron Cyclone has no tracked comparison; the W7-X ETG comparison is under Nonlinear W7-X ETG against GX.Equilibrium flow shear. The remap, operators, RK2/RK3 and IMEX pass their identity, order and derivative tests as a research API. The full-resolution response is rejected for promotion (Numerics): the IMEX pair fails stationarity and the stationary RK4 pair gives a 24.82% increase. There is no TOML key.
Quasilinear. Electrostatic weights and spectra are closed as diagnostics. One-constant and simple saturation rules are rejected (fail the held-out absolute-flux gate).
spectral_envelope_ridge: Closed as scoped model-development result / failed promotion gate: mean relative error about0.400 > 0.35and coverage9/11; with the QP holdout it still fails the rank/correlation gates, so it does not promote a runtime/TOML absolute-flux predictor, universal nonlinear transport model, or shipped saturation option. Absolute-flux promotion is open and needs post-transient convergence metadata for every holdout.Derivatives and objectives. VMEC/Boozer parity passes at
mboz, nboz >= 21. Objective gradients agree with finite differences (largest relative mismatch about 2.7e-2). The aggregate holdout passes as plumbing, not as a nonlinear optimization claim. Central finite differences of the nonlinear heat flux on mapped VMEC-state controls fail every gate (best response fraction 0.0045 against 0.03); the QA/ESSZBS(1,0)follow-up resolves the response (0.0319) but fails its spread gate (0.196 > 0.15). The selected optimized-equilibrium transport audit is blocked: no raw-source, stationarity, resolution or spectral evidence.Parallel. Independent \(k_y\) and ensemble parallelism is accepted only with a serial identity gate (
max_gamma_rel_error <= 1e-8,docs/_static/parallel_ky_scan_gate.json). Whole-state nonlinear sharding fails physical identity and is slower than serial (Parallelization policy).
W7-X zonal long-window recurrence/damping and W7-X TEM / kinetic-electron validation remain outside the current release scope. Production nonlinear optimization remains unpromoted: the selected optimized-equilibrium summaries do not carry auditable raw-source, stationarity, uncertainty, resolution and spectral evidence.
Nonlinear heat-flux statistics
Cyclone ITG, adiabatic electrons, 192x64x24, one 2 pi segment, Dougherty \(\nu_{ii} = 0.01\), hypercollisions \(p = N_m/2\), hyperviscosity \(D = 0.05\) (n = 4), RK3, \(t = 1000\), fp32, seed 22, initial amplitude 1e-5; mean \(\pm\) Sokal-IAT standard error after dropping spin-up, windows of 26-70 \(\tau\) (ledger rows N-cyclone-gx-table1, N-cyclone-gx-fig4b, N-dimits-scan). The paper column is GX paper Table 1 or read off Fig. 4b (about 10%). Agreement means within two combined standard errors.
\(a/L_T\), \((N_l, N_m)\) |
GKX |
GX 3865a537 + dampEnds repair (self-run) |
GX paper |
|---|---|---|---|
1.5, (4, 8) |
1.20 +- 0.04 |
1.37 +- 0.12 |
about 0.3 |
1.5, (8, 16) |
0.77 +- 0.15 |
0.61 +- 0.22 |
about 0.3 |
2.0, (4, 8) |
3.43 +- 0.13 |
not run |
about 3.6 |
2.49, (4, 8) |
7.08 +- 0.12 |
7.07 +- 0.23 |
7.2 +- 0.8 |
2.49, (8, 16) |
7.39 +- 0.19 |
7.49 +- 0.21 |
7.3 +- 0.9 |
3.0, (4, 8) |
11.6 +- 0.2 |
not run |
about 12 (GS2 11.8) |
The GKX windows at (4, 8), 1.5 and (8, 16), 2.49 fail the half-window stationarity check (halves differ by more than two standard errors); the others pass. Zonal energy fraction of \(\Phi^2\) at \(a/L_T = 1.5\) (\(t > 500\)): GKX 0.86 and 0.76, GX 0.79 and 0.87 at (4, 8) and (8, 16). GKX and GX agree at every point; both leave the heat flux at 1.5 above the paper’s Dimits-suppressed value and move toward it with velocity resolution, so the suppression is not reproduced at (4, 8) by either code (open). With \(\nu_{ii} = 0\) both decay to a zonal-dominated state (GX flux 0.04 over the last 200; gkx-plan 2026-10-20-nonlinear-stats).
Kinetic electrons (GX Table 2, \(m_i/m_e = 3670\), \(\beta = 10^{-3}\)): not run. With GKX 2.7.0 defaults, 192x64x24 at (4, 16) advances 0.079 \(a/v_{ti}\) in 17 s on a shared RTX A4000 (about 36 h for \(t = 600\); the paper’s 159 min is on four A100).
Nonlinear W7-X ETG against GX
W7-X standard configuration, \(s = 0.5\), fixed-aspect tube (one poloidal turn, jtwist = -1, \(x_0 = 0.2157\)), kinetic ions and electrons (\(m_e/m_i = 2.7\times10^{-4}\)), \(a/L_{Te} = 3\), \(a/L_n = 1\), \(a/L_{Ti} = 0\), \(\beta = 10^{-4}\), 48x48x48, \(y_0 = 0.2\), \((N_l, N_m) = (4, 8)\), hyperviscosity \(D = 0.05\), kz hypercollisions, RK3, Gaussian density seed of amplitude \(10^{-3}\) in every dealiased mode. Electron heat flux in gyro-Bohm units, mean \(\pm\) Sokal-IAT standard error (GX 3865a537, float32, self-run; GKX float64; GPU).
run |
\(Q_e\), \(t = 2.5\)-5.0 |
\(Q_e\), \(t = 2.5\)-7.4 |
|---|---|---|
GX, \(\Delta t = 2\times10^{-4}\) (end damping \(0.1/\Delta t = 500\)) |
0.111 +- 0.006 |
0.121 +- 0.006 |
GX, \(\Delta t \le 8.8\times10^{-4}\) (CFL-limited; rate at least 114) |
0.111 +- 0.008 |
0.106 +- 0.005 |
GKX, |
0.113 +- 0.004 |
0.108 +- 0.004 |
GKX, default rate (about 128) |
0.097 +- 0.002 |
not run |
GKX, |
0.061 +- 0.001 |
0.061 +- 0.001 |
An earlier GKX run of this case gave about half the GX flux (0.06 against 0.12). It was a setup mismatch, not a solver difference. First, the deck omitted init_single = false; GKX’s default seeds only the selected mode, GX seeds all of them ([init] in Input Files and Executable). With that fixed the initial \(W_\phi\) agrees (4.75e-6 against 4.74e-6) and the linear overshoot peaks at the same time (\(t = 0.37\) against 0.40; \(Q_e\) 0.65 against 0.42). Second, the end-damping rate: GX applies damp_ends_amp/dt, so this deck at \(\Delta t = 2\times10^{-4}\) damps the layer at 500, while the deck had set 0.1. At nperiod = 1 the layer is a quarter of the line and the flux depends on the rate (0.061, 0.097 and 0.113 at 0.1, 128 and 500); GX shows the same dependence through its own step (0.121 at \(\Delta t = 2\times10^{-4}\), 0.106 with the CFL-limited step). With the GX rate GKX is 0.89 of GX over \(t = 2.5\)-7.4, 1.7 combined standard errors, and its early-time \(W_\phi\), \(Q_e\) and peak time follow GX. The window is about five correlation times in GX, so the agreement is statistical only. Neither code was run nonlinearly at higher velocity resolution (GX at (8, 16) did not finish in the time allowed).
The linear check on this tube is a single-\(k_y\) run at \(k_y = 50\), \(k_x = 0\): GX gives \(\gamma = 8.751\) at (4, 8) and 8.442 at (8, 16); GKX gives 8.446 at (4, 8). GKX at (4, 8) therefore sits on GX’s higher-resolution value, and GX at (4, 8) is 3.5% high. The (8, 16) GKX time-route fit on this tube did not settle (\(\gamma\) 12.1, the fit window under one growth time), so no GKX value is quoted there. Reproducing a GX nonlinear run needs init_single = false and [time] damp_ends_rate equal to damp_ends_amp divided by GX’s step.
Benchmarks
Figures follow the usual layout: linear growth rate and frequency against
\(k_y\) (or \(\beta\)) and nonlinear traces of heat flux and energies.
Status lives in the ledger; the claim boundary is Features and Claim Scope.
benchmarks/ holds drivers, compact TOML inputs and
benchmarks/results/manifest.toml; outputs go to tools_out/ and only
reviewed summary figures and small metadata are tracked in docs/_static (a
contract test caps benchmarks/ at 200 kB). The Cyclone driver takes its
settings from examples/01_linear_tokamak/case_full.toml (t_max = 150) and
fits t = 105--150. The atlas reads tools/benchmark_atlas_manifest.toml.
The cross-code record of 2026-09 (plan/research/2026-09-27-xcode/REPORT.md)
compares GKX with GX, GS2 and stella on Cyclone, in GX/GKX units:
Cyclone growth rates from the four codes.
GX. GX was rebuilt with the
dampEnds_linkedloop repaired (the original stopped at the kernel launch cap). Certified GKX eigenpairs atNl=16,Nm=48agree within 0.3% in \(\gamma\) at 7 of 8 points and 0.13% in \(\omega\) at all 8; the exception is Miller \(k_y=0.15\) at +1.45%.GS2. Within 0.3% at Miller \(k_y=0.30\) and 0.40, 1.0% at s-alpha 0.30.
Kinetic electrons. GS2 and repaired GX agree to 1.2% and 0.2% at \(k_y=0.30\) and 0.50 on Cyclone Miller.
stella. Its growth rate is about 1.4 times the others and moves 0.3% when its mirror term is removed, while the mirror term is 14% of GKX’s \(\gamma\). A lead, not a diagnosis.
s-alpha \(k_y=0.55\) is converged in neither GS2’s energy grid nor GKX’s Laguerre ladder; the finest rungs agree to 0.3%.
The README parity percentages come from time-trace fits
(docs/_static/cyclone_mismatch_table.csv), not from eigenvalues. ETG
turbulence pilots follow [Dorland00] [Jenko00] and are outside the nonlinear
claim.
Matched comparisons must record equations and normalization, geometry and
boundary, species conventions, grids, initial condition and seed, precision,
integrator and step policy, dissipation, diagnostic normalization and the fit
window. The comparison binary is GX revision bc2fe552 rebuilt against one
OpenMPI/netCDF/HDF5 stack ([metadata] of benchmarks/capability_matrix.toml).
The Cyclone probe read at t = 10 gives (0.101814, 0.286777), still
ringing; run to t_max = 150 it settles at (0.093049, 0.281991), matching
GX’s shipped output. GX is the mature baseline for GPU nonlinear runs and
species/Hermite multi-device execution; GKX’s scope is the Python/JAX API,
differentiable objectives, CPU execution and in-memory vmex geometry. It does
not claim the full finite-wavelength multispecies linearized Landau hierarchy.
Capability status (benchmarks/capability_matrix.toml): validated:
electrostatic flux-tube dynamics, Hermite-Laguerre basis, restart and resolved
diagnostics, independent \(k_y\) scans and UQ ensembles. validated_scoped:
the nonlinear bracket, electromagnetic A_parallel/B_parallel, species,
s-alpha/Miller/VMEC geometry, boundaries, the dominant-eigenmode solver, the
drift-kinetic Sugama/Coulomb operators, autodiff and differentiable VMEC/Boozer
optimization. validated_limited_model: conserving Dougherty-like collisions
(limited for trapped-particle and multispecies physics).
planned_research_lane: the full linearized Sugama/Coulomb hierarchy and
equilibrium flow shear. planned: multispecies Dougherty, species/Hermite
decomposition. blocked: nonlinear multi-device domain decomposition (0.211x,
fails identity). not_shipped: KREHM, Vlasov-Poisson, collisional-ETG,
Beer/Smith closures.
Tracked results index
benchmarks/results/manifest.toml points to the promoted figures and tables.
A contract test requires every entry’s name, path and claim scope to appear in
this table; a result not listed here stays unpromoted. Regenerable renders are
not tracked in git (checksums under regenerate_on_demand in
tools/release_artifact_manifest.toml); their builders are retired
(Retired generators).
Result |
Artifact |
Claim scope |
|---|---|---|
Core linear benchmark atlas |
|
headline linear validation atlas |
Core nonlinear benchmark atlas |
|
headline nonlinear validation atlas |
README benchmark summary panel |
|
compact publication-facing benchmark summary |
Extended linear stress matrix |
|
stress and provisional lanes, not headline validation claims |
Runtime and memory comparison |
|
tracked wall-time and memory comparison rows |
Reference-code linear parity matrix |
|
cross-code linear growth-rate and frequency parity across tokamak and stellarator cases |
Runtime and memory result rows |
|
machine-readable runtime/memory rows used by the tracked panel |
Runtime and memory summary |
|
machine-readable summary for runtime/memory panel generation |
Core linear atlas inputs |
|
manifest of small tracked benchmark inputs |
Reference-code linear parity rows |
|
machine-readable per-wavenumber parity rows with convergence flags |
Reference-code linear parity summary |
|
per-case resolution, provenance and cost metadata behind the parity rows |
Reading the panels
The core panels cover Cyclone ITG, KBM, W7-X, HSX and Cyclone Miller, linear and
nonlinear; the linear master panel adds ETG, KAW and the KBM Miller late-growth
replay, and the extended strip adds Cyclone kinetic electrons and TEM as stress
lanes. Appearing in a panel is not a validation status. Only the exact-window
closures are strict small-tolerance gates: the KAW window
(docs/_static/kaw_exact_growth_dump.csv) and the KBM Miller replay
(docs/_static/kbm_miller_exact_growth_dump.csv). Scanned panels are coverage
figures, not universal rtol <= 3e-2 claims. The nonlinear panels are window
comparisons, not a statistical validation of saturated transport
(Features and Claim Scope).
The kinetic-electron scan is examples/05_kinetic_electrons/case_full.toml.
The TEM input is benchmarks/cases/tem_linear.toml; its tem_reference.csv
is digitized from the literature with no reconstructed case definition, so TEM
is a stress lane (docs/_static/tem_branch_parity_audit.json records the open
branch mismatch: maximum relative growth-rate mismatch 4.25 and one sign
mismatch). Reusable reference loaders live in gkx.benchmarking_shared;
benchmark drivers supply only case policy.