Skip to content

InnerLayer.GGJ - BUGFIX - Accept profile-only options in the :ray solve, warn on very large ray grids, and use a relative ggj_reference floor - #595

Merged
matt-pharr merged 5 commits into
developfrom
bugfix/ggj-ray-followups
Oct 29, 2026
Merged

matt-pharr merged 5 commits into
developfrom
bugfix/ggj-ray-followups

Conversation

@d-burg

@d-burg d-burg commented Oct 26, 2026 •

Copy link
Copy Markdown
Collaborator

Release note

  • Audience: users
  • Numerical impact: none (harness @ 2dc99e1)
  • Migration: none.

Follow-ups to #536. A GGJModel(; solver=:ray) built with the profile options npc or certify_rtol threw a MethodError when solved, because solve_inner forwarded them to solve_ray. They are now ignored there, as real_profiles already was. solve_ray now warns once when its Hermite grid exceeds warn_cells (default 6000), and its docstring states that the grid is fixed rather than refined against a residual, with the expected accuracy and how to get an error bar.

Changes

  • solve_inner(::GGJModel{:ray}) accepts and ignores real_profiles, npc and certify_rtol, the profile-only options of solve_inner_profile, as untyped keywords so they do not look like they act. Test: a model built with all three gives the bare model's Δ exactly.
  • solve_ray takes warn_cells (default 6000) and warns once per warn_cells value when the grid is larger, naming cfl, min_cells and the local rates that set it; the solve itself is unchanged. Test: warn_cells = 100 warns, and Δ is unchanged.
    • Why 6000. It is a cost guard, matching the old adaptive solver's warning. Measured grid sizes: 1,024–2,700 cells for |Q| from 0.01 to 5000i on the Glasser–Wang and q4 benchmark surfaces, and 7,418 only for Glasser–Wang at Q = 5000i, so it stays quiet in normal use; the test suite does not trigger it.
  • solve_ray docstring: the mesh is fixed by the local rates (cfl, min_cells), no run-time error estimate is returned, and Δ is accurate to about 1e-8–2e-7 relative at small |Q|. It points to delta_convergence for an error bar. I didn't add a residual field to RaySolveResult, because delta_convergence already gives that error bar.

Regression report

Latest SDCC fanout rerun: develop 7817f0e7a vs 2dc99e1c8 — 21 cases; no changed comparable quantities; harness exit 0. Full report and limitations. gal_resistive_pe has all eight quantities missing on both refs and provides no numerical validation. Earlier reports are retained below.

runtests_innerlayer.jl passes on feynman (GGJ 10, :ray backend 10, :ray internals 15, profile interface 24). The report below is the earlier run at 98e9167b9.

regress --cases ggj_reference,ggj_ray_q500i,gal_resistive_diiid_galinner,diiid_slayer_n1 --refs bca7ce751,98e9167b9 --force on feynman (SLURM, 8 threads, manifest pinned): every case is unchanged. The tests in runtests_innerlayer.jl and runtests_slayer_runner.jl pass (GGJ 10, :ray backend 10, :ray internals 15, profile interface 24, runner 88).

ggj_reference
Regression Report: ggj_reference
=================================================================
Ref 1: bca7ce751  @ bca7ce751 (2026-10-23)
       env: julia 1.11.9, x86_64-linux-gnu, manifest f241dbfc (pinned), 8 threads/8 BLAS, jit build
Ref 2: 98e9167b9  @ 98e9167b9 (2026-10-23)
       env: julia 1.11.9, x86_64-linux-gnu, manifest f241dbfc (pinned), 8 threads/8 BLAS, jit build
-----------------------------------------------------------------
Quantity            bca7ce751      98e9167b9      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)         14.0s          10.3s                   --
=================================================================
Summary: 4 unchanged
ggj_ray_q500i
Regression Report: ggj_ray_q500i
===============================================================
Ref 1: bca7ce751  @ bca7ce751 (2026-10-23)
       env: julia 1.11.9, x86_64-linux-gnu, manifest f241dbfc (pinned), 8 threads/8 BLAS, jit build
Ref 2: 98e9167b9  @ 98e9167b9 (2026-10-23)
       env: julia 1.11.9, x86_64-linux-gnu, manifest f241dbfc (pinned), 8 threads/8 BLAS, jit build
