Skip to content

Repo - API! - Delete the no-op KineticForces and PerturbedEquilibrium keys and stop runs that set deprecated keys - #569

Merged
matt-pharr merged 9 commits into
developfrom
refactor/deprecate-noop-control-keys
Oct 27, 2026
Merged

matt-pharr merged 9 commits into
developfrom
refactor/deprecate-noop-control-keys

Conversation

@matt-pharr

@matt-pharr matt-pharr commented Oct 23, 2026 •

Copy link
Copy Markdown
Collaborator

Release note

  • Audience: users
  • Numerical impact: none (harness @ 5786d2d)
  • Migration: a gpec.toml that sets any of these keys now stops with an error naming it; delete the line. [KineticForces]: moment, eq_out, theta_out, xlmda_out, eqpsi_out, save_records, gpec_file, fnml_flag, ellip_flag, diag_flag, force_xialpha. [PerturbedEquilibrium]: fixed_boundary, output_eigenmodes, filter_modes, singular_point_method. The keys already on the [ForceFreeStates] and [Equilibrium] lists now stop the run too, where they used to be dropped with a warning. Replaying a gpec.h5 whose stored deck sets any of them stops as well, saying the file was written by an older GPEC version; re-run from the original deck instead. In scripts, KineticForcesControl and PerturbedEquilibriumControl (and so perturbed_equilibrium) no longer accept those keywords; integrate_energy, evaluate_energy_integrand and the pitch integrators no longer accept ximag; compute_kinetic_matrices_at_psi! no longer takes a divxfac argument; KineticForces.print_summary, EnergyIntegrationResult and write_integration_records! are gone; and these fields are removed: KineticForcesInternal.tphi, tsurf, teq and wtw, MethodResult.records, KineticForcesState.completed, BounceData.dlambda, EnergyParams.ximag, PitchGARParams.ximag and PerturbedEquilibriumInternal.singular_coupling_metrics. The EnergyIntegrals/ group under each KineticForces method leaves the gpec.h5 schema; no run wrote it, since its writer never had records to write.

Fifteen [KineticForces] and [PerturbedEquilibrium] keys were parsed into control fields that nothing read, so setting them changed nothing. They are deleted, and a deck that still sets one, or any other key removed earlier, now stops and says which key to remove instead of running on without it.

Regression report

One SDCC fan-out over all 20 harness cases at 8 CPUs per task (Julia 1.12.6 with the CI manifest pin) tracked develop (db90e82), #569 (7fd923d) and #574 (125f4a0) in a single run. Checked against that run's results database rather than only the report's last-vs-previous summary, every stored value other than runtime is bit-identical from develop to #569 and from #569 to #574: 271 tracked values in 19 cases per step, integers, reals, full arrays and checksums alike. gal_resistive_pe reads its 8 expected N/A on all three refs, since develop refuses that Galerkin PE run too.

The stamp is 5786d2d, which adds only a test commit on top of 7fd923d: three tests call PlasmaEquilibrium now that #548 removed setup_equilibrium, and the deck/API parity check that #548 fixed is promoted from @test_broken.

Full report (tracking all three refs)
================================================================
Case: diiid_error_field — DIII-D-like error-field assessment, n=1: ErrorFields stage with the NTV-limited correction couplings
================================================================

Regression Tracking: diiid_error_field
==========================================================================================================
Ref 1: db90e824d  @ db90e824d (2026-10-26)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
Ref 2: 7fd923d36  @ 7fd923d36 (2026-10-27)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
Ref 3: 125f4a069  @ 125f4a069 (2026-10-27)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
----------------------------------------------------------------------------------------------------------
Quantity                                         db90e824d     7fd923d36     125f4a069     Δ prev   Status
----------------------------------------------------------------------------------------------------------
EFC overlap per kAt                              [1 elem]      [1 elem]      [1 elem]      0.0e+00  OK    
EFC whole-field NTV torque per kAt² [N·m]        [1 elem]      [1 elem]      [1 elem]      0.0e+00  OK    
EFC residual-field NTV torque per kAt² [N·m]     [1 elem]      [1 elem]      [1 elem]      0.0e+00  OK    
EFC reference rotation ω_ref [rad/s]             [1 elem]      [1 elem]      [1 elem]      0.0e+00  OK    
EFC rotation-scan shifts [rad/s]                 [9 elem]      [9 elem]      [9 elem]      0.0e+00  OK    
EFC residual torque against rotation [N·m/kAt²]  [9 elem]      [9 elem]      [9 elem]      0.0e+00  OK    
dominant-coupling singular values                [3 elem]      [3 elem]      [3 elem]      0.0e+00  OK    
|delta_nominal| of coil set 1                    1.406924e-06  1.406924e-06  1.406924e-06  0.0e+00  OK    
|Σ δ_as_designed| of the error-field coils       1.825296e-18  1.825296e-18  1.825296e-18  0.0e+00  OK    
Monte Carlo mean |δ| of the error-field coils    4.701300e-05  4.701300e-05  4.701300e-05  0.0e+00  OK    
Runtime (s)                                      272.7s        273.0s        268.9s                 --    
==========================================================================================================
Summary (last vs prev): 10 unchanged


================================================================
Case: diiid_multi_n — DIII-D-like equilibrium, n = 1, 2, ideal + perturbed equilibrium
================================================================

