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.

SymbolMeaningUnit
n_eelectron densitym^-3
n_iion densitym^-3
T_eelectron temperatureeV
T_iion temperatureeV
f_tfraction of trapped particles on the surface-
nu_e_starSauter electron collisionality, Eq. (18b)-
nu_i_starSauter ion collisionality, Eq. (18c)-
Z_effeffective ion charge-
epsiloninverse aspect ratio r/R_0-
qsafety factor-
psipoloidal flux per radianWb/rad
I_psithe flux function R B_phiT m
L31, L32, L34Sauter transport coefficients-
alphaSauter 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_widthRadial width of a thermal banana orbit, the conventional estimate. Convention
collisions_per_transitCollision frequency in units of the transit frequency, $\hat\nu = qR_0\nu/v$. Convention
coulomb_logarithm_electron_sauterElectron Coulomb logarithm $\ln\Lambda_e$ in the Sauter convention. Convention
coulomb_logarithm_ion_sauterIon-ion Coulomb logarithm $\ln\Lambda_{ii}$ in the Sauter convention. Convention
deeply_trapped_bounce_frequencyBounce frequency of a deeply trapped particle, the small-amplitude limit of the banana orbit. Convention
electron_collisionality_sauterNormalised electron collisionality $\nu_e^*$ in the Sauter convention. Convention
ion_collisionality_sauterNormalised ion collisionality $\nu_i^*$ in the Sauter convention. Convention
neoclassical_regime_boundariesBanana–plateau and plateau–Pfirsch–Schl"uter orderings in $\hat\nu$. Convention
redl_bootstrap_coefficientsThe Redl 2021 bootstrap coefficients $L_{31}$, $L_{32}$, $L_{34}$, $\alpha$. Empirical Convention
redl_bootstrap_currentFlux-surface-averaged bootstrap current $\langle j_\parallel B\rangle$, Redl 2021. Empirical Convention
redl_neoclassical_conductivityNeoclassical parallel conductivity $\sigma_{\mathrm{neo}}$, Redl 2021. Empirical Convention
sauter_bootstrap_coefficientsThe Sauter 1999 bootstrap coefficients $L_{31}$, $L_{32}$, $L_{34}$, $\alpha$. Empirical Convention
sauter_bootstrap_currentFlux-surface-averaged bootstrap current $\langle j_\parallel B\rangle$, Sauter 1999. Empirical Convention
sauter_neoclassical_conductivityNeoclassical parallel conductivity $\sigma_{\mathrm{neo}}$, Sauter 1999. Empirical Convention
sauter_spitzer_conductivitySpitzer parallel conductivity $\sigma_{\mathrm{Sptz}}$ in the Sauter normalisation. Empirical Convention
transit_frequencyPoloidal transit frequency of a passing particle on a large-aspect-ratio circular surface. Convention
trapped_particle_effective_collision_frequencyRate at which pitch-angle scattering detraps a trapped particle. Convention
trapped_particle_fractionTrapped-particle fraction $f_t$ of a circular surface of inverse aspect ratio. Empirical Convention

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}\]
NameTypeUnitDescription
rhofloat or np.ndarraym

Larmor radius in the toroidal field, positive.

qfloat or np.ndarray-

Safety factor, positive.

epsilonfloat or np.ndarray-

Inverse aspect ratio $r/R_0$ of the surface, in (0, 1).

Returns
—float or np.ndarraym

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

  • ValueError A non-positive input or epsilon outside (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

  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.

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}\]
NameTypeUnitDescription
nufloat or np.ndarray1/s

Collision frequency, non-negative; the caller states which one (a deflection frequency for the trapped-particle orderings).

vfloat or np.ndarraym/s

Particle speed, positive.

qfloat or np.ndarray-

Safety factor, positive.

R0float or np.ndarraym

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

  • ValueError A negative nu or a non-positive v, q or R0.
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

  1. 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)\]
NameTypeUnitDescription
n_efloat or np.ndarraym^-3

Electron density, strictly positive.

T_efloat or np.ndarrayeV

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

  • ValueError For 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

  1. 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)\]
NameTypeUnitDescription
n_ifloat or np.ndarraym^-3

Ion density, strictly positive.

T_ifloat or np.ndarrayeV

Ion temperature, strictly positive.

