Wall intersection¶
This page defines the loss boundaries, the segment–triangle test against an STL wall, and the accuracy of the resulting hit points and times. Usage: Wall heat loads.
Loss boundaries¶
Without a wall, a marker is lost when its guiding centre crosses the outer boundary of the integration domain: \(s = 1\) for VMEC and Boozer coordinates, or the outer boundary of a chartmap. The crossing is located inside the step (Integrators); the exit code is 1.
For chartmap reference coordinates chart_boundary_kind sets the meaning
of the outer chartmap boundary (init_stl_wall_if_enabled in
src/simple_main.f90):
Value |
Crossing the outer chartmap boundary |
|---|---|
|
|
|
loss at the LCFS, exit code 1 |
|
loss at the wall, exit code 2 |
|
end of the numerical domain, exit code 101; not a physical loss |
A chartmap with rho_lcfs \(< 1\) extends beyond the LCFS; an STL wall
inside that domain is then the physical loss surface.
Segment–triangle test¶
wall_input is read into a CGAL surface mesh with an AABB tree
(src/wall/stl_wall_cgal.cpp, exact-predicates/inexact-constructions
kernel), with lengths scaled to metres by wall_units (m or mm).
A wall requires chartmap reference coordinates.
For every accepted microstep SIMPLE maps the guiding-centre positions at
its start and end, \(\mathbf x_0\) and \(\mathbf x_1\), through the
chartmap to Cartesian coordinates and intersects the straight segment with
the mesh (stl_wall_first_hit_segment_with_normal). Of all intersections,
the one closest to \(\mathbf x_0\) is the hit. locate_wall_segment
then records
the hit point \(\mathbf x_\text{hit}\) (
wall_hit_cart) and the triangle index,the unit normal \(\mathbf n\) of the triangle,
the incidence angle \(\alpha\), \(\cos\alpha = |\hat{\mathbf d}\cdot\mathbf n|\) with \(\hat{\mathbf d} = (\mathbf x_1 - \mathbf x_0)/|\mathbf x_1 - \mathbf x_0|\) (0 is normal incidence),
the fraction \(f = |\mathbf x_\text{hit} - \mathbf x_0| / |\mathbf x_1 - \mathbf x_0|\), which interpolates the loss time and \((v/v_0, \lambda)\) linearly within the microstep,
maps \(\mathbf x_\text{hit}\) back to reference coordinates (by linear interpolation in \(u\) if the chartmap inversion fails) and ends the orbit with exit code 2.
Query gate¶
The wall is non-convex: a chord between two points inside the LCFS can cut it, e.g. on the inboard side of a bean-shaped section. SIMPLE therefore queries the wall only for microsteps ending at \(\rho > \rho_\text{LCFS}\). If a microstep also crosses the outer chartmap boundary, the segment up to that crossing is tested and an earlier wall hit wins.
Accuracy¶
The guiding centre, not the particle, is intersected: impact points are off by up to one gyroradius (a few cm for 3.5 MeV alphas in a reactor), and \(\alpha\) is the angle of the guiding-centre chord, not of the particle velocity.
The chord deviates from an orbit of curvature \(k\) by about \(k\ell^2/8\) for chord length \(\ell\); increase
npoiper2until hit statistics converge, especially at grazing incidence.
Albert et al. (2026) apply the method to stellarator reactors and compare with BEAMS3D.
References¶
C. G. Albert, G. Grassler, J. Lion, J.-F. Lobsien, J. Schatzlmayr, F. Warmer, Symplectic methods for optimization of wall heat loads by fusion alpha particles in stellarator reactors, Nucl. Mater. Energy 48, 102200 (2026), https://doi.org/10.1016/j.nme.2026.102200