Skip to content

InnerLayer - REFACTOR - Move the GGJ solvers into a shared ToroidalLayer library behind a layer-model interface - #653

Open
matt-pharr wants to merge 2 commits into
developfrom
refactor/toroidal-layer-library
Open

matt-pharr wants to merge 2 commits into
developfrom
refactor/toroidal-layer-library

Conversation

@matt-pharr

@matt-pharr matt-pharr commented Nov 5, 2026 •

Copy link
Copy Markdown
Collaborator

Release note

  • Audience: developers
  • Numerical impact: none (harness @ 89c4807)
  • Migration: none

The GGJ inner layer's Wasow far-field construction, rotated-ray solver and Hermite (Galerkin) solver now live in a shared InnerLayer.ToroidalLayer library, so a new toroidal layer model only supplies its equations and reuses the solvers; GGJ is unchanged for users.

Regression report

SDCC fan-out, all 27 cases, develop @ 4376e71 vs this branch: every case unchanged, every tracked quantity diff 0.0e+00, including the GGJ :ray (ggj_ray_q500i) and :galerkin (ggj_reference, gal_resistive_diiid_galinner) inner-layer cases. Run at 552e975; the branch was then rebased onto develop's harness change (#634), and src/ at 89c4807 is identical to 552e975.

Full report (27 cases)
================================================================
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  @ 4376e717c (2026-11-03)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 16 threads/8 BLAS, jit build
Ref 2: refactor/toroidal-layer-library  @ 552e97504 (2026-11-05)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 16 threads/8 BLAS, jit build
---------------------------------------------------------------------------------------------------------------
Quantity                                         develop       refactor/toroidal-layer-library  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.414981e-06  1.414981e-06                     0.0e+00  OK    
|Σ δ_as_designed| of the error-field coils       1.216728e-18  1.216728e-18                     0.0e+00  OK    
Monte Carlo mean |δ| of the error-field coils    4.701440e-05  4.701440e-05                     0.0e+00  OK    
Runtime (s)                                      226.8s        216.5s                                    --    
===============================================================================================================
Summary: 10 unchanged


================================================================
Case: diiid_kinetic_multi_n — DIII-D-like equilibrium, n = 1, 2, KineticForces kinetic matrices, kinetic_factor=1.0, stability only, truncation at psihigh.
================================================================

Regression Report: diiid_kinetic_multi_n
===============================================================================================
Ref 1: develop  @ 4376e717c (2026-11-03)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: refactor/toroidal-layer-library  @ 552e97504 (2026-11-05)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
-----------------------------------------------------------------------------------------------
Quantity                        develop        refactor/toroidal-layer-library  Diff     Status
-----------------------------------------------------------------------------------------------
total energy Re(et[1])          5.186142e-01   5.186142e-01                     0.0e+00  OK    
total energy Im(et[1])          -1.543101e-01  -1.543101e-01                    0.0e+00  OK    
total energy (all)              [82 elem]      [82 elem]                        0.0e+00  OK    
# kinetic singular surfaces     0              0                                0.0e+00  OK    
kinetic singular psi locations  [0 elem]       [0 elem]                         0.0e+00  OK    
ODE steps (saved)               842            842                              0.0e+00  OK    
mpert                           41             41                               0.0e+00  OK    
npert                           2              2                                0.0e+00  OK    
Runtime (s)                     833.5s         827.9s                                    --    
===============================================================================================
Summary: 8 unchanged


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

Regression Report: diiid_multi_n
=================================================================================================================================
Ref 1: develop  @ 4376e717c (2026-11-03)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: refactor/toroidal-layer-library  @ 552e97504 (2026-11-05)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
---------------------------------------------------------------------------------------------------------------------------------
Quantity                                                      develop          refactor/toroidal-layer-library  Diff       Status
---------------------------------------------------------------------------------------------------------------------------------
total energy Re(et[1])                                        -5.750944e-01    -5.750944e-01                    0.0e+00    OK    
total energy (all)                                            [58 elem]        [58 elem]                        0.0e+00    OK    
ODE steps (saved)                                             906              906                              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.936508e+00     2.936508e+00                     0.0e+00    OK    
PE vacuum energy (sum over n)                                 3.113946e+00     3.113946e+00                     0.0e+00    OK    
PE surface energy (sum over n)                                3.523287e+00     3.523287e+00                     0.0e+00    OK    
PE toroidal torque sum_n -2n Im(Phi_n' Lambda_nn^-1 Phi_n)/4  2.148528e-08     2.148528e-08                     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)                                                   167.7s           164.2s                                      --    
=================================================================================================================================
Summary: 19 unchanged


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

Regression Report: diiid_n1
=================================================================================================================
Ref 1: develop  @ 4376e717c (2026-11-03)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: refactor/toroidal-layer-library  @ 552e97504 (2026-11-05)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
-----------------------------------------------------------------------------------------------------------------
Quantity                                      develop          refactor/toroidal-layer-library  Diff       Status
-----------------------------------------------------------------------------------------------------------------
total energy Re(et[1])                        7.979256e-01     7.979256e-01                     0.0e+00    OK    
total energy Im(et[1])                        1.122443e-06     1.122443e-06                     0.0e+00    OK    
plasma energy Re(ep[1])                       -1.377303e+00    -1.377303e+00                    0.0e+00    OK    
vacuum energy Re(ev[1])                       2.175228e+00     2.175228e+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)                             1172             1172                             0.0e+00    OK    
ODE steps (total)                             1167             1167                             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)                          68a33fdd4569...  68a33fdd4569...                  identical  OK    
pressure profile (checksum)                   398071544a8f...  398071544a8f...                  identical  OK    
Mercier D_I profile (checksum)                18047e075048...  18047e075048...                  identical  OK    
resistive interchange D_R profile (checksum)  05d027442f7b...  05d027442f7b...                  identical  OK    
ballooning Delta' profile (checksum)          90ba3fa4c433...  90ba3fa4c433...                  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.286411e-04     5.286411e-04                     0.0e+00    OK    
dominant-coupling singular values             [3 elem]         [3 elem]                         0.0e+00    OK    
|forcing overlap with dominant mode|          1.419631e-04     1.419631e-04                     0.0e+00    OK    
|delta_nominal| of coil set 1                 7.074906e-05     7.074906e-05                     0.0e+00    OK    
||ddelta/d(shift)|| over coil sets            1.246839e-04     1.246839e-04                     0.0e+00    OK    
||ddelta/d(tilt)|| over coil sets             4.175435e-07     4.175435e-07                     0.0e+00    OK    
PE plasma energy                              3.321081e+00     3.321081e+00                     0.0e+00    OK    
PE vacuum energy                              3.174319e+00     3.174319e+00                     0.0e+00    OK    
PE surface energy                             5.521990e+00     5.521990e+00                     0.0e+00    OK    
PE toroidal torque                            9.083838e-07     9.083838e-07                     0.0e+00    OK    
NTV torque FGAR [N·m]                         5.539321e-01     5.539321e-01                     0.0e+00    OK    
NTV kinetic energy dW FGAR [J]                8.224067e-02     8.224067e-02                     0.0e+00    OK    
Runtime (s)                                   206.9s           192.6s                                      --    
||forcing b~|| (root-area-weighted)           4.683171e-04     4.683171e-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  @ 4376e717c (2026-11-03)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: refactor/toroidal-layer-library  @ 552e97504 (2026-11-05)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
----------------------------------------------------------------------------------------------
Quantity                       develop        refactor/toroidal-layer-library  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.368534e+00  -1.368534e+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)              93             93                               0.0e+00  OK    
ODE steps (total)              2631           2631                             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)                    177.6s         177.5s                                    --    
==============================================================================================
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  @ 4376e717c (2026-11-03)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, aot build
Ref 2: refactor/toroidal-layer-library  @ 552e97504 (2026-11-05)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, aot build
----------------------------------------------------------------------------------------------
Quantity                       develop        refactor/toroidal-layer-library  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.368534e+00  -1.368534e+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)              93             93                               0.0e+00  OK    
ODE steps (total)              2631           2631                             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)                    26.0s          26.2s                                     --    
==============================================================================================
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  @ 4376e717c (2026-11-03)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: refactor/toroidal-layer-library  @ 552e97504 (2026-11-05)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
---------------------------------------------------------------------------------------------------
Quantity                                 develop   refactor/toroidal-layer-library  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 toroidal critical-Δ factor D_geo  [6 elem]  [6 elem]                         0.0e+00  OK    
SLAYER Q_root [2/1,3/1,4/1]              [3 elem]  [3 elem]                         0.0e+00  OK    
SLAYER ω in rad/s [2/1,3/1,4/1]          [3 elem]  [3 elem]                         0.0e+00  OK    
SLAYER γ in 1/s [2/1,3/1,4/1]            [3 elem]  [3 elem]                         0.0e+00  OK    
SLAYER no_root flags [2/1,3/1,4/1]       [3 elem]  [3 elem]                         0.0e+00  OK    
CRF b_r/B_φ crit [2/1,3/1,4/1]           [3 elem]  [3 elem]                         0.0e+00  OK    
CRF Q_peak [2/1,3/1,4/1]                 [3 elem]  [3 elem]                         0.0e+00  OK    
CRF Q0 [2/1,3/1,4/1]                     [3 elem]  [3 elem]                         0.0e+00  OK    
CRF b_r crit in tesla [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)                              238.9s    235.9s                                    --    
===================================================================================================
Summary: 22 unchanged