Zfloat 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

  • ValueError For non-finite or non-positive input.
Validity · References

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).

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}\]
NameTypeUnitDescription
v_perpfloat or np.ndarraym/s

Perpendicular speed at the outboard midplane, positive.

qfloat or np.ndarray-

Safety factor, positive.

R0float or np.ndarraym

Major radius, positive.

epsilonfloat or np.ndarray-

Inverse aspect ratio $r/R_0$ of the surface, in (0, 1).

Returns
—float or np.ndarrayrad/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

  • ValueError A non-positive input or epsilon outside (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

  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.

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}\]
NameTypeUnitDescription
n_efloat or np.ndarraym^-3

Electron density, strictly positive.

T_efloat or np.ndarrayeV

Electron temperature, strictly positive.

qfloat or np.ndarray-

Safety factor; the magnitude is used, so either sign convention is accepted.

Rfloat or np.ndarraym

Major radius of the surface, strictly positive.

epsilonfloat or np.ndarray-

Inverse aspect ratio $r/R$, strictly positive.

Z_efffloat or np.ndarray-

Effective ion charge, strictly positive.

ln_Lambda_efloat or np.ndarray, optional-

Electron Coulomb logarithm; computed from n_e and T_e with coulomb_logarithm_electron_sauter when omitted.

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

  • ValueError For 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

  1. 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}\]
NameTypeUnitDescription
n_ifloat or np.ndarraym^-3

Ion density, strictly positive.

T_ifloat or np.ndarrayeV

Ion temperature, strictly positive.

qfloat or np.ndarray-

Safety factor; the magnitude is used.

Rfloat or np.ndarraym

Major radius of the surface, strictly positive.

epsilonfloat or np.ndarray-

Inverse aspect ratio $r/R$, strictly positive.

Zfloat or np.ndarray-

Ion charge number, strictly positive.

ln_Lambda_iifloat or np.ndarray, optional-

Ion-ion Coulomb logarithm; computed from n_i, T_i and Z with coulomb_logarithm_ion_sauter when omitted.

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

  • ValueError For non-finite or non-positive input.
Validity · References

Validity

Positive $\epsilon$, as for the electron expression.

References

  1. O. Sauter, C. Angioni and Y. R. Lin-Liu, Phys. Plasmas 6 (1999) 2834, Eq. (18c).
  2. 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\]
NameTypeUnitDescription
epsilonfloat 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.

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

  • ValueError epsilon outside (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

  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.

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)$.
NameTypeUnitDescription
f_trapfloat or np.ndarray-

Trapped-particle fraction of the surface, in [0, 1].

nu_e_starfloat or np.ndarray-

Electron collisionality from electron_collisionality_sauter, non-negative.

nu_i_starfloat or np.ndarray-

Ion collisionality from ion_collisionality_sauter, non-negative.

Z_efffloat 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

  • ValueError For 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

  1. 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.

NameTypeUnitDescription
f_trapfloat or np.ndarray-

Trapped-particle fraction of the surface, in [0, 1].

nu_e_starfloat or np.ndarray-

Electron collisionality from electron_collisionality_sauter.

nu_i_starfloat or np.ndarray-

Ion collisionality from ion_collisionality_sauter.

Z_efffloat or np.ndarray-

Effective ion charge, at least one.

I_psifloat or np.ndarrayT m

The flux function $I = R B_\phi$ of the surface.

p_efloat or np.ndarrayPa

Electron pressure $n_e T_e$.

p_ifloat or np.ndarrayPa

Summed thermal-ion pressure $\sum_{\mathrm{ions}} n_s T_s$.

dp_dpsifloat or np.ndarrayPa rad Wb^-1

Derivative of the total thermal pressure, electrons included, with respect to poloidal flux per radian.

dln_Te_dpsifloat or np.ndarrayrad Wb^-1

Logarithmic derivative of the electron temperature with respect to poloidal flux per radian.

dln_Ti_dpsifloat or np.ndarrayrad Wb^-1

Logarithmic derivative of the ion temperature with respect to poloidal flux per radian.

Returns
—float or np.ndarrayA 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

  • ValueError For 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

  1. 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]$.

NameTypeUnitDescription
sigma_spitzerfloat or np.ndarrayS m^-1

Reference Spitzer conductivity from sauter_spitzer_conductivity.

