bluemira.equilibria.physics
A collection of simple equilibrium physics calculations
Classes
Calculates interesting values in one go. |
Functions
|
Calculate normalised magnetic flux. |
|
Calculate the absolute psi values from normalised psi values |
|
Calculates the flat-top length |
|
Calculates the boundary flux at start of flat-top, after the breakdown |
|
Calculates the plasma elongation on the plasma axis (rho = 0). |
|
Calculates the plasma MHD safety factor on the plasma axis (rho=0). |
|
Calculate the magnitude of the minimum separation between the flux |
|
Calculates plasma volume [m^3] |
|
Calculates the volume integral of the poloidal field squared. |
|
Calculates the volume integral of plasma pressure. |
|
Calculates the stored poloidal magnetic energy in the plasma [J] |
|
Calculates the internal inductance of the plasma [H] |
|
Calculates the internal inductance of the plasma [H] |
|
Calculates the normalised internal inductance of the plasma |
|
Calculates the normalised internal inductance of the plasma |
|
Calculates the normalised internal plasma inductance (ITER approximate |
|
Calculate the normalised plasma internal inductance with arguments only. |
|
Calculate the average plasma pressure. |
|
Calculate the average plasma pressure. |
|
Calculate the ratio of plasma pressure to toroidal magnetic pressure. |
|
Calculate the ratio of plasma pressure to toroidal magnetic pressure. |
|
Calculate the ratio of plasma pressure to poloidal magnetic pressure |
|
Calculate the ratio of plasma pressure to magnetic pressure. This is |
|
Calculate the ratio of plasma pressure to poloidal magnetic pressure |
|
Calculate the ratio of plasma pressure to magnetic pressure. This is |
|
The ratio of plasma pressure to magnetic pressure |
|
Converts beta to normalised beta |
|
Converts normalised beta to beta |
|
Calculate the maximum flux achievable from an infinite solenoid given a peak field. |
Module Contents
- bluemira.equilibria.physics.calc_psi_norm(psi: numpy.typing.ArrayLike, opsi: float, xpsi: float) float | numpy.typing.NDArray[numpy.float64]
Calculate normalised magnetic flux.
\(\dfrac{\psi_{O}-\psi}{\psi_{O}-\psi_{X}}\)
- Parameters:
psi (numpy.typing.ArrayLike) – The magnetic flux per radian
opsi (float) – The psi value at the O-point
xpsi (float) – The psi value at the X-point
- Return type:
The normalised magnetic flux value(s)
- bluemira.equilibria.physics.calc_psi(psi_norm: numpy.typing.ArrayLike, opsi: float, xpsi: float) float | numpy.typing.NDArray[numpy.float64]
Calculate the absolute psi values from normalised psi values
\(\psi_{O}-\psi_{norm}(\psi_{O}-\psi_{X})\)
- Parameters:
psi_norm (numpy.typing.ArrayLike) – The normalised psi values
opsi (float) – The psi value at the O-point
xpsi (float) – The psi value at the X-point
- Returns:
The magnetic flux per radian
- Return type:
psi
- bluemira.equilibria.physics.calc_tau_flattop(psi_sof: float, psi_eof: float, v_burn: float) float
Calculates the flat-top length
\(\tau_{flat-top}=\dfrac{\psi_{SOF}-\psi_{EOF}}{V_{burn}}\)
- Parameters:
psi_sof (float) – The start of flat-top magnetic flux at the plasma boundary [V.s]
psi_eof (float) – The end of flat-top magnetic flux at the plasma boundary [V.s]
v_burn (float) – The plasma loop voltage during burn [V]
- Return type:
The duration of the flat-top [s]
- bluemira.equilibria.physics.calc_psib(psi_bd: float, R_0: float, I_p: float, li: float, c_ejima: float = 0.4) float
Calculates the boundary flux at start of flat-top, after the breakdown
\(\psi_b=\psi(t_{BD})-L_i I_p-\Delta\psi_{res}\)
- with:
\(L_i=\dfrac{\mu_0R_0l_i}{2}\)
\(\Delta\psi_{res}=C_{Ejima}\mu_0R_0I_p\)
- Parameters:
psi_bd (float) – The flux at the breakdown [V.s]
R_0 (float) – The machine major radius [m]
I_p (float) – The desired flat-top plasma current [A]
li (float) – The normalised plasma inductance
c_ejima (float)
- Return type:
The flux at the boundary at start of flat-top [V.s]
- bluemira.equilibria.physics.calc_k0(psi_xx0: float, psi_zz0: float) float
Calculates the plasma elongation on the plasma axis (rho = 0).
- Parameters:
psi_xx0 (float) – Second derivative of psi in X at the plasma axis (R_0, Z_0)
psi_zz0 (float) – Second derivative of psi in Z at the plasma axis (R_0, Z_0)
- Return type:
Plasma elongation at the plasma axis
- bluemira.equilibria.physics.calc_q0(eq: bluemira.equilibria.equilibrium.Equilibrium) float
Calculates the plasma MHD safety factor on the plasma axis (rho=0). Freidberg, Ideal MHD, eq 6.42, p 134
- Parameters:
eq (bluemira.equilibria.equilibrium.Equilibrium) – Equilibrium for which to calculate the safety factor on axis
- Return type:
The MHD safety factor on the plasma axis
- bluemira.equilibria.physics.calc_dx_sep(eq: bluemira.equilibria.equilibrium.Equilibrium) float
Calculate the magnitude of the minimum separation between the flux surfaces of null points in the equilibrium at the outboard midplane.
- Parameters:
eq (bluemira.equilibria.equilibrium.Equilibrium) – Equilibrium for which to calculate dx_sep
- Returns:
Separation distance at the outboard midplane between the active
null and the next closest flux surface with a null [m]
- Return type:
float
- bluemira.equilibria.physics.calc_volume(fs: bluemira.geometry.coordinates.Coordinates) float
Calculates plasma volume [m^3]
- Parameters:
fs (bluemira.geometry.coordinates.Coordinates) – Closed flux surface
- Return type:
Plasma volume within closed flux surface
- bluemira.equilibria.physics._calc_Bp2_int(Bp: numpy.typing.NDArray[numpy.float64], mask: numpy.typing.NDArray[numpy.float64] | None, x: numpy.typing.NDArray[numpy.float64], dx: numpy.typing.NDArray[numpy.float64], dz: numpy.typing.NDArray[numpy.float64]) float
Calculates the volume integral of the poloidal field squared.
- Parameters:
Bp (numpy.typing.NDArray[numpy.float64]) – Poloidal field at x and z-coordinates
mask (numpy.typing.NDArray[numpy.float64] | None) – Mask for chosen closed flux surface
x (numpy.typing.NDArray[numpy.float64]) – X-coordinates
dx (numpy.typing.NDArray[numpy.float64]) – Discretisation size in the x-coordinate
dz (numpy.typing.NDArray[numpy.float64]) – Discretisation size in the z-coordinate
- Return type:
volume integral (masked if chosen)
- bluemira.equilibria.physics._calc_p_int(p: numpy.typing.NDArray[numpy.float64], x: numpy.typing.NDArray[numpy.float64], dx: numpy.typing.NDArray[numpy.float64], dz: numpy.typing.NDArray[numpy.float64]) float
Calculates the volume integral of plasma pressure.
- Parameters:
p (numpy.typing.NDArray[numpy.float64]) – Plasma pressure
x (numpy.typing.NDArray[numpy.float64]) – X-coordinates
dx (numpy.typing.NDArray[numpy.float64]) – Discretisation size in the x-coordinate
dz (numpy.typing.NDArray[numpy.float64]) – Discretisation size in the z-coordinate
- Return type:
volume integral
- bluemira.equilibria.physics.calc_energy(eq: bluemira.equilibria.equilibrium.Equilibrium) float
Calculates the stored poloidal magnetic energy in the plasma [J]
\(W=\dfrac{LI^2}{2}\)
- Parameters:
eq (bluemira.equilibria.equilibrium.Equilibrium) – The Equilibrium object for which to calculate stored energy
- Return type:
Stored poloidal magnetic energy
- bluemira.equilibria.physics._calc_Li_from_energy(bp_energy: float, i_p: float) float
Calculates the internal inductance of the plasma [H]
- Parameters:
bp_energy (float) – Poloidal magnetic energy
i_p (float) – Plasma current
- Return type:
Internal inductance of the plasma
- bluemira.equilibria.physics.calc_Li(eq: bluemira.equilibria.equilibrium.Equilibrium) float
Calculates the internal inductance of the plasma [H]
\(L_i=\dfrac{2W}{I_{p}^{2}}\)
- Parameters:
eq (bluemira.equilibria.equilibrium.Equilibrium) – The Equilibrium object for which to calculate internal inductance
- Return type:
Internal inductance of the plasma
- bluemira.equilibria.physics._calc_li_from_Li(big_li: float, R_0: float) float
Calculates the normalised internal inductance of the plasma
\(l_i=\dfrac{2L_i}{\mu_{0}R_{0}}\)
- Parameters:
big_li (float) – Internal inductance of plasma
R_0 (float) – Major Radius
- Return type:
Normalised internal inductance of the plasma
- bluemira.equilibria.physics.calc_li(eq: bluemira.equilibria.equilibrium.Equilibrium) float
Calculates the normalised internal inductance of the plasma
\(l_i=\dfrac{2L_i}{\mu_{0}R_{0}}\)
- Parameters:
eq (bluemira.equilibria.equilibrium.Equilibrium) – The Equilibrium object for which to calculate internal inductance
- Return type:
Normalised internal inductance of the plasma
- bluemira.equilibria.physics.calc_li3(eq: bluemira.equilibria.equilibrium.Equilibrium) float
Calculates the normalised internal plasma inductance (ITER approximate calculation)
see DOI: 10.1088/0029-5515/48/12/125002
\(li(3)=\dfrac{2V\langle B_p^2\rangle}{(\mu_0I_p)^2R_0}\)
- with:
\(\langle B_p^2\rangle=\dfrac{1}{V}\int B_p^2dV\)
where: Bp is the poloidal magnetic field and V is the plasma volume
- Parameters:
eq (bluemira.equilibria.equilibrium.Equilibrium) – The Equilibrium object for which to calculate internal inductance
- Return type:
Approximate normalised internal inductance of the plasma
- bluemira.equilibria.physics._calc_li3minargs(x: numpy.typing.NDArray[numpy.float64], z: numpy.typing.NDArray[numpy.float64], psi: numpy.typing.NDArray[numpy.float64], Bp: numpy.typing.NDArray[numpy.float64], R_0: float, I_p: float, dx: float, dz: float, mask: numpy.typing.NDArray[numpy.float64] | None = None, o_points: collections.abc.Iterable[bluemira.equilibria.find.Opoint] | None = None, x_points: collections.abc.Iterable[bluemira.equilibria.find.Xpoint] | None = None) float
Calculate the normalised plasma internal inductance with arguments only.
\(\dfrac{2 B_{p, average}}{R_{0} (\mu_{0} I_{p})**2}\)
Used in the optimisation of the plasma profiles.
- Parameters:
x (numpy.typing.NDArray[numpy.float64]) – X-coordinates
z (numpy.typing.NDArray[numpy.float64]) – Z-coordinates
psi (numpy.typing.NDArray[numpy.float64]) – The poloidal magnetic flux map [V.s/rad]
Bp (numpy.typing.NDArray[numpy.float64]) – Poloidal field at x and z-coordinates
R_0 (float) – Major radius
I_p (float) – Plasma current
dx (float) – Discretisation size in the x-coordinate
dz (float) – Discretisation size in the z-coordinate
mask (numpy.typing.NDArray[numpy.float64] | None) – Mask for chosen closed flux surface
o_points (collections.abc.Iterable[bluemira.equilibria.find.Opoint] | None) – O-points to use to calculate psinorm
x_points (collections.abc.Iterable[bluemira.equilibria.find.Xpoint] | None) – X-points to use to calculate psinorm
- Return type:
Approximate normalised internal inductance of the plasma
- bluemira.equilibria.physics.calc_p_average(eq: bluemira.equilibria.equilibrium.Equilibrium) float
Calculate the average plasma pressure.
\(\langle p \rangle = \dfrac{1}{V_{p}}\int \mathbf{p}dxdz\):
- Parameters:
eq (bluemira.equilibria.equilibrium.Equilibrium) – The Equilibrium object for which to calculate p_average
- Return type:
The average plasma pressure [Pa]
- bluemira.equilibria.physics._calc_p_average(pressure_map: numpy.typing.NDArray, fs: numpy.typing.NDArray[numpy.float64], x: numpy.typing.NDArray[numpy.float64], dx: float, dz: float) float
Calculate the average plasma pressure.
\(\langle p \rangle = \dfrac{1}{V_{p}}\int \mathbf{p}dxdz\):
- Parameters:
pressure_map (numpy.typing.NDArray) – Pressure at normalised psi values within chosen closed flux surface
fs (numpy.typing.NDArray[numpy.float64]) – Coordinates of the chosen closed flux surface
x (numpy.typing.NDArray[numpy.float64]) – X-coordinates
dx (float) – Discretisation size in the x-coordinate
dz (float) – Discretisation size in the z-coordinate
- Return type:
The average plasma pressure [Pa]
- bluemira.equilibria.physics.calc_beta_t(eq: bluemira.equilibria.equilibrium.Equilibrium) float
Calculate the ratio of plasma pressure to toroidal magnetic pressure.
\(\beta_t = \dfrac{2\mu_0\langle p \rangle}{B_t^2}\)
- Parameters:
eq (bluemira.equilibria.equilibrium.Equilibrium) – The Equilibrium object for which to calculate beta_t
- Return type:
Ratio of plasma to toroidal magnetic pressure
- bluemira.equilibria.physics._calc_beta_t(pressure_map: numpy.typing.NDArray[numpy.float64], fs: numpy.typing.NDArray[numpy.float64], x: numpy.typing.NDArray[numpy.float64], dx: float, dz: float, B_0: float) float
Calculate the ratio of plasma pressure to toroidal magnetic pressure.
\(\beta_t = \dfrac{2\mu_0\langle p \rangle}{B_t^2}\)
- Parameters:
pressure_map (numpy.typing.NDArray[numpy.float64]) – Pressure at normalised psi values within chosen closed flux surface
fs (numpy.typing.NDArray[numpy.float64]) – Coordinates of the chosen closed flux surface
x (numpy.typing.NDArray[numpy.float64]) – X-coordinates
dx (float) – Discretisation size in the x-coordinate
dz (float) – Discretisation size in the z-coordinate
B_0 (float) – Toroidal field at reactor major radius [T]
- Return type:
Ratio of plasma to toroidal magnetic pressure
- bluemira.equilibria.physics.calc_beta_p(eq: bluemira.equilibria.equilibrium.Equilibrium) float
Calculate the ratio of plasma pressure to poloidal magnetic pressure
\(\beta_p = \dfrac{2\mu_0\langle p \rangle}{B_p^2}\)
- Parameters:
eq (bluemira.equilibria.equilibrium.Equilibrium) – The Equilibrium object for which to calculate beta_p
- Return type:
Ratio of plasma to magnetic pressure
- bluemira.equilibria.physics.calc_beta_p_approximate(eq: bluemira.equilibria.equilibrium.Equilibrium) float
Calculate the ratio of plasma pressure to magnetic pressure. This is following the definitions of Friedberg, Ideal MHD, pp. 68-69, which is an approximation.
\(\beta_p = \dfrac{2\mu_0\langle p \rangle}{B_p^2}\)
Note
Be careful, this approximation is not good for high elongation plasmas, try comparing to calc_beta_p before using.
- Parameters:
eq (bluemira.equilibria.equilibrium.Equilibrium) – The Equilibrium object for which to calculate beta_p
- Return type:
Ratio of plasma to poloidal magnetic pressure
- bluemira.equilibria.physics._calc_beta_p(pressure_map: numpy.typing.NDArray[numpy.float64], Bp: numpy.typing.NDArray[numpy.float64], mask: numpy.typing.NDArray[numpy.float64], x: numpy.typing.NDArray[numpy.float64], dx: float, dz: float) float
Calculate the ratio of plasma pressure to poloidal magnetic pressure
\(\beta_p = \dfrac{2\mu_0\langle p \rangle}{B_p^2}\)
- Parameters:
pressure_map (numpy.typing.NDArray[numpy.float64]) – Pressure at normalised psi values within chosen closed flux surface
Bp (numpy.typing.NDArray[numpy.float64]) – Poloidal field at x and z-coordinates
mask (numpy.typing.NDArray[numpy.float64]) – Mask for chosen closed flux surface
x (numpy.typing.NDArray[numpy.float64]) – X-coordinates
dx (float) – Discretisation size in the x-coordinate
dz (float) – Discretisation size in the z-coordinate
- Return type:
Ratio of plasma to magnetic pressure
- bluemira.equilibria.physics._calc_beta_p_approx(pressure_map: numpy.typing.NDArray[numpy.float64], fs: numpy.typing.NDArray[numpy.float64], x: numpy.typing.NDArray[numpy.float64], dx: float, dz: float, I_p: float) float
Calculate the ratio of plasma pressure to magnetic pressure. This is following the definitions of Friedberg, Ideal MHD, pp. 68-69, which is an approximation.
\(\beta_p = \dfrac{2\mu_0\langle p \rangle}{B_p^2}\)
Note
Be careful, this approximation is not good for high elongation plasmas, try comparing to calc_beta_p before using.
- Parameters:
pressure_map (numpy.typing.NDArray[numpy.float64]) – Pressure at normalised psi values within chosen closed flux surface
fs (numpy.typing.NDArray[numpy.float64]) – Coordinates of the chosen closed flux surface
x (numpy.typing.NDArray[numpy.float64]) – X-coordinates
dx (float) – Discretisation size in the x-coordinate
dz (float) – Discretisation size in the z-coordinate
I_p (float) – Plasma current
- Return type:
Ratio of plasma to poloidal magnetic pressure
- class bluemira.equilibria.physics.EqSummary
Bases:
bluemira.base.parameter_frame._frame.ParameterFrameCalculates interesting values in one go.
- li_3: bluemira.base.parameter_frame._parameter.Parameter[float]
- beta_p: bluemira.base.parameter_frame._parameter.Parameter[float]
- q_95: bluemira.base.parameter_frame._parameter.Parameter[float]
- kappa_95: bluemira.base.parameter_frame._parameter.Parameter[float]
- delta_95: bluemira.base.parameter_frame._parameter.Parameter[float]
- zeta_95: bluemira.base.parameter_frame._parameter.Parameter[float]
- kappa: bluemira.base.parameter_frame._parameter.Parameter[float]
- delta: bluemira.base.parameter_frame._parameter.Parameter[float]
- zeta: bluemira.base.parameter_frame._parameter.Parameter[float]
- dx_shaf: bluemira.base.parameter_frame._parameter.Parameter[float]
- dz_shaf: bluemira.base.parameter_frame._parameter.Parameter[float]
- classmethod from_equilibrium(eq: bluemira.equilibria.equilibrium.Equilibrium, f95: bluemira.equilibria.flux_surfaces.ClosedFluxSurface, f100: bluemira.equilibria.flux_surfaces.ClosedFluxSurface, *, is_double_null: bool)
Create summary from equilibrium
- Parameters:
is_double_null (bool)
- bluemira.equilibria.physics.beta(pressure: numpy.typing.NDArray[numpy.float64], field: float) float
The ratio of plasma pressure to magnetic pressure
\(\beta = \dfrac{\langle p \rangle}{B^2/2\mu_0}\)
- Parameters:
pressure (numpy.typing.NDArray[numpy.float64]) – Plasma pressure, from which the mean is to be calculated [Pa]
field (float) – Mean total field strength [T]
- Return type:
Ratio of plasma to magnetic pressure
- bluemira.equilibria.physics.normalise_beta(beta: float, a: float, b_tor: float, I_p: float) float
Converts beta to normalised beta
\(\beta_{N} = \beta\dfrac{aB_{T}}{I_{p}}\)
- Parameters:
beta (float) – Ratio of plasma to magnetic pressure
a (float) – Plasma minor radius [m]
b_tor (float) – Toroidal field [T]
I_p (float) – Plasma current [A]
- Return type:
Normalised ratio of plasma to magnetic pressure (Troyon factor)
- bluemira.equilibria.physics.beta_N_to_beta(beta_N: float, a: float, Btor: float, I_p: float) float
Converts normalised beta to beta
\(\beta = \beta_{N}\dfrac{I_{p}}{aB_{T}}\)
- Parameters:
beta_N (float) – Normalised ratio of plasma to magnetic pressure (Troyon factor)
a (float) – Plasma minor radius [m]
Btor (float) – Toroidal field [T]
I_p (float) – Plasma current [A]
- Return type:
Ratio of plasma to magnetic pressure
- bluemira.equilibria.physics.calc_infinite_solenoid_flux(r_cs_min: float, r_cs_max: float, B_max: float) float
Calculate the maximum flux achievable from an infinite solenoid given a peak field.
\[B_{max} \dfrac{\pi}{3} (r_{cs, max}**2 r_{cs, min}**2 + r_{cs, max} r_{cs, min})\]- Parameters:
r_cs_min (float) – Inner radius of the infinite solenoid [m]
r_cs_max (float) – Outer radius of the infinite solenoid [m]
B_max (float) – Peak allowable field in the solenoid [T]
- Return type:
Maximum achievable flux from an infinite solenoid [V.s]