Skip to content

Full-orbit chartmap inversion robustness: eliminate near-edge/near-axis FO_LOCATE_FAIL faults #428

Description

@krystophny

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    tier/T3physics or output behavior

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions