results.nc
Dimensions:
particle, xyz(3), phase(5), iclass_dim(3)
Variables:
# Phase space (reference coordinates, 5D)
zstart(phase, particle) float64 # (rho, theta, zeta, p, v_par/v)
zend(phase, particle) float64
# Cartesian position only (3D)
xstart_cart(xyz, particle) float64 # (x, y, z) in meters
xend_cart(xyz, particle) float64 # (x, y, z) at loss/end
# Scalars
times_lost(particle) float64
trap_par(particle) float64
perp_inv(particle) float64
iclass(iclass_dim, particle) int32
class_lost(particle) int8
Global Attributes:
# All namelist config params
ntestpart, trace_time, facE_al, v0, integmode, relerr, ...
coord_input, field_input, netcdffile
coordinate_type ("vmec" | "chartmap")
# etc.
import xarray as xr
ds = xr.open_dataset('results.nc')
# Wall hits (chartmap: rho >= 1)
lost = ds.where((ds.times_lost > 0) & (ds.zend[0] >= 0.99), drop=True)
# 3D positions and energy
x, y, z = lost.xend_cart[0], lost.xend_cart[1], lost.xend_cart[2]
energy_eV = lost.zend[3]**2 * ds.attrs['facE_al'] * 3.5e6
Summary
Add structured NetCDF output (
results.nc) for particle tracing results, replacing/supplementing ASCIItimes_lost.dat. Key addition: Cartesian positions for wall heat load analysis.Motivation
xstart_cart,xend_cart) enable post-processing without coordinate transformation machineryProposed Structure
Implementation
netcdf_results_output.f90(~150 lines)output_results_netcdfto namelist (default.false.initially)xstart_cart,xend_cartviaref_coords%evaluate_cart()Backwards Compatibility
times_lost.datunchanged (ASCII legacy preserved)Use Case: Wall Heat Loads
Related Issues