================================================================
Case: diiid_slayer_n1_chi_perp_e — DIII-D-like H-mode equilibrium, n=1, SLAYER tearing-mode analysis with P_perp_model = chi_perp_e
================================================================

Regression Report: diiid_slayer_n1_chi_perp_e
===================================================================================================
Ref 1: develop  @ 4376e717c (2026-11-03)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: refactor/toroidal-layer-library  @ 552e97504 (2026-11-05)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
---------------------------------------------------------------------------------------------------
Quantity                                 develop   refactor/toroidal-layer-library  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 toroidal critical-Δ factor D_geo  [6 elem]  [6 elem]                         0.0e+00  OK    
SLAYER Q_root [2/1,3/1,4/1]              [3 elem]  [3 elem]                         0.0e+00  OK    
SLAYER ω in rad/s [2/1,3/1,4/1]          [3 elem]  [3 elem]                         0.0e+00  OK    
SLAYER γ in 1/s [2/1,3/1,4/1]            [3 elem]  [3 elem]                         0.0e+00  OK    
SLAYER no_root flags [2/1,3/1,4/1]       [3 elem]  [3 elem]                         0.0e+00  OK    
CRF b_r/B_φ crit [2/1,3/1,4/1]           [3 elem]  [3 elem]                         0.0e+00  OK    
CRF Q_peak [2/1,3/1,4/1]                 [3 elem]  [3 elem]                         0.0e+00  OK    
CRF Q0 [2/1,3/1,4/1]                     [3 elem]  [3 elem]                         0.0e+00  OK    
CRF b_r crit in tesla [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)                              242.9s    241.9s                                    --    
===================================================================================================
Summary: 22 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 Report: diiid_slayer_n1_coupled
=======================================================================================
Ref 1: develop  @ 4376e717c (2026-11-03)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: refactor/toroidal-layer-library  @ 552e97504 (2026-11-05)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
---------------------------------------------------------------------------------------
Quantity                     develop   refactor/toroidal-layer-library  Diff     Status
---------------------------------------------------------------------------------------
SLAYER tauk                  [6 elem]  [6 elem]                         0.0e+00  OK    
SLAYER q_shift               [6 elem]  [6 elem]                         0.0e+00  OK    
SLAYER coupled Q_root        [1 elem]  [1 elem]                         0.0e+00  OK    
SLAYER coupled ω             [1 elem]  [1 elem]                         0.0e+00  OK    
SLAYER coupled γ             [1 elem]  [1 elem]                         0.0e+00  OK    
SLAYER coupled no_root flag  [1 elem]  [1 elem]                         0.0e+00  OK    
SLAYER enabled flag          1         1                                0.0e+00  OK    
Runtime (s)                  238.3s    238.9s                                    --    
=======================================================================================
Summary: 7 unchanged


================================================================
Case: diiid_slayer_n1_toroidal — DIII-D-like H-mode, n=1, SLAYER with the toroidal critical-Δ offset (D_c_type = toroidal)
================================================================