Regression Tracking: diiid_multi_n
==================================================================================================================================
Ref 1: db90e824d  @ db90e824d (2026-10-26)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
Ref 2: 7fd923d36  @ 7fd923d36 (2026-10-27)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
Ref 3: 125f4a069  @ 125f4a069 (2026-10-27)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
----------------------------------------------------------------------------------------------------------------------------------
Quantity                                                      db90e824d        7fd923d36        125f4a069        Δ prev     Status
----------------------------------------------------------------------------------------------------------------------------------
total energy Re(et[1])                                        -5.750527e-01    -5.750527e-01    -5.750527e-01    0.0e+00    OK    
total energy (all)                                            [58 elem]        [58 elem]        [58 elem]        0.0e+00    OK    
ODE steps (saved)                                             625              625              625              0.0e+00    OK    
mpert                                                         29               29               29               0.0e+00    OK    
npert                                                         2                2                2                0.0e+00    OK    
toroidal mode label of each mode index (checksum)             8d8d42b8832d...  8d8d42b8832d...  8d8d42b8832d...  identical  OK    
permeability diagonal P~_ii (all n blocks)                    [58 elem]        [58 elem]        [58 elem]        0.0e+00    OK    
forcing b~ (root-area-weighted), n = 1, 2                     [58 elem]        [58 elem]        [58 elem]        0.0e+00    OK    
response b~ (root-area-weighted), n = 1, 2                    [58 elem]        [58 elem]        [58 elem]        0.0e+00    OK    
PE plasma energy (sum over n)                                 2.936559e+00     2.936559e+00     2.936559e+00     0.0e+00    OK    
PE vacuum energy (sum over n)                                 3.113946e+00     3.113946e+00     3.113946e+00     0.0e+00    OK    
PE surface energy (sum over n)                                3.523427e+00     3.523427e+00     3.523427e+00     0.0e+00    OK    
PE toroidal torque sum_n -2n Im(Phi_n' Lambda_nn^-1 Phi_n)/4  1.820339e-06     1.820339e-06     1.820339e-06     0.0e+00    OK    
resonant n per row (rows sorted by psi across n)              [7 elem]         [7 elem]         [7 elem]         0.0e+00    OK    
resonant m per row                                            [7 elem]         [7 elem]         [7 elem]         0.0e+00    OK    
resonant area-weighted field b^r per row                      [7 elem]         [7 elem]         [7 elem]         0.0e+00    OK    
island half-widths per row                                    [7 elem]         [7 elem]         [7 elem]         0.0e+00    OK    
Chirikov parameter per row                                    [7 elem]         [7 elem]         [7 elem]         0.0e+00    OK    
forcing-driven Delta' per row                                 [7 elem]         [7 elem]         [7 elem]         0.0e+00    OK    
Runtime (s)                                                   183.2s           179.4s           184.7s                      --    
==================================================================================================================================
Summary (last vs prev): 19 unchanged


================================================================
Case: diiid_n1_riccati_precompiled — DIII-D-like equilibrium, n=1, Riccati integrator Δ' matrix, precompiled build
================================================================

Regression Tracking: diiid_n1_riccati_precompiled
===========================================================================================
Ref 1: db90e824d  @ db90e824d (2026-10-26)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, aot build
Ref 2: 7fd923d36  @ 7fd923d36 (2026-10-27)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, aot build
Ref 3: 125f4a069  @ 125f4a069 (2026-10-27)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, aot build
-------------------------------------------------------------------------------------------
Quantity                       db90e824d      7fd923d36      125f4a069      Δ prev   Status
-------------------------------------------------------------------------------------------
delta prime (BVP diagonal)     [5 elem]       [5 elem]       [5 elem]       0.0e+00  OK    
delta prime (raw side-major)   [10 elem]      [10 elem]      [10 elem]      0.0e+00  OK    
edge coil response delta_coil  [10 elem]      [10 elem]      [10 elem]      0.0e+00  OK    
total energy Re(et[1])         8.031971e-01   8.031971e-01   8.031971e-01   0.0e+00  OK    
plasma energy Re(ep[1])        -1.368534e+00  -1.368534e+00  -1.368534e+00  0.0e+00  OK    
vacuum energy Re(ev[1])        2.171732e+00   2.171732e+00   2.171732e+00   0.0e+00  OK    
total energy (all)             [35 elem]      [35 elem]      [35 elem]      0.0e+00  OK    
# singular surfaces            5              5              5              0.0e+00  OK    
singular psi locations         [5 elem]       [5 elem]       [5 elem]       0.0e+00  OK    
singular q values              [5 elem]       [5 elem]       [5 elem]       0.0e+00  OK    
ODE steps (saved)              94             94             94             0.0e+00  OK    
ODE steps (total)              2632           2632           2632           0.0e+00  OK    
mpert                          35             35             35             0.0e+00  OK    
npert                          1              1              1              0.0e+00  OK    
q0                             1.204212e+00   1.204212e+00   1.204212e+00   0.0e+00  OK    
q95                            4.781723e+00   4.781723e+00   4.781723e+00   0.0e+00  OK    
beta_n                         1.372511e+00   1.372511e+00   1.372511e+00   0.0e+00  OK    
Runtime (s)                    22.0s          23.4s          22.4s                   --    
===========================================================================================
Summary (last vs prev): 17 unchanged


================================================================
Case: diiid_n1_riccati — DIII-D-like equilibrium, n=1, Riccati integrator Δ' matrix
================================================================

Regression Tracking: diiid_n1_riccati
===========================================================================================
Ref 1: db90e824d  @ db90e824d (2026-10-26)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
Ref 2: 7fd923d36  @ 7fd923d36 (2026-10-27)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
Ref 3: 125f4a069  @ 125f4a069 (2026-10-27)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
-------------------------------------------------------------------------------------------
Quantity                       db90e824d      7fd923d36      125f4a069      Δ prev   Status
-------------------------------------------------------------------------------------------
delta prime (BVP diagonal)     [5 elem]       [5 elem]       [5 elem]       0.0e+00  OK    
delta prime (raw side-major)   [10 elem]      [10 elem]      [10 elem]      0.0e+00  OK    
edge coil response delta_coil  [10 elem]      [10 elem]      [10 elem]      0.0e+00  OK    
total energy Re(et[1])         8.031971e-01   8.031971e-01   8.031971e-01   0.0e+00  OK    
plasma energy Re(ep[1])        -1.368534e+00  -1.368534e+00  -1.368534e+00  0.0e+00  OK    
vacuum energy Re(ev[1])        2.171732e+00   2.171732e+00   2.171732e+00   0.0e+00  OK    
total energy (all)             [35 elem]      [35 elem]      [35 elem]      0.0e+00  OK    
# singular surfaces            5              5              5              0.0e+00  OK    
singular psi locations         [5 elem]       [5 elem]       [5 elem]       0.0e+00  OK    
singular q values              [5 elem]       [5 elem]       [5 elem]       0.0e+00  OK    
ODE steps (saved)              94             94             94             0.0e+00  OK    
ODE steps (total)              2632           2632           2632           0.0e+00  OK    
mpert                          35             35             35             0.0e+00  OK    
npert                          1              1              1              0.0e+00  OK    
q0                             1.204212e+00   1.204212e+00   1.204212e+00   0.0e+00  OK    
q95                            4.781723e+00   4.781723e+00   4.781723e+00   0.0e+00  OK    
beta_n                         1.372511e+00   1.372511e+00   1.372511e+00   0.0e+00  OK    
Runtime (s)                    176.0s         174.4s         174.1s                  --    
===========================================================================================
Summary (last vs prev): 17 unchanged


================================================================
Case: diiid_n1 — DIII-D-like equilibrium, n=1, ideal + perturbed equilibrium
================================================================

Regression Tracking: diiid_n1
==================================================================================================================
Ref 1: db90e824d  @ db90e824d (2026-10-26)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
Ref 2: 7fd923d36  @ 7fd923d36 (2026-10-27)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
Ref 3: 125f4a069  @ 125f4a069 (2026-10-27)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
------------------------------------------------------------------------------------------------------------------
Quantity                                      db90e824d        7fd923d36        125f4a069        Δ prev     Status
------------------------------------------------------------------------------------------------------------------
total energy Re(et[1])                        8.006122e-01     8.006122e-01     8.006122e-01     0.0e+00    OK    
total energy Im(et[1])                        7.924888e-05     7.924888e-05     7.924888e-05     0.0e+00    OK    
plasma energy Re(ep[1])                       -1.372261e+00    -1.372261e+00    -1.372261e+00    0.0e+00    OK    
vacuum energy Re(ev[1])                       2.172874e+00     2.172874e+00     2.172874e+00     0.0e+00    OK    
vacuum matrix min eigenvalue                  1.873975e-01     1.873975e-01     1.873975e-01     0.0e+00    OK    
plasma energy (all)                           [35 elem]        [35 elem]        [35 elem]        0.0e+00    OK    
vacuum energy (all)                           [35 elem]        [35 elem]        [35 elem]        0.0e+00    OK    
total energy (all)                            [35 elem]        [35 elem]        [35 elem]        0.0e+00    OK    
ODE steps (saved)                             792              792              792              0.0e+00    OK    
ODE steps (total)                             787              787              787              0.0e+00    OK    
q0                                            1.204212e+00     1.204212e+00     1.204212e+00     0.0e+00    OK    
q95                                           4.781723e+00     4.781723e+00     4.781723e+00     0.0e+00    OK    
beta_t                                        1.327024e-02     1.327024e-02     1.327024e-02     0.0e+00    OK    
beta_n                                        1.372511e+00     1.372511e+00     1.372511e+00     0.0e+00    OK    
internal inductance li1                       8.842268e-01     8.842268e-01     8.842268e-01     0.0e+00    OK    
internal inductance li2                       7.080757e-01     7.080757e-01     7.080757e-01     0.0e+00    OK    
internal inductance li3                       7.304340e-01     7.304340e-01     7.304340e-01     0.0e+00    OK    
poloidal beta betap1                          6.680739e-01     6.680739e-01     6.680739e-01     0.0e+00    OK    
poloidal beta betap2                          5.349836e-01     5.349836e-01     5.349836e-01     0.0e+00    OK    
poloidal beta betap3                          5.518764e-01     5.518764e-01     5.518764e-01     0.0e+00    OK    
# singular surfaces                           5                5                5                0.0e+00    OK    
singular psi locations                        [5 elem]         [5 elem]         [5 elem]         0.0e+00    OK    
singular q values                             [5 elem]         [5 elem]         [5 elem]         0.0e+00    OK    
current beta betaj                            4.236480e-01     4.236480e-01     4.236480e-01     0.0e+00    OK    
plasma volume                                 1.829472e+01     1.829472e+01     1.829472e+01     0.0e+00    OK    
plasma current                                1.152130e+00     1.152130e+00     1.152130e+00     0.0e+00    OK    
mpert                                         35               35               35               0.0e+00    OK    
npert                                         1                1                1                0.0e+00    OK    
toroidal field bt0                            2.006573e+00     2.006573e+00     2.006573e+00     0.0e+00    OK    
wall field bwall                              3.880145e-01     3.880145e-01     3.880145e-01     0.0e+00    OK    
aspect ratio                                  2.845746e+00     2.845746e+00     2.845746e+00     0.0e+00    OK    
elongation kappa                              1.708322e+00     1.708322e+00     1.708322e+00     0.0e+00    OK    
q profile (checksum)                          6da947d0754e...  6da947d0754e...  6da947d0754e...  identical  OK    
pressure profile (checksum)                   c9c6ca4072ca...  c9c6ca4072ca...  c9c6ca4072ca...  identical  OK    
Mercier D_I profile (checksum)                26babbe22505...  26babbe22505...  26babbe22505...  identical  OK    
resistive interchange D_R profile (checksum)  c46830151a0b...  c46830151a0b...  c46830151a0b...  identical  OK    
ballooning Delta' profile (checksum)          c27c6779804a...  c27c6779804a...  c27c6779804a...  identical  OK    
island half-widths                            [5 elem]         [5 elem]         [5 elem]         0.0e+00    OK    
Chirikov parameter                            [5 elem]         [5 elem]         [5 elem]         0.0e+00    OK    
||resonant area-weighted field||              5.288461e-04     5.288461e-04     5.288461e-04     0.0e+00    OK    
dominant-coupling singular values             [3 elem]         [3 elem]         [3 elem]         0.0e+00    OK    
|forcing overlap with dominant mode|          1.411548e-04     1.411548e-04     1.411548e-04     0.0e+00    OK    
|delta_nominal| of coil set 1                 7.034622e-05     7.034622e-05     7.034622e-05     0.0e+00    OK    
||ddelta/d(shift)|| over coil sets            1.245446e-04     1.245446e-04     1.245446e-04     0.0e+00    OK    
||ddelta/d(tilt)|| over coil sets             4.177337e-07     4.177337e-07     4.177337e-07     0.0e+00    OK    
PE plasma energy                              3.320466e+00     3.320466e+00     3.320466e+00     0.0e+00    OK    
PE vacuum energy                              3.174319e+00     3.174319e+00     3.174319e+00     0.0e+00    OK    
PE surface energy                             5.508585e+00     5.508585e+00     5.508585e+00     0.0e+00    OK    
PE toroidal torque                            1.119355e-04     1.119355e-04     1.119355e-04     0.0e+00    OK    
NTV torque FGAR [N·m]                         5.480580e-01     5.480580e-01     5.480580e-01     0.0e+00    OK    
NTV kinetic energy dW FGAR [J]                8.163220e-02     8.163220e-02     8.163220e-02     0.0e+00    OK    
Runtime (s)                                   217.5s           215.5s           209.9s                      --    
||forcing b~|| (root-area-weighted)           4.683171e-04     4.683171e-04     4.683171e-04     0.0e+00    OK    
resonant area-weighted field b^r              [5 elem]         [5 elem]         [5 elem]         0.0e+00    OK    
==================================================================================================================
Summary (last vs prev): 53 unchanged


================================================================
Case: diiid_slayer_n1_coupled — DIII-D-like H-mode equilibrium, n=1, SLAYER coupled multi-surface determinant with kinetic-file E×B rotation (reuses the n=1 deck via overrides)
================================================================

Regression Tracking: diiid_slayer_n1_coupled
=============================================================================
Ref 1: db90e824d  @ db90e824d (2026-10-26)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
Ref 2: 7fd923d36  @ 7fd923d36 (2026-10-27)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
Ref 3: 125f4a069  @ 125f4a069 (2026-10-27)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
-----------------------------------------------------------------------------
Quantity                     db90e824d  7fd923d36  125f4a069  Δ prev   Status
-----------------------------------------------------------------------------
SLAYER tauk                  [6 elem]   [6 elem]   [6 elem]   0.0e+00  OK    
SLAYER q_shift               [6 elem]   [6 elem]   [6 elem]   0.0e+00  OK    
SLAYER coupled Q_root        [1 elem]   [1 elem]   [1 elem]   0.0e+00  OK    
SLAYER coupled ω             [1 elem]   [1 elem]   [1 elem]   0.0e+00  OK    
SLAYER coupled γ             [1 elem]   [1 elem]   [1 elem]   0.0e+00  OK    
SLAYER coupled no_root flag  [1 elem]   [1 elem]   [1 elem]   0.0e+00  OK    
SLAYER enabled flag          1          1          1          0.0e+00  OK    
Runtime (s)                  198.1s     204.2s     200.4s              --    
=============================================================================
Summary (last vs prev): 7 unchanged


================================================================
Case: diiid_slayer_n1 — DIII-D-like H-mode equilibrium, n=1, SLAYER tearing-mode analysis (uncoupled per-surface, AMR, validity-gated)
================================================================

Regression Tracking: diiid_slayer_n1
====================================================================================
Ref 1: db90e824d  @ db90e824d (2026-10-26)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
Ref 2: 7fd923d36  @ 7fd923d36 (2026-10-27)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
Ref 3: 125f4a069  @ 125f4a069 (2026-10-27)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
------------------------------------------------------------------------------------
Quantity                            db90e824d  7fd923d36  125f4a069  Δ prev   Status
------------------------------------------------------------------------------------
SLAYER surface indices              [6 elem]   [6 elem]   [6 elem]   0.0e+00  OK    
SLAYER poloidal m                   [6 elem]   [6 elem]   [6 elem]   0.0e+00  OK    
SLAYER toroidal n                   [6 elem]   [6 elem]   [6 elem]   0.0e+00  OK    
SLAYER minor radius rs              [6 elem]   [6 elem]   [6 elem]   0.0e+00  OK    
SLAYER r-based shear                [6 elem]   [6 elem]   [6 elem]   0.0e+00  OK    
SLAYER Lundquist S                  [6 elem]   [6 elem]   [6 elem]   0.0e+00  OK    
SLAYER D_norm                       [6 elem]   [6 elem]   [6 elem]   0.0e+00  OK    
SLAYER P_perp                       [6 elem]   [6 elem]   [6 elem]   0.0e+00  OK    
SLAYER tauk                         [6 elem]   [6 elem]   [6 elem]   0.0e+00  OK    
SLAYER iota_e                       [6 elem]   [6 elem]   [6 elem]   0.0e+00  OK    
SLAYER Q_e                          [6 elem]   [6 elem]   [6 elem]   0.0e+00  OK    
SLAYER Q_i                          [6 elem]   [6 elem]   [6 elem]   0.0e+00  OK    
SLAYER Q_root [2/1,3/1,4/1]         [3 elem]   [3 elem]   [3 elem]   0.0e+00  OK    
SLAYER ω_Hz [2/1,3/1,4/1]           [3 elem]   [3 elem]   [3 elem]   0.0e+00  OK    
SLAYER γ_Hz [2/1,3/1,4/1]           [3 elem]   [3 elem]   [3 elem]   0.0e+00  OK    
SLAYER no_root flags [2/1,3/1,4/1]  [3 elem]   [3 elem]   [3 elem]   0.0e+00  OK    
SLAYER enabled flag                 1          1          1          0.0e+00  OK    
Runtime (s)                         197.9s     195.5s     202.9s              --    
====================================================================================
Summary (last vs prev): 17 unchanged


================================================================
Case: diiid_truncation_n1 — DIII-D-like, n=1, psihigh=0.9999 with the resistive-layer overlap cap binding (truncation only)
================================================================

Regression Tracking: diiid_truncation_n1
===================================================================================================
Ref 1: db90e824d  @ db90e824d (2026-10-26)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
Ref 2: 7fd923d36  @ 7fd923d36 (2026-10-27)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
Ref 3: 125f4a069  @ 125f4a069 (2026-10-27)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
---------------------------------------------------------------------------------------------------
Quantity                               db90e824d      7fd923d36      125f4a069      Δ prev   Status
---------------------------------------------------------------------------------------------------
layer-overlap cap applied              1              1              1              0.0e+00  OK    
layer-overlap psilim                   9.985081e-01   9.985081e-01   9.985081e-01   0.0e+00  OK    
first overlapping surface index        7              7              7              0.0e+00  OK    
diffusive-resistive layer widths (Δψ)  [7 elem]       [7 elem]       [7 elem]       0.0e+00  OK    
qlim                                   6.200000e+00   6.200000e+00   6.200000e+00   0.0e+00  OK    
psilim                                 9.949767e-01   9.949767e-01   9.949767e-01   0.0e+00  OK    
mpert                                  37             37             37             0.0e+00  OK    
# singular surfaces                    5              5              5              0.0e+00  OK    
singular q values                      [5 elem]       [5 elem]       [5 elem]       0.0e+00  OK    
singular psi locations                 [5 elem]       [5 elem]       [5 elem]       0.0e+00  OK    
plasma energy Re(ep[1])                -1.372379e+00  -1.372379e+00  -1.372379e+00  0.0e+00  OK    
total energy Re(et[1])                 8.005436e-01   8.005436e-01   8.005436e-01   0.0e+00  OK    
Runtime (s)                            174.0s         171.4s         170.6s                  --    
===================================================================================================
Summary (last vs prev): 12 unchanged


================================================================
Case: efit_fixedbdy_separatrix — Fixed-boundary EFIT (box hugs LCFS), Newton separatrix-find regression
================================================================

Regression Tracking: efit_fixedbdy_separatrix
=====================================================================================
Ref 1: db90e824d  @ db90e824d (2026-10-26)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
Ref 2: 7fd923d36  @ 7fd923d36 (2026-10-27)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
Ref 3: 125f4a069  @ 125f4a069 (2026-10-27)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
-------------------------------------------------------------------------------------
Quantity                    db90e824d     7fd923d36     125f4a069     Δ prev   Status
-------------------------------------------------------------------------------------
psio (total poloidal flux)  3.344390e-01  3.344390e-01  3.344390e-01  0.0e+00  OK    
q0                          1.155202e+00  1.155202e+00  1.155202e+00  0.0e+00  OK    
q95                         5.741022e+00  5.741022e+00  5.741022e+00  0.0e+00  OK    
beta_t                      3.945172e-05  3.945172e-05  3.945172e-05  0.0e+00  OK    
beta_n                      1.009505e-01  1.009505e-01  1.009505e-01  0.0e+00  OK    
Runtime (s)                 44.3s         42.7s         43.1s                  --    
=====================================================================================
Summary (last vs prev): 5 unchanged


================================================================
Case: gal_resistive_diiid_galinner — DIII-D-like, n=1, Galerkin Δ′ matched with the Galerkin inner-layer backend
================================================================

Regression Tracking: gal_resistive_diiid_galinner
==================================================================================
Ref 1: db90e824d  @ db90e824d (2026-10-26)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
Ref 2: 7fd923d36  @ 7fd923d36 (2026-10-27)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
Ref 3: 125f4a069  @ 125f4a069 (2026-10-27)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
----------------------------------------------------------------------------------
Quantity                 db90e824d     7fd923d36     125f4a069     Δ prev   Status
----------------------------------------------------------------------------------
gal # singular surfaces  4             4             4             0.0e+00  OK    
gal singular q values    [4 elem]      [4 elem]      [4 elem]      0.0e+00  OK    
gal PEST3 Δ diagonal     [4 elem]      [4 elem]      [4 elem]      0.0e+00  OK    
||gal Δ′ matrix||        1.243812e+04  1.243812e+04  1.243812e+04  0.0e+00  OK    
||gal Δ_coil block||     2.437580e+02  2.437580e+02  2.437580e+02  0.0e+00  OK    
gal D_I per surface      [4 elem]      [4 elem]      [4 elem]      0.0e+00  OK    
gal α per surface        [4 elem]      [4 elem]      [4 elem]      0.0e+00  OK    
||gal inner-layer Δ||    1.474566e+06  1.474566e+06  1.474566e+06  0.0e+00  OK    
||gal match cout||       3.062036e-02  3.062036e-02  3.062036e-02  0.0e+00  OK    
||gal match bpen||       3.778795e+00  3.778795e+00  3.778795e+00  0.0e+00  OK    
gal match residual       2.281065e-16  2.281065e-16  2.281065e-16  0.0e+00  OK    
Runtime (s)              165.6s        168.9s        168.3s                 --    
==================================================================================
Summary (last vs prev): 11 unchanged


================================================================
Case: gal_resistive_diiid — DIII-D-like, n=1, RDCON outer-region Galerkin Δ′ with rpec coil columns (delta_coil)
================================================================

Regression Tracking: gal_resistive_diiid
==================================================================================
Ref 1: db90e824d  @ db90e824d (2026-10-26)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
Ref 2: 7fd923d36  @ 7fd923d36 (2026-10-27)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
Ref 3: 125f4a069  @ 125f4a069 (2026-10-27)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
----------------------------------------------------------------------------------
Quantity                 db90e824d     7fd923d36     125f4a069     Δ prev   Status
----------------------------------------------------------------------------------
gal # singular surfaces  4             4             4             0.0e+00  OK    
gal singular q values    [4 elem]      [4 elem]      [4 elem]      0.0e+00  OK    
gal PEST3 Δ diagonal     [4 elem]      [4 elem]      [4 elem]      0.0e+00  OK    
||gal Δ′ matrix||        1.243812e+04  1.243812e+04  1.243812e+04  0.0e+00  OK    
||gal Δ_coil block||     2.437580e+02  2.437580e+02  2.437580e+02  0.0e+00  OK    
gal D_I per surface      [4 elem]      [4 elem]      [4 elem]      0.0e+00  OK    
gal α per surface        [4 elem]      [4 elem]      [4 elem]      0.0e+00  OK    
||gal inner-layer Δ||    1.474577e+06  1.474577e+06  1.474577e+06  0.0e+00  OK    
||gal match cout||       3.062036e-02  3.062036e-02  3.062036e-02  0.0e+00  OK    
||gal match bpen||       3.778794e+00  3.778794e+00  3.778794e+00  0.0e+00  OK    
gal match residual       1.717368e-16  1.717368e-16  1.717368e-16  0.0e+00  OK    
Runtime (s)              168.9s        168.6s        173.2s                 --    
==================================================================================
Summary (last vs prev): 11 unchanged


================================================================
Case: gal_resistive_pe — DIII-D-like, n=1, DRIVEN/RPEC: gal-matched resistive ξ → PerturbedEquilibrium (coil-driven singular coupling)
================================================================

Regression Tracking: gal_resistive_pe
=======================================================================
Ref 1: db90e824d  @ db90e824d (2026-10-26)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
Ref 2: 7fd923d36  @ 7fd923d36 (2026-10-27)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
Ref 3: 125f4a069  @ 125f4a069 (2026-10-27)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
-----------------------------------------------------------------------
Quantity                db90e824d  7fd923d36  125f4a069  Δ prev  Status
-----------------------------------------------------------------------
rational q values       N/A        N/A        N/A        N/A     N/A   
island half-widths      N/A        N/A        N/A        N/A     N/A   
Chirikov parameter      N/A        N/A        N/A        N/A     N/A   
||resonant b field||    N/A        N/A        N/A        N/A     N/A   
resonant b field (all)  N/A        N/A        N/A        N/A     N/A   
penetrated b field      N/A        N/A        N/A        N/A     N/A   
PE Δ' per surface       N/A        N/A        N/A        N/A     N/A   
||C resonant b field||  N/A        N/A        N/A        N/A     N/A   
Runtime (s)             171.7s     170.0s     169.8s             --    
=======================================================================
Summary (last vs prev): 8 missing/N/A


================================================================
Case: ggj_ray_q500i — GGJ inner-layer :ray backend, q=4 surface, Q = 500i (beyond :galerkin)
================================================================

Regression Tracking: ggj_ray_q500i
=============================================================================
Ref 1: db90e824d  @ db90e824d (2026-10-26)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
Ref 2: 7fd923d36  @ 7fd923d36 (2026-10-27)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
Ref 3: 125f4a069  @ 125f4a069 (2026-10-27)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
-----------------------------------------------------------------------------
Quantity            db90e824d     7fd923d36     125f4a069     Δ prev   Status
-----------------------------------------------------------------------------
Re(Δ₊ interchange)  2.472007e+00  2.472007e+00  2.472007e+00  0.0e+00  OK    
Im(Δ₊ interchange)  1.335402e+01  1.335402e+01  1.335402e+01  0.0e+00  OK    
Re(Δ₋ tearing)      1.374966e-01  1.374966e-01  1.374966e-01  0.0e+00  OK    
Im(Δ₋ tearing)      7.427542e-01  7.427542e-01  7.427542e-01  0.0e+00  OK    
Runtime (s)         20.9s         20.1s         20.0s                  --    
=============================================================================
Summary (last vs prev): 4 unchanged


================================================================
Case: ggj_reference — GGJ inner-layer Galerkin solver, Glasser & Wang 2020 Eq. 55 with physical τ_A, τ_R, 1 kHz rotation (Q ≈ 0.22i)
================================================================

Regression Tracking: ggj_reference
================================================================================
Ref 1: db90e824d  @ db90e824d (2026-10-26)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
Ref 2: 7fd923d36  @ 7fd923d36 (2026-10-27)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
Ref 3: 125f4a069  @ 125f4a069 (2026-10-27)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
--------------------------------------------------------------------------------
Quantity            db90e824d      7fd923d36      125f4a069      Δ prev   Status
--------------------------------------------------------------------------------
Re(Δ₊ interchange)  1.225728e+03   1.225728e+03   1.225728e+03   0.0e+00  OK    
Im(Δ₊ interchange)  2.064823e+04   2.064823e+04   2.064823e+04   0.0e+00  OK    
Re(Δ₋ tearing)      -5.345663e+00  -5.345663e+00  -5.345663e+00  0.0e+00  OK    
Im(Δ₋ tearing)      2.592091e+01   2.592091e+01   2.592091e+01   0.0e+00  OK    
Runtime (s)         9.1s           9.2s           9.3s                    --    
================================================================================
Summary (last vs prev): 4 unchanged


================================================================
Case: solovev_kinetic_calculated — Solovev, n=1, kinetic_source=calculated, kinetic_factor=1.0, 50/50 D-T multi-ion kinetic matrices, mode-converged band (delta_m=8, mpert=32); pressure-consistent kinetic.dat (n·T tied to the Solovev P₀≈4.27e4 Pa).
================================================================

Regression Tracking: solovev_kinetic_calculated
===============================================================================================
Ref 1: db90e824d  @ db90e824d (2026-10-26)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
Ref 2: 7fd923d36  @ 7fd923d36 (2026-10-27)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
Ref 3: 125f4a069  @ 125f4a069 (2026-10-27)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
-----------------------------------------------------------------------------------------------
Quantity                           db90e824d      7fd923d36      125f4a069      Δ prev   Status
-----------------------------------------------------------------------------------------------
vacuum energy Re(ev[1])            1.054739e+01   1.054739e+01   1.054739e+01   0.0e+00  OK    
q0                                 1.900003e+00   1.900003e+00   1.900003e+00   0.0e+00  OK    
NTV fgar quadrature torque [N·m]   2.267351e-03   2.267351e-03   2.267351e-03   0.0e+00  OK    
||xi_clebsch_alpha||               6.041963e-01   6.041963e-01   6.041963e-01   0.0e+00  OK    
total energy Re(et[1])             1.828278e+00   1.828278e+00   1.828278e+00   0.0e+00  OK    
total energy Im(et[1])             -1.326607e+00  -1.326607e+00  -1.326607e+00  0.0e+00  OK    
plasma energy Re(ep[1])            -8.719112e+00  -8.719112e+00  -8.719112e+00  0.0e+00  OK    
ODE steps (saved)                  608            608            608            0.0e+00  OK    
# singular surfaces                2              2              2              0.0e+00  OK    
boundary-response torque [N·m]     2.285518e-03   2.285518e-03   2.285518e-03   0.0e+00  OK    
singular psi locations             [2 elem]       [2 elem]       [2 elem]       0.0e+00  OK    
total energy (all)                 [32 elem]      [32 elem]      [32 elem]      0.0e+00  OK    
ODE steps (total)                  607            607            607            0.0e+00  OK    
mpert                              32             32             32             0.0e+00  OK    
q95                                3.147422e+00   3.147422e+00   3.147422e+00   0.0e+00  OK    
||Jb_theta_reg||                   3.945600e-03   3.945600e-03   3.945600e-03   0.0e+00  OK    
Runtime (s)                        203.3s         204.2s         205.6s                  --    
T_xe applied-forcing torque [N·m]  2.285518e-03   2.285518e-03   2.285518e-03   0.0e+00  OK    
||dxi_clebsch_psi/dpsi||           3.791914e+00   3.791914e+00   3.791914e+00   0.0e+00  OK    
singular q values                  [2 elem]       [2 elem]       [2 elem]       0.0e+00  OK    
npert                              1              1              1              0.0e+00  OK    
===============================================================================================
Summary (last vs prev): 20 unchanged


================================================================
Case: solovev_kinetic_multiion — Solovev n=1, ideal + PE + multi-ion NTV (D + T + electron summed)
================================================================

Regression Tracking: solovev_kinetic_multiion
=========================================================================================
Ref 1: db90e824d  @ db90e824d (2026-10-26)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
Ref 2: 7fd923d36  @ 7fd923d36 (2026-10-27)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
Ref 3: 125f4a069  @ 125f4a069 (2026-10-27)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
-----------------------------------------------------------------------------------------
Quantity                     db90e824d      7fd923d36      125f4a069      Δ prev   Status
-----------------------------------------------------------------------------------------
NTV total (D+T+imp+e) [N·m]  3.141767e+01   3.141767e+01   3.141767e+01   0.0e+00  OK    
NTV Deuterium [N·m]          1.973730e+01   1.973730e+01   1.973730e+01   0.0e+00  OK    
NTV Tritium [N·m]            2.046293e+01   2.046293e+01   2.046293e+01   0.0e+00  OK    
NTV electron [N·m]           -8.782557e+00  -8.782557e+00  -8.782557e+00  0.0e+00  OK    
total energy Re(et[1])       1.090560e-02   1.090560e-02   1.090560e-02   0.0e+00  OK    
# singular surfaces          2              2              2              0.0e+00  OK    
Runtime (s)                  202.5s         195.6s         196.9s                  --    
=========================================================================================
Summary (last vs prev): 6 unchanged


================================================================
Case: solovev_kinetic_ntv — Solovev analytical equilibrium, n=1, ideal + PE + NTV torque quadrature
================================================================

Regression Tracking: solovev_kinetic_ntv
====================================================================================================
Ref 1: db90e824d  @ db90e824d (2026-10-26)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
Ref 2: 7fd923d36  @ 7fd923d36 (2026-10-27)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
Ref 3: 125f4a069  @ 125f4a069 (2026-10-27)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
----------------------------------------------------------------------------------------------------
Quantity                                   db90e824d     7fd923d36     125f4a069     Δ prev   Status
----------------------------------------------------------------------------------------------------
NTV torque fgar [Re, Im]                   [1 elem]      [1 elem]      [1 elem]      0.0e+00  OK    
NTV ψ quadrature evaluations               45            45            45            0.0e+00  OK    
fluid CGL energy fcgl [J]                  1.552303e+01  1.552303e+01  1.552303e+01  0.0e+00  OK    
root-area-weighted total energy Re(et[1])  1.090560e-02  1.090560e-02  1.090560e-02  0.0e+00  OK    
# singular surfaces                        2             2             2             0.0e+00  OK    
singular psi locations                     [2 elem]      [2 elem]      [2 elem]      0.0e+00  OK    
q0                                         1.900006e+00  1.900006e+00  1.900006e+00  0.0e+00  OK    
Runtime (s)                                199.1s        196.6s        198.1s                 --    
====================================================================================================
Summary (last vs prev): 7 unchanged


================================================================
Case: solovev_kinetic_nuzero — Solovev, n=1, kinetic_source=calculated, nutype=zero (collisionless energy integral), 50/50 D-T multi-ion kinetic matrices, mode-converged band (delta_m=8, mpert=32). Reuses the calculated example deck via override; pressure-consistent kinetic.dat.
================================================================

Regression Tracking: solovev_kinetic_nuzero
=====================================================================================
Ref 1: db90e824d  @ db90e824d (2026-10-26)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
Ref 2: 7fd923d36  @ 7fd923d36 (2026-10-27)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
Ref 3: 125f4a069  @ 125f4a069 (2026-10-27)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
-------------------------------------------------------------------------------------
Quantity                 db90e824d      7fd923d36      125f4a069      Δ prev   Status
-------------------------------------------------------------------------------------
vacuum energy Re(ev[1])  1.058613e+01   1.058613e+01   1.058613e+01   0.0e+00  OK    
q0                       1.900003e+00   1.900003e+00   1.900003e+00   0.0e+00  OK    
total energy Re(et[1])   2.290965e+00   2.290965e+00   2.290965e+00   0.0e+00  OK    
total energy Im(et[1])   -1.564546e+00  -1.564546e+00  -1.564546e+00  0.0e+00  OK    
plasma energy Re(ep[1])  -8.295163e+00  -8.295163e+00  -8.295163e+00  0.0e+00  OK    
ODE steps (saved)        608            608            608            0.0e+00  OK    
# singular surfaces      2              2              2              0.0e+00  OK    
singular psi locations   [2 elem]       [2 elem]       [2 elem]       0.0e+00  OK    
total energy (all)       [32 elem]      [32 elem]      [32 elem]      0.0e+00  OK    
ODE steps (total)        607            607            607            0.0e+00  OK    
mpert                    32             32             32             0.0e+00  OK    
q95                      3.147422e+00   3.147422e+00   3.147422e+00   0.0e+00  OK    
Runtime (s)              208.9s         203.3s         201.2s                  --    
singular q values        [2 elem]       [2 elem]       [2 elem]       0.0e+00  OK    
npert                    1              1              1              0.0e+00  OK    
=====================================================================================
Summary (last vs prev): 14 unchanged


================================================================
Case: solovev_multi_n — Solovev analytical equilibrium, multi-n, ideal stability
================================================================

Regression Tracking: solovev_multi_n
==================================================================================================
Ref 1: db90e824d  @ db90e824d (2026-10-26)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
Ref 2: 7fd923d36  @ 7fd923d36 (2026-10-27)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
Ref 3: 125f4a069  @ 125f4a069 (2026-10-27)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
--------------------------------------------------------------------------------------------------
Quantity                      db90e824d        7fd923d36        125f4a069        Δ prev     Status
--------------------------------------------------------------------------------------------------
total energy Re(et[1])        -2.134718e+00    -2.134718e+00    -2.134718e+00    0.0e+00    OK    
total energy Im(et[1])        2.553238e-10     2.553238e-10     2.553238e-10     0.0e+00    OK    
vacuum matrix min eigenvalue  1.730832e+00     1.730832e+00     1.730832e+00     0.0e+00    OK    
plasma energy (all)           [70 elem]        [70 elem]        [70 elem]        0.0e+00    OK    
vacuum energy (all)           [70 elem]        [70 elem]        [70 elem]        0.0e+00    OK    
total energy (all)            [70 elem]        [70 elem]        [70 elem]        0.0e+00    OK    
ODE steps (saved)             56               56               56               0.0e+00    OK    
ODE steps (total)             1044             1044             1044             0.0e+00    OK    
q0                            1.900006e+00     1.900006e+00     1.900006e+00     0.0e+00    OK    
q95                           3.147422e+00     3.147422e+00     3.147422e+00     0.0e+00    OK    
# singular surfaces           3                3                3                0.0e+00    OK    
singular psi locations        [3 elem]         [3 elem]         [3 elem]         0.0e+00    OK    
mpert                         35               35               35               0.0e+00    OK    
npert                         2                2                2                0.0e+00    OK    
q profile (checksum)          2340b888d410...  2340b888d410...  2340b888d410...  identical  OK    
Runtime (s)                   175.1s           174.4s           183.8s                      --    
==================================================================================================
Summary (last vs prev): 15 unchanged


================================================================
Case: solovev_n1 — Solovev analytical equilibrium, n=1, ideal stability
================================================================

Regression Tracking: solovev_n1
==================================================================================================
Ref 1: db90e824d  @ db90e824d (2026-10-26)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
Ref 2: 7fd923d36  @ 7fd923d36 (2026-10-27)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
Ref 3: 125f4a069  @ 125f4a069 (2026-10-27)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 8 threads/4 BLAS, jit build
--------------------------------------------------------------------------------------------------
Quantity                      db90e824d        7fd923d36        125f4a069        Δ prev     Status
--------------------------------------------------------------------------------------------------
total energy Re(et[1])        1.090560e-02     1.090560e-02     1.090560e-02     0.0e+00    OK    
total energy Im(et[1])        1.308749e-10     1.308749e-10     1.308749e-10     0.0e+00    OK    
plasma energy Re(ep[1])       -1.041640e+01    -1.041640e+01    -1.041640e+01    0.0e+00    OK    
vacuum energy Re(ev[1])       1.042730e+01     1.042730e+01     1.042730e+01     0.0e+00    OK    
vacuum matrix min eigenvalue  2.170703e+00     2.170703e+00     2.170703e+00     0.0e+00    OK    
plasma energy (all)           [32 elem]        [32 elem]        [32 elem]        0.0e+00    OK    
vacuum energy (all)           [32 elem]        [32 elem]        [32 elem]        0.0e+00    OK    
total energy (all)            [32 elem]        [32 elem]        [32 elem]        0.0e+00    OK    
ODE steps (saved)             287              287              287              0.0e+00    OK    
ODE steps (total)             285              285              285              0.0e+00    OK    
q0                            1.900006e+00     1.900006e+00     1.900006e+00     0.0e+00    OK    
q95                           3.147422e+00     3.147422e+00     3.147422e+00     0.0e+00    OK    
beta_t                        4.621027e-02     4.621027e-02     4.621027e-02     0.0e+00    OK    
beta_n                        3.217775e+00     3.217775e+00     3.217775e+00     0.0e+00    OK    
# singular surfaces           2                2                2                0.0e+00    OK    
singular psi locations        [2 elem]         [2 elem]         [2 elem]         0.0e+00    OK    
singular q values             [2 elem]         [2 elem]         [2 elem]         0.0e+00    OK    
mpert                         32               32               32               0.0e+00    OK    
npert                         1                1                1                0.0e+00    OK    
q profile (checksum)          2340b888d410...  2340b888d410...  2340b888d410...  identical  OK    
pressure profile (checksum)   108b947087e6...  108b947087e6...  108b947087e6...  identical  OK    
ca_left (checksum)            21c2d085d11b...  21c2d085d11b...  21c2d085d11b...  identical  OK    
Runtime (s)                   181.9s           182.1s           177.0s                      --    
==================================================================================================
Summary (last vs prev): 22 unchanged

Notes for reviewers

Base. #556 has merged, so this PR now targets develop and the report compares against it. #574 is stacked on this branch.

What a listed key does now. _drop_deprecated_keys! warned, deleted the key and let the run continue. It is now _stop_on_deprecated_keys, which raises one error naming every listed key the section sets, worded for one key or several, and asking the user to remove them from gpec.toml. All five call sites stay: [Equilibrium], [ForceFreeStates], [KineticForces] and [PerturbedEquilibrium] in the driver, and [Equilibrium] in Rerun.jl. A replay also checks its stored deck before applying overrides, which can set keys but not delete them, and stops with its own message: the file was written by an older GPEC version, so re-run from the original deck. The stop is deliberate there too, not a warn-and-drop, so a replay never silently runs a different deck than the one recorded. The toml-no-deprecated-keys pre-commit hook covers the 15 new keys. test/runtests_equil.jl checks that each list stops with the right wording, that a clean table passes, that main stops on a staged deck with [KineticForces] moment = 1, and that no listed [ForceFreeStates], [KineticForces] or [PerturbedEquilibrium] key is still a control field; the power_* keys are still internal EquilibriumConfig fields derived from jac_type, so that check skips [Equilibrium]. test/runtests_rerun_from_h5.jl replays a gpec.h5 whose stored deck sets fixed_boundary and checks the replay message. #568 put local_stability_flag on the [ForceFreeStates] list, so with this PR a deck that still sets it stops too, and the hook covers it. (#554 settled gal_cut_solution: it is now a Galerkin(; cut_solution=true) solve option, not a deck key.)

Dead code removed.

  • KineticForces: KineticForcesInternal.tphi/tsurf/teq/wtw, KineticForcesState.completed, BounceData.dlambda and the weights computed only for it, the iunit constant, and print_summary.
  • The energy-integration trajectory records: EnergyIntegrationResult was never constructed, so MethodResult.records was always empty and write_integration_records! never ran. The struct, the field, the writer, its ten EnergyIntegrals/ schema annotations, and the docs describing that group (kinetic_forces.md, hdf5-conventions.md) are gone.
  • ximag, accepted for backward compatibility and never read: the field on EnergyParams and PitchGARParams, and its keyword in the energy and pitch integrators. The unused divxfac argument of compute_kinetic_matrices_at_psi! goes too.
  • PerturbedEquilibrium: PerturbedEquilibriumInternal.singular_coupling_metrics and an unused readdlm import.
  • Hygiene: the Step N comments in PerturbedEquilibrium.jl and ResponseMatrices.jl, and the issue references in PerturbedEquilibrium and KineticForces source. The power_* docstrings now say "not a deck key".
  • The 20 lines setting removed keys in nine example decks, and fixed_boundary in the Fortran benchmark script's generated decks.

fixed_boundary had a Fortran meaning. Fortran's fixed_boundary_flag sets the control-surface flux to the applied flux (foutmn = finmn instead of permeabmats · finmn) while the interior still answers it; only the a10 and a5 benchmark examples (the MARS/PENT a10 NTV benchmark) set it true. Julia once carried the same branch in singular coupling, and it was lost when that loop was restructured per toroidal mode in February. Nothing has read the key since, so it is deleted here; restoring it is a small change if the a10 PE benchmark is ported.

Unchanged on purpose. write_outputs_to_HDF5 and output_filename stay for the save-function work; xs_m, dbob_m and divx_m are live.

🤖 Generated with Claude Code

…m keys and stop runs that set deprecated keys
@matt-pharr matt-pharr self-assigned this Oct 23, 2026
@matt-pharr
matt-pharr requested a review from logan-nc October 23, 2026 16:49
@github-actions github-actions Bot added api Config key, output dataset or exported name changed changed-results Results move or an interface breaks - read before upgrading labels Oct 23, 2026
@matt-pharr
matt-pharr added this pull request to stack #557 October 23, 2026 19:02
… into refactor/deprecate-noop-control-keys

# Conflicts:
#	docs/development/hdf5-conventions.md
#	test/runtests_kinetic.jl

@logan-nc logan-nc left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Read in full; every deleted key grepped on develop (none is read anywhere; filter_modes had one test-only use the PR replaces). Four things for you before I approve; nothing pushed.

  1. The replay stop has a large blast radius. Stopping a replay on retired keys is deliberate per the new runtests_rerun_from_h5 testset, so this is about scope and message, not intent: main(["run.h5"]) runs the same stops on the deck stored in Input/gpec_toml_raw, and all eight example decks on develop set fixed_boundary/output_eigenmodes (some moment), so every gpec.h5 written to date now refuses to replay, and the message tells the user to edit a gpec.toml a replay does not have (apply_toml_overrides! can set keys, not delete them). Either keep warn-and-drop on the replay path only, which the deleted test comment said was its purpose, or give the replay its own message ("re-run from the original deck"). The body mentions only gpec.toml.
  2. Undisclosed removals. KineticForcesState/MethodResult lose tphi, tsurf, teq, wtw, records, completed; the EnergyIntegrals/* HDF5 group and write_integration_records! go; PerturbedEquilibriumState.singular_coupling_metrics goes. The release note names only print_summary and EnergyIntegrationResult. The EnergyIntegrals group is a schema removal and belongs in the Migration line even if nothing wrote it in practice.
  3. No end-to-end test of the stop. runtests_equil.jl calls _stop_on_deprecated_keys directly and the only main path tested is the use_parallel rerun. One @test_throws on a staged deck with [KineticForces] moment = 1 would cover the two new call sites.
  4. Message grammar for a single key ("sets moment, which no longer exist; remove them"). Suggest: "[$section] sets $(join(...)) — no longer a key; remove from gpec.toml", or pluralise on length(found).

Docs hunks (kinetic_forces.md, hdf5-conventions.md, toml-conventions.md) match the code; the pre-commit regex extension is the right companion.

Collision facts, measured with git merge-tree: 2 hunks vs develop (hdf5-conventions.md, PerturbedEquilibrium.jl); 12 hunks vs the KineticForces stack #579→#584 (the ximag/dlambda/divxfac deletions vs the signatures that stack rewrote) and Torque.jl vs #588. Whichever side lands second takes the rebase; on that stack it is four harness re-stamps, here it is one.

Base automatically changed from bugfix/pe-refuse-unpublished-wp to develop October 26, 2026 08:27
…it to the original deck

A replay checks its stored deck before overrides and says the file was written by an older GPEC version, since overrides cannot delete keys. The stop message pluralizes on the number of keys found. Tests cover the stop through main on a staged deck and on a replayed gpec.h5.
@matt-pharr
matt-pharr force-pushed the refactor/deprecate-noop-control-keys branch from 07e137e to 05d1faa Compare October 26, 2026 14:14
@matt-pharr
matt-pharr requested a review from logan-nc October 26, 2026 15:10
@matt-pharr

Copy link
Copy Markdown
Collaborator Author

Thanks, all four are addressed in 05d1faa. Taking them in order:

  1. Replay stop. Matthew chose to keep the stop rather than warn and drop, so a replay never silently runs a different deck than the one it recorded, but it now has its own message. build_inputs_from_h5 checks the stored deck against every list before applying overrides, since overrides can set keys but not delete them. It stops with "<file> was written by an older GPEC version; re-run from the original deck instead of replaying it". An override that sets a retired key is still caught by the driver's stop with the gpec.toml wording.
  2. Undisclosed removals. The Migration line now lists them all: KineticForcesInternal.tphi/tsurf/teq/wtw, MethodResult.records, KineticForcesState.completed, BounceData.dlambda, the two ximag fields, PerturbedEquilibriumInternal.singular_coupling_metrics (on Internal, not State), write_integration_records!, and the EnergyIntegrals/ schema group.
  3. End-to-end test. runtests_equil.jl runs main on a staged copy of the Solovev deck with [KineticForces] moment = 1 and checks the stop. runtests_rerun_from_h5.jl replays a gpec.h5 whose stored deck sets fixed_boundary and checks the "older GPEC version" message.
  4. Grammar. The message is worded for one key ("which is no longer a key") or several ("which are no longer keys"), and the tests check both.

Restamped against develop (578376d) over all 19 cases: nothing moves (263 quantities unchanged, gal_resistive_pe N/A on both refs).

@matt-pharr matt-pharr added this to the GPEC v2.0.0 milestone Oct 26, 2026

@logan-nc logan-nc left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-read 05d1faa and the develop merge on top. All four items are in: the replay check runs every list on the stored deck before overrides and stops with the "older GPEC version" wording; the Migration line names every removed field, function and the EnergyIntegrals/ group; main on a staged deck with [KineticForces] moment = 1 and a replay with a stored fixed_boundary are both tested end to end; the message is worded for one key or several. Ready from my side.

The only red is the stamp check: src/ changed after 05d1faa through the develop merge (1ce3f7b), so CI wants the harness re-run at the current head and the stamp updated. A three-way merge against develop shows no conflicting hunks, so the DIRTY badge should clear on its own.

… re-formed analytic grid to a passing test

setup_equilibrium is gone from develop; three tests still called it. The equilibrium now stores its analytic config, so the deck/API parity test's known drift no longer occurs.
@matt-pharr
matt-pharr merged commit 27cf2bf into develop Oct 27, 2026
8 of 9 checks passed
@matt-pharr
matt-pharr deleted the refactor/deprecate-noop-control-keys branch October 27, 2026 08:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

api Config key, output dataset or exported name changed changed-results Results move or an interface breaks - read before upgrading

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants