Outputs¶
This page lists every file SIMPLE writes, its columns and the meaning of the exit codes. Times are in s; angles in radians, not wrapped; positions in the reference coordinates (\(s\) for VMEC, \(\rho = \sqrt{s}\) for Boozer chartmaps, the native radius for other chartmaps).
Phase-space state¶
Index |
Symbol |
Meaning |
|---|---|---|
1 |
\(s\) or \(\rho\) |
radial reference coordinate |
2 |
\(\vartheta\) |
poloidal reference angle |
3 |
\(\varphi\) |
toroidal reference angle |
4 |
\(v/v_0\) |
speed over birth speed; 1 without collisions |
5 |
\(\lambda = v_\parallel/v\) |
pitch |
Text files¶
confined_fraction.datOne row per macrostep: time, confined fraction of passing markers, confined fraction of trapped markers, number of resolved markers. Both fractions are divided by the resolved markers at that time; the loss fraction is \(1 - f_\text{pass} - f_\text{trap}\). Passing means \(\kappa < 0\) at the start.
unresolved_fraction.datOne row per macrostep: time, fraction of unresolved markers,
ntestpart.times_lost.datOne row per marker: index, loss time, trapping parameter \(\kappa\), start radius, perpendicular invariant \(J_\perp\), end state (5 columns). The loss time is
trace_timefor confined markers,-1for markers not traced (exit code 3) andNaNfor unresolved ones.orbit_exit_code.datOne row per marker: index, exit code, loss time, radial residual and time width of the located boundary crossing.
start.datStart states, one per row (written by
startmode1, 5, 7; read by 2, 4, 6).avg_inverse_t_lost.datMean of \(1/t_\text{loss}\) over lost markers (0 if none).
class_parts.datWith classification (
tcut > 0orclass_plot): index, start radius, \(J_\perp\), three class codes (Orbit classification).bminmax.datWith classification and
num_surf > 1: \(s\), \(B_\text{min}(s)\), \(B_\text{max}(s)\) in G.alpha_source.datSource normalisation of
startmode = 7(Fusion-weighted alpha births).
\(\kappa\) and \(J_\perp\) are defined in Guiding-centre model.
Exit codes¶
Code |
Meaning |
|---|---|
0 |
traced to |
1 |
lost through the LCFS (or a chartmap boundary declared |
2 |
lost to the wall (STL wall or chartmap boundary declared |
3 |
not traced ( |
4 |
all recovery methods failed for a collisionless marker in the core (\(s < 0.01\)); counted confined |
101 |
unresolved: left the coordinate domain ( |
102 |
unresolved: Newton iteration did not converge |
103 |
unresolved: linear solve failed |
104 |
unresolved: boundary crossing could not be located |
105 |
unresolved: full-orbit step failed |
Unresolved markers (101–105) are excluded from the confined fractions and
counted in unresolved_fraction.dat. A large unresolved fraction means a
too large step (npoiper2), too coarse field splines or a bad equilibrium
near the axis; it is not a physical loss.
NetCDF results¶
output_results_netcdf = .true. writes results.nc with dimension
particle (ntestpart) and global attributes holding the run settings
(trace_time, ntestpart, integmode, cart_units, input files,
…).
Variable |
Meaning |
|---|---|
|
start and end state ( |
|
Cartesian start and end position ( |
|
as in the text files |
|
column 4 of |
|
column 5 of |
|
\(\kappa\), \(J_\perp\) |
|
three class codes; zero without classification |
|
loss flag of the classification run |
|
STL wall hit flag and intersection point |
|
hit STL facet, 0-based; only with |
|
facet normal at the hit |
|
incidence cosine; 1 is normal incidence |
|
incidence angle; 0 is normal incidence |
output_orbits_macrostep = .true. writes orbits.nc with every
marker’s state at every macrostep: time, s, theta, phi,
p_abs (\(v/v_0\)), v_par (\(\lambda\)) and, when a reference
geometry exists, R and Z. The attribute radial_coordinate names
the meaning of s.
All text files load with numpy.loadtxt. Plots: Plotting results;
pysimple.plotting.plot_loss_statistics adds energy-resolved loss panels.