f_trapfloat or np.ndarray-

Trapped-particle fraction of the surface, in [0, 1].

nu_e_starfloat or np.ndarray-

Electron collisionality from electron_collisionality_sauter, non-negative.

Z_efffloat or np.ndarray-

Effective ion charge, at least one.

Returns
—float or np.ndarrayS 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

  • ValueError For 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

  1. 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}$.
NameTypeUnitDescription
f_trapfloat or np.ndarray-

Trapped-particle fraction of the surface, in [0, 1].

nu_e_starfloat or np.ndarray-

Electron collisionality from electron_collisionality_sauter, non-negative.

nu_i_starfloat or np.ndarray-

Ion collisionality from ion_collisionality_sauter, non-negative.

Z_efffloat 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

  • ValueError For 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

  1. O. Sauter, C. Angioni and Y. R. Lin-Liu, Phys. Plasmas 6 (1999) 2834, Eqs. (14)-(17).
  2. 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]\]
NameTypeUnitDescription
f_trapfloat or np.ndarray-

Trapped-particle fraction of the surface, in [0, 1].

nu_e_starfloat or np.ndarray-

Electron collisionality from electron_collisionality_sauter.

nu_i_starfloat or np.ndarray-

Ion collisionality from ion_collisionality_sauter.

Z_efffloat or np.ndarray-

Effective ion charge, strictly positive.

I_psifloat or np.ndarrayT m

The flux function $I = R B_\phi$ of the surface.

p_efloat or np.ndarrayPa

Electron pressure $n_e T_e$.

p_ifloat or np.ndarrayPa

Summed thermal-ion pressure $\sum_{\mathrm{ions}} n_s T_s$.

dp_dpsifloat or np.ndarrayPa rad Wb^-1

Derivative of the total thermal pressure, electrons included, with respect to poloidal flux per radian.

dln_Te_dpsifloat or np.ndarrayrad Wb^-1

Logarithmic derivative of the electron temperature with respect to poloidal flux per radian.

dln_Ti_dpsifloat or np.ndarrayrad Wb^-1

Logarithmic derivative of the ion temperature with respect to poloidal flux per radian.

Returns
—float or np.ndarrayA 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

  • ValueError For 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

  1. O. Sauter, C. Angioni and Y. R. Lin-Liu, Phys. Plasmas 6 (1999) 2834, Eq. (11).
  2. 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]$.
NameTypeUnitDescription
sigma_spitzerfloat or np.ndarrayS m^-1

Reference Spitzer conductivity from sauter_spitzer_conductivity.

f_trapfloat or np.ndarray-

Trapped-particle fraction of the surface, in [0, 1].

nu_e_starfloat or np.ndarray-

Electron collisionality from electron_collisionality_sauter, non-negative.

Z_efffloat or np.ndarray-

Effective ion charge, strictly positive.

Returns
—float or np.ndarrayS 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

  • ValueError For 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

  1. O. Sauter, C. Angioni and Y. R. Lin-Liu, Phys. Plasmas 6 (1999) 2834, Eq. (13).
  2. 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}}}\]
NameTypeUnitDescription
T_efloat or np.ndarrayeV

Electron temperature, strictly positive.

Z_efffloat or np.ndarray-

Effective ion charge, strictly positive.

ln_Lambda_efloat or np.ndarray-

Electron Coulomb logarithm, strictly positive; use coulomb_logarithm_electron_sauter.

Returns
—float or np.ndarrayS 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

  • ValueError For 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

  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.

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}\]
NameTypeUnitDescription
vfloat or np.ndarraym/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).

qfloat or np.ndarray-

Safety factor, positive.

R0float or np.ndarraym

Major radius, positive.

Returns
—float or np.ndarrayrad/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

  • ValueError A 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

  1. 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}\]
NameTypeUnitDescription
nu_deflectionfloat or np.ndarray1/s

Pitch-angle-scattering (deflection) frequency $\nu_D$, non-negative

epsilonfloat or np.ndarray-

Inverse aspect ratio $r/R_0$ of the surface, in (0, 1).

Returns
—float or np.ndarray1/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

  • ValueError A negative nu_deflection or epsilon outside (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

  1. 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})}\]
NameTypeUnitDescription
epsilonfloat 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

  • ValueError For 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

  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).

results matching ""

    No results matching ""