Skip to content

Base Objects

Note that $\psi$ refers to either $\psi_t$ or $\psi_p$.

dexter.machine.base

Machine objects' base classes.

Machine objects define evaluations over machine quantities, provide information about the state of each magnetic flux coordinate, as well as useful scalar quantities and data arrays.

Each parent class corresponds to an evaluation Trait on the Rust API.

Classes:

  • MachineObject –

    Common attributes in all machine objects.

  • Qfactor –

    q-factor related quantities and evaluation methods.

  • Current –

    Plasma current related evaluation methods.

  • Bfield –

    Magnetic field related evaluation methods.

  • Efield –

    Electric field related evaluation methods.

  • Geometry –

    Device geometry related evaluation methods.

  • Mode –

    Single perturbation mode related evaluation methods.

MachineObject()

Common attributes in all machine objects.

Attributes:

Geometry()

Geometry related evaluation methods.

Attributes:

  • baxis (float) –

    The magnetic field strength on the axis $B_0$ in $[T]$.

  • raxis (float) –

    The horizontal position of the magnetic axis $R_0$ in $[m]$.

  • zaxis (float) –

    The vertical position of the magnetic axis in $[m]$.

  • rgeo (float) –

    The horizontal position of the geometric axis (device major radius) in $[m]$.

  • rlast (float) –

    The $r$ coordinate's value at the last closed flux surface in $[m]$.

  • rlab_last (Array1) –

    The last $R$ values that correspond to the device's last closed flux surface, in $[m]$.

  • zlab_last (Array1) –

    The last $Z$ values that correspond to the device's last closed flux surface, in $[m]$.

eval_r(psi: ArrayLike | None = None, psip: ArrayLike | None = None) -> Array

Calculates $r(\psi)$, where $r$ in $[m]$.

eval_psit_of_r(r: ArrayLike) -> Array

Calculates $\psi_t(r)$, where $r$ in $[m]$.

eval_psip_of_r(r: ArrayLike) -> Array

Calculates $\psi_p(r)$, where $r$ in $[m]$.

eval_rlab(theta: ArrayLike, psit: ArrayLike | None = None, psip: ArrayLike | None = None) -> Array

Calculates $R(\psi, \theta)$, where $R$ in $[m]$.

eval_zlab(theta: ArrayLike, psit: ArrayLike | None = None, psip: ArrayLike | None = None) -> Array

Calculates $Z(\psi, \theta)$, where $Z$ in $[m]$.

eval_jacobian(theta: ArrayLike, psit: ArrayLike | None = None, psip: ArrayLike | None = None) -> Array | None

Calculates the Jacobian $J(\psi, \theta)$.

Qfactor()

q-factor related quantities and evaluation methods.

Attributes:

  • psit_last (MagneticFlux) –

    The value of the last closed toroidal flux $\psi_{t,LCFS}$.

  • psip_last (MagneticFlux) –

    The value of the last closed poloidal flux $\psi_{p,LCFS}$.

  • qlast (float) –

    The q-factor's value at the last closed flux surface, $q_{LCFS}$.

  • qaxis (float) –

    The q-factor's value at the magnetic axis, $q_{axis}$.

eval_q(psit: ArrayLike | None = None, psip: ArrayLike | None = None) -> Array

Calculates $q(\psi)$.

eval_q_deriv(psit: ArrayLike | None = None, psip: ArrayLike | None = None) -> Array

Calculates $dq(\psi)/d\psi$.

eval_other(psit: ArrayLike | None = None, psip: ArrayLike | None = None) -> Array

Converts a MagneticFlux to the other variant.

eval_psit_of_q(q: ArrayLike) -> Array

Calculates $\psi_t(q)$.

eval_psip_of_q(q: ArrayLike) -> Array

Calculates $\psi_p(q)$.

eval_deriv_of_other(psit: ArrayLike | None = None, psip: ArrayLike | None = None) -> Array

Calculates the derivative of the other magnetic flux with respect to the passed flux.

  • If psit is passed, then $d\psi_p/d\psi_t$ is calculated.
  • If psip is passed, then $d\psi_t/d\psi_p$ is calculated.

In contrast to Qfactor.eval_deriv_wrt_other(), this method only requires one of the fluxes to be in a “good” state (the one corresponding to the passed flux argument).

This method is useful for ensuring that $d\psi_t/d\psi_p = q$ and $d\psi_p/d\psi_t = \iota$. The corresponding methods Qfactor.eval_q and Qfactor.eval_iota should be used in calculations as they are faster and more accurate.

eval_deriv_wrt_other(psit: ArrayLike | None = None, psip: ArrayLike | None = None) -> Array

Calculates the derivative of the magnetic flux with respect to the other.

  • If psit is passed, then $d\psi_t/d\psi_p$ is calculated.
  • If psip is passed, then $d\psi_p/d\psi_t$ is calculated.

This method requires both fluxes to be in a “good” state. If this is not true, Qfactor.eval_deriv_of_other should be used.

This method is useful for ensuring that $d\psi_t/d\psi_p = q$ and $d\psi_p/d\psi_t = \iota$. The corresponding methods Qfactor.eval_q and Qfactor.eval_iota should be used in calculations as they are faster and more accurate.

eval_iota(psit: ArrayLike | None = None, psip: ArrayLike | None = None) -> Array