Regression Report: diiid_slayer_n1_toroidal
==============================================================================================
Ref 1: develop  @ 4376e717c (2026-11-03)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: refactor/toroidal-layer-library  @ 552e97504 (2026-11-05)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
----------------------------------------------------------------------------------------------
Quantity                            develop   refactor/toroidal-layer-library  Diff     Status
----------------------------------------------------------------------------------------------
SLAYER resistive interchange D_R    [6 elem]  [6 elem]                         0.0e+00  OK    
SLAYER critical-Δ offset D_c        [6 elem]  [6 elem]                         0.0e+00  OK    
SLAYER Q_root [2/1,3/1,4/1]         [3 elem]  [3 elem]                         0.0e+00  OK    
SLAYER γ in 1/s [2/1,3/1,4/1]       [3 elem]  [3 elem]                         0.0e+00  OK    
SLAYER no_root flags [2/1,3/1,4/1]  [3 elem]  [3 elem]                         0.0e+00  OK    
Runtime (s)                         242.2s    239.8s                                    --    
==============================================================================================
Summary: 5 unchanged


================================================================
Case: diiid_slayer_n1_winding — DIII-D-like H-mode equilibrium, n=1, SLAYER tearing-mode analysis with root_classification = winding
================================================================

Regression Report: diiid_slayer_n1_winding
===================================================================================================
Ref 1: develop  @ 4376e717c (2026-11-03)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: refactor/toroidal-layer-library  @ 552e97504 (2026-11-05)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
---------------------------------------------------------------------------------------------------
Quantity                                 develop   refactor/toroidal-layer-library  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 toroidal critical-Δ factor D_geo  [6 elem]  [6 elem]                         0.0e+00  OK    
SLAYER Q_root [2/1,3/1,4/1]              [3 elem]  [3 elem]                         0.0e+00  OK    
SLAYER ω in rad/s [2/1,3/1,4/1]          [3 elem]  [3 elem]                         0.0e+00  OK    
SLAYER γ in 1/s [2/1,3/1,4/1]            [3 elem]  [3 elem]                         0.0e+00  OK    
SLAYER no_root flags [2/1,3/1,4/1]       [3 elem]  [3 elem]                         0.0e+00  OK    
CRF b_r/B_φ crit [2/1,3/1,4/1]           [3 elem]  [3 elem]                         0.0e+00  OK    
CRF Q_peak [2/1,3/1,4/1]                 [3 elem]  [3 elem]                         0.0e+00  OK    
CRF Q0 [2/1,3/1,4/1]                     [3 elem]  [3 elem]                         0.0e+00  OK    
CRF b_r crit in tesla [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)                              238.4s    238.2s                                    --    
===================================================================================================
Summary: 22 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  @ 4376e717c (2026-11-03)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: refactor/toroidal-layer-library  @ 552e97504 (2026-11-05)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
------------------------------------------------------------------------------------------------------
Quantity                               develop        refactor/toroidal-layer-library  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.377405e+00  -1.377405e+00                    0.0e+00  OK    
total energy Re(et[1])                 7.978627e-01   7.978627e-01                     0.0e+00  OK    
Runtime (s)                            169.2s         170.0s                                    --    
======================================================================================================
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  @ 4376e717c (2026-11-03)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: refactor/toroidal-layer-library  @ 552e97504 (2026-11-05)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
------------------------------------------------------------------------------------------
Quantity                    develop       refactor/toroidal-layer-library  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.4s         52.5s                                     --    
==========================================================================================
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  @ 4376e717c (2026-11-03)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: refactor/toroidal-layer-library  @ 552e97504 (2026-11-05)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
---------------------------------------------------------------------------------------
Quantity                 develop       refactor/toroidal-layer-library  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||        2.302048e+03  2.302048e+03                     0.0e+00  OK    
||gal Δ_coil block||     1.581714e+01  1.581714e+01                     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.048397e-02  3.048397e-02                     0.0e+00  OK    
||gal match bpen||       1.206218e+00  1.206218e+00                     0.0e+00  OK    
gal match residual       1.709610e-16  1.709610e-16                     0.0e+00  OK    
Runtime (s)              166.5s        158.8s                                    --    
=======================================================================================
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  @ 4376e717c (2026-11-03)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: refactor/toroidal-layer-library  @ 552e97504 (2026-11-05)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
---------------------------------------------------------------------------------------
Quantity                 develop       refactor/toroidal-layer-library  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||        2.302048e+03  2.302048e+03                     0.0e+00  OK    
||gal Δ_coil block||     1.581714e+01  1.581714e+01                     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.048397e-02  3.048397e-02                     0.0e+00  OK    
||gal match bpen||       1.206218e+00  1.206218e+00                     0.0e+00  OK    
gal match residual       1.872671e-16  1.872671e-16                     0.0e+00  OK    
Runtime (s)              153.3s        155.5s                                    --    
=======================================================================================
Summary: 11 unchanged


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

Regression Report: ggj_ray_q500i
==================================================================================
Ref 1: develop  @ 4376e717c (2026-11-03)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: refactor/toroidal-layer-library  @ 552e97504 (2026-11-05)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
----------------------------------------------------------------------------------
Quantity            develop       refactor/toroidal-layer-library  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)         21.8s         22.5s                                     --    
==================================================================================
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  @ 4376e717c (2026-11-03)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: refactor/toroidal-layer-library  @ 552e97504 (2026-11-05)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
-----------------------------------------------------------------------------------
Quantity            develop        refactor/toroidal-layer-library  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.4s          10.4s                                     --    
===================================================================================
Summary: 4 unchanged


================================================================
Case: lar_ggj_tearing_n1 — LAR TJ equilibrium, n=1, GGJ tearing growth rates per surface from the Galerkin Δ′ (reuses the LAR ideal-match deck via overrides)
================================================================

Regression Report: lar_ggj_tearing_n1
=============================================================================
Ref 1: develop  @ 4376e717c (2026-11-03)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: refactor/toroidal-layer-library  @ 552e97504 (2026-11-05)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
-----------------------------------------------------------------------------
Quantity           develop   refactor/toroidal-layer-library  Diff     Status
-----------------------------------------------------------------------------
GGJ γ in 1/s       [2 elem]  [2 elem]                         0.0e+00  OK    
GGJ ω in rad/s     [2 elem]  [2 elem]                         0.0e+00  OK    
GGJ no_root flags  [2 elem]  [2 elem]                         0.0e+00  OK    
=============================================================================
Summary: 3 unchanged


================================================================
Case: lar_reversed_shear_n1 — Large-aspect-ratio reversed-shear equilibrium (hollow current), n=1, ideal stability
================================================================

Regression Report: lar_reversed_shear_n1
=================================================================================================================================
Ref 1: develop  @ 4376e717c (2026-11-03)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: refactor/toroidal-layer-library  @ 552e97504 (2026-11-05)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
---------------------------------------------------------------------------------------------------------------------------------
Quantity                                                      develop          refactor/toroidal-layer-library  Diff       Status
---------------------------------------------------------------------------------------------------------------------------------
total energy Re(et[1])                                        -2.263762e-02    -2.263762e-02                    0.0e+00    OK    
total energy Im(et[1])                                        -1.941142e-15    -1.941142e-15                    0.0e+00    OK    
plasma energy Re(ep[1])                                       -5.912342e-02    -5.912342e-02                    0.0e+00    OK    
vacuum energy Re(ev[1])                                       3.648580e-02     3.648580e-02                     0.0e+00    OK    
vacuum matrix min eigenvalue                                  3.488391e-02     3.488391e-02                     0.0e+00    OK    
plasma energy (all)                                           [31 elem]        [31 elem]                        0.0e+00    OK    
vacuum energy (all)                                           [31 elem]        [31 elem]                        0.0e+00    OK    
total energy (all)                                            [31 elem]        [31 elem]                        0.0e+00    OK    
ODE steps (saved)                                             227              227                              0.0e+00    OK    
ODE steps (total)                                             225              225                              0.0e+00    OK    
q0                                                            2.397229e+00     2.397229e+00                     0.0e+00    OK    
q95                                                           2.687221e+00     2.687221e+00                     0.0e+00    OK    
beta_t                                                        3.331679e-04     3.331679e-04                     0.0e+00    OK    
beta_n                                                        1.898177e-01     1.898177e-01                     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    
singular dq/dpsi (opposite signs on the two q = 2 crossings)  [2 elem]         [2 elem]                         0.0e+00    OK    
mpert                                                         31               31                               0.0e+00    OK    
npert                                                         1                1                                0.0e+00    OK    
q profile (checksum)                                          239b992d5138...  239b992d5138...                  identical  OK    
pressure profile (checksum)                                   8ff21b46d26d...  8ff21b46d26d...                  identical  OK    
Runtime (s)                                                   131.6s           130.3s                                      --    
=================================================================================================================================
Summary: 22 unchanged


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