---------------------------------------------------------------
Quantity            bca7ce751     98e9167b9     Diff     Status
---------------------------------------------------------------
Re(Δ₊ interchange)  2.472008e+00  2.472008e+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)         27.6s         24.1s                  --
===============================================================
Summary: 4 unchanged
gal_resistive_diiid_galinner
Regression Report: gal_resistive_diiid_galinner
====================================================================
Ref 1: bca7ce751  @ bca7ce751 (2026-10-23)
       env: julia 1.11.9, x86_64-linux-gnu, manifest f241dbfc (pinned), 8 threads/8 BLAS, jit build
Ref 2: 98e9167b9  @ 98e9167b9 (2026-10-23)
       env: julia 1.11.9, x86_64-linux-gnu, manifest f241dbfc (pinned), 8 threads/8 BLAS, jit build
--------------------------------------------------------------------
Quantity                 bca7ce751     98e9167b9     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.243817e+04  1.243817e+04  0.0e+00  OK
||gal Δ_coil block||     2.437679e+02  2.437679e+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.474568e+06  1.474568e+06  0.0e+00  OK
||gal match cout||       3.062025e-02  3.062025e-02  0.0e+00  OK
||gal match bpen||       3.778919e+00  3.778919e+00  0.0e+00  OK
gal match residual       2.293858e-16  2.293858e-16  0.0e+00  OK
Runtime (s)              241.7s        222.1s                 --
====================================================================
Summary: 11 unchanged
diiid_slayer_n1
Regression Report: diiid_slayer_n1
=========================================================================
Ref 1: bca7ce751  @ bca7ce751 (2026-10-23)
       env: julia 1.11.9, x86_64-linux-gnu, manifest f241dbfc (pinned), 8 threads/8 BLAS, jit build
Ref 2: 98e9167b9  @ 98e9167b9 (2026-10-23)
       env: julia 1.11.9, x86_64-linux-gnu, manifest f241dbfc (pinned), 8 threads/8 BLAS, jit build
-------------------------------------------------------------------------
Quantity                            bca7ce751  98e9167b9  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]   4.2e-07  OK
SLAYER ω_Hz [2/1,3/1,4/1]           [3 elem]   [3 elem]   1.4e-02  OK
SLAYER γ_Hz [2/1,3/1,4/1]           [3 elem]   [3 elem]   9.6e-03  OK
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)                         304.9s     287.2s              --
=========================================================================
Summary: 17 unchanged

Notes for reviewers

  • No relative noise floor. InnerLayer.GGJ - REFACTOR! - Solve the :ray BVP with the Galerkin assembly and use one parity convention #536 asked for ggj_reference's floor to be relative. Measured first: feynman reproduces all four Δ values to the last bit across runs, and the harness always compares its two refs on the same machine, so develop's absolute 1e-10 floor raises no false alarms and stays as it is. Across machines the values do differ (Mac arm64 / Julia 1.11.6 vs feynman x86 / 1.11.9, same pinned manifest):

    feynman Mac difference
    Re Δ₊ 1225.728060815531 1225.7281609620666 1.0e-4
    Im Δ₊ 20648.22833291713 20648.228334386058 1.5e-6
    Re Δ₋ −5.345663135713072 −5.345663136208899 5.0e-10
    Im Δ₋ 25.920907489197507 25.92090748877298 4.2e-10

    The noise follows |Δ₊| ≈ 2.07e4 (4.8e-9 relative) rather than each part, so a relative floor of 1e-10 on each part would still flag Re Δ₊. The measurement is recorded in Regression - Read noise floors from the case file at compare time #607 for when cross-machine comparison is wanted.

  • Develop merged (526141d4a), no conflicts.


🤖 Generated with Claude Code

d-burg and others added 2 commits October 23, 2026 13:43
… solve and warn on very large ray grids

A GGJModel{:ray} built with npc or certify_rtol threw a MethodError in solve_inner, which
forwarded them to solve_ray. They are now accepted and ignored there, as real_profiles already
was. solve_ray warns when the Hermite grid exceeds warn_cells (default 6000), and its docstring
states that the grid is fixed rather than refined against a residual, with the expected accuracy
and how to get an error bar.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…es and use it for ggj_reference

