Problem
Full-orbit (orbit_model=7) tracing on the chartmap field hits field-inversion non-convergence (FO_LOCATE_FAIL) for a non-trivial fraction of near-edge / large-excursion orbits. On the W7-X high-mirror reactor benchmark, of 43 markers with an early terminal event, 21 (at npoiper2=16384) end on an inversion fault rather than a physical s>=1 crossing.
PR #427 makes these faults harmless to the loss statistics (a fault counts confined, not lost). But the orbit still terminates at the fault: its full trajectory is not integrated, it is only assumed confined for the remaining time. Eliminating the faults would let these orbits run to completion and give the true loss/confined classification.
Evidence
diag_traj.x (extended for orbit_model=7 in #427) traces the faulting orbits: each faults at interior radius (the magnetic axis, or a banana tip near s=0.5-0.85), never at s=1, with energy conserved to machine precision. The fault count falls with resolution (40 -> 29 -> 21 for npoiper2 100 -> 1000 -> 16384), consistent with a per-step inversion failure when the Boris step lands far from the warm-start guess (near the axis singularity or during a large radial excursion).
Candidate fixes
- Warm-start / multi-seed robustness in
invert_cart_warm / the chartmap from_cart for large inter-step jumps (libneo).
- Accept a clamped-edge or near-axis inversion when the residual is within a Larmor radius, using the actual local Larmor scale rather than a fixed fraction of a radial cell (
EDGE_FRAC).
- Sub-step the particle push near the axis / edge so the inversion guess stays close.
Follow-up to #419 / #427.
Problem
Full-orbit (
orbit_model=7) tracing on the chartmap field hits field-inversion non-convergence (FO_LOCATE_FAIL) for a non-trivial fraction of near-edge / large-excursion orbits. On the W7-X high-mirror reactor benchmark, of 43 markers with an early terminal event, 21 (atnpoiper2=16384) end on an inversion fault rather than a physicals>=1crossing.PR #427 makes these faults harmless to the loss statistics (a fault counts confined, not lost). But the orbit still terminates at the fault: its full trajectory is not integrated, it is only assumed confined for the remaining time. Eliminating the faults would let these orbits run to completion and give the true loss/confined classification.
Evidence
diag_traj.x(extended fororbit_model=7in #427) traces the faulting orbits: each faults at interior radius (the magnetic axis, or a banana tip nears=0.5-0.85), never ats=1, with energy conserved to machine precision. The fault count falls with resolution (40 -> 29 -> 21 fornpoiper2100 -> 1000 -> 16384), consistent with a per-step inversion failure when the Boris step lands far from the warm-start guess (near the axis singularity or during a large radial excursion).Candidate fixes
invert_cart_warm/ the chartmapfrom_cartfor large inter-step jumps (libneo).EDGE_FRAC).Follow-up to #419 / #427.