Regression Report: solovev_kinetic_nuzero
========================================================================================
Ref 1: develop  @ 4376e717c (2026-11-03)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: refactor/toroidal-layer-library  @ 552e97504 (2026-11-05)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
----------------------------------------------------------------------------------------
Quantity                 develop        refactor/toroidal-layer-library  Diff     Status
----------------------------------------------------------------------------------------
vacuum energy Re(ev[1])  1.054354e+01   1.054354e+01                     0.0e+00  OK    
q0                       1.900003e+00   1.900003e+00                     0.0e+00  OK    
total energy Re(et[1])   2.316509e+00   2.316509e+00                     0.0e+00  OK    
total energy Im(et[1])   -1.555306e+00  -1.555306e+00                    0.0e+00  OK    
plasma energy Re(ep[1])  -8.227027e+00  -8.227027e+00                    0.0e+00  OK    
ODE steps (saved)        617            617                              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)        616            616                              0.0e+00  OK    
mpert                    32             32                               0.0e+00  OK    
q95                      3.147422e+00   3.147422e+00                     0.0e+00  OK    
Runtime (s)              163.9s         162.8s                                    --    
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  @ 4376e717c (2026-11-03)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: refactor/toroidal-layer-library  @ 552e97504 (2026-11-05)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
-------------------------------------------------------------------------------------------------
Quantity                      develop          refactor/toroidal-layer-library  Diff       Status
-------------------------------------------------------------------------------------------------
total energy Re(et[1])        -2.134718e+00    -2.134718e+00                    0.0e+00    OK    
total energy Im(et[1])        1.968592e-10     1.968592e-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)             1044             1044                             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)          2340b888d410...  2340b888d410...                  identical  OK    
Runtime (s)                   165.1s           164.2s                                      --    
=================================================================================================
Summary: 15 unchanged


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

Regression Report: solovev_n1
=================================================================================================
Ref 1: develop  @ 4376e717c (2026-11-03)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: refactor/toroidal-layer-library  @ 552e97504 (2026-11-05)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
-------------------------------------------------------------------------------------------------
Quantity                      develop          refactor/toroidal-layer-library  Diff       Status
-------------------------------------------------------------------------------------------------
total energy Re(et[1])        7.362765e-03     7.362765e-03                     0.0e+00    OK    
total energy Im(et[1])        2.140279e-10     2.140279e-10                     0.0e+00    OK    
plasma energy Re(ep[1])       -1.042157e+01    -1.042157e+01                    0.0e+00    OK    
vacuum energy Re(ev[1])       1.042894e+01     1.042894e+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)             383              383                              0.0e+00    OK    
ODE steps (total)             381              381                              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)          2340b888d410...  2340b888d410...                  identical  OK    
pressure profile (checksum)   108b947087e6...  108b947087e6...                  identical  OK    
ca_left (checksum)            dec3aca30808...  dec3aca30808...                  identical  OK    
Runtime (s)                   146.5s           146.4s                                      --    
=================================================================================================
Summary: 22 unchanged


================================================================
Case: tj_kinetic_calculated — TJ-analytic, n=1, no wall, kinetic = 'KineticForces', 50/50 D-T multi-ion kinetic matrices; pressure-consistent kinetic.dat (P₀≈784 Pa).
================================================================