Calculates $\iota(\psi) = 1/q$.

eval_iota_deriv(psit: ArrayLike | None = None, psip: ArrayLike | None = None) -> Array

Calculates $d\iota(\psi)/d\psi = -q'/q^2$.

Current()

Plasma current related evaluation methods.

eval_g(psit: ArrayLike | None = None, psip: ArrayLike | None = None) -> Array

Calculates $g(\psi)$.

eval_i(psit: ArrayLike | None = None, psip: ArrayLike | None = None) -> Array

Calculates $I(\psi)$.

eval_g_deriv(psit: ArrayLike | None = None, psip: ArrayLike | None = None) -> Array

Calculates $dg(\psi)/d\psi$.

eval_i_deriv(psit: ArrayLike | None = None, psip: ArrayLike | None = None) -> Array

Calculates $dI(\psi)/d\psi$.

eval_g_deriv2(psit: ArrayLike | None = None, psip: ArrayLike | None = None) -> Array

Calculates $d^2g(\psi)/d\psi^2$.

eval_i_deriv2(psit: ArrayLike | None = None, psip: ArrayLike | None = None) -> Array

Calculates $d^2I(\psi)/d\psi^2$.

Bfield()

Magnetic field related evaluation methods.

eval_b(theta: ArrayLike, psit: ArrayLike | None = None, psip: ArrayLike | None = None) -> Array

Calculates $B(\psi, \theta)$.

eval_deriv_flux(theta: ArrayLike, psit: ArrayLike | None = None, psip: ArrayLike | None = None) -> Array

Calculates $dB(\psi, \theta)/d\psi$.

eval_deriv_theta(theta: ArrayLike, psit: ArrayLike | None = None, psip: ArrayLike | None = None) -> Array

Calculates $dB(\psi, \theta)/d\theta$.

eval_deriv_flux2(theta: ArrayLike, psit: ArrayLike | None = None, psip: ArrayLike | None = None) -> Array

Calculates $d^2B(\psi, \theta)/d\psi^2$.

eval_deriv_theta2(theta: ArrayLike, psit: ArrayLike | None = None, psip: ArrayLike | None = None) -> Array

Calculates $d^2B(\psi, \theta)/d\theta^2$.

eval_deriv_mixed(theta: ArrayLike, psit: ArrayLike | None = None, psip: ArrayLike | None = None) -> Array

Calculates $d^2B(\psi, \theta)/d\psi d\theta$.

Efield()

Electric field related evaluation methods.

eval_e(psit: ArrayLike | None = None, psip: ArrayLike | None = None) -> Array

Calculates $E(\psi)$.

eval_phi(psit: ArrayLike | None = None, psip: ArrayLike | None = None) -> Array

Calculates $\Phi(\psi)$.

eval_phi_deriv(psit: ArrayLike | None = None, psip: ArrayLike | None = None) -> Array

Calculates $d\Phi(\psi)/d\psi$.

Since the field is radial, this method is equivalent to $-E(\psi)$.

eval_phi_deriv2(psit: ArrayLike | None = None, psip: ArrayLike | None = None) -> Array

Calculates $d^2\Phi(\psi)/d\psi^2$.

Mode()

Single perturbation mode related evaluation methods.

Attributes:

  • m (int) –

    The poloidal number $m$.

  • n (int) –

    The toroidal number $n$.

eval_amplitude(theta: ArrayLike, zeta: ArrayLike, t: ArrayLike, psit: ArrayLike | None = None, psip: ArrayLike | None = None) -> Array

Calculates the amplitude $\alpha_{m,n}(\psi, \theta, \zeta, t)$, in Normalized Units.

eval_phase(theta: ArrayLike, zeta: ArrayLike, t: ArrayLike, psit: ArrayLike | None = None, psip: ArrayLike | None = None) -> Array

Calculates the phase $\phi(\psi, \theta, \zeta, t)$.

eval_m(theta: ArrayLike, zeta: ArrayLike, t: ArrayLike, psit: ArrayLike | None = None, psip: ArrayLike | None = None) -> Array

Calculates the mode's value $m(\psi, \theta, \zeta, t)$, in Normalized Units.

eval_deriv_flux(theta: ArrayLike, zeta: ArrayLike, t: ArrayLike, psit: ArrayLike | None = None, psip: ArrayLike | None = None) -> Array

Calculates the mode's derivative $dm(\psi, \theta, \zeta, t)/d\psi$, in Normalized Units.

eval_deriv_theta(theta: ArrayLike, zeta: ArrayLike, t: ArrayLike, psit: ArrayLike | None = None, psip: ArrayLike | None = None) -> Array

Calculates the mode's derivative $dm(\psi, \theta, \zeta, t)/d\theta$, in Normalized Units.

eval_deriv_zeta(theta: ArrayLike, zeta: ArrayLike, t: ArrayLike, psit: ArrayLike | None = None, psip: ArrayLike | None = None) -> Array

Calculates the mode's derivative $dm(\psi, \theta, \zeta, t)/d\zeta$, in Normalized Units.

eval_deriv_t(theta: ArrayLike, zeta: ArrayLike, t: ArrayLike, psit: ArrayLike | None = None, psip: ArrayLike | None = None) -> Array

Calculates the mode's derivative $dm(\psi, \theta, \zeta, t)/dt$, in Normalized Units.