Full orbit, SPECTRE and GPU objective

This page states the models that replace or supplement the guiding-centre system: full-orbit tracing, the per-volume treatment of SPECTRE equilibria, and the segmented loss objective of the CUDA backend. Usage: Running SIMPLE.

Full-orbit tracing

orbit_model = 7 (with orbit_coord = 1) integrates the Lorentz motion in Cartesian position and velocity,

\[\frac{d\mathbf x}{d\bar t} = \bar{\mathbf v}, \qquad \frac{d\bar{\mathbf v}}{d\bar t} = \frac{1}{\bar\rho_0}\,\bar{\mathbf v}\times\mathbf B(\mathbf x),\]

in the normalisation of Guiding-centre model (src/orbit_fo_boris.f90). \(\mathbf B(\mathbf x)\) comes from a Boozer chartmap: the chartmap is inverted to \(u = (\rho,\vartheta_B,\varphi_B)\) by Newton iteration and \(\mathbf B = \nabla\times\mathbf A\) is assembled from the Boozer potentials \(A_\vartheta(s)\), \(A_\varphi(s)\), so that \(B^s = 0\) exactly; a pseudo-Cartesian chart \((\rho\cos\vartheta,\rho\sin\vartheta,\varphi)\) keeps the inversion regular at the axis. The step is the Boris drift–rotate–drift scheme with \(\bar{\mathbf t} = \mathbf B\,h/(2\bar\rho_0)\):

\[\mathbf x^{n+1/2} = \mathbf x^n + \tfrac h2\bar{\mathbf v}^n,\quad \bar{\mathbf v}' = \bar{\mathbf v}^n + \bar{\mathbf v}^n\times\bar{\mathbf t},\quad \bar{\mathbf v}^{n+1} = \bar{\mathbf v}^n + \bar{\mathbf v}'\times\frac{2\bar{\mathbf t}}{1+|\bar{\mathbf t}|^2},\quad \mathbf x^{n+1} = \mathbf x^{n+1/2} + \tfrac h2\bar{\mathbf v}^{n+1},\]

with \(\mathbf B\) at \(\mathbf x^{n+1/2}\). It rotates the velocity exactly for constant \(\mathbf B\) and preserves phase-space volume. The step is the guiding-centre microstep, \(h = \Delta\tau/\sqrt2\), so the gyro-angle per step is \(\Delta\tau\,B/\rho_0\): npoiper2 must make \(2\pi R_0 B/(\texttt{npoiper2}\,\rho_0) \ll 1\). The particle starts one gyroradius from the sampled guiding centre (init_fo in src/simple.f90). A marker is lost when its reconstructed guiding centre reaches \(\rho \ge 1\) and the particle is within 0.05 of the edge. Full-orbit tracing does not support walls, collisions or classification.

SPECTRE equilibria

A multi-region relaxed MHD equilibrium has \(M_\text{vol}\) nested volumes with a smooth field inside each and current sheets on the interfaces, across which the tangential field jumps. SIMPLE labels position by \(\rho_g \in [0, M_\text{vol}]\), volume \(k\) covering \([k-1,k]\) (integ_coords = 6), and builds a Meiss canonical chart per volume (Coordinates and field representation). Inside a volume the symplectic guiding-centre integrators run unchanged.

At a sheet the guiding-centre ordering fails, because \(\mathbf b\) changes over a distance smaller than the gyroradius. Multi-volume tracing therefore requires integmode > 0 and crossing_level = 3: when the guiding centre comes within spectre_fo_entry_larmor (default 1.5) radial gyroradii \(\rho_r = \rho_L|\nabla\rho_g|\) of an interface or of the outer boundary, SIMPLE switches to the full Lorentz orbit in the sharp per-volume field (RK45 with located sheet crossings), and returns beyond spectre_fo_entry_larmor + 1 radial gyroradii. The algorithm is in DOC/spectre-interface-crossing.md; DOC/spectre-rejected-interface-models.md derives why fixed-\(\mu\) guiding-centre maps across a sheet are invalid (Design notes).

GPU loss objective

The CUDA backend (GPU tracing) traces guiding-centre orbits in Boozer coordinates in segments of gpu_t_block and after each segment evaluates

\[W = \frac1N\sum_{i\ \text{lost}} e^{-t_i/\tau_\text{loss}}, \qquad \tau_\text{loss} = \texttt{gpu\_loss\_tau},\]

stopping when \(W > \texttt{gpu\_maxloss}\) (src/simple_cuda_native_rk54.cu). This follows the objective of Landreman et al. (2026).

References

  • M. Landreman, M. Czekanski, A. Giuliani, B. Jang, R. Conlin, Bayesian optimization of stellarator alpha-particle confinement using data-informed parameter spaces and dimensionality reduction, arXiv:2606.19523 (2026), https://arxiv.org/abs/2606.19523