Boozer chartmap format

An extended Boozer chartmap is a NetCDF file with geometry and field data in Boozer coordinates; SIMPLE traces it without a VMEC file. This page specifies the file for writers of converters. All grids are uniform, because the SIMPLE/libneo splines assume constant spacing along each abscissa. Usage and the shipped converters are in Field sources and coordinates.

Radial grids

The schema uses two radial coordinates:

  • rho is uniform and increasing. It is the chartmap coordinate rho = sqrt(s). Geometry, Bmod, B_theta, and B_phi use this grid.

  • s is uniform and increasing. It spans rho(1)**2 to rho(n_rho)**2. A_phi uses this grid.

A_phi must be a one-dimensional variable over s and must carry radial_abscissa = "s". Files that store A_phi over rho are invalid.

Runtime input keeps the usual SIMPLE meaning: sbeg is normalized toroidal flux s in both VMEC and chartmap runs. A chartmap run evaluates the start surface at rho = sqrt(sbeg).

Angles and signs

SIMPLE chartmaps use the same left-handed Boozer orientation as the VMEC path. The scalar global attribute torflux is the edge value of A_theta, the poloidal covariant component of the vector potential:

A = A_theta grad(theta_B) + A_phi grad(zeta_B)
A_theta = torflux*s
A_phi   = -chi

GVEC Boozer coordinates are right-handed for the W7-X/GVEC comparisons, with zeta_GVEC = -phi_VMEC. A GVEC chartmap therefore needs exactly one angle reversal before SIMPLE reads it:

Reversal

Resampling

Components that change sign

Components that keep sign

zeta -> -zeta (default exporter path)

geometry and Bmod at -zeta

A_phi, B_phi

torflux/A_theta, B_theta

theta -> -theta

geometry and Bmod at -theta

torflux/A_theta, B_theta

A_phi, B_phi

Raw right-handed GVEC chartmaps and double-flipped chartmaps do not match the SIMPLE/VMEC convention.

Runtime scaling

Chartmap files store base-scale CGS quantities. SIMPLE applies the usual vmec_B_scale and vmec_RZ_scale settings when it loads a chartmap, so a chartmap run scales like a VMEC run:

Quantity

Runtime scale

Bmod

vmec_B_scale

B_theta, B_phi

vmec_B_scale * vmec_RZ_scale

A_phi, torflux

vmec_B_scale * vmec_RZ_scale**2

x, y, z, derived rmajor

vmec_RZ_scale

test_chartmap_scaling checks the field object, canonical Boozer splines, reference-coordinate wrapper, vector potential, covariant field components, and Bmod.

Dimensions

The logical SIMPLE order is shown below. Fortran writers use this order directly. Python netCDF4 writers in this repository use reversed dimension tuples for multidimensional variables and transpose the data before writing.

Dimension

Meaning

rho

Uniform sqrt(s) grid for geometry, Bmod, B_theta, B_phi.

s

Uniform s grid for A_phi.

theta

Endpoint-excluded Boozer poloidal grid.

zeta

Endpoint-excluded Boozer toroidal grid.

The file stores no duplicate periodic endpoint planes. Readers append those planes internally when the spline backend requires a full-period grid.

Variables

Variable

Logical shape

Units

rho

(rho)

dimensionless

s

(s)

dimensionless

theta

(theta)

radians

zeta

(zeta)

radians

x, y, z

(rho, theta, zeta)

cm

A_phi

(s)

G cm^2

B_theta, B_phi

(rho)

G cm

Bmod

(rho, theta, zeta)

G

num_field_periods

scalar

dimensionless

Required attributes

Global attributes:

  • rho_convention = "rho_tor"

  • zeta_convention = "boozer"

  • rho_lcfs

  • boozer_field = 1

  • torflux in G cm^2

Variable attributes:

  • A_phi:radial_abscissa = "s"

  • x:units = "cm", y:units = "cm", z:units = "cm"

rmajor is not a schema attribute. The reader derives it from the innermost geometry surface.