A quantity may set relative_threshold, a fraction of the first ref's magnitude below which a
change is noise, alongside the absolute noise_threshold. It is stored with each run (an older
database gains the column on open). ggj_reference's Δ values are up to ~2e4, where the absolute
1e-10 floor was ~5e-15 relative, below cross-machine rounding; they now use 1e-10 relative.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@d-burg d-burg self-assigned this Oct 26, 2026
@d-burg
d-burg requested a review from matt-pharr October 26, 2026 18:43
@matt-pharr

matt-pharr commented Oct 26, 2026 •

Copy link
Copy Markdown
Collaborator

@d-burg what problems are you getting large grids on? The inward march was designed to solve needing huge galerkin grids to get representative frobenius series at the edge cells, IME I have only had huge BVP grids needed when Q > ~100, which should be pretty huge for something like DIII-D no? Just curious what region of parameter space this is in

@d-burg

d-burg commented Oct 26, 2026

Copy link
Copy Markdown
Collaborator Author

@matt-pharr Nothing in practice — this is the "warn on a large cell count" item from your #536 reply. I measured it on the Glasser–Wang and q4 benchmark surfaces: 1,024–2,700 cells for |Q| from 0.01 to 5000i, and only Glasser–Wang at Q = 5000i reaches 7,418. So it agrees with your experience, and the 6000 threshold only fires deep in that regime.

@d-burg d-burg added this to the GPEC v2.0.0 milestone Oct 28, 2026
d-burg and others added 2 commits October 28, 2026 15:41
… a large ray grid and leave profile-only options untyped

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@matt-pharr

matt-pharr commented Oct 28, 2026 •

Copy link
Copy Markdown
Collaborator

@d-burg — completed the requested full SDCC fanout against develop 7817f0e7a, testing #595 head 2dc99e1c8. This replaces the pending-status update.

Result: no changes in comparable quantities; harness exit code 0, with no run failures.

  • All tracked quantities are unchanged in 20 cases, including ggj_reference, ggj_ray_q500i, both extracted Galerkin cases, all three SLAYER cases, both Riccati builds, and the kinetic/error-field and multi-n cases.
  • gal_resistive_pe: all eight quantities are missing on both refs and provide no numerical validation.
  • This is a numerical regression comparison; it does not replace unit tests of the profile-only options or warning behavior.

Environment: Julia 1.12.6, x86_64 Linux, CI manifest 4c9d54fa pinned at both refs, partition sirius. 21 cases / 42 tasks. Matching allocations at each ref: 2 Julia threads / 1 BLAS thread normally; diiid_error_field uses 16 / 8. The precompiled Riccati case was compared in the same build mode at both refs.

./regress_fanout.sh --refs 7817f0e7a,2dc99e1c8 --harness-ref 2dc99e1c8 --name pr595_2dc99e1c8_vs_7817f0e7a_20261028

SDCC report: /home/ITER/pharrm/Projects/GPEC_dev/regress-fanout/runs/pr595_2dc99e1c8_vs_7817f0e7a_20261028/report.txt; report job 1299414.

