Skip to content

Restore warning-mode orbit recovery without Newton stalls#499

Open
krystophny wants to merge 22 commits into
mainfrom
fix/shared-warning-recovery
Open

Restore warning-mode orbit recovery without Newton stalls#499
krystophny wants to merge 22 commits into
mainfrom
fix/shared-warning-recovery

Conversation

@krystophny

@krystophny krystophny commented Jul 16, 2026

Copy link
Copy Markdown
Member

Summary

  • restore historical warning-mode continuation for every finite Newton max-iteration iterate while retaining radial damping for bounded VMEC/Boozer/Meiss fields
  • recover non-SPECTRE symplectic retry exhaustion with the established adaptive RK/near-axis pusher; keep per-orbit recovery active across a failing axis/edge region or generic cooldown, then reseed and resume the requested symplectic method
  • preserve SPECTRE polynomial-extension Newton behavior, harden inverse/sheet paths against non-finite states, and retain meaningful last-valid states
  • make Level-1 refraction and forbidden-crossing relocation fall back immediately to the energy-exact Level-0 map when a field sample becomes non-finite
  • remove progress, warning, crossing-log, and landing-stat critical/I/O work from the OpenMP tracing region; report aggregate recovery, resume, and intervention counts after the team joins
  • preserve large unwrapped toroidal winding while solving the periodic SPECTRE inverse
  • stack the independent pyplot module build-order fix from ready PR Order pyplot module before SIMPLE compilation #500 so clean parallel Ninja builds cannot race on pyplot_module.mod

The RK recovery state is local to each orbit. The existing pusher uses its pseudo-Cartesian axis chart below s=0.01; recovery resumes symplectic tracing after s>=0.02. Edge recovery resumes at s<=0.98, while generic failures use exponentially backed-off probes. A successful symplectic step clears the recovery state. Strict mode remains opt-in and unchanged.

This is the ready top PR for the reviewed stack (#494-#498 and #500); the lower PRs remain separated by concern. The branch merges current main and is the exact SIMPLE revision used for the final VMEC/SPECTRE benchmark campaign.

Related: #395, #398, #440, #441, #442, #469, #493, #317. Runtime builds pin libneo 79dc370 = current main e0437ad (near-axis continuation and full-torus chartmap inverse) plus exactly the reviewed NVFORTRAN portability change from open libneo PR #394.

Validation

  • combined fo at exact head c82d155: static analysis, build, complete test suite, and lint passed in 381.0 s
  • focused recovery-region, Newton-status, physical-exit, and SPECTRE-crossing tests pass
  • isolated PR Order pyplot module before SIMPLE compilation #500 clean fo build and full fo passed
  • GDB confirmed the prior VMEC slowdown was repeated nine-level retry descent after each one-step RK fallback, not angle divergence, idle OpenMP workers, or a deadlock
  • exact NVHPC build and expanded cluster smoke (all five algorithms plus the exact 256-marker VMEC production population) follow in the benchmark repository

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant