Skip to content

Commit f1ac78a

Browse files
logan-ncclaude
andcommitted
FFS - EXPERIMENT - Phase A diagnostics cancel Phase B; route (a) landed as PR #398
The A3 kill-switch fires: route (a) geometry already agrees with a near-exact trace to 5e-10..2e-8, i.e. at the integration tolerance, so the planned SFL reparametrisation would fix an error that is not there. Also records that nstep is hypersensitive -- a 5.3e-11 geometry perturbation moves it 1.2% -- so the leftover 15-20% gaps are not reliable signal; that A1 places the residual in the traced construction rather than the EFIT input (analytic input, traced 1.47x vs inversion 1.18x); and that tightening the trace tolerance 1000x on that case is null. Notes the harness baseline was refreshed from a stale local develop, and that the first etol test was a no-op because the deck has no etol key. No src changes on this branch. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
1 parent b9b3ee0 commit f1ac78a

1 file changed

Lines changed: 83 additions & 0 deletions

File tree

handoff/issue376/RESULTS.md

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -652,6 +652,89 @@ solver steps (route (a) evaluates it; `dtmax` makes the steps small enough that
652652
which the current diagnostics, all built on node values, cannot see. Closing that gap is worth
653653
roughly another 18% on top of route (a)'s 42%.
654654

655+
## 17. Route (a) landed; Phase A diagnostics cancel the planned Phase B
656+
657+
Route (a) is now on `performance/consistent-surface-theta-parametrization` (PR #398), measured
658+
against **current** develop (9491f893d — the earlier harness run used a stale local `develop` at
659+
40f9a9d03, ~20 commits behind; refreshed, conclusions unchanged):
660+
661+
- `diiid_n1`: ODE steps (total) **4572 → 1974 (−56.8%)**, et[1] 0.10%, q0/q95/singular surfaces
662+
unchanged to 0.00%. Runtime 202.1 → 177.6 s.
663+
- `solovev_n1`: et[1] moves 98% — **because the develop value was grid-dependent**. Same commit,
664+
only route (a) differing:
665+
666+
| mpsi | et[1] develop | et[1] route (a) | steps develop | steps route (a) |
667+
|---|---|---|---|---|
668+
| 256 | 1.959e-02 | **1.462068e-02** | 1074 | 775 |
669+
| 512 | 5.399e-02 | **1.462087e-02** | 1558 | 806 |
670+
| 1024 | 8.890e-02 | **1.462084e-02** | 2689 | 891 |
671+
672+
develop drifts 4.5× and is still moving; route (a) is converged to 6 significant figures and the
673+
step ratio is 1.04×/1.11× against 1.45×/1.73×. **For Solovev the issue's goal is met on both
674+
axes at once.**
675+
676+
### A3 — the kill-switch fires: there is no interpolant error left to remove
677+
678+
Route (a) geometry vs a near-exact trace (`dtmax = 2π/8000`), DIII-D mpsi=512, max relative
679+
difference:
680+
681+
| quantity | ψ<0.05 (280 surfaces) | mid-plasma |
682+
|---|---|---|
683+
| nu | 5.53e-10 | 1.31e-09 |
684+
| offset | 2.40e-08 | 7.38e-09 |
685+
| rcoords | 7.30e-10 | 4.63e-09 |
686+
| jac | 9.92e-10 | 7.45e-10 |
687+
688+
The pre-registered prediction was that route (a) would differ from gold near the axis by **far more
689+
than the integration tolerance**. It does not — it agrees *at* tolerance. **Phase B (reparametrise
690+
onto the SFL angle with `tstops`) would fix an error that is not there, and is cancelled.**
691+
692+
### The step count is hypersensitive, so small step differences are not signal
693+
694+
Two traces differing only by `dtmax = 2π/8000` vs `2π/7900` — geometry identical to **5.3e-11**
695+
give 2343 vs 2370 steps (1.2%). And the gold trace takes 15% fewer steps than route (a) while
696+
agreeing with it to ~1e-9. So `nstep` is not a smooth functional of equilibrium quality: it responds
697+
to perturbations far below physical significance (et[1] agrees to 8-9 digits throughout). Route
698+
(a)'s −57% is far outside this sensitivity and is real; the leftover 15–20% gaps are its tail.
699+
700+
### A1 — the residual belongs to the traced construction, not to the EFIT input
701+
702+
Same analytic equilibrium (`TJ_ANALYTIC_INPUT`), same grid, both with route (a) applied, only the
703+
construction path differing:
704+
705+
| mpsi | traced (`tj_analytic_direct`) | inversion (`tj_analytic`) |
706+
|---|---|---|
707+
| 256 | 814 | 789 |
708+
| 512 | 997 (1.23×) | 892 (1.13×) |
709+
| 1024 | 1470 (1.47×) | 1056 (1.18×) |
710+
711+
With a perfectly smooth analytic input, the traced path still grows 1.47× while the inversion path
712+
grows 1.18×. So the DIII-D residual is **not** specific to the EFIT file.
713+
714+
### …and it is not trace integration error either
715+
716+
On that same traced analytic case at mpsi=1024, tightening the trace tolerance 1000× is null:
717+
`etol` 1e-10 → 1470 steps, 1e-13 → 1487 steps (+1.2%), et[1] identical to 8 digits.
718+
719+
(Method note: the first attempt at this test was a **no-op**`examples/LAR_epsilon_scan` has no
720+
`etol` key, so the `sed` matched nothing and all three runs used the default. Bit-identical results
721+
gave it away. The numbers above are from runs with the key actually inserted.)
722+
723+
### Where that leaves the deep core
724+
725+
Geometry accurate to ~1e-9, insensitive to trace tolerance, yet still growing with mpsi on the
726+
traced path but not the inversion path. What distinguishes them is not the *size* of the per-surface
727+
error but its *character*: tracing each surface independently produces an error that is white in ψ
728+
at whatever amplitude it has, and a packed grid amplifies white noise no matter how small. The
729+
inversion path's quadrature error is smooth in ψ and so is not amplified.
730+
731+
If that is right, no amount of per-surface accuracy will flatten the traced path — only making the
732+
error *correlated* across surfaces (continuation) or using the inversion construction will. That is
733+
a hypothesis, not a measurement, and it is where the next session should start.
734+
735+
**Untouched**: A2 (the EL-side error-control question — the solves pass only `reltol`, so `abstol`
736+
sits at the DiffEq default; plus the integration-direction and Frobenius-start questions).
737+
655738
## Implications / ranked follow-ups
656739

657740
1. **Use the two-pass auto grid** (`mpsi=0`, `psi_accuracy`) — already the example default; it

0 commit comments

Comments
 (0)