Full regression report (21 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: 7817f0e7a  @ 7817f0e7a (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 16 threads/8 BLAS, jit build
Ref 2: 2dc99e1c8  @ 2dc99e1c8 (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 16 threads/8 BLAS, jit build
--------------------------------------------------------------------------------------------
Quantity                                         7817f0e7a     2dc99e1c8     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.406930e-06  1.406930e-06  0.0e+00  OK    
|Σ δ_as_designed| of the error-field coils       1.358875e-18  1.358875e-18  0.0e+00  OK    
Monte Carlo mean |δ| of the error-field coils    4.701300e-05  4.701300e-05  0.0e+00  OK    
Runtime (s)                                      256.5s        251.5s                 --    
============================================================================================
Summary: 10 unchanged


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

Regression Report: diiid_multi_n
=================================================================================================================
Ref 1: 7817f0e7a  @ 7817f0e7a (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: 2dc99e1c8  @ 2dc99e1c8 (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
-----------------------------------------------------------------------------------------------------------------
Quantity                                                      7817f0e7a        2dc99e1c8        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)                                             628              628              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.936559e+00     2.936559e+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.523427e+00     3.523427e+00     0.0e+00    OK    
PE toroidal torque sum_n -2n Im(Phi_n' Lambda_nn^-1 Phi_n)/4  1.820337e-06     1.820337e-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)                                                   213.1s           211.4s                      --    
=================================================================================================================
Summary: 19 unchanged


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

Regression Report: diiid_n1
=================================================================================================
Ref 1: 7817f0e7a  @ 7817f0e7a (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: 2dc99e1c8  @ 2dc99e1c8 (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
-------------------------------------------------------------------------------------------------
Quantity                                      7817f0e7a        2dc99e1c8        Diff       Status
-------------------------------------------------------------------------------------------------
total energy Re(et[1])                        8.006122e-01     8.006122e-01     0.0e+00    OK    
total energy Im(et[1])                        7.924882e-05     7.924882e-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)                             788              788              0.0e+00    OK    
ODE steps (total)                             783              783              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.842268e-01     8.842268e-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)                          6da947d0754e...  6da947d0754e...  identical  OK    
pressure profile (checksum)                   c9c6ca4072ca...  c9c6ca4072ca...  identical  OK    
Mercier D_I profile (checksum)                26babbe22505...  26babbe22505...  identical  OK    
resistive interchange D_R profile (checksum)  c46830151a0b...  c46830151a0b...  identical  OK    
ballooning Delta' profile (checksum)          c27c6779804a...  c27c6779804a...  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.288412e-04     5.288412e-04     0.0e+00    OK    
dominant-coupling singular values             [3 elem]         [3 elem]         0.0e+00    OK    
|forcing overlap with dominant mode|          1.411553e-04     1.411553e-04     0.0e+00    OK    
|delta_nominal| of coil set 1                 7.034649e-05     7.034649e-05     0.0e+00    OK    
||ddelta/d(shift)|| over coil sets            1.245448e-04     1.245448e-04     0.0e+00    OK    
||ddelta/d(tilt)|| over coil sets             4.177341e-07     4.177341e-07     0.0e+00    OK    
PE plasma energy                              3.320466e+00     3.320466e+00     0.0e+00    OK    
PE vacuum energy                              3.174319e+00     3.174319e+00     0.0e+00    OK    
PE surface energy                             5.508585e+00     5.508585e+00     0.0e+00    OK    
PE toroidal torque                            1.119354e-04     1.119354e-04     0.0e+00    OK    
NTV torque FGAR [N·m]                         5.480614e-01     5.480614e-01     0.0e+00    OK    
NTV kinetic energy dW FGAR [J]                8.163291e-02     8.163291e-02     0.0e+00    OK    
Runtime (s)                                   255.1s           256.5s                      --    
||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: 7817f0e7a  @ 7817f0e7a (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: 2dc99e1c8  @ 2dc99e1c8 (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
----------------------------------------------------------------------------
Quantity                       7817f0e7a      2dc99e1c8      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)                    198.1s         198.9s                  --    
============================================================================
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: 7817f0e7a  @ 7817f0e7a (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, aot build
Ref 2: 2dc99e1c8  @ 2dc99e1c8 (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, aot build
----------------------------------------------------------------------------
Quantity                       7817f0e7a      2dc99e1c8      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.1s          25.8s                   --    
============================================================================
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: 7817f0e7a  @ 7817f0e7a (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: 2dc99e1c8  @ 2dc99e1c8 (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
-------------------------------------------------------------------------
Quantity                            7817f0e7a  2dc99e1c8  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]   0.0e+00  OK    
SLAYER ω_Hz [2/1,3/1,4/1]           [3 elem]   [3 elem]   0.0e+00  OK    
SLAYER γ_Hz [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    
SLAYER enabled flag                 1          1          0.0e+00  OK    
Runtime (s)                         229.5s     231.2s              --    
=========================================================================
Summary: 17 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: 7817f0e7a  @ 7817f0e7a (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: 2dc99e1c8  @ 2dc99e1c8 (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
-------------------------------------------------------------------------
Quantity                            7817f0e7a  2dc99e1c8  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]   0.0e+00  OK    
SLAYER ω_Hz [2/1,3/1,4/1]           [3 elem]   [3 elem]   0.0e+00  OK    
SLAYER γ_Hz [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    
SLAYER enabled flag                 1          1          0.0e+00  OK    
Runtime (s)                         236.2s     230.5s              --    
=========================================================================
Summary: 17 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: 7817f0e7a  @ 7817f0e7a (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: 2dc99e1c8  @ 2dc99e1c8 (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
------------------------------------------------------------------
Quantity                     7817f0e7a  2dc99e1c8  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)                  224.6s     221.0s              --    
==================================================================
Summary: 7 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: 7817f0e7a  @ 7817f0e7a (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: 2dc99e1c8  @ 2dc99e1c8 (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
------------------------------------------------------------------------------------
Quantity                               7817f0e7a      2dc99e1c8      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)                            218.8s         186.6s                  --    
====================================================================================
Summary: 12 unchanged


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

Regression Report: efit_fixedbdy_separatrix
=======================================================================
Ref 1: 7817f0e7a  @ 7817f0e7a (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: 2dc99e1c8  @ 2dc99e1c8 (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
-----------------------------------------------------------------------
Quantity                    7817f0e7a     2dc99e1c8     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)                 47.7s         47.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: 7817f0e7a  @ 7817f0e7a (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: 2dc99e1c8  @ 2dc99e1c8 (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
--------------------------------------------------------------------
Quantity                 7817f0e7a     2dc99e1c8     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)              182.5s        177.7s                 --    
====================================================================
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: 7817f0e7a  @ 7817f0e7a (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: 2dc99e1c8  @ 2dc99e1c8 (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
--------------------------------------------------------------------
Quantity                 7817f0e7a     2dc99e1c8     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)              209.8s        176.4s                 --    
====================================================================
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: 7817f0e7a  @ 7817f0e7a (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: 2dc99e1c8  @ 2dc99e1c8 (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
----------------------------------------------------------
Quantity                7817f0e7a  2dc99e1c8  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)             178.6s     181.1s           --    
==========================================================
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: 7817f0e7a  @ 7817f0e7a (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: 2dc99e1c8  @ 2dc99e1c8 (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
---------------------------------------------------------------
Quantity            7817f0e7a     2dc99e1c8     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.4s         30.4s                  --    
===============================================================
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: 7817f0e7a  @ 7817f0e7a (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: 2dc99e1c8  @ 2dc99e1c8 (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
-----------------------------------------------------------------
Quantity            7817f0e7a      2dc99e1c8      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)         12.8s          9.8s                    --    
=================================================================
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: 7817f0e7a  @ 7817f0e7a (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: 2dc99e1c8  @ 2dc99e1c8 (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
--------------------------------------------------------------------------------
Quantity                           7817f0e7a      2dc99e1c8      Diff     Status
--------------------------------------------------------------------------------
vacuum energy Re(ev[1])            1.054739e+01   1.054739e+01   0.0e+00  OK    
q0                                 1.900003e+00   1.900003e+00   0.0e+00  OK    
NTV fgar quadrature torque [N·m]   2.267351e-03   2.267351e-03   0.0e+00  OK    
||xi_clebsch_alpha||               6.041963e-01   6.041963e-01   0.0e+00  OK    
total energy Re(et[1])             1.828278e+00   1.828278e+00   0.0e+00  OK    
total energy Im(et[1])             -1.326607e+00  -1.326607e+00  0.0e+00  OK    
plasma energy Re(ep[1])            -8.719112e+00  -8.719112e+00  0.0e+00  OK    
ODE steps (saved)                  608            608            0.0e+00  OK    
# singular surfaces                2              2              0.0e+00  OK    
boundary-response torque [N·m]     2.285518e-03   2.285518e-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)                  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||                   3.945600e-03   3.945600e-03   0.0e+00  OK    
Runtime (s)                        216.3s         219.2s                  --    
T_xe applied-forcing torque [N·m]  2.285518e-03   2.285518e-03   0.0e+00  OK    
||dxi_clebsch_psi/dpsi||           3.791914e+00   3.791914e+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: solovev_kinetic_multiion — Solovev n=1, ideal + PE + multi-ion NTV (D + T + electron summed)
================================================================

Regression Report: solovev_kinetic_multiion
==========================================================================
Ref 1: 7817f0e7a  @ 7817f0e7a (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: 2dc99e1c8  @ 2dc99e1c8 (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
--------------------------------------------------------------------------
Quantity                     7817f0e7a      2dc99e1c8      Diff     Status
--------------------------------------------------------------------------
NTV total (D+T+imp+e) [N·m]  3.141767e+01   3.141767e+01   0.0e+00  OK    
NTV Deuterium [N·m]          1.973730e+01   1.973730e+01   0.0e+00  OK    
NTV Tritium [N·m]            2.046293e+01   2.046293e+01   0.0e+00  OK    
NTV electron [N·m]           -8.782557e+00  -8.782557e+00  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)                  208.2s         209.8s                  --    
==========================================================================
Summary: 6 unchanged


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

Regression Report: solovev_kinetic_ntv
======================================================================================
Ref 1: 7817f0e7a  @ 7817f0e7a (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: 2dc99e1c8  @ 2dc99e1c8 (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
--------------------------------------------------------------------------------------
Quantity                                   7817f0e7a     2dc99e1c8     Diff     Status
--------------------------------------------------------------------------------------
NTV torque fgar [Re, Im]                   [1 elem]      [1 elem]      0.0e+00  OK    
NTV ψ quadrature evaluations               45            45            0.0e+00  OK    
fluid CGL energy fcgl [J]                  1.552303e+01  1.552303e+01  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)                                208.4s        211.4s                 --    
======================================================================================
Summary: 7 unchanged


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

Regression Report: solovev_kinetic_nuzero
======================================================================
Ref 1: 7817f0e7a  @ 7817f0e7a (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: 2dc99e1c8  @ 2dc99e1c8 (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
----------------------------------------------------------------------
Quantity                 7817f0e7a      2dc99e1c8      Diff     Status
----------------------------------------------------------------------
vacuum energy Re(ev[1])  1.058613e+01   1.058613e+01   0.0e+00  OK    
q0                       1.900003e+00   1.900003e+00   0.0e+00  OK    
total energy Re(et[1])   2.290965e+00   2.290965e+00   0.0e+00  OK    
total energy Im(et[1])   -1.564546e+00  -1.564546e+00  0.0e+00  OK    
plasma energy Re(ep[1])  -8.295163e+00  -8.295163e+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    
Runtime (s)              223.5s         216.6s                  --    
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: 7817f0e7a  @ 7817f0e7a (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: 2dc99e1c8  @ 2dc99e1c8 (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
---------------------------------------------------------------------------------
Quantity                      7817f0e7a        2dc99e1c8        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)                   186.8s           187.8s                      --    
=================================================================================
Summary: 15 unchanged


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

Regression Report: solovev_n1
=================================================================================
Ref 1: 7817f0e7a  @ 7817f0e7a (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
Ref 2: 2dc99e1c8  @ 2dc99e1c8 (2026-10-28)
       env: julia 1.12.6, x86_64-linux-gnu, manifest 4c9d54fa (pinned), 2 threads/1 BLAS, jit build
---------------------------------------------------------------------------------
Quantity                      7817f0e7a        2dc99e1c8        Diff       Status
---------------------------------------------------------------------------------
total energy Re(et[1])        1.090560e-02     1.090560e-02     0.0e+00    OK    
total energy Im(et[1])        1.350301e-10     1.350301e-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)          2340b888d410...  2340b888d410...  identical  OK    
pressure profile (checksum)   108b947087e6...  108b947087e6...  identical  OK    
ca_left (checksum)            b7a5bbc5f549...  b7a5bbc5f549...  identical  OK    
Runtime (s)                   192.0s           189.9s                      --    
=================================================================================
Summary: 22 unchanged

Third-party human review and approval are required before merge.

@github-actions github-actions Bot added the bugfix Something was wrong and now is not label Oct 28, 2026
@d-burg

d-burg commented Oct 29, 2026

Copy link
Copy Markdown
Collaborator Author

@matt-pharr on the relative floor for ggj_reference you asked for in #536: I measured before adding it. Feynman reproduces all four Δ values to the last bit across runs, and the harness always compares refs on the same machine, so the absolute 1e-10 floor raises no false alarms. Across machines (Mac arm64 / Julia 1.11.6 vs feynman x86 / 1.11.9, same pinned manifest) they differ by 1.0e-4 on Re Δ₊, 1.5e-6 on Im Δ₊ and ~5e-10 on Δ₋. A relative floor of 1e-10 would still flag Re Δ₊, because the noise follows |Δ₊| ≈ 2.07e4 (4.8e-9 relative) rather than its real part. So I've left develop's floors unchanged here, and recorded the measurement in #607 for when cross-machine comparison is wanted. Thanks for the harness runs.

@d-burg
d-burg marked this pull request as ready for review October 29, 2026 01:26
@matt-pharr
matt-pharr merged commit 6526b05 into develop Oct 29, 2026
5 of 6 checks passed
@matt-pharr
matt-pharr deleted the bugfix/ggj-ray-followups branch October 29, 2026 12:04
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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants