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:
-
machine_type(MachineType) –The type of the machine.
-
psit_state(FluxCoordinateState) –The state of the toroidal flux coordinate $\psi_t$.
-
psip_state(FluxCoordinateState) –The state of the toroidal flux coordinate $\psi_p$.
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
psitis passed, then $d\psi_p/d\psi_t$ is calculated. - If
psipis 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
psitis passed, then $d\psi_t/d\psi_p$ is calculated. - If
psipis 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:
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.