Numerics
This section describes how the equations are discretized and evaluated.
Grid Conventions
The surface is parameterized by toroidal angle phi and poloidal
angle theta. SIMSOPT and the reference BIEST code use normalized
angles of period 1, not 2*pi. The grids are uniform:
thetain[0, 1)withnthetapoints.phiin[0, 1/nfp)withnphipoints for a field period.
For stellarator symmetry (half_period=True), the toroidal grid is
shifted by half a grid point. This is essential for spectral accuracy
with uniform weights.
Spectral Resampling
The core surface operators are Fourier based:
Upsample: zero-pad Fourier coefficients.Resample: upsample then decimate.Grad2D: spectral differentiation in both angles.RotateToroidal: phase shift in Fourier space.
The JAX implementation uses unitary FFTs to match the normalization in
SCTL. The reference FFT wrapper scales by 1/sqrt(N) on both forward
and inverse transforms.
Surface Differentiation and Normals
Surface derivatives are computed spectrally. For a Fourier mode
exp(2*pi*i*(m*theta + n*phi)):
partial_thetamultiplies the coefficient by-2*pi*i*m.partial_phimultiplies the coefficient by-2*pi*i*n.
The negative sign matches the FFT sign convention used in BIEST’s
Grad2D implementation.
Toroidal frequencies use signed indices m with the Nyquist index
treated as positive, matching the reference implementation:
m = t for t <= Nt/2 and m = t - Nt otherwise.
Given X_theta and X_phi, the unit normal and area element are:
with N = Nt * Np grid points. The orientation is chosen so that the
normal component corresponding to the maximum coordinate among x,y,z
is positive, matching BIEST’s convention.
Field-Period Target Selection
The BIEST field-period operator evaluates on a subset of the quadrature grid. Given:
quad_nt/quad_np: quadrature grid sizes for the full surface.trg_nt/trg_np: target grid sizes for one field period.nfp: number of field periods.
The target indices are selected by uniform strides:
and (i,j) maps to the quadrature index
(t,p) = (i * skip_t, j * skip_p) with i \\in [0, trg_nt).
This picks points from the first field period only.
Singular Quadrature
The boundary integrals involve kernels singular at r = r'. BIEST
uses a high-order scheme:
Partition of unity (POU) on a local patch around each target point.
The non-singular part is integrated by the trapezoidal rule.
The singular part is evaluated in local polar coordinates with a high-order radial quadrature.
The scheme is described in detail in Malhotra et al. (2020), and the
implementation in this repository mirrors the reference code in
biest/singular_correction.hpp.
Implementation Notes
The JAX port implements the partition-of-unity correction for Laplace FxdU (Hedgehog order 1) and Laplace Fxd2U (Hedgehog order > 1). The patch size is chosen using the same thresholding rules as BIEST:
and then rounded up to the nearest supported template value
{6, 8, 12, 16, ..., 64}. The base polar quadrature order is
RAD_DIM_0 = \\lfloor 1.6\\,\\text{PDIM} \\rfloor.
For Laplace Fxd2U, BIEST uses Hedgehog quadrature with a tripled radial resolution while keeping the angular resolution tied to the base order:
The JAX implementation mirrors this convention and uses the same
hedgehog extrapolation weights at nodes 1..16 when
HedgehogOrder=8.
For quadrature selection, the JAX port also implements the
singular-corrected Laplace DxU (double-layer) operator with
Hedgehog order 1. This matches the BIEST self-test that verifies the
expected 1/2 jump for constant density and drives adaptive
quadrature refinement.
Adaptive Quadrature Resolution
The field-period operator chooses a quadrature resolution quad_Nt
quad_Np based on:
Surface anisotropy estimates.
A double-layer self-test that checks the expected
1/2jump for constant density.
This adaptive selection is replicated in the JAX implementation to ensure parity.