Skip to content

Equilibrium - BUGFIX! - End the original inverse grid at psilow and psihigh - #535

Merged
matt-pharr merged 2 commits into
developfrom
bugfix/inverse-original-grid-psi-limits
Oct 23, 2026
Merged

matt-pharr merged 2 commits into
developfrom
bugfix/inverse-original-grid-psi-limits

Conversation

@StuartBenjamin

@StuartBenjamin StuartBenjamin commented Oct 19, 2026 •

Copy link
Copy Markdown
Collaborator

Release note

  • Audience: users
  • Numerical impact: results change only for inverse equilibria with grid_type = "original", which no harness case uses; no tracked quantity moves (harness @ de6da4b)
  • Migration: inverse runs with grid_type = "original" now honor psilow and psihigh; to reproduce the old grid, set them to the input file's first off-axis and last ψ surfaces

Inverse equilibria run with grid_type = "original" now start the ψ grid at psilow and end it at psihigh, as the other grid types do. Before, both limits were ignored and the grid ran to the input file's last surface, which on files that reach ψ_N ≈ 1 moved the edge q and every Δ′.

Regression report

develop bca7ce7 vs this PR de6da4b, all 19 cases on ITER SDCC: 17 unchanged, gal_resistive_pe N/A on both refs, and diiid_slayer_n1 flags SLAYER γ_Hz at the 2/1 surface (222.358 → 222.161 Hz; 3/1 and 4/1 identical). That is run-to-run scatter, not this change: the case uses the default grid_type = "auto", which this PR does not touch; SLAYER's AMR growth-rate extraction depends on the global random-number state, which the open #572 removes; and develop at 9a51446 gave 222.161 Hz in an earlier run.

================================================================
Case: diiid_error_field — DIII-D-like error-field assessment, n=1: ErrorFields stage with the NTV-limited correction couplings
================================================================

Regression Report: diiid_error_field
=======================================================================================================================
Ref 1: develop  @ bca7ce751 (2026-10-23)
       env: julia 1.12.6, x86_64-linux-gnu, manifest aa94b997 (pinned), 16 threads/8 BLAS, jit build
Ref 2: bugfix/inverse-original-grid-psi-limits  @ de6da4bdf (2026-10-23)
       env: julia 1.12.6, x86_64-linux-gnu, manifest aa94b997 (pinned), 16 threads/8 BLAS, jit build
-----------------------------------------------------------------------------------------------------------------------
Quantity                                         develop       bugfix/inverse-original-grid-psi-limits  Diff     Status
-----------------------------------------------------------------------------------------------------------------------
EFC overlap per kAt                              [1 elem]      [1 elem]                                 0.0e+00  OK    
EFC whole-field NTV torque per kAt² [N·m]        [1 elem]      [1 elem]                                 0.0e+00  OK    
EFC residual-field NTV torque per kAt² [N·m]     [1 elem]      [1 elem]                                 0.0e+00  OK    
EFC reference rotation ω_ref [rad/s]             [1 elem]      [1 elem]                                 0.0e+00  OK    
EFC rotation-scan shifts [rad/s]                 [9 elem]      [9 elem]                                 0.0e+00  OK    
EFC residual torque against rotation [N·m/kAt²]  [9 elem]      [9 elem]                                 0.0e+00  OK    
dominant-coupling singular values                [3 elem]      [3 elem]                                 0.0e+00  OK    
|delta_nominal| of coil set 1                    1.407010e-06  1.407010e-06                             0.0e+00  OK    
|Σ δ_as_designed| of the error-field coils       2.116053e-18  2.116053e-18                             0.0e+00  OK    
Monte Carlo mean |δ| of the error-field coils    4.701442e-05  4.701442e-05                             0.0e+00  OK    
Runtime (s)                                      408.7s        413.6s                                            --    
=======================================================================================================================
Summary: 10 unchanged


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

Regression Report: diiid_multi_n
=========================================================================================================================================
Ref 1: develop  @ bca7ce751 (2026-10-23)
       env: julia 1.12.6, x86_64-linux-gnu, manifest aa94b997 (pinned), 2 threads/1 BLAS, jit build
Ref 2: bugfix/inverse-original-grid-psi-limits  @ de6da4bdf (2026-10-23)
       env: julia 1.12.6, x86_64-linux-gnu, manifest aa94b997 (pinned), 2 threads/1 BLAS, jit build