Regression Report: tj_kinetic_calculated
==================================================================================================
Ref 1: develop  @ 4376e717c (2026-11-03)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: refactor/toroidal-layer-library  @ 552e97504 (2026-11-05)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
--------------------------------------------------------------------------------------------------
Quantity                           develop        refactor/toroidal-layer-library  Diff     Status
--------------------------------------------------------------------------------------------------
vacuum energy Re(ev[1])            5.899856e-02   5.899856e-02                     0.0e+00  OK    
q0                                 1.599966e+00   1.599966e+00                     0.0e+00  OK    
NTV fgar quadrature torque [N·m]   2.035231e-03   2.035231e-03                     0.0e+00  OK    
||xi_clebsch_alpha||               2.939103e-01   2.939103e-01                     0.0e+00  OK    
total energy Re(et[1])             4.380834e-01   4.380834e-01                     0.0e+00  OK    
total energy Im(et[1])             -1.977420e-03  -1.977420e-03                    0.0e+00  OK    
plasma energy Re(ep[1])            3.790848e-01   3.790848e-01                     0.0e+00  OK    
ODE steps (saved)                  140            140                              0.0e+00  OK    
# singular surfaces                2              2                                0.0e+00  OK    
boundary-response torque [N·m]     2.046512e-03   2.046512e-03                     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)                  139            139                              0.0e+00  OK    
mpert                              32             32                               0.0e+00  OK    
q95                                2.980037e+00   2.980037e+00                     0.0e+00  OK    
||Jb_theta_reg||                   5.683796e-02   5.683796e-02                     0.0e+00  OK    
Runtime (s)                        189.4s         187.4s                                    --    
T_xe applied-forcing torque [N·m]  2.046512e-03   2.046512e-03                     0.0e+00  OK    
||dxi_clebsch_psi/dpsi||           1.837197e+00   1.837197e+00                     0.0e+00  OK    
singular q values                  [2 elem]       [2 elem]                         0.0e+00  OK    
npert                              1              1                                0.0e+00  OK    
==================================================================================================
Summary: 20 unchanged


================================================================
Case: tj_kinetic_multiion — TJ-analytic n=1, no wall, ideal + PE + multi-ion NTV (D + T + electron summed)
================================================================

Regression Report: tj_kinetic_multiion
===========================================================================================
Ref 1: develop  @ 4376e717c (2026-11-03)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: refactor/toroidal-layer-library  @ 552e97504 (2026-11-05)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
-------------------------------------------------------------------------------------------
Quantity                     develop       refactor/toroidal-layer-library  Diff     Status
-------------------------------------------------------------------------------------------
NTV total (D+T+imp+e) [N·m]  8.956218e-04  8.956218e-04                     0.0e+00  OK    
NTV Deuterium [N·m]          4.759094e-04  4.759094e-04                     0.0e+00  OK    
NTV Tritium [N·m]            4.133763e-04  4.133763e-04                     0.0e+00  OK    
NTV electron [N·m]           6.336120e-06  6.336120e-06                     0.0e+00  OK    
total energy Re(et[1])       4.350277e-01  4.350277e-01                     0.0e+00  OK    
# singular surfaces          2             2                                0.0e+00  OK    
Runtime (s)                  164.2s        164.3s                                    --    
===========================================================================================
Summary: 6 unchanged


================================================================
Case: tj_kinetic_ntv — TJ-analytic equilibrium, n=1, no wall, ideal + PE + NTV torque quadrature
================================================================

Regression Report: tj_kinetic_ntv
=========================================================================================================
Ref 1: develop  @ 4376e717c (2026-11-03)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: refactor/toroidal-layer-library  @ 552e97504 (2026-11-05)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
---------------------------------------------------------------------------------------------------------
Quantity                                   develop       refactor/toroidal-layer-library  Diff     Status
---------------------------------------------------------------------------------------------------------
NTV torque fgar [Re, Im]                   [1 elem]      [1 elem]                         0.0e+00  OK    
NTV ψ quadrature evaluations               75            75                               0.0e+00  OK    
fluid CGL energy fcgl [J]                  5.446364e-04  5.446364e-04                     0.0e+00  OK    
root-area-weighted total energy Re(et[1])  4.350277e-01  4.350277e-01                     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.599966e+00  1.599966e+00                     0.0e+00  OK    
Runtime (s)                                163.6s        164.4s                                    --    
=========================================================================================================
Summary: 7 unchanged


================================================================
Case: tj_kinetic_ntv_rates — TJ-analytic equilibrium, n=1, no wall, NTV torque with supplied rates-v1 collision rates (reuses the TJ NTV deck via overrides)
================================================================

Regression Report: tj_kinetic_ntv_rates
========================================================================================================
Ref 1: develop  @ 4376e717c (2026-11-03)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: refactor/toroidal-layer-library  @ 552e97504 (2026-11-05)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
--------------------------------------------------------------------------------------------------------
Quantity                                      develop   refactor/toroidal-layer-library  Diff     Status
--------------------------------------------------------------------------------------------------------
NTV torque fgar with supplied rates [Re, Im]  [1 elem]  [1 elem]                         0.0e+00  OK    
NTV ψ quadrature evaluations                  75        75                               0.0e+00  OK    
Runtime (s)                                   153.6s    150.4s                                    --    
========================================================================================================
Summary: 2 unchanged


================================================================
Case: tj_n1 — TJ-analytic equilibrium, n=1, no wall, ideal stability + perturbed equilibrium
================================================================

Regression Report: tj_n1
=================================================================================================
Ref 1: develop  @ 4376e717c (2026-11-03)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: refactor/toroidal-layer-library  @ 552e97504 (2026-11-05)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
-------------------------------------------------------------------------------------------------
Quantity                      develop          refactor/toroidal-layer-library  Diff       Status
-------------------------------------------------------------------------------------------------
total energy Re(et[1])        4.350277e-01     4.350277e-01                     0.0e+00    OK    
total energy Im(et[1])        -3.148129e-15    -3.148129e-15                    0.0e+00    OK    
plasma energy Re(ep[1])       3.772202e-01     3.772202e-01                     0.0e+00    OK    
vacuum energy Re(ev[1])       5.780749e-02     5.780749e-02                     0.0e+00    OK    
vacuum matrix min eigenvalue  3.082359e-02     3.082359e-02                     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)             293              293                              0.0e+00    OK    
ODE steps (total)             291              291                              0.0e+00    OK    
q0                            1.599966e+00     1.599966e+00                     0.0e+00    OK    
q95                           2.980037e+00     2.980037e+00                     0.0e+00    OK    
beta_t                        6.656722e-04     6.656722e-04                     0.0e+00    OK    
beta_n                        4.156626e-01     4.156626e-01                     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)          70e71c4534e8...  70e71c4534e8...                  identical  OK    
resonant area-weighted field  [2 elem]         [2 elem]                         0.0e+00    OK    
pressure profile (checksum)   a5c730364b2c...  a5c730364b2c...                  identical  OK    
island half-width             [2 elem]         [2 elem]                         0.0e+00    OK    
Chirikov parameter            [2 elem]         [2 elem]                         0.0e+00    OK    
toroidal torque [N·m]         -1.247196e-14    -1.247196e-14                    0.0e+00    OK    
Runtime (s)                   140.7s           139.8s                                      --    
=================================================================================================
Summary: 25 unchanged

Notes for reviewers

  • Two commits: 5c5f68753 is the git mv of Ray.jl, Galerkin.jl and InnerAsymptotics.jl from GGJ/ to ToroidalLayer/ (does not build on its own); 89c4807e1 makes them model-generic.
  • ToroidalLayerParameters requires no fields. The solvers read a model only through the interface functions documented on it: equations (layer_rows, layer_weak_form), far field (wasow_basis, split_block, power_exponents), ray rates (default_ray_angle, parabolic_rate, ohm_rate, fast_rates) and normalization (inner_Q, rescale_delta, profile_conversions).
  • GGJ keeps its coefficients and their helpers (mercier_di, p1, q0, …), its equations and GW2020 basis with the closed-form split (GGJ/Equations.jl), the reference surfaces and :shooting; its :ray and :galerkin methods forward to ray_response/galerkin_response and the profile counterparts.
  • No API change: GGJModel, solve_inner, solve_ray and qualified names such as GGJ.q0 and GGJ.ode_matrix resolve as before. GGJ :ray Δ± is bit-identical to develop on nine (surface, Q) points from Q = 0.05 to 500i.
  • Prepares a stacked PR adding a KAISTModel (Kim, Cho & Choi 1988 drift-resistive layer) on the same library.

🤖 Generated with Claude Code

@matt-pharr
matt-pharr force-pushed the refactor/toroidal-layer-library branch from 552e975 to 89c4807 Compare November 5, 2026 16:27
@matt-pharr
matt-pharr marked this pull request as ready for review November 5, 2026 19:18
@matt-pharr
matt-pharr requested review from d-burg and logan-nc November 7, 2026 14:07

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

refactor Behavior-preserving restructuring

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant