Formula reference: neoclassical
Generated from the docstrings of vaft.formula.neoclassical:
18 public functions. Each entry is what
vaft.formula.describe("neoclassical.<name>") prints.
All formula categories
Overview
Bootstrap current and parallel conductivity from fitted analytic models, as an
independent reference for the drift-kinetic solvers driven through
vaft.code.gacode. Two formulations are provided as distinct functions
rather than as one backend with a switch, because they are different physics
models and their disagreement is a result rather than an error: the 1999 Sauter
fit was built for conventional aspect ratio, while the 2021 Redl refit extends
to the trapped fractions a spherical tokamak actually reaches.
Everything here is array/scalar numerics on physical quantities. Nothing reads an ODS, and nothing knows a flux-surface geometry: the trapped fraction, the flux-surface-averaged pressure gradients and $I(\psi)$ are inputs, supplied by the schema-facing layer.
The parallel current a caller usually wants is the sum of two terms,
\[\langle j_\parallel B\rangle = \sigma_{\mathrm{neo}}\langle E_\parallel B\rangle + \langle j_\parallel B\rangle_{\mathrm{bs}}\]whose pieces are sauter_neoclassical_conductivity (or its Redl
counterpart) and sauter_bootstrap_current (or its Redl counterpart).
They are kept apart because an inductive electric field is a state a caller may
or may not have.
| Symbol | Meaning | Unit |
|---|---|---|
| n_e | electron density | m^-3 |
| n_i | ion density | m^-3 |
| T_e | electron temperature | eV |
| T_i | ion temperature | eV |
| f_t | fraction of trapped particles on the surface | - |
| nu_e_star | Sauter electron collisionality, Eq. (18b) | - |
| nu_i_star | Sauter ion collisionality, Eq. (18c) | - |
| Z_eff | effective ion charge | - |
| epsilon | inverse aspect ratio r/R_0 | - |
| q | safety factor | - |
| psi | poloidal flux per radian | Wb/rad |
| I_psi | the flux function R B_phi | T m |
| L31, L32, L34 | Sauter transport coefficients | - |
| alpha | Sauter ion-temperature-gradient coefficient | - |
Temperatures are in electronvolts throughout, matching
vaft.formula.equilibrium.coulomb_logarithm_from_n_T and
vaft.formula.equilibrium.spitzer_resistivity_from_T_e_Z_eff_ln_Lambda,
not in joules or keV.
Poloidal flux is per radian. An ODS stores equilibrium psi in full
weber per the IMAS data dictionary, so a caller reading psi from an ODS must
divide by $2\pi$ first; see
vaft.data.eqdsk.ods_psi_to_wb_per_radian_factor.
Functions
banana_width | Radial width of a thermal banana orbit, the conventional estimate. Convention |
collisions_per_transit | Collision frequency in units of the transit frequency, $\hat\nu = qR_0\nu/v$. Convention |
coulomb_logarithm_electron_sauter | Electron Coulomb logarithm $\ln\Lambda_e$ in the Sauter convention. Convention |
coulomb_logarithm_ion_sauter | Ion-ion Coulomb logarithm $\ln\Lambda_{ii}$ in the Sauter convention. Convention |
deeply_trapped_bounce_frequency | Bounce frequency of a deeply trapped particle, the small-amplitude limit of the banana orbit. Convention |
electron_collisionality_sauter | Normalised electron collisionality $\nu_e^*$ in the Sauter convention. Convention |
ion_collisionality_sauter | Normalised ion collisionality $\nu_i^*$ in the Sauter convention. Convention |
neoclassical_regime_boundaries | Banana–plateau and plateau–Pfirsch–Schl"uter orderings in $\hat\nu$. Convention |
redl_bootstrap_coefficients | The Redl 2021 bootstrap coefficients $L_{31}$, $L_{32}$, $L_{34}$, $\alpha$. Empirical Convention |
redl_bootstrap_current | Flux-surface-averaged bootstrap current $\langle j_\parallel B\rangle$, Redl 2021. Empirical Convention |
redl_neoclassical_conductivity | Neoclassical parallel conductivity $\sigma_{\mathrm{neo}}$, Redl 2021. Empirical Convention |
sauter_bootstrap_coefficients | The Sauter 1999 bootstrap coefficients $L_{31}$, $L_{32}$, $L_{34}$, $\alpha$. Empirical Convention |
sauter_bootstrap_current | Flux-surface-averaged bootstrap current $\langle j_\parallel B\rangle$, Sauter 1999. Empirical Convention |
sauter_neoclassical_conductivity | Neoclassical parallel conductivity $\sigma_{\mathrm{neo}}$, Sauter 1999. Empirical Convention |
sauter_spitzer_conductivity | Spitzer parallel conductivity $\sigma_{\mathrm{Sptz}}$ in the Sauter normalisation. Empirical Convention |
transit_frequency | Poloidal transit frequency of a passing particle on a large-aspect-ratio circular surface. Convention |
trapped_particle_effective_collision_frequency | Rate at which pitch-angle scattering detraps a trapped particle. Convention |
trapped_particle_fraction | Trapped-particle fraction $f_t$ of a circular surface of inverse aspect ratio. Empirical Convention |
No function matches.
banana_width
Convention-sensitive
source
banana_width(rho, q, epsilon)
Show source vaft/formula/neoclassical.py, lines 1466–1521
def banana_width(rho: Numeric, q: Numeric, epsilon: Numeric) -> Numeric:
r"""Radial width of a thermal banana orbit, the conventional estimate.
$$\Delta_b = \frac{q\rho}{\sqrt\epsilon}$$
Parameters
----------
rho : float or np.ndarray
Larmor radius in the toroidal field, positive [m].
q : float or np.ndarray
Safety factor, positive [-].
epsilon : float or np.ndarray
Inverse aspect ratio $r/R_0$ of the surface, in (0, 1) [-].
Returns
-------
float or np.ndarray
Banana width [m].
Raises
------
ValueError
A non-positive input or ``epsilon`` outside (0, 1).
Convention
----------
Conservation of $P_\phi$ gives the excursion
$\Delta r = q\rho\,(v_\parallel/v)/\epsilon$ for the midplane parallel
speed of the orbit; a thermal trapped particle has
$v_\parallel/v \sim \sqrt\epsilon$, hence this estimate, with the
pitch-dependent order-unity factor set to one. The Larmor radius is
$mv/(|Z|eB_\phi)$ at whatever speed the caller chooses.
Physical interpretation
-----------------------
The step of the banana-regime random walk: larger than the Larmor radius
by $q/\sqrt\epsilon$, which is why neoclassical transport exceeds
classical. It is also the finite-orbit width that makes a local
transport description break down near steep gradients.
Assumptions
-----------
Large aspect ratio, circular surface, banana width small compared with
the minor radius (not a potato orbit near the axis).
References
----------
.. [1] J. Wesson, *Tokamaks*, 4th ed., Oxford University Press (2011),
Sec. 3.12.
.. [2] P. Helander and D. J. Sigmar, *Collisional Transport in Magnetized
Plasmas*, Cambridge University Press (2002), Ch. 7.
"""
rho = _validate_positive("rho", rho)
q = _validate_positive("q", q)
epsilon = _validate_epsilon(epsilon)
return _maybe_scalar(q * rho / np.sqrt(epsilon))Radial width of a thermal banana orbit, the conventional estimate.
\[\Delta_b = \frac{q\rho}{\sqrt\epsilon}\]| Name | Type | Unit | Description |
|---|---|---|---|
rho | float or np.ndarray | m | Larmor radius in the toroidal field, positive. |
q | float or np.ndarray | - | Safety factor, positive. |
epsilon | float or np.ndarray | - | Inverse aspect ratio $r/R_0$ of the surface, in (0, 1). |
| Returns | |||
| — | float or np.ndarray | m | Banana width. |
Convention
Conservation of $P_\phi$ gives the excursion $\Delta r = q\rho\,(v_\parallel/v)/\epsilon$ for the midplane parallel speed of the orbit; a thermal trapped particle has $v_\parallel/v \sim \sqrt\epsilon$, hence this estimate, with the pitch-dependent order-unity factor set to one. The Larmor radius is $mv/(|Z|eB_\phi)$ at whatever speed the caller chooses.
Raises
ValueErrorA non-positive input orepsilonoutside (0, 1).
Physical interpretation · Assumptions · References
Physical interpretation
The step of the banana-regime random walk: larger than the Larmor radius by $q/\sqrt\epsilon$, which is why neoclassical transport exceeds classical. It is also the finite-orbit width that makes a local transport description break down near steep gradients.
Assumptions
Large aspect ratio, circular surface, banana width small compared with the minor radius (not a potato orbit near the axis).
References
- J. Wesson, Tokamaks, 4th ed., Oxford University Press (2011), Sec. 3.12.
- P. Helander and D. J. Sigmar, Collisional Transport in Magnetized Plasmas, Cambridge University Press (2002), Ch. 7.
collisions_per_transit
Convention-sensitive
source
collisions_per_transit(nu, v, q, R0)
Show source vaft/formula/neoclassical.py, lines 1524–1580
def collisions_per_transit(nu: Numeric, v: Numeric, q: Numeric, R0: Numeric) -> Numeric:
r"""Collision frequency in units of the transit frequency, $\hat\nu = qR_0\nu/v$.
$$\hat\nu = \frac{\nu}{\omega_t} = \frac{qR_0\,\nu}{v}$$
Parameters
----------
nu : float or np.ndarray
Collision frequency, non-negative; the caller states which one (a
deflection frequency for the trapped-particle orderings) [1/s].
v : float or np.ndarray
Particle speed, positive [m/s].
q : float or np.ndarray
Safety factor, positive [-].
R0 : float or np.ndarray
Major radius, positive [m].
Returns
-------
float or np.ndarray
$\hat\nu$: connection length over mean free path, per radian [-].
Raises
------
ValueError
A negative ``nu`` or a non-positive ``v``, ``q`` or ``R0``.
Convention
----------
Not a $\nu_*$. The trapped-particle collisionality is
$\nu_\mathrm{eff}/\omega_b \sim \hat\nu/\epsilon^{3/2}$, and VAFT's
existing $\nu_*$ functions (Sauter's among them, #353) each fix their own
prefactors and thermal-speed conventions; they share the symbol but not
the value. $\hat\nu$ is kept explicit so its regime boundaries,
``neoclassical_regime_boundaries``, carry the $\epsilon$ dependence in
the open.
Physical interpretation
-----------------------
Below $\epsilon^{3/2}$ a trapped particle completes its banana before it
is scattered out; above one, a particle collides before it has seen the
poloidal variation of $B$ at all.
Assumptions
-----------
Large aspect ratio, circular surfaces.
References
----------
.. [1] P. Helander and D. J. Sigmar, *Collisional Transport in Magnetized
Plasmas*, Cambridge University Press (2002), Ch. 7.
"""
nu = _validate_non_negative("nu", nu)
v = _validate_positive("v", v)
q = _validate_positive("q", q)
R0 = _validate_positive("R0", R0)
return _maybe_scalar(q * R0 * nu / v)Collision frequency in units of the transit frequency, $\hat\nu = qR_0\nu/v$.
\[\hat\nu = \frac{\nu}{\omega_t} = \frac{qR_0\,\nu}{v}\]| Name | Type | Unit | Description |
|---|---|---|---|
nu | float or np.ndarray | 1/s | Collision frequency, non-negative; the caller states which one (a deflection frequency for the trapped-particle orderings). |
v | float or np.ndarray | m/s | Particle speed, positive. |
q | float or np.ndarray | - | Safety factor, positive. |
R0 | float or np.ndarray | m | Major radius, positive. |
| Returns | |||
| — | float or np.ndarray | - | $\hat\nu$: connection length over mean free path, per radian. |
Convention
Not a $\nu_$. The trapped-particle collisionality is
$\nu_\mathrm{eff}/\omega_b \sim \hat\nu/\epsilon^{3/2}$, and VAFT’s
existing $\nu_$ functions (Sauter’s among them, #353) each fix their own
prefactors and thermal-speed conventions; they share the symbol but not
the value. $\hat\nu$ is kept explicit so its regime boundaries,
neoclassical_regime_boundaries, carry the $\epsilon$ dependence in
the open.
Raises
ValueErrorA negativenuor a non-positivev,qorR0.
Physical interpretation · Assumptions · References
Physical interpretation
Below $\epsilon^{3/2}$ a trapped particle completes its banana before it is scattered out; above one, a particle collides before it has seen the poloidal variation of $B$ at all.
Assumptions
Large aspect ratio, circular surfaces.
References
- P. Helander and D. J. Sigmar, Collisional Transport in Magnetized Plasmas, Cambridge University Press (2002), Ch. 7.
coulomb_logarithm_electron_sauter
Convention-sensitive
source
coulomb_logarithm_electron_sauter(n_e, T_e)
Show source vaft/formula/neoclassical.py, lines 239–286
def coulomb_logarithm_electron_sauter(n_e: Numeric, T_e: Numeric) -> Numeric:
r"""Electron Coulomb logarithm $\ln\Lambda_e$ in the Sauter convention.
$$\ln\Lambda_e = 31.3 - \ln\!\left(\frac{\sqrt{n_e}}{T_e}\right)$$
Parameters
----------
n_e : float or np.ndarray
Electron density, strictly positive [m^-3].
T_e : float or np.ndarray
Electron temperature, strictly positive [eV].
Returns
-------
float or np.ndarray
Electron Coulomb logarithm [-].
Raises
------
ValueError
For non-finite or non-positive input.
Convention
----------
This is Sauter Eq. (18d), and it is **not** the NRL expression already in
this package: :func:`vaft.formula.equilibrium.coulomb_logarithm_from_n_T`
uses 30.9, this uses 31.3. The difference is about 1.3 percent of a typical
value, but the collisionality coefficients here were fitted with this one,
so mixing them biases $\nu_e^*$ consistently. Use this function wherever a
Sauter or Redl coefficient is downstream.
Validity
--------
Thermal electrons well above the ionisation stage; the same
$T_e \gtrsim 10$ eV floor as the NRL form.
References
----------
.. [1] O. Sauter, C. Angioni and Y. R. Lin-Liu, Phys. Plasmas 6 (1999)
2834, Eq. (18d).
See Also
--------
vaft.formula.equilibrium.coulomb_logarithm_from_n_T : the NRL convention.
"""
n_array = _validate_positive("n_e", n_e)
t_array = _validate_positive("T_e", T_e)
return _maybe_scalar(31.3 - np.log(np.sqrt(n_array) / t_array))Electron Coulomb logarithm $\ln\Lambda_e$ in the Sauter convention.
\[\ln\Lambda_e = 31.3 - \ln\!\left(\frac{\sqrt{n_e}}{T_e}\right)\]| Name | Type | Unit | Description |
|---|---|---|---|
n_e | float or np.ndarray | m^-3 | Electron density, strictly positive. |
T_e | float or np.ndarray | eV | Electron temperature, strictly positive. |
| Returns | |||
| — | float or np.ndarray | - | Electron Coulomb logarithm. |
Convention
This is Sauter Eq. (18d), and it is not the NRL expression already in
this package: vaft.formula.equilibrium.coulomb_logarithm_from_n_T
uses 30.9, this uses 31.3. The difference is about 1.3 percent of a typical
value, but the collisionality coefficients here were fitted with this one,
so mixing them biases $\nu_e^*$ consistently. Use this function wherever a
Sauter or Redl coefficient is downstream.
Raises
ValueErrorFor non-finite or non-positive input.
Validity · See Also · References
Validity
Thermal electrons well above the ionisation stage; the same $T_e \gtrsim 10$ eV floor as the NRL form.
See Also
vaft.formula.equilibrium.coulomb_logarithm_from_n_T : the NRL convention.
References
- O. Sauter, C. Angioni and Y. R. Lin-Liu, Phys. Plasmas 6 (1999) 2834, Eq. (18d).
coulomb_logarithm_ion_sauter
Convention-sensitive
source
coulomb_logarithm_ion_sauter(n_i, T_i, Z)
Show source vaft/formula/neoclassical.py, lines 289–330
def coulomb_logarithm_ion_sauter(n_i: Numeric, T_i: Numeric, Z: Numeric) -> Numeric:
r"""Ion-ion Coulomb logarithm $\ln\Lambda_{ii}$ in the Sauter convention.
$$\ln\Lambda_{ii} = 30.0 - \ln\!\left(\frac{Z^3\sqrt{n_i}}{T_i^{3/2}}\right)$$
Parameters
----------
n_i : float or np.ndarray
Ion density, strictly positive [m^-3].
T_i : float or np.ndarray
Ion temperature, strictly positive [eV].
Z : float or np.ndarray
Ion charge number, strictly positive [-].
Returns
-------
float or np.ndarray
Ion-ion Coulomb logarithm [-].
Raises
------
ValueError
For non-finite or non-positive input.
Convention
----------
Sauter Eq. (18e). The charge enters cubed, so an impurity species changes
this substantially more than it changes $\ln\Lambda_e$.
Validity
--------
Thermal ions of a single charge state.
References
----------
.. [1] O. Sauter, C. Angioni and Y. R. Lin-Liu, Phys. Plasmas 6 (1999)
2834, Eq. (18e).
"""
n_array = _validate_positive("n_i", n_i)
t_array = _validate_positive("T_i", T_i)
z_array = _validate_positive("Z", Z)
return _maybe_scalar(30.0 - np.log(z_array**3 * np.sqrt(n_array) / t_array**1.5))Ion-ion Coulomb logarithm $\ln\Lambda_{ii}$ in the Sauter convention.
\[\ln\Lambda_{ii} = 30.0 - \ln\!\left(\frac{Z^3\sqrt{n_i}}{T_i^{3/2}}\right)\]| Name | Type | Unit | Description |
|---|---|---|---|
n_i | float or np.ndarray | m^-3 | Ion density, strictly positive. |
T_i | float or np.ndarray | eV | Ion temperature, strictly positive. |
Z | float or np.ndarray | - | Ion charge number, strictly positive. |
| Returns | |||
| — | float or np.ndarray | - | Ion-ion Coulomb logarithm. |
Convention
Sauter Eq. (18e). The charge enters cubed, so an impurity species changes this substantially more than it changes $\ln\Lambda_e$.
Raises
ValueErrorFor non-finite or non-positive input.
Validity · References
Validity
Thermal ions of a single charge state.
References
- O. Sauter, C. Angioni and Y. R. Lin-Liu, Phys. Plasmas 6 (1999) 2834, Eq. (18e).
deeply_trapped_bounce_frequency
Convention-sensitive
source
deeply_trapped_bounce_frequency(v_perp, q, R0, epsilon)
Show source vaft/formula/neoclassical.py, lines 1351–1411
def deeply_trapped_bounce_frequency(v_perp: Numeric, q: Numeric, R0: Numeric, epsilon: Numeric) -> Numeric:
r"""Bounce frequency of a deeply trapped particle, the small-amplitude limit of the banana orbit.
$$\omega_b = \sqrt{\frac{\epsilon}{2}}\,\frac{v_\perp}{qR_0}$$
Parameters
----------
v_perp : float or np.ndarray
Perpendicular speed at the outboard midplane, positive [m/s].
q : float or np.ndarray
Safety factor, positive [-].
R0 : float or np.ndarray
Major radius, positive [m].
epsilon : float or np.ndarray
Inverse aspect ratio $r/R_0$ of the surface, in (0, 1) [-].
Returns
-------
float or np.ndarray
Angular frequency of the harmonic bounce motion [rad/s].
Raises
------
ValueError
A non-positive input or ``epsilon`` outside (0, 1).
Convention
----------
With $B = B_0(1 - \epsilon\cos\theta)$ and $s = qR_0\theta$ along the
field, the mirror force $-\mu\,\partial B/\partial s$ is harmonic about
the outboard midplane for small excursions, with this frequency exactly.
Barely trapped particles bounce more slowly (the period diverges
logarithmically at the trapped-passing boundary). The textbook ordering
$\omega_b \sim \sqrt\epsilon\,v/(qR_0)$ drops the $1/\sqrt 2$; this is
the exact limit it estimates.
Physical interpretation
-----------------------
$\omega_b/\omega_t = \sqrt{\epsilon/2}$ at $v_\perp = v$: trapped particles
are slower than passing ones by $\sqrt\epsilon$, which is why the banana
regime needs a collision frequency below $\epsilon^{3/2}\omega_t$, not
below $\omega_t$.
Assumptions
-----------
Large aspect ratio, circular surface, deeply trapped
($v_\parallel \ll \sqrt\epsilon\,v_\perp$ at the midplane), drifts
neglected in the parallel motion.
References
----------
.. [1] P. Helander and D. J. Sigmar, *Collisional Transport in Magnetized
Plasmas*, Cambridge University Press (2002), Ch. 7.
.. [2] J. Wesson, *Tokamaks*, 4th ed., Oxford University Press (2011),
Sec. 3.12.
"""
v_perp = _validate_positive("v_perp", v_perp)
q = _validate_positive("q", q)
R0 = _validate_positive("R0", R0)
epsilon = _validate_epsilon(epsilon)
return _maybe_scalar(np.sqrt(epsilon / 2.0) * v_perp / (q * R0))Bounce frequency of a deeply trapped particle, the small-amplitude limit of the banana orbit.
\[\omega_b = \sqrt{\frac{\epsilon}{2}}\,\frac{v_\perp}{qR_0}\]| Name | Type | Unit | Description |
|---|---|---|---|
v_perp | float or np.ndarray | m/s | Perpendicular speed at the outboard midplane, positive. |
q | float or np.ndarray | - | Safety factor, positive. |
R0 | float or np.ndarray | m | Major radius, positive. |
epsilon | float or np.ndarray | - | Inverse aspect ratio $r/R_0$ of the surface, in (0, 1). |
| Returns | |||
| — | float or np.ndarray | rad/s | Angular frequency of the harmonic bounce motion. |
Convention
With $B = B_0(1 - \epsilon\cos\theta)$ and $s = qR_0\theta$ along the field, the mirror force $-\mu\,\partial B/\partial s$ is harmonic about the outboard midplane for small excursions, with this frequency exactly. Barely trapped particles bounce more slowly (the period diverges logarithmically at the trapped-passing boundary). The textbook ordering $\omega_b \sim \sqrt\epsilon\,v/(qR_0)$ drops the $1/\sqrt 2$; this is the exact limit it estimates.
Raises
ValueErrorA non-positive input orepsilonoutside (0, 1).
Physical interpretation · Assumptions · References
Physical interpretation
$\omega_b/\omega_t = \sqrt{\epsilon/2}$ at $v_\perp = v$: trapped particles are slower than passing ones by $\sqrt\epsilon$, which is why the banana regime needs a collision frequency below $\epsilon^{3/2}\omega_t$, not below $\omega_t$.
Assumptions
Large aspect ratio, circular surface, deeply trapped ($v_\parallel \ll \sqrt\epsilon\,v_\perp$ at the midplane), drifts neglected in the parallel motion.
References
- P. Helander and D. J. Sigmar, Collisional Transport in Magnetized Plasmas, Cambridge University Press (2002), Ch. 7.
- J. Wesson, Tokamaks, 4th ed., Oxford University Press (2011), Sec. 3.12.
electron_collisionality_sauter
Convention-sensitive
source
electron_collisionality_sauter(n_e, T_e, q, R, epsilon, Z_eff, ln_Lambda_e=None)
Reduction: profile 1d → profile 1d · dimensionless normalization · flux surface local · regime coordinate (taxonomy)
Normalised electron collisionality $\nu_e^*$ in the Sauter convention.
\[\nu_e^* = 6.921\times10^{-18}\, \frac{q R\, n_e\, Z_{\mathrm{eff}} \ln\Lambda_e}{\epsilon^{3/2} T_e^2}\]| Name | Type | Unit | Description |
|---|---|---|---|
n_e | float or np.ndarray | m^-3 | Electron density, strictly positive. |
T_e | float or np.ndarray | eV | Electron temperature, strictly positive. |
q | float or np.ndarray | - | Safety factor; the magnitude is used, so either sign convention is accepted. |
R | float or np.ndarray | m | Major radius of the surface, strictly positive. |
epsilon | float or np.ndarray | - | Inverse aspect ratio $r/R$, strictly positive. |
Z_eff | float or np.ndarray | - | Effective ion charge, strictly positive. |
ln_Lambda_e | float or np.ndarray, optional | - | Electron Coulomb logarithm; computed from n_e and T_e with |
| Returns | |||
| — | float or np.ndarray | - | Electron collisionality, the ratio of the effective collision frequency to the banana bounce frequency. |
Convention
This is Sauter Eq. (18b) and it is one of four mutually inconsistent
collisionality definitions now in this package, a situation tracked in
issue #353. The others are
vaft.formula.equilibrium.nu_star_from_n_T_B_R_epsilon_kappa_I
(an engineering form with a $5\times10^{-11}$ prefactor),
vaft.formula.equilibrium.normalized_collisionality_from_nu_ii_T_i_M_i_R_a_q
(which reduces to Sauter Eq. 18b only when handed Sauter’s own $\nu_{ii}$),
and vaft.formula.stability.collisionality_from_n_T_B_R. Only this
one may be passed to the Sauter and Redl coefficient functions here; the
numbers are not interchangeable.
Raises
ValueErrorFor non-finite or non-positive input.
Physical interpretation · Validity · Limitations · References
Physical interpretation
Below one the plasma is in the banana regime and trapped orbits complete; above one collisions detrap particles first and the bootstrap coefficients fall away.
Validity
Positive $\epsilon$; the $\epsilon^{-3/2}$ factor diverges on axis, where the trapped fraction vanishes and the expression has no meaning.
Limitations
The prefactor bundles physical constants evaluated for the Sauter unit choice; it is not dimensionally reusable with temperatures in keV.
References
- O. Sauter, C. Angioni and Y. R. Lin-Liu, Phys. Plasmas 6 (1999) 2834, Eq. (18b).
ion_collisionality_sauter
Convention-sensitive
source
ion_collisionality_sauter(n_i, T_i, q, R, epsilon, Z, ln_Lambda_ii=None)
Reduction: profile 1d → profile 1d · dimensionless normalization · flux surface local · regime coordinate (taxonomy)
Normalised ion collisionality $\nu_i^*$ in the Sauter convention.
\[\nu_i^* = 4.90\times10^{-18}\, \frac{q R\, n_i\, Z^4 \ln\Lambda_{ii}}{\epsilon^{3/2} T_i^2}\]| Name | Type | Unit | Description |
|---|---|---|---|
n_i | float or np.ndarray | m^-3 | Ion density, strictly positive. |
T_i | float or np.ndarray | eV | Ion temperature, strictly positive. |
q | float or np.ndarray | - | Safety factor; the magnitude is used. |
R | float or np.ndarray | m | Major radius of the surface, strictly positive. |
epsilon | float or np.ndarray | - | Inverse aspect ratio $r/R$, strictly positive. |
Z | float or np.ndarray | - | Ion charge number, strictly positive. |
ln_Lambda_ii | float or np.ndarray, optional | - | Ion-ion Coulomb logarithm; computed from n_i, T_i and Z with |
| Returns | |||
| — | float or np.ndarray | - | Ion collisionality. |
Convention
Sauter Eq. (18c). With more than one ion species the paper’s single-species reading is ambiguous, and implementations differ. NEO resolved it in 2013 by evaluating this for the main ion and then scaling by the summed ion density, $\nu_i^* \to \nu_i^* \sum_s n_s / n_{\mathrm{main}}$, rather than by the $Z_i^2 Z_{\mathrm{eff}} n_e$ reading; a caller reproducing NEO must apply that scaling to this result. See issue #353 for the wider collisionality-convention problem.
Raises
ValueErrorFor non-finite or non-positive input.
Validity · References
Validity
Positive $\epsilon$, as for the electron expression.
References
- O. Sauter, C. Angioni and Y. R. Lin-Liu, Phys. Plasmas 6 (1999) 2834, Eq. (18c).
- E. A. Belli, GACODE
neo/src/neo_theory.f90, note of 11 July 2013 (the multi-species reading NEO adopted).
neoclassical_regime_boundaries
Convention-sensitive
source
neoclassical_regime_boundaries(epsilon)
Show source vaft/formula/neoclassical.py, lines 1583–1631
def neoclassical_regime_boundaries(epsilon: Numeric):
r"""Banana--plateau and plateau--Pfirsch--Schl\"uter orderings in $\hat\nu$.
$$\hat\nu_\mathrm{b|p} = \epsilon^{3/2},\qquad \hat\nu_\mathrm{p|PS} = 1$$
Parameters
----------
epsilon : float or np.ndarray
Inverse aspect ratio $r/R_0$ of the surface, in (0, 1) [-].
Returns
-------
tuple of float or np.ndarray
``(banana_plateau, plateau_pfirsch_schlueter)`` in units of
``collisions_per_transit`` [-].
Raises
------
ValueError
``epsilon`` outside (0, 1).
Convention
----------
Asymptotic orderings, not transitions: $\hat\nu \ll \epsilon^{3/2}$ is
the banana regime ($\nu_\mathrm{eff} \ll \omega_b$),
$\epsilon^{3/2} \ll \hat\nu \ll 1$ the plateau, $\hat\nu \gg 1$
Pfirsch--Schl\"uter. The coefficients are set to one; real transport
coefficients cross over smoothly across a decade around each value
(Sauter's fits interpolate across them), so there is deliberately no
regime classifier.
Physical interpretation
-----------------------
The plateau exists only because trapped particles are slow: its width,
$\epsilon^{-3/2}$ in $\hat\nu$, shrinks as the aspect ratio falls, and
at spherical-tokamak $\epsilon$ the plateau nearly disappears.
Assumptions
-----------
Large aspect ratio, circular surfaces.
References
----------
.. [1] P. Helander and D. J. Sigmar, *Collisional Transport in Magnetized
Plasmas*, Cambridge University Press (2002), Ch. 8.
.. [2] F. L. Hinton and R. D. Hazeltine, Rev. Mod. Phys. 48 (1976) 239.
"""
epsilon = _validate_epsilon(epsilon)
return _maybe_scalar(epsilon**1.5), _maybe_scalar(np.ones_like(epsilon))Banana–plateau and plateau–Pfirsch–Schl"uter orderings in $\hat\nu$.
\[\hat\nu_\mathrm{b|p} = \epsilon^{3/2},\qquad \hat\nu_\mathrm{p|PS} = 1\]| Name | Type | Unit | Description |
|---|---|---|---|
epsilon | float or np.ndarray | - | Inverse aspect ratio $r/R_0$ of the surface, in (0, 1). |
| Returns | |||
| — | tuple of float or np.ndarray | - |
|
Convention
Asymptotic orderings, not transitions: $\hat\nu \ll \epsilon^{3/2}$ is the banana regime ($\nu_\mathrm{eff} \ll \omega_b$), $\epsilon^{3/2} \ll \hat\nu \ll 1$ the plateau, $\hat\nu \gg 1$ Pfirsch–Schl"uter. The coefficients are set to one; real transport coefficients cross over smoothly across a decade around each value (Sauter’s fits interpolate across them), so there is deliberately no regime classifier.
Raises
ValueErrorepsilonoutside (0, 1).
Physical interpretation · Assumptions · References
Physical interpretation
The plateau exists only because trapped particles are slow: its width, $\epsilon^{-3/2}$ in $\hat\nu$, shrinks as the aspect ratio falls, and at spherical-tokamak $\epsilon$ the plateau nearly disappears.
Assumptions
Large aspect ratio, circular surfaces.
References
- P. Helander and D. J. Sigmar, Collisional Transport in Magnetized Plasmas, Cambridge University Press (2002), Ch. 8.
- F. L. Hinton and R. D. Hazeltine, Rev. Mod. Phys. 48 (1976) 239.
redl_bootstrap_coefficients
Empirical fitConvention-sensitive
source
redl_bootstrap_coefficients(f_trap, nu_e_star, nu_i_star, Z_eff)
The Redl 2021 bootstrap coefficients $L_{31}$, $L_{32}$, $L_{34}$, $\alpha$.
The same four-coefficient structure as Sauter 1999, refitted against NEO over a parameter range that includes tight aspect ratio, for example $L_{31} = X_{31} + (0.15 X_{31} - 0.22 X_{31}^2 + 0.01 X_{31}^3
- 0.06 X_{31}^4)/(Z^{1.2} - 0.71)$.
| Name | Type | Unit | Description |
|---|---|---|---|
f_trap | float or np.ndarray | - | Trapped-particle fraction of the surface, in [0, 1]. |
nu_e_star | float or np.ndarray | - | Electron collisionality from |
nu_i_star | float or np.ndarray | - | Ion collisionality from |
Z_eff | float or np.ndarray | - | Effective ion charge, at least one. |
| Returns | |||
| — | BootstrapCoefficients | - | The four coefficients, each dimensionless. |
Convention
$L_{34}$ is set equal to $L_{31}$: Redl does not refit it separately, and
the field is kept only so that the return shape matches
sauter_bootstrap_coefficients and the shared current assembly can
consume either. The collisionality convention is unchanged from Sauter
(issue #353), and $Z_{\mathrm{eff}} \ge 1$ is required because
$\sqrt{Z-1}$ appears in several denominators.
Raises
ValueErrorFor non-finite input, f_trap outside [0, 1], a negative collisionality, or Z_eff below one.
Validity · Limitations · References
Validity
Empirical fit. Refitted against NEO across aspect ratios reaching the spherical-tokamak range, which is the reason to prefer it over the 1999 fit for VEST.
Limitations
Agreement with the 1999 fit is close at conventional aspect ratio and degrades as $f_t$ rises; treat a large Sauter-Redl gap as a signal that the analytic model is being asked for more than it can give, not as an error in either.
References
- A. Redl, C. Angioni, E. Belli and O. Sauter, Phys. Plasmas 28 (2021) 022502.
redl_bootstrap_current
Empirical fitConvention-sensitive
source
redl_bootstrap_current(f_trap, nu_e_star, nu_i_star, Z_eff, I_psi, p_e, p_i, dp_dpsi, dln_Te_dpsi, dln_Ti_dpsi)
Flux-surface-averaged bootstrap current $\langle j_\parallel B\rangle$, Redl 2021.
The assembly is identical to sauter_bootstrap_current; only the
coefficients differ, coming from redl_bootstrap_coefficients.
| Name | Type | Unit | Description |
|---|---|---|---|
f_trap | float or np.ndarray | - | Trapped-particle fraction of the surface, in [0, 1]. |
nu_e_star | float or np.ndarray | - | Electron collisionality from |
nu_i_star | float or np.ndarray | - | Ion collisionality from |
Z_eff | float or np.ndarray | - | Effective ion charge, at least one. |
I_psi | float or np.ndarray | T m | The flux function $I = R B_\phi$ of the surface. |
p_e | float or np.ndarray | Pa | Electron pressure $n_e T_e$. |
p_i | float or np.ndarray | Pa | Summed thermal-ion pressure $\sum_{\mathrm{ions}} n_s T_s$. |
dp_dpsi | float or np.ndarray | Pa rad Wb^-1 | Derivative of the total thermal pressure, electrons included, with respect to poloidal flux per radian. |
dln_Te_dpsi | float or np.ndarray | rad Wb^-1 | Logarithmic derivative of the electron temperature with respect to poloidal flux per radian. |
dln_Ti_dpsi | float or np.ndarray | rad Wb^-1 | Logarithmic derivative of the ion temperature with respect to poloidal flux per radian. |
| Returns | |||
| — | float or np.ndarray | A T m^-2 | Flux-surface-averaged bootstrap current density times field strength |
Convention
Identical to sauter_bootstrap_current: poloidal flux per radian,
sign carried by $I(\psi)$, bootstrap term only.
Raises
ValueErrorFor non-finite input, f_trap outside [0, 1], a negative collisionality, or Z_eff below one.
Validity · Limitations · See Also · References
Validity
Empirical fit. Inherits the range of
redl_bootstrap_coefficients, which covers tight aspect ratio and is
therefore the one to prefer for VEST.
Limitations
Being the better-conditioned fit does not make it exact; a drift-kinetic
solve through vaft.code.gacode remains the reference.
See Also
sauter_bootstrap_current : the 1999 formulation.
References
- A. Redl, C. Angioni, E. Belli and O. Sauter, Phys. Plasmas 28 (2021) 022502.
redl_neoclassical_conductivity
Empirical fitConvention-sensitive
source
redl_neoclassical_conductivity(sigma_spitzer, f_trap, nu_e_star, Z_eff)
Show source vaft/formula/neoclassical.py, lines 693–769
def redl_neoclassical_conductivity(
sigma_spitzer: Numeric, f_trap: Numeric, nu_e_star: Numeric, Z_eff: Numeric
) -> Numeric:
r"""Neoclassical parallel conductivity $\sigma_{\mathrm{neo}}$, Redl 2021.
$$\frac{\sigma_{\mathrm{neo}}}{\sigma_{\mathrm{Sptz}}}
= 1 - \left(1 + \frac{0.21}{Z}\right) X_{33}
+ \frac{0.54}{Z} X_{33}^2 - \frac{0.33}{Z} X_{33}^3$$
with $X_{33} = f_t / \left[1 + 0.25(1 - 0.7 f_t)\sqrt{\nu_e^*}
(1 + 0.45\sqrt{Z-1}) + 0.61(1 - 0.41 f_t)\nu_e^*/\sqrt{Z}\right]$.
Parameters
----------
sigma_spitzer : float or np.ndarray
Reference Spitzer conductivity from
:func:`sauter_spitzer_conductivity` [S m^-1].
f_trap : float or np.ndarray
Trapped-particle fraction of the surface, in [0, 1] [-].
nu_e_star : float or np.ndarray
Electron collisionality from
:func:`electron_collisionality_sauter`, non-negative [-].
Z_eff : float or np.ndarray
Effective ion charge, at least one [-].
Returns
-------
float or np.ndarray
Neoclassical parallel conductivity [S m^-1].
Raises
------
ValueError
For non-finite input, *f_trap* outside [0, 1], negative *nu_e_star*, or
*Z_eff* below one.
Convention
----------
The reference conductivity is still Sauter Eq. (12), so
:func:`sauter_spitzer_conductivity` is the right input here despite the
name; Redl refits the correction, not the normalisation. As in the Sauter
case the collisionality must be the Eq. (18b) one (issue #353).
Validity
--------
Empirical fit. Fitted to NEO solutions spanning tight aspect ratio, so it
stays usable at the trapped fractions where the 1999 fit does not.
$Z_{\mathrm{eff}} \ge 1$ is required because $\sqrt{Z-1}$ appears.
References
----------
.. [1] A. Redl, C. Angioni, E. Belli and O. Sauter, Phys. Plasmas 28 (2021)
022502.
"""
sigma_array = _validate_positive("sigma_spitzer", sigma_spitzer)
trapped = _validate_fraction("f_trap", f_trap)
collisionality = _validate_non_negative("nu_e_star", nu_e_star)
z_array = np.asarray(Z_eff, dtype=float)
if np.any(~np.isfinite(z_array)):
raise ValueError(f"Z_eff must be finite. Got {Z_eff!r}")
if np.any(z_array < 1.0):
raise ValueError(f"Z_eff must be >= 1. Got {Z_eff!r}")
x33 = trapped / (
1.0
+ 0.25
* (1.0 - 0.7 * trapped)
* np.sqrt(collisionality)
* (1.0 + 0.45 * np.sqrt(z_array - 1.0))
+ 0.61 * (1.0 - 0.41 * trapped) * collisionality / np.sqrt(z_array)
)
ratio = (
1.0
- (1.0 + 0.21 / z_array) * x33
+ (0.54 / z_array) * x33**2
- (0.33 / z_array) * x33**3
)
return _maybe_scalar(sigma_array * ratio)Neoclassical parallel conductivity $\sigma_{\mathrm{neo}}$, Redl 2021.
\[\frac{\sigma_{\mathrm{neo}}}{\sigma_{\mathrm{Sptz}}} = 1 - \left(1 + \frac{0.21}{Z}\right) X_{33} + \frac{0.54}{Z} X_{33}^2 - \frac{0.33}{Z} X_{33}^3\]with $X_{33} = f_t / \left[1 + 0.25(1 - 0.7 f_t)\sqrt{\nu_e^} (1 + 0.45\sqrt{Z-1}) + 0.61(1 - 0.41 f_t)\nu_e^/\sqrt{Z}\right]$.
| Name | Type | Unit | Description |
|---|---|---|---|
sigma_spitzer | float or np.ndarray | S m^-1 | Reference Spitzer conductivity from |
f_trap | float or np.ndarray | - | Trapped-particle fraction of the surface, in [0, 1]. |
nu_e_star | float or np.ndarray | - | Electron collisionality from |
Z_eff | float or np.ndarray | - | Effective ion charge, at least one. |
| Returns | |||
| — | float or np.ndarray | S m^-1 | Neoclassical parallel conductivity. |
Convention
The reference conductivity is still Sauter Eq. (12), so
sauter_spitzer_conductivity is the right input here despite the
name; Redl refits the correction, not the normalisation. As in the Sauter
case the collisionality must be the Eq. (18b) one (issue #353).
Raises
ValueErrorFor non-finite input, f_trap outside [0, 1], negative nu_e_star, or Z_eff below one.
Validity · References
Validity
Empirical fit. Fitted to NEO solutions spanning tight aspect ratio, so it stays usable at the trapped fractions where the 1999 fit does not. $Z_{\mathrm{eff}} \ge 1$ is required because $\sqrt{Z-1}$ appears.
References
- A. Redl, C. Angioni, E. Belli and O. Sauter, Phys. Plasmas 28 (2021) 022502.
sauter_bootstrap_coefficients
Empirical fitConvention-sensitive
source
sauter_bootstrap_coefficients(f_trap, nu_e_star, nu_i_star, Z_eff)
The Sauter 1999 bootstrap coefficients $L_{31}$, $L_{32}$, $L_{34}$, $\alpha$.
Each coefficient is a rational fit in an effective trapped fraction that collisions reduce, for example $X_{31} = f_t / [1 + (1 - 0.1 f_t)\sqrt{\nu_e^*}
- 0.5(1-f_t)\nu_e^*/Z]$, with $L_{31}$ a quartic in $X_{31}$.
| Name | Type | Unit | Description |
|---|---|---|---|
f_trap | float or np.ndarray | - | Trapped-particle fraction of the surface, in [0, 1]. |
nu_e_star | float or np.ndarray | - | Electron collisionality from |
nu_i_star | float or np.ndarray | - | Ion collisionality from |
Z_eff | float or np.ndarray | - | Effective ion charge, strictly positive. |
| Returns | |||
| — | BootstrapCoefficients | - | The four coefficients, each dimensionless and each an array when any input was an array. |
Convention
Incorporating the 2002 erratum. $L_{32}$ is the sum of the two branches
$F_{32,ee}$ and $F_{32,ei}$, each evaluated at its own effective trapped
fraction; they are not separately meaningful and are not returned apart.
Both collisionalities must be the Sauter Eq. (18b) and (18c) ones, and
nu_i_star must already carry the multi-species scaling described in
ion_collisionality_sauter if the caller is reproducing NEO. See
issue #353.
Raises
ValueErrorFor non-finite input, f_trap outside [0, 1], a negative collisionality, or non-positive Z_eff.
Physical interpretation · Validity · Limitations · References
Physical interpretation
$L_{31}$ multiplies the total pressure gradient, $L_{32}$ the electron temperature gradient, and $L_{34}\alpha$ the ion temperature gradient. $\alpha$ is negative in the banana regime, so the ion-temperature term opposes the other two.
Validity
Empirical fit. Quoted by the authors as accurate to a few percent for $0 \le \nu^* \le 100$ and $1 \le Z_{\mathrm{eff}} \le 5$ at conventional aspect ratio.
Limitations
The fits were built on surfaces with $f_t$ well below what a spherical
tokamak reaches; at VEST’s $f_t \approx 0.7$ they are extrapolations.
redl_bootstrap_coefficients is the refit that covers the range, and
the difference between the two is the honest uncertainty band.
References
- O. Sauter, C. Angioni and Y. R. Lin-Liu, Phys. Plasmas 6 (1999) 2834, Eqs. (14)-(17).
- O. Sauter, C. Angioni and Y. R. Lin-Liu, Phys. Plasmas 9 (2002) 5140 (erratum).
sauter_bootstrap_current
Empirical fitConvention-sensitive
source
sauter_bootstrap_current(f_trap, nu_e_star, nu_i_star, Z_eff, I_psi, p_e, p_i, dp_dpsi, dln_Te_dpsi, dln_Ti_dpsi)
Flux-surface-averaged bootstrap current $\langle j_\parallel B\rangle$, Sauter 1999.
\[\langle j_\parallel B\rangle_{\mathrm{bs}} = -I(\psi)\left[ L_{31}\frac{\partial p}{\partial\psi} + L_{32}\,p_e \frac{\partial \ln T_e}{\partial\psi} + L_{34}\alpha\,p_i \frac{\partial \ln T_i}{\partial\psi}\right]\]| Name | Type | Unit | Description |
|---|---|---|---|
f_trap | float or np.ndarray | - | Trapped-particle fraction of the surface, in [0, 1]. |
nu_e_star | float or np.ndarray | - | Electron collisionality from |
nu_i_star | float or np.ndarray | - | Ion collisionality from |
Z_eff | float or np.ndarray | - | Effective ion charge, strictly positive. |
I_psi | float or np.ndarray | T m | The flux function $I = R B_\phi$ of the surface. |
p_e | float or np.ndarray | Pa | Electron pressure $n_e T_e$. |
p_i | float or np.ndarray | Pa | Summed thermal-ion pressure $\sum_{\mathrm{ions}} n_s T_s$. |
dp_dpsi | float or np.ndarray | Pa rad Wb^-1 | Derivative of the total thermal pressure, electrons included, with respect to poloidal flux per radian. |
dln_Te_dpsi | float or np.ndarray | rad Wb^-1 | Logarithmic derivative of the electron temperature with respect to poloidal flux per radian. |
dln_Ti_dpsi | float or np.ndarray | rad Wb^-1 | Logarithmic derivative of the ion temperature with respect to poloidal flux per radian. |
| Returns | |||
| — | float or np.ndarray | A T m^-2 | Flux-surface-averaged bootstrap current density times field strength |
Convention
Poloidal flux is per radian, not the full weber the IMAS data
dictionary stores; convert an ODS-sourced psi with
vaft.data.eqdsk.ods_psi_to_wb_per_radian_factor before
differentiating. The sign follows from that choice together with the sign
of $I(\psi)$, so a COCOS mismatch shows up here as a sign flip rather than
as a magnitude error.
This is the bootstrap term alone. The Ohmic term
$\sigma_{\mathrm{neo}}\langle E_\parallel B\rangle$, with
$\sigma_{\mathrm{neo}}$ from sauter_neoclassical_conductivity, is
added by the caller when an inductive field is known.
The single ion temperature in the last term is the paper’s reduction for ions that share a temperature; with unlike ion temperatures, use the main ion’s logarithmic gradient against the summed ion pressure, which is what NEO does.
Raises
ValueErrorFor non-finite input, f_trap outside [0, 1], a negative collisionality, or non-positive Z_eff.
Physical interpretation · Validity · Limitations · See Also · References
Physical interpretation
Trapped particles on adjacent orbits carry unequal momentum where a gradient exists, and the resulting banana current is transferred to the passing population by collisions. It is a pressure-gradient-driven current that needs no loop voltage, which is why it dominates the current budget of a high-beta spherical tokamak.
Validity
Empirical fit. Inherits the range of
sauter_bootstrap_coefficients.
Limitations
At VEST’s trapped fraction this is an extrapolation of the 1999 fit;
compare against redl_bootstrap_current rather than trusting either
alone. It also assumes the local gradients are resolved: on a reconstructed
equilibrium the near-axis region often is not.
See Also
vaft.formula.equilibrium.bootstrap_current_fraction : the zero-dimensional heuristic this supersedes for profile work. redl_bootstrap_current : the 2021 refit, preferred at tight aspect ratio.
References
- O. Sauter, C. Angioni and Y. R. Lin-Liu, Phys. Plasmas 6 (1999) 2834, Eq. (11).
- O. Sauter, C. Angioni and Y. R. Lin-Liu, Phys. Plasmas 9 (2002) 5140 (erratum).
sauter_neoclassical_conductivity
Empirical fitConvention-sensitive
source
sauter_neoclassical_conductivity(sigma_spitzer, f_trap, nu_e_star, Z_eff)
Neoclassical parallel conductivity $\sigma_{\mathrm{neo}}$, Sauter 1999.
\[\frac{\sigma_{\mathrm{neo}}}{\sigma_{\mathrm{Sptz}}} = 1 - \left(1 + \frac{0.36}{Z}\right) X_{33} + \frac{0.59}{Z} X_{33}^2 - \frac{0.23}{Z} X_{33}^3\]with $X_{33} = f_t / \left[1 + (0.55 - 0.1 f_t)\sqrt{\nu_e^*}
- 0.45(1-f_t)\nu_e^*/Z^{3/2}\right]$.
| Name | Type | Unit | Description |
|---|---|---|---|
sigma_spitzer | float or np.ndarray | S m^-1 | Reference Spitzer conductivity from |
f_trap | float or np.ndarray | - | Trapped-particle fraction of the surface, in [0, 1]. |
nu_e_star | float or np.ndarray | - | Electron collisionality from |
Z_eff | float or np.ndarray | - | Effective ion charge, strictly positive. |
| Returns | |||
| — | float or np.ndarray | S m^-1 | Neoclassical parallel conductivity. |
Convention
The collisionality must be the Sauter Eq. (18b) one; see
electron_collisionality_sauter and issue #353. The result is the
coefficient of $\langle E_\parallel B\rangle$, so the Ohmic contribution to
the parallel current is this times that field, added to the bootstrap term
from sauter_bootstrap_current.
Raises
ValueErrorFor non-finite input, f_trap outside [0, 1], negative nu_e_star, or non-positive Z_eff.
Physical interpretation · Validity · Limitations · References
Physical interpretation
Trapped electrons cannot carry parallel current, so the conductivity falls below Spitzer roughly in proportion to $f_t$; collisions restore it, which is why the correction weakens as $\nu_e^*$ rises.
Validity
Empirical fit. Fitted to numerical solutions of the drift-kinetic equation at conventional aspect ratio.
Limitations
At the trapped fractions a spherical tokamak reaches, roughly
$f_t \gtrsim 0.6$, this fit is outside the range it was built on;
redl_neoclassical_conductivity is the refit that covers it.
References
- O. Sauter, C. Angioni and Y. R. Lin-Liu, Phys. Plasmas 6 (1999) 2834, Eq. (13).
- O. Sauter, C. Angioni and Y. R. Lin-Liu, Phys. Plasmas 9 (2002) 5140 (erratum).
sauter_spitzer_conductivity
Empirical fitConvention-sensitive
source
sauter_spitzer_conductivity(T_e, Z_eff, ln_Lambda_e)
Show source vaft/formula/neoclassical.py, lines 542–604
def sauter_spitzer_conductivity(
T_e: Numeric, Z_eff: Numeric, ln_Lambda_e: Numeric
) -> Numeric:
r"""Spitzer parallel conductivity $\sigma_{\mathrm{Sptz}}$ in the Sauter normalisation.
$$\sigma_{\mathrm{Sptz}} = 1.9012\times10^{4}\,
\frac{T_e^{3/2}}{Z_{\mathrm{eff}} N_Z(Z_{\mathrm{eff}}) \ln\Lambda_e},
\qquad N_Z = 0.58 + \frac{0.74}{0.76 + Z_{\mathrm{eff}}}$$
Parameters
----------
T_e : float or np.ndarray
Electron temperature, strictly positive [eV].
Z_eff : float or np.ndarray
Effective ion charge, strictly positive [-].
ln_Lambda_e : float or np.ndarray
Electron Coulomb logarithm, strictly positive; use
:func:`coulomb_logarithm_electron_sauter` [-].
Returns
-------
float or np.ndarray
Classical parallel conductivity, without trapped-particle correction
[S m^-1].
Raises
------
ValueError
For non-finite or non-positive input.
Convention
----------
This is the reference conductivity the neoclassical correction multiplies,
Sauter Eq. (12), and it is not the same object as
:func:`vaft.formula.equilibrium.spitzer_resistivity_from_T_e_Z_eff_ln_Lambda`:
that one applies the charge dependence linearly, this one through the
fitted $N_Z$, so their reciprocals differ by tens of percent at
$Z_{\mathrm{eff}} > 1$. Pair this one with the neoclassical corrections in
this module.
Validity
--------
Empirical fit. $N_Z$ is a fit to the Spitzer-Harm charge dependence, valid
for $1 \le Z_{\mathrm{eff}} \lesssim 5$.
References
----------
.. [1] O. Sauter, C. Angioni and Y. R. Lin-Liu, Phys. Plasmas 6 (1999)
2834, Eq. (12).
.. [2] L. Spitzer and R. Harm, Phys. Rev. 89 (1953) 977.
See Also
--------
vaft.formula.equilibrium.spitzer_resistivity_from_T_e_Z_eff_ln_Lambda
"""
t_array = _validate_positive("T_e", T_e)
z_array = _validate_positive("Z_eff", Z_eff)
log_array = _validate_positive("ln_Lambda_e", ln_Lambda_e)
charge_factor = 0.58 + 0.74 / (0.76 + z_array)
value = _SPITZER_CONDUCTIVITY_COEF * t_array**1.5 / (
z_array * charge_factor * log_array
)
return _maybe_scalar(value)Spitzer parallel conductivity $\sigma_{\mathrm{Sptz}}$ in the Sauter normalisation.
\[\sigma_{\mathrm{Sptz}} = 1.9012\times10^{4}\, \frac{T_e^{3/2}}{Z_{\mathrm{eff}} N_Z(Z_{\mathrm{eff}}) \ln\Lambda_e}, \qquad N_Z = 0.58 + \frac{0.74}{0.76 + Z_{\mathrm{eff}}}\]| Name | Type | Unit | Description |
|---|---|---|---|
T_e | float or np.ndarray | eV | Electron temperature, strictly positive. |
Z_eff | float or np.ndarray | - | Effective ion charge, strictly positive. |
ln_Lambda_e | float or np.ndarray | - | Electron Coulomb logarithm, strictly positive; use |
| Returns | |||
| — | float or np.ndarray | S m^-1 | Classical parallel conductivity, without trapped-particle correction |
Convention
This is the reference conductivity the neoclassical correction multiplies,
Sauter Eq. (12), and it is not the same object as
vaft.formula.equilibrium.spitzer_resistivity_from_T_e_Z_eff_ln_Lambda:
that one applies the charge dependence linearly, this one through the
fitted $N_Z$, so their reciprocals differ by tens of percent at
$Z_{\mathrm{eff}} > 1$. Pair this one with the neoclassical corrections in
this module.
Raises
ValueErrorFor non-finite or non-positive input.
Validity · See Also · References
Validity
Empirical fit. $N_Z$ is a fit to the Spitzer-Harm charge dependence, valid for $1 \le Z_{\mathrm{eff}} \lesssim 5$.
See Also
vaft.formula.equilibrium.spitzer_resistivity_from_T_e_Z_eff_ln_Lambda
References
- O. Sauter, C. Angioni and Y. R. Lin-Liu, Phys. Plasmas 6 (1999) 2834, Eq. (12).
- L. Spitzer and R. Harm, Phys. Rev. 89 (1953) 977.
transit_frequency
Convention-sensitive
source
transit_frequency(v, q, R0)
Show source vaft/formula/neoclassical.py, lines 1296–1348
def transit_frequency(v: Numeric, q: Numeric, R0: Numeric) -> Numeric:
r"""Poloidal transit frequency of a passing particle on a large-aspect-ratio circular surface.
$$\omega_t = \frac{v}{qR_0}$$
Parameters
----------
v : float or np.ndarray
Speed along the field line of the particle considered, positive; the
caller chooses which speed (a thermal speed is a convention of its
own) [m/s].
q : float or np.ndarray
Safety factor, positive [-].
R0 : float or np.ndarray
Major radius, positive [m].
Returns
-------
float or np.ndarray
Rate at which the particle advances in poloidal angle [rad/s].
Raises
------
ValueError
A non-positive or non-finite input.
Convention
----------
One poloidal circuit is a parallel path of length $2\pi qR_0$, so
$\omega_t$ is per radian of poloidal angle; the transit *time* is
$2\pi/\omega_t$. The speed is the parallel speed of the orbit, not a
thermal-speed convention (#353 tracks those).
Physical interpretation
-----------------------
The reference rate of the neoclassical orderings: a collision frequency
compared with $\omega_t$ says how many collisions a particle suffers in
one connection length (``collisions_per_transit``).
Assumptions
-----------
Large aspect ratio, circular concentric surfaces, $B$ nearly uniform along
the path.
References
----------
.. [1] P. Helander and D. J. Sigmar, *Collisional Transport in Magnetized
Plasmas*, Cambridge University Press (2002), Ch. 7.
"""
v = _validate_positive("v", v)
q = _validate_positive("q", q)
R0 = _validate_positive("R0", R0)
return _maybe_scalar(v / (q * R0))Poloidal transit frequency of a passing particle on a large-aspect-ratio circular surface.
\[\omega_t = \frac{v}{qR_0}\]| Name | Type | Unit | Description |
|---|---|---|---|
v | float or np.ndarray | m/s | Speed along the field line of the particle considered, positive; the caller chooses which speed (a thermal speed is a convention of its own). |
q | float or np.ndarray | - | Safety factor, positive. |
R0 | float or np.ndarray | m | Major radius, positive. |
| Returns | |||
| — | float or np.ndarray | rad/s | Rate at which the particle advances in poloidal angle. |
Convention
One poloidal circuit is a parallel path of length $2\pi qR_0$, so $\omega_t$ is per radian of poloidal angle; the transit time is $2\pi/\omega_t$. The speed is the parallel speed of the orbit, not a thermal-speed convention (#353 tracks those).
Raises
ValueErrorA non-positive or non-finite input.
Physical interpretation · Assumptions · References
Physical interpretation
The reference rate of the neoclassical orderings: a collision frequency
compared with $\omega_t$ says how many collisions a particle suffers in
one connection length (collisions_per_transit).
Assumptions
Large aspect ratio, circular concentric surfaces, $B$ nearly uniform along the path.
References
- P. Helander and D. J. Sigmar, Collisional Transport in Magnetized Plasmas, Cambridge University Press (2002), Ch. 7.
trapped_particle_effective_collision_frequency
Convention-sensitive
source
trapped_particle_effective_collision_frequency(nu_deflection, epsilon)
Show source vaft/formula/neoclassical.py, lines 1414–1463
def trapped_particle_effective_collision_frequency(nu_deflection: Numeric, epsilon: Numeric) -> Numeric:
r"""Rate at which pitch-angle scattering detraps a trapped particle.
$$\nu_\mathrm{eff} = \frac{\nu_D}{\epsilon}$$
Parameters
----------
nu_deflection : float or np.ndarray
Pitch-angle-scattering (deflection) frequency $\nu_D$, non-negative
[1/s].
epsilon : float or np.ndarray
Inverse aspect ratio $r/R_0$ of the surface, in (0, 1) [-].
Returns
-------
float or np.ndarray
Effective collision frequency of the trapped population [1/s].
Raises
------
ValueError
A negative ``nu_deflection`` or ``epsilon`` outside (0, 1).
Convention
----------
The input is the *deflection* frequency, not a momentum-loss or
energy-exchange frequency; the trapped region is $\sim\sqrt\epsilon$ wide
in pitch, and diffusion across it takes $\sim\epsilon/\nu_D$. This is the
conventional definition, with the order-unity factor set to one.
Physical interpretation
-----------------------
Trapped particles are detrapped $1/\epsilon$ times faster than a
particle is deflected through a radian. The banana regime needs
$\nu_\mathrm{eff} < \omega_b$, and the ratio of the two is the
trapped-particle collisionality, the quantity every $\nu_*$ convention
estimates.
Assumptions
-----------
Large aspect ratio, a diffusive (small-angle) scattering operator.
References
----------
.. [1] P. Helander and D. J. Sigmar, *Collisional Transport in Magnetized
Plasmas*, Cambridge University Press (2002), Ch. 7.
"""
nu_deflection = _validate_non_negative("nu_deflection", nu_deflection)
epsilon = _validate_epsilon(epsilon)
return _maybe_scalar(nu_deflection / epsilon)Rate at which pitch-angle scattering detraps a trapped particle.
\[\nu_\mathrm{eff} = \frac{\nu_D}{\epsilon}\]| Name | Type | Unit | Description |
|---|---|---|---|
nu_deflection | float or np.ndarray | 1/s | Pitch-angle-scattering (deflection) frequency $\nu_D$, non-negative |
epsilon | float or np.ndarray | - | Inverse aspect ratio $r/R_0$ of the surface, in (0, 1). |
| Returns | |||
| — | float or np.ndarray | 1/s | Effective collision frequency of the trapped population. |
Convention
The input is the deflection frequency, not a momentum-loss or energy-exchange frequency; the trapped region is $\sim\sqrt\epsilon$ wide in pitch, and diffusion across it takes $\sim\epsilon/\nu_D$. This is the conventional definition, with the order-unity factor set to one.
Raises
ValueErrorA negativenu_deflectionorepsilonoutside (0, 1).
Physical interpretation · Assumptions · References
Physical interpretation
Trapped particles are detrapped $1/\epsilon$ times faster than a particle is deflected through a radian. The banana regime needs $\nu_\mathrm{eff} < \omega_b$, and the ratio of the two is the trapped-particle collisionality, the quantity every $\nu_*$ convention estimates.
Assumptions
Large aspect ratio, a diffusive (small-angle) scattering operator.
References
- P. Helander and D. J. Sigmar, Collisional Transport in Magnetized Plasmas, Cambridge University Press (2002), Ch. 7.
trapped_particle_fraction
Empirical fitConvention-sensitive
source
trapped_particle_fraction(epsilon)
Show source vaft/formula/neoclassical.py, lines 172–236
def trapped_particle_fraction(epsilon: Numeric) -> Numeric:
r"""Trapped-particle fraction $f_t$ of a circular surface of inverse aspect ratio.
$$f_t = 1 - \frac{(1-\epsilon)^2}{\sqrt{1-\epsilon^2}\,(1 + 1.46\sqrt{\epsilon})}$$
Parameters
----------
epsilon : float or np.ndarray
Inverse aspect ratio $r/R_0$ of the surface, in [0, 1) [-].
Returns
-------
float or np.ndarray
Fraction of particles trapped on the surface [-].
Raises
------
ValueError
For non-finite input, or input outside [0, 1).
Convention
----------
$f_t$ is the flux-surface quantity that enters every coefficient in this
module. This function is the *circular* approximation to it, written in
terms of the inverse aspect ratio alone. A shaped equilibrium's trapped
fraction is an integral over the field-strength distribution on the surface
and differs from this at the tens-of-percent level at strong elongation, so
a caller holding a real equilibrium should compute $f_t$ from it and pass
that instead of calling this. NEO writes its own value to
``out.neo.diagnostic_geo`` as ``f_trap``.
Physical interpretation
-----------------------
The share of the local Maxwellian whose parallel energy is too small to
cross the magnetic well on the outboard side. It rises steeply with
$\epsilon$, which is why bootstrap current matters far more in a spherical
tokamak than in a conventional one.
Validity
--------
Empirical fit. Concentric circular surfaces; the coefficient 1.46 is a fit
to the exact integral rather than a derived value.
Limitations
-----------
At $\epsilon \to 1$ the expression tends to 1 but the underlying expansion
has long since stopped being controlled. VEST reaches
$\epsilon \approx 0.6$, where this returns about 0.91: nearly every
particle counted as trapped, which is precisely where treating a fitted
neoclassical coefficient as reliable stops being safe.
References
----------
.. [1] Y. R. Lin-Liu and R. L. Miller, Phys. Plasmas 2 (1995) 1666.
.. [2] J. Wesson, *Tokamaks*, 4th ed., Oxford University Press (2011),
Sec. 4.9 (trapped particles).
"""
array = np.asarray(epsilon, dtype=float)
if np.any(~np.isfinite(array)):
raise ValueError(f"epsilon must be finite. Got {epsilon!r}")
if np.any(array < 0.0) or np.any(array >= 1.0):
raise ValueError(f"epsilon must lie in [0, 1). Got {epsilon!r}")
numerator = (1.0 - array) ** 2
denominator = np.sqrt(1.0 - array**2) * (1.0 + 1.46 * np.sqrt(array))
return _maybe_scalar(1.0 - numerator / denominator)Trapped-particle fraction $f_t$ of a circular surface of inverse aspect ratio.
\[f_t = 1 - \frac{(1-\epsilon)^2}{\sqrt{1-\epsilon^2}\,(1 + 1.46\sqrt{\epsilon})}\]| Name | Type | Unit | Description |
|---|---|---|---|
epsilon | float or np.ndarray | - | Inverse aspect ratio $r/R_0$ of the surface, in [0, 1). |
| Returns | |||
| — | float or np.ndarray | - | Fraction of particles trapped on the surface. |
Convention
$f_t$ is the flux-surface quantity that enters every coefficient in this
module. This function is the circular approximation to it, written in
terms of the inverse aspect ratio alone. A shaped equilibrium’s trapped
fraction is an integral over the field-strength distribution on the surface
and differs from this at the tens-of-percent level at strong elongation, so
a caller holding a real equilibrium should compute $f_t$ from it and pass
that instead of calling this. NEO writes its own value to
out.neo.diagnostic_geo as f_trap.
Raises
ValueErrorFor non-finite input, or input outside [0, 1).
Physical interpretation · Validity · Limitations · References
Physical interpretation
The share of the local Maxwellian whose parallel energy is too small to cross the magnetic well on the outboard side. It rises steeply with $\epsilon$, which is why bootstrap current matters far more in a spherical tokamak than in a conventional one.
Validity
Empirical fit. Concentric circular surfaces; the coefficient 1.46 is a fit to the exact integral rather than a derived value.
Limitations
At $\epsilon \to 1$ the expression tends to 1 but the underlying expansion has long since stopped being controlled. VEST reaches $\epsilon \approx 0.6$, where this returns about 0.91: nearly every particle counted as trapped, which is precisely where treating a fitted neoclassical coefficient as reliable stops being safe.
References
- Y. R. Lin-Liu and R. L. Miller, Phys. Plasmas 2 (1995) 1666.
- J. Wesson, Tokamaks, 4th ed., Oxford University Press (2011), Sec. 4.9 (trapped particles).