-----------------------------------------------------------------------------------------------------------------------------------------
Quantity                                                      develop          bugfix/inverse-original-grid-psi-limits  Diff       Status
-----------------------------------------------------------------------------------------------------------------------------------------
total energy Re(et[1])                                        -5.750527e-01    -5.750527e-01                            0.0e+00    OK    
total energy (all)                                            [58 elem]        [58 elem]                                0.0e+00    OK    
ODE steps (saved)                                             629              629                                      0.0e+00    OK    
mpert                                                         29               29                                       0.0e+00    OK    
npert                                                         2                2                                        0.0e+00    OK    
toroidal mode label of each mode index (checksum)             8d8d42b8832d...  8d8d42b8832d...                          identical  OK    
permeability diagonal P~_ii (all n blocks)                    [58 elem]        [58 elem]                                0.0e+00    OK    
forcing b~ (root-area-weighted), n = 1, 2                     [58 elem]        [58 elem]                                0.0e+00    OK    
response b~ (root-area-weighted), n = 1, 2                    [58 elem]        [58 elem]                                0.0e+00    OK    
PE plasma energy (sum over n)                                 2.936745e+00     2.936745e+00                             0.0e+00    OK    
PE vacuum energy (sum over n)                                 3.114147e+00     3.114147e+00                             0.0e+00    OK    
PE surface energy (sum over n)                                3.523659e+00     3.523659e+00                             0.0e+00    OK    
PE toroidal torque sum_n -2n Im(Phi_n' Lambda_nn^-1 Phi_n)/4  1.820467e-06     1.820467e-06                             0.0e+00    OK    
resonant n per row (rows sorted by psi across n)              [7 elem]         [7 elem]                                 0.0e+00    OK    
resonant m per row                                            [7 elem]         [7 elem]                                 0.0e+00    OK    
resonant area-weighted field b^r per row                      [7 elem]         [7 elem]                                 0.0e+00    OK    
island half-widths per row                                    [7 elem]         [7 elem]                                 0.0e+00    OK    
Chirikov parameter per row                                    [7 elem]         [7 elem]                                 0.0e+00    OK    
forcing-driven Delta' per row                                 [7 elem]         [7 elem]                                 0.0e+00    OK    
Runtime (s)                                                   198.3s           199.0s                                              --    
=========================================================================================================================================
Summary: 19 unchanged


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

Regression Report: diiid_n1
=========================================================================================================================
Ref 1: develop  @ bca7ce751 (2026-10-23)
       env: julia 1.12.6, x86_64-linux-gnu, manifest aa94b997 (pinned), 2 threads/1 BLAS, jit build
Ref 2: bugfix/inverse-original-grid-psi-limits  @ de6da4bdf (2026-10-23)
       env: julia 1.12.6, x86_64-linux-gnu, manifest aa94b997 (pinned), 2 threads/1 BLAS, jit build
-------------------------------------------------------------------------------------------------------------------------
Quantity                                      develop          bugfix/inverse-original-grid-psi-limits  Diff       Status
-------------------------------------------------------------------------------------------------------------------------
total energy Re(et[1])                        8.006123e-01     8.006123e-01                             0.0e+00    OK    
total energy Im(et[1])                        7.924925e-05     7.924925e-05                             0.0e+00    OK    
plasma energy Re(ep[1])                       -1.372261e+00    -1.372261e+00                            0.0e+00    OK    
vacuum energy Re(ev[1])                       2.172874e+00     2.172874e+00                             0.0e+00    OK    
vacuum matrix min eigenvalue                  1.873975e-01     1.873975e-01                             0.0e+00    OK    
plasma energy (all)                           [35 elem]        [35 elem]                                0.0e+00    OK    
vacuum energy (all)                           [35 elem]        [35 elem]                                0.0e+00    OK    
total energy (all)                            [35 elem]        [35 elem]                                0.0e+00    OK    
ODE steps (saved)                             800              800                                      0.0e+00    OK    
ODE steps (total)                             795              795                                      0.0e+00    OK    
q0                                            1.204212e+00     1.204212e+00                             0.0e+00    OK    
q95                                           4.781723e+00     4.781723e+00                             0.0e+00    OK    
beta_t                                        1.327024e-02     1.327024e-02                             0.0e+00    OK    
beta_n                                        1.372511e+00     1.372511e+00                             0.0e+00    OK    
internal inductance li1                       8.842269e-01     8.842269e-01                             0.0e+00    OK    
internal inductance li2                       7.080757e-01     7.080757e-01                             0.0e+00    OK    
internal inductance li3                       7.304340e-01     7.304340e-01                             0.0e+00    OK    
poloidal beta betap1                          6.680739e-01     6.680739e-01                             0.0e+00    OK    
poloidal beta betap2                          5.349836e-01     5.349836e-01                             0.0e+00    OK    
poloidal beta betap3                          5.518764e-01     5.518764e-01                             0.0e+00    OK    
# singular surfaces                           5                5                                        0.0e+00    OK    
singular psi locations                        [5 elem]         [5 elem]                                 0.0e+00    OK    
singular q values                             [5 elem]         [5 elem]                                 0.0e+00    OK    
current beta betaj                            4.236480e-01     4.236480e-01                             0.0e+00    OK    
plasma volume                                 1.829472e+01     1.829472e+01                             0.0e+00    OK    
plasma current                                1.152130e+00     1.152130e+00                             0.0e+00    OK    
mpert                                         35               35                                       0.0e+00    OK    
npert                                         1                1                                        0.0e+00    OK    
toroidal field bt0                            2.006573e+00     2.006573e+00                             0.0e+00    OK    
wall field bwall                              3.880145e-01     3.880145e-01                             0.0e+00    OK    
aspect ratio                                  2.845746e+00     2.845746e+00                             0.0e+00    OK    
elongation kappa                              1.708322e+00     1.708322e+00                             0.0e+00    OK    
q profile (checksum)                          ea980cf7e8cf...  ea980cf7e8cf...                          identical  OK    
pressure profile (checksum)                   75be5949b7c1...  75be5949b7c1...                          identical  OK    
Mercier D_I profile (checksum)                cafa40526b39...  cafa40526b39...                          identical  OK    
resistive interchange D_R profile (checksum)  c70e46071c9d...  c70e46071c9d...                          identical  OK    
ballooning Delta' profile (checksum)          029149d57e8c...  029149d57e8c...                          identical  OK    
island half-widths                            [5 elem]         [5 elem]                                 0.0e+00    OK    
Chirikov parameter                            [5 elem]         [5 elem]                                 0.0e+00    OK    
||resonant area-weighted field||              5.288864e-04     5.288864e-04                             0.0e+00    OK    
dominant-coupling singular values             [3 elem]         [3 elem]                                 0.0e+00    OK    
|forcing overlap with dominant mode|          1.411634e-04     1.411634e-04                             0.0e+00    OK    
|delta_nominal| of coil set 1                 7.035049e-05     7.035049e-05                             0.0e+00    OK    
||ddelta/d(shift)|| over coil sets            1.245519e-04     1.245519e-04                             0.0e+00    OK    
||ddelta/d(tilt)|| over coil sets             4.176407e-07     4.176407e-07                             0.0e+00    OK    
PE plasma energy                              3.320677e+00     3.320677e+00                             0.0e+00    OK    
PE vacuum energy                              3.174510e+00     3.174510e+00                             0.0e+00    OK    
PE surface energy                             5.509017e+00     5.509017e+00                             0.0e+00    OK    
PE toroidal torque                            1.119454e-04     1.119454e-04                             0.0e+00    OK    
NTV torque FGAR [N·m]                         5.483495e-01     5.483495e-01                             0.0e+00    OK    
NTV kinetic energy dW FGAR [J]                8.163740e-02     8.163740e-02                             0.0e+00    OK    
Runtime (s)                                   293.7s           319.9s                                              --    
||forcing b~|| (root-area-weighted)           4.683330e-04     4.683330e-04                             0.0e+00    OK    
resonant area-weighted field b^r              [5 elem]         [5 elem]                                 0.0e+00    OK    
=========================================================================================================================
Summary: 53 unchanged


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

Regression Report: diiid_n1_riccati
======================================================================================================
Ref 1: develop  @ bca7ce751 (2026-10-23)
       env: julia 1.12.6, x86_64-linux-gnu, manifest aa94b997 (pinned), 2 threads/1 BLAS, jit build
Ref 2: bugfix/inverse-original-grid-psi-limits  @ de6da4bdf (2026-10-23)
       env: julia 1.12.6, x86_64-linux-gnu, manifest aa94b997 (pinned), 2 threads/1 BLAS, jit build
------------------------------------------------------------------------------------------------------
Quantity                       develop        bugfix/inverse-original-grid-psi-limits  Diff     Status
------------------------------------------------------------------------------------------------------
delta prime (BVP diagonal)     [5 elem]       [5 elem]                                 0.0e+00  OK    
delta prime (raw side-major)   [10 elem]      [10 elem]                                0.0e+00  OK    
edge coil response delta_coil  [10 elem]      [10 elem]                                0.0e+00  OK    
total energy Re(et[1])         8.031971e-01   8.031971e-01                             0.0e+00  OK    
plasma energy Re(ep[1])        -1.368535e+00  -1.368535e+00                            0.0e+00  OK    
vacuum energy Re(ev[1])        2.171732e+00   2.171732e+00                             0.0e+00  OK    
total energy (all)             [35 elem]      [35 elem]                                0.0e+00  OK    
# singular surfaces            5              5                                        0.0e+00  OK    
singular psi locations         [5 elem]       [5 elem]                                 0.0e+00  OK    
singular q values              [5 elem]       [5 elem]                                 0.0e+00  OK    
ODE steps (saved)              96             96                                       0.0e+00  OK    
ODE steps (total)              2650           2650                                     0.0e+00  OK    
mpert                          35             35                                       0.0e+00  OK    
npert                          1              1                                        0.0e+00  OK    
q0                             1.204212e+00   1.204212e+00                             0.0e+00  OK    
q95                            4.781723e+00   4.781723e+00                             0.0e+00  OK    
beta_n                         1.372511e+00   1.372511e+00                             0.0e+00  OK    
Runtime (s)                    239.3s         241.3s                                            --    
======================================================================================================
Summary: 17 unchanged


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

Regression Report: diiid_n1_riccati_precompiled
======================================================================================================
Ref 1: develop  @ bca7ce751 (2026-10-23)
       env: julia 1.12.6, x86_64-linux-gnu, manifest aa94b997 (pinned), 2 threads/1 BLAS, aot build
Ref 2: bugfix/inverse-original-grid-psi-limits  @ de6da4bdf (2026-10-23)
       env: julia 1.12.6, x86_64-linux-gnu, manifest aa94b997 (pinned), 2 threads/1 BLAS, aot build
------------------------------------------------------------------------------------------------------
Quantity                       develop        bugfix/inverse-original-grid-psi-limits  Diff     Status
------------------------------------------------------------------------------------------------------
delta prime (BVP diagonal)     [5 elem]       [5 elem]                                 0.0e+00  OK    
delta prime (raw side-major)   [10 elem]      [10 elem]                                0.0e+00  OK    
edge coil response delta_coil  [10 elem]      [10 elem]                                0.0e+00  OK    
total energy Re(et[1])         8.031971e-01   8.031971e-01                             0.0e+00  OK    
plasma energy Re(ep[1])        -1.368535e+00  -1.368535e+00                            0.0e+00  OK    
vacuum energy Re(ev[1])        2.171732e+00   2.171732e+00                             0.0e+00  OK    
total energy (all)             [35 elem]      [35 elem]                                0.0e+00  OK    
# singular surfaces            5              5                                        0.0e+00  OK    
singular psi locations         [5 elem]       [5 elem]                                 0.0e+00  OK    
singular q values              [5 elem]       [5 elem]                                 0.0e+00  OK    
ODE steps (saved)              96             96                                       0.0e+00  OK    
ODE steps (total)              2650           2650                                     0.0e+00  OK    
mpert                          35             35                                       0.0e+00  OK    
npert                          1              1                                        0.0e+00  OK    
q0                             1.204212e+00   1.204212e+00                             0.0e+00  OK    
q95                            4.781723e+00   4.781723e+00                             0.0e+00  OK    
beta_n                         1.372511e+00   1.372511e+00                             0.0e+00  OK    
Runtime (s)                    34.1s          34.1s                                             --    
======================================================================================================
Summary: 17 unchanged


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

Regression Report: diiid_slayer_n1
=======================================================================================================================
Ref 1: develop  @ bca7ce751 (2026-10-23)
       env: julia 1.12.6, x86_64-linux-gnu, manifest aa94b997 (pinned), 2 threads/1 BLAS, jit build
Ref 2: bugfix/inverse-original-grid-psi-limits  @ de6da4bdf (2026-10-23)
       env: julia 1.12.6, x86_64-linux-gnu, manifest aa94b997 (pinned), 2 threads/1 BLAS, jit build
-----------------------------------------------------------------------------------------------------------------------
Quantity                            develop   bugfix/inverse-original-grid-psi-limits  Diff               Status       
-----------------------------------------------------------------------------------------------------------------------
SLAYER surface indices              [6 elem]  [6 elem]                                 0.0e+00            OK           
SLAYER poloidal m                   [6 elem]  [6 elem]                                 0.0e+00            OK           
SLAYER toroidal n                   [6 elem]  [6 elem]                                 0.0e+00            OK           
SLAYER minor radius rs              [6 elem]  [6 elem]                                 0.0e+00            OK           
SLAYER r-based shear                [6 elem]  [6 elem]                                 0.0e+00            OK           
SLAYER Lundquist S                  [6 elem]  [6 elem]                                 0.0e+00            OK           
SLAYER D_norm                       [6 elem]  [6 elem]                                 0.0e+00            OK           
SLAYER P_perp                       [6 elem]  [6 elem]                                 0.0e+00            OK           
SLAYER tauk                         [6 elem]  [6 elem]                                 0.0e+00            OK           
SLAYER iota_e                       [6 elem]  [6 elem]                                 0.0e+00            OK           
SLAYER Q_e                          [6 elem]  [6 elem]                                 0.0e+00            OK           
SLAYER Q_i                          [6 elem]  [6 elem]                                 0.0e+00            OK           
SLAYER Q_root [2/1,3/1,4/1]         [3 elem]  [3 elem]                                 1.2e-05            OK           
SLAYER ω_Hz [2/1,3/1,4/1]           [3 elem]  [3 elem]                                 1.9e-06            OK           
SLAYER γ_Hz [2/1,3/1,4/1]           [3 elem]  [3 elem]                                 1.972e-01 (0.02%)  ** CHANGED **
SLAYER no_root flags [2/1,3/1,4/1]  [3 elem]  [3 elem]                                 0.0e+00            OK           
SLAYER enabled flag                 1         1                                        0.0e+00            OK           
Runtime (s)                         290.1s    289.4s                                                      --           
=======================================================================================================================
Summary: 1 changed, 16 unchanged


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

Regression Report: diiid_truncation_n1
==============================================================================================================
Ref 1: develop  @ bca7ce751 (2026-10-23)
       env: julia 1.12.6, x86_64-linux-gnu, manifest aa94b997 (pinned), 2 threads/1 BLAS, jit build
Ref 2: bugfix/inverse-original-grid-psi-limits  @ de6da4bdf (2026-10-23)
       env: julia 1.12.6, x86_64-linux-gnu, manifest aa94b997 (pinned), 2 threads/1 BLAS, jit build
--------------------------------------------------------------------------------------------------------------
Quantity                               develop        bugfix/inverse-original-grid-psi-limits  Diff     Status
--------------------------------------------------------------------------------------------------------------
layer-overlap cap applied              1              1                                        0.0e+00  OK    
layer-overlap psilim                   9.985081e-01   9.985081e-01                             0.0e+00  OK    
first overlapping surface index        7              7                                        0.0e+00  OK    
diffusive-resistive layer widths (Δψ)  [7 elem]       [7 elem]                                 0.0e+00  OK    
qlim                                   6.200000e+00   6.200000e+00                             0.0e+00  OK    
psilim                                 9.949767e-01   9.949767e-01                             0.0e+00  OK    
mpert                                  37             37                                       0.0e+00  OK    
# singular surfaces                    5              5                                        0.0e+00  OK    
singular q values                      [5 elem]       [5 elem]                                 0.0e+00  OK    
singular psi locations                 [5 elem]       [5 elem]                                 0.0e+00  OK    
plasma energy Re(ep[1])                -1.372379e+00  -1.372379e+00                            0.0e+00  OK    
total energy Re(et[1])                 8.005437e-01   8.005437e-01                             0.0e+00  OK    
Runtime (s)                            192.3s         199.7s                                            --    
==============================================================================================================
Summary: 12 unchanged


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

Regression Report: efit_fixedbdy_separatrix
==================================================================================================
Ref 1: develop  @ bca7ce751 (2026-10-23)
       env: julia 1.12.6, x86_64-linux-gnu, manifest aa94b997 (pinned), 2 threads/1 BLAS, jit build
Ref 2: bugfix/inverse-original-grid-psi-limits  @ de6da4bdf (2026-10-23)
       env: julia 1.12.6, x86_64-linux-gnu, manifest aa94b997 (pinned), 2 threads/1 BLAS, jit build
--------------------------------------------------------------------------------------------------
Quantity                    develop       bugfix/inverse-original-grid-psi-limits  Diff     Status
--------------------------------------------------------------------------------------------------
psio (total poloidal flux)  3.344390e-01  3.344390e-01                             0.0e+00  OK    
q0                          1.155202e+00  1.155202e+00                             0.0e+00  OK    
q95                         5.741022e+00  5.741022e+00                             0.0e+00  OK    
beta_t                      3.945172e-05  3.945172e-05                             0.0e+00  OK    
beta_n                      1.009505e-01  1.009505e-01                             0.0e+00  OK    
Runtime (s)                 52.6s         52.8s                                             --    
==================================================================================================
Summary: 5 unchanged


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

Regression Report: gal_resistive_diiid
===============================================================================================
Ref 1: develop  @ bca7ce751 (2026-10-23)
       env: julia 1.12.6, x86_64-linux-gnu, manifest aa94b997 (pinned), 2 threads/1 BLAS, jit build
Ref 2: bugfix/inverse-original-grid-psi-limits  @ de6da4bdf (2026-10-23)
       env: julia 1.12.6, x86_64-linux-gnu, manifest aa94b997 (pinned), 2 threads/1 BLAS, jit build
-----------------------------------------------------------------------------------------------
Quantity                 develop       bugfix/inverse-original-grid-psi-limits  Diff     Status
-----------------------------------------------------------------------------------------------
gal # singular surfaces  4             4                                        0.0e+00  OK    
gal singular q values    [4 elem]      [4 elem]                                 0.0e+00  OK    
gal PEST3 Δ diagonal     [4 elem]      [4 elem]                                 0.0e+00  OK    
||gal Δ′ matrix||        1.243812e+04  1.243812e+04                             0.0e+00  OK    
||gal Δ_coil block||     2.437580e+02  2.437580e+02                             0.0e+00  OK    
gal D_I per surface      [4 elem]      [4 elem]                                 0.0e+00  OK    
gal α per surface        [4 elem]      [4 elem]                                 0.0e+00  OK    
||gal inner-layer Δ||    1.474577e+06  1.474577e+06                             0.0e+00  OK    
||gal match cout||       3.062036e-02  3.062036e-02                             0.0e+00  OK    
||gal match bpen||       3.778795e+00  3.778795e+00                             0.0e+00  OK    
gal match residual       2.418893e-16  2.418893e-16                             0.0e+00  OK    
Runtime (s)              229.6s        231.5s                                            --    
===============================================================================================
Summary: 11 unchanged


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

Regression Report: gal_resistive_diiid_galinner
===============================================================================================
Ref 1: develop  @ bca7ce751 (2026-10-23)
       env: julia 1.12.6, x86_64-linux-gnu, manifest aa94b997 (pinned), 2 threads/1 BLAS, jit build
Ref 2: bugfix/inverse-original-grid-psi-limits  @ de6da4bdf (2026-10-23)
       env: julia 1.12.6, x86_64-linux-gnu, manifest aa94b997 (pinned), 2 threads/1 BLAS, jit build
-----------------------------------------------------------------------------------------------
Quantity                 develop       bugfix/inverse-original-grid-psi-limits  Diff     Status
-----------------------------------------------------------------------------------------------
gal # singular surfaces  4             4                                        0.0e+00  OK    
gal singular q values    [4 elem]      [4 elem]                                 0.0e+00  OK    
gal PEST3 Δ diagonal     [4 elem]      [4 elem]                                 0.0e+00  OK    
||gal Δ′ matrix||        1.243812e+04  1.243812e+04                             0.0e+00  OK    
||gal Δ_coil block||     2.437580e+02  2.437580e+02                             0.0e+00  OK    
gal D_I per surface      [4 elem]      [4 elem]                                 0.0e+00  OK    
gal α per surface        [4 elem]      [4 elem]                                 0.0e+00  OK    
||gal inner-layer Δ||    1.474566e+06  1.474566e+06                             0.0e+00  OK    
||gal match cout||       3.062036e-02  3.062036e-02                             0.0e+00  OK    
||gal match bpen||       3.778795e+00  3.778795e+00                             0.0e+00  OK    
gal match residual       2.210877e-16  2.210877e-16                             0.0e+00  OK    
Runtime (s)              227.2s        228.3s                                            --    
===============================================================================================
Summary: 11 unchanged


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

Regression Report: gal_resistive_pe
======================================================================================
Ref 1: develop  @ bca7ce751 (2026-10-23)
       env: julia 1.12.6, x86_64-linux-gnu, manifest aa94b997 (pinned), 2 threads/1 BLAS, jit build
Ref 2: bugfix/inverse-original-grid-psi-limits  @ de6da4bdf (2026-10-23)
       env: julia 1.12.6, x86_64-linux-gnu, manifest aa94b997 (pinned), 2 threads/1 BLAS, jit build
--------------------------------------------------------------------------------------
Quantity                develop  bugfix/inverse-original-grid-psi-limits  Diff  Status
--------------------------------------------------------------------------------------
rational q values       N/A      N/A                                      N/A   N/A   
island half-widths      N/A      N/A                                      N/A   N/A   
Chirikov parameter      N/A      N/A                                      N/A   N/A   
||resonant b field||    N/A      N/A                                      N/A   N/A   
resonant b field (all)  N/A      N/A                                      N/A   N/A   
penetrated b field      N/A      N/A                                      N/A   N/A   
PE Δ' per surface       N/A      N/A                                      N/A   N/A   
||C resonant b field||  N/A      N/A                                      N/A   N/A   
Runtime (s)             247.0s   246.7s                                         --    
======================================================================================
Summary: 8 missing/N/A


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

Regression Report: ggj_ray_q500i
==========================================================================================
Ref 1: develop  @ bca7ce751 (2026-10-23)
       env: julia 1.12.6, x86_64-linux-gnu, manifest aa94b997 (pinned), 2 threads/1 BLAS, jit build
Ref 2: bugfix/inverse-original-grid-psi-limits  @ de6da4bdf (2026-10-23)
       env: julia 1.12.6, x86_64-linux-gnu, manifest aa94b997 (pinned), 2 threads/1 BLAS, jit build
------------------------------------------------------------------------------------------
Quantity            develop       bugfix/inverse-original-grid-psi-limits  Diff     Status
------------------------------------------------------------------------------------------
Re(Δ₊ interchange)  2.472007e+00  2.472007e+00                             0.0e+00  OK    
Im(Δ₊ interchange)  1.335402e+01  1.335402e+01                             0.0e+00  OK    
Re(Δ₋ tearing)      1.374966e-01  1.374966e-01                             0.0e+00  OK    
Im(Δ₋ tearing)      7.427542e-01  7.427542e-01                             0.0e+00  OK    
Runtime (s)         24.3s         24.6s                                             --    
==========================================================================================
Summary: 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 Report: ggj_reference
===========================================================================================
Ref 1: develop  @ bca7ce751 (2026-10-23)
       env: julia 1.12.6, x86_64-linux-gnu, manifest aa94b997 (pinned), 2 threads/1 BLAS, jit build
Ref 2: bugfix/inverse-original-grid-psi-limits  @ de6da4bdf (2026-10-23)
       env: julia 1.12.6, x86_64-linux-gnu, manifest aa94b997 (pinned), 2 threads/1 BLAS, jit build
-------------------------------------------------------------------------------------------
Quantity            develop        bugfix/inverse-original-grid-psi-limits  Diff     Status
-------------------------------------------------------------------------------------------
Re(Δ₊ interchange)  1.225728e+03   1.225728e+03                             0.0e+00  OK    
Im(Δ₊ interchange)  2.064823e+04   2.064823e+04                             0.0e+00  OK    
Re(Δ₋ tearing)      -5.345663e+00  -5.345663e+00                            0.0e+00  OK    
Im(Δ₋ tearing)      2.592091e+01   2.592091e+01                             0.0e+00  OK    
Runtime (s)         10.7s          10.7s                                             --    
===========================================================================================
Summary: 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 Report: solovev_kinetic_calculated
=================================================================================================
Ref 1: develop  @ bca7ce751 (2026-10-23)
       env: julia 1.12.6, x86_64-linux-gnu, manifest aa94b997 (pinned), 2 threads/1 BLAS, jit build
Ref 2: bugfix/inverse-original-grid-psi-limits  @ de6da4bdf (2026-10-23)
       env: julia 1.12.6, x86_64-linux-gnu, manifest aa94b997 (pinned), 2 threads/1 BLAS, jit build
-------------------------------------------------------------------------------------------------
Quantity                  develop        bugfix/inverse-original-grid-psi-limits  Diff     Status
-------------------------------------------------------------------------------------------------
vacuum energy Re(ev[1])   1.054785e+01   1.054785e+01                             0.0e+00  OK    
q0                        1.900003e+00   1.900003e+00                             0.0e+00  OK    
||xi_clebsch_alpha||      7.717981e-03   7.717981e-03                             0.0e+00  OK    
total energy Re(et[1])    1.827879e+00   1.827879e+00                             0.0e+00  OK    
total energy Im(et[1])    -1.326825e+00  -1.326825e+00                            0.0e+00  OK    
plasma energy Re(ep[1])   -8.719975e+00  -8.719975e+00                            0.0e+00  OK    
ODE steps (saved)         608            608                                      0.0e+00  OK    
# singular surfaces       2              2                                        0.0e+00  OK    
singular psi locations    [2 elem]       [2 elem]                                 0.0e+00  OK    
total energy (all)        [32 elem]      [32 elem]                                0.0e+00  OK    
ODE steps (total)         607            607                                      0.0e+00  OK    
mpert                     32             32                                       0.0e+00  OK    
q95                       3.147422e+00   3.147422e+00                             0.0e+00  OK    
||Jb_theta_reg||          8.170337e-05   8.170337e-05                             0.0e+00  OK    
Runtime (s)               266.9s         252.4s                                            --    
||dxi_clebsch_psi/dpsi||  4.843513e-02   4.843513e-02                             0.0e+00  OK    
singular q values         [2 elem]       [2 elem]                                 0.0e+00  OK    
npert                     1              1                                        0.0e+00  OK    
=================================================================================================
Summary: 17 unchanged


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

Regression Report: solovev_kinetic_multiion
====================================================================================================
Ref 1: develop  @ bca7ce751 (2026-10-23)
       env: julia 1.12.6, x86_64-linux-gnu, manifest aa94b997 (pinned), 2 threads/1 BLAS, jit build
Ref 2: bugfix/inverse-original-grid-psi-limits  @ de6da4bdf (2026-10-23)
       env: julia 1.12.6, x86_64-linux-gnu, manifest aa94b997 (pinned), 2 threads/1 BLAS, jit build
----------------------------------------------------------------------------------------------------
Quantity                     develop        bugfix/inverse-original-grid-psi-limits  Diff     Status
----------------------------------------------------------------------------------------------------
NTV total (D+T+imp+e) [N·m]  2.978446e-01   2.978446e-01                             0.0e+00  OK    
NTV Deuterium [N·m]          1.874455e-01   1.874455e-01                             0.0e+00  OK    
NTV Tritium [N·m]            1.943166e-01   1.943166e-01                             0.0e+00  OK    
NTV electron [N·m]           -8.391751e-02  -8.391751e-02                            0.0e+00  OK    
total energy Re(et[1])       1.090560e-02   1.090560e-02                             0.0e+00  OK    
# singular surfaces          2              2                                        0.0e+00  OK    
Runtime (s)                  230.2s         227.7s                                            --    
====================================================================================================
Summary: 6 unchanged


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

Regression Report: solovev_kinetic_ntv
=================================================================================================================
Ref 1: develop  @ bca7ce751 (2026-10-23)
       env: julia 1.12.6, x86_64-linux-gnu, manifest aa94b997 (pinned), 2 threads/1 BLAS, jit build
Ref 2: bugfix/inverse-original-grid-psi-limits  @ de6da4bdf (2026-10-23)
       env: julia 1.12.6, x86_64-linux-gnu, manifest aa94b997 (pinned), 2 threads/1 BLAS, jit build
-----------------------------------------------------------------------------------------------------------------
Quantity                                   develop       bugfix/inverse-original-grid-psi-limits  Diff     Status
-----------------------------------------------------------------------------------------------------------------
NTV torque fgar [Re, Im]                   [1 elem]      [1 elem]                                 0.0e+00  OK    
NTV ψ quadrature evaluations               45            45                                       0.0e+00  OK    
root-area-weighted total energy Re(et[1])  1.090560e-02  1.090560e-02                             0.0e+00  OK    
# singular surfaces                        2             2                                        0.0e+00  OK    
singular psi locations                     [2 elem]      [2 elem]                                 0.0e+00  OK    
q0                                         1.900006e+00  1.900006e+00                             0.0e+00  OK    
Runtime (s)                                222.3s        222.3s                                            --    
=================================================================================================================
Summary: 6 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 Report: solovev_kinetic_nuzero
================================================================================================
Ref 1: develop  @ bca7ce751 (2026-10-23)
       env: julia 1.12.6, x86_64-linux-gnu, manifest aa94b997 (pinned), 2 threads/1 BLAS, jit build
Ref 2: bugfix/inverse-original-grid-psi-limits  @ de6da4bdf (2026-10-23)
       env: julia 1.12.6, x86_64-linux-gnu, manifest aa94b997 (pinned), 2 threads/1 BLAS, jit build
------------------------------------------------------------------------------------------------
Quantity                 develop        bugfix/inverse-original-grid-psi-limits  Diff     Status
------------------------------------------------------------------------------------------------
vacuum energy Re(ev[1])  1.058735e+01   1.058735e+01                             0.0e+00  OK    
q0                       1.900003e+00   1.900003e+00                             0.0e+00  OK    
total energy Re(et[1])   2.290310e+00   2.290310e+00                             0.0e+00  OK    
total energy Im(et[1])   -1.564908e+00  -1.564908e+00                            0.0e+00  OK    
plasma energy Re(ep[1])  -8.297036e+00  -8.297036e+00                            0.0e+00  OK    
ODE steps (saved)        609            609                                      0.0e+00  OK    
# singular surfaces      2              2                                        0.0e+00  OK    
singular psi locations   [2 elem]       [2 elem]                                 0.0e+00  OK    
total energy (all)       [32 elem]      [32 elem]                                0.0e+00  OK    
ODE steps (total)        608            608                                      0.0e+00  OK    
mpert                    32             32                                       0.0e+00  OK    
q95                      3.147422e+00   3.147422e+00                             0.0e+00  OK    
Runtime (s)              235.2s         237.2s                                            --    
singular q values        [2 elem]       [2 elem]                                 0.0e+00  OK    
npert                    1              1                                        0.0e+00  OK    
================================================================================================
Summary: 14 unchanged


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

Regression Report: solovev_multi_n
=========================================================================================================
Ref 1: develop  @ bca7ce751 (2026-10-23)
       env: julia 1.12.6, x86_64-linux-gnu, manifest aa94b997 (pinned), 2 threads/1 BLAS, jit build
Ref 2: bugfix/inverse-original-grid-psi-limits  @ de6da4bdf (2026-10-23)
       env: julia 1.12.6, x86_64-linux-gnu, manifest aa94b997 (pinned), 2 threads/1 BLAS, jit build
---------------------------------------------------------------------------------------------------------
Quantity                      develop          bugfix/inverse-original-grid-psi-limits  Diff       Status
---------------------------------------------------------------------------------------------------------
total energy Re(et[1])        -2.134718e+00    -2.134718e+00                            0.0e+00    OK    
total energy Im(et[1])        4.510275e-10     4.510275e-10                             0.0e+00    OK    
vacuum matrix min eigenvalue  1.730832e+00     1.730832e+00                             0.0e+00    OK    
plasma energy (all)           [70 elem]        [70 elem]                                0.0e+00    OK    
vacuum energy (all)           [70 elem]        [70 elem]                                0.0e+00    OK    
total energy (all)            [70 elem]        [70 elem]                                0.0e+00    OK    
ODE steps (saved)             56               56                                       0.0e+00    OK    
ODE steps (total)             1043             1043                                     0.0e+00    OK    
q0                            1.900006e+00     1.900006e+00                             0.0e+00    OK    
q95                           3.147422e+00     3.147422e+00                             0.0e+00    OK    
# singular surfaces           3                3                                        0.0e+00    OK    
singular psi locations        [3 elem]         [3 elem]                                 0.0e+00    OK    
mpert                         35               35                                       0.0e+00    OK    
npert                         2                2                                        0.0e+00    OK    
q profile (checksum)          af93c6269245...  af93c6269245...                          identical  OK    
Runtime (s)                   189.3s           190.2s                                              --    
=========================================================================================================
Summary: 15 unchanged


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

Regression Report: solovev_n1
=========================================================================================================
Ref 1: develop  @ bca7ce751 (2026-10-23)
       env: julia 1.12.6, x86_64-linux-gnu, manifest aa94b997 (pinned), 2 threads/1 BLAS, jit build
Ref 2: bugfix/inverse-original-grid-psi-limits  @ de6da4bdf (2026-10-23)
       env: julia 1.12.6, x86_64-linux-gnu, manifest aa94b997 (pinned), 2 threads/1 BLAS, jit build
---------------------------------------------------------------------------------------------------------
Quantity                      develop          bugfix/inverse-original-grid-psi-limits  Diff       Status
---------------------------------------------------------------------------------------------------------
total energy Re(et[1])        1.090560e-02     1.090560e-02                             0.0e+00    OK    
total energy Im(et[1])        2.141340e-10     2.141340e-10                             0.0e+00    OK    
plasma energy Re(ep[1])       -1.041640e+01    -1.041640e+01                            0.0e+00    OK    
vacuum energy Re(ev[1])       1.042730e+01     1.042730e+01                             0.0e+00    OK    
vacuum matrix min eigenvalue  2.170703e+00     2.170703e+00                             0.0e+00    OK    
plasma energy (all)           [32 elem]        [32 elem]                                0.0e+00    OK    
vacuum energy (all)           [32 elem]        [32 elem]                                0.0e+00    OK    
total energy (all)            [32 elem]        [32 elem]                                0.0e+00    OK    
ODE steps (saved)             287              287                                      0.0e+00    OK    
ODE steps (total)             285              285                                      0.0e+00    OK    
q0                            1.900006e+00     1.900006e+00                             0.0e+00    OK    
q95                           3.147422e+00     3.147422e+00                             0.0e+00    OK    
beta_t                        4.621027e-02     4.621027e-02                             0.0e+00    OK    
beta_n                        3.217775e+00     3.217775e+00                             0.0e+00    OK    
# singular surfaces           2                2                                        0.0e+00    OK    
singular psi locations        [2 elem]         [2 elem]                                 0.0e+00    OK    
singular q values             [2 elem]         [2 elem]                                 0.0e+00    OK    
mpert                         32               32                                       0.0e+00    OK    
npert                         1                1                                        0.0e+00    OK    
q profile (checksum)          af93c6269245...  af93c6269245...                          identical  OK    
pressure profile (checksum)   e252b3b40ede...  e252b3b40ede...                          identical  OK    
ca_left (checksum)            06afdeb86cdc...  06afdeb86cdc...                          identical  OK    
Runtime (s)                   204.8s           181.0s                                              --    
=========================================================================================================
Summary: 22 unchanged

Notes for reviewers

grid_type = "original" on an inverse equilibrium used the file's surfaces from the first one off the axis to the last one, so psilow and psihigh were ignored. The code comment said psihigh still set psilim, but it does not: qmax and the dmlim edge come from the grid's last node. On a TokaMaker i-file, whose last surface sits at ψ_N 0.9999, the domain grew to the file edge and every Δ′ changed.

The grid is now psilow, then the file's surfaces strictly between psilow and psihigh, then psihigh, as on the other grid types. This matches the Fortran fix in PrincetonUniversity/GPEC#335. The unit test now checks those nodes, and it fails on develop.

DIII-D TokaMaker i-file (129×257), n = 1, Riccati, mtheta 256, Re Δ′ (run on a branch that reads the file's ψ bounds; the original-grid code there is the same as develop's):

grid psilim qlim q = 2 q = 3 q = 4 q = 5 q = 6 extra surfaces
ldp, mpsi 1024 0.996 6.2 4.778 −8.642 −29.02 −54.98 −237.9 none
original, develop 1.000 8.2 15.04 8.288 −7.599 −55.05 2566 q = 7, 8
original, this PR 0.996 6.2 4.245 −8.663 −28.72 −55.30 −193.6 none

On the finer 513×1025 i-file, the original grid with this PR is within 1.3 % of ldp with mpsi 4096 at q = 2–5 (q = 6, just inside psilim: −22 %), and within 0.7 % of Fortran STRIDE on the same grid at q = 2–5.

The scripts used are in the attached zip.


🤖 Generated with Claude Code

…ihigh

grid_type = "original" ran from the first off-axis file node to the last file surface, ignoring psilow and psihigh. On an edge-packed i-file the domain then reached ψ_N 0.9999 instead of psihigh, so the dmlim edge moved (psilim 0.996 -> 1.000 on a DIII-D i-file) and every Δ′ changed. The grid is now psilow, the file's nodes strictly between psilow and psihigh, and psihigh, as in Fortran GPEC.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added the bugfix Something was wrong and now is not label Oct 19, 2026
@StuartBenjamin
StuartBenjamin marked this pull request as ready for review October 23, 2026 09:18
@matt-pharr matt-pharr changed the title Equilibrium - BUGFIX - End the original inverse grid at psilow and psihigh Equilibrium - BUGFIX! - End the original inverse grid at psilow and psihigh Oct 23, 2026

@matt-pharr matt-pharr 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.

Minimal fix. Thumbs up 👍

@matt-pharr
matt-pharr enabled auto-merge October 23, 2026 19:51
@matt-pharr matt-pharr self-assigned this Oct 23, 2026
@github-actions github-actions Bot added the changed-results Results move or an interface breaks - read before upgrading label Oct 23, 2026
@matt-pharr
matt-pharr merged commit 231e776 into develop Oct 23, 2026
12 of 13 checks passed
@matt-pharr
matt-pharr deleted the bugfix/inverse-original-grid-psi-limits branch October 23, 2026 21:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bugfix Something was wrong and now is not 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