scotty.geometry module#

class scotty.geometry.CircularCrossSectionField(B_T_axis, R_axis, minor_radius_a, B_p_a, R_points=101, Z_points=101, grid_buffer_factor=1.0)#

Bases: MagneticField

Simple circular cross-section magnetic geometry

Parameters:
  • B_T_axis (float) – Toroidal magnetic field at the magnetic axis (Tesla)

  • R_axis (float) – Major radius of the magnetic axis (metres)

  • minor_radius_a (float) – Minor radius of the last closed flux surface (metres)

  • B_p_a (float) – Poloidal magnetic field at minor_radius_a (Tesla)

  • R_points (int)

  • Z_points (int) – Number of points for sample (R, Z) grid

  • grid_buffer_factor (float) – Multiplicative factor to increase size of sample grid by

B_R(q_R, q_Z)#
Parameters:
  • q_R (numpy.typing.ArrayLike)

  • q_Z (numpy.typing.ArrayLike)

Return type:

ndarray[tuple[int, …], dtype[float64]]

B_T(q_R, q_Z)#
Parameters:
  • q_R (numpy.typing.ArrayLike)

  • q_Z (numpy.typing.ArrayLike)

Return type:

ndarray[tuple[int, …], dtype[float64]]

B_Z(q_R, q_Z)#
Parameters:
  • q_R (numpy.typing.ArrayLike)

  • q_Z (numpy.typing.ArrayLike)

Return type:

ndarray[tuple[int, …], dtype[float64]]

poloidal_flux(q_R, q_Z)#
Parameters:
  • q_R (numpy.typing.ArrayLike)

  • q_Z (numpy.typing.ArrayLike)

Return type:

ndarray[tuple[int, …], dtype[float64]]

rho(q_R, q_Z)#
Parameters:
  • q_R (numpy.typing.ArrayLike)

  • q_Z (numpy.typing.ArrayLike)

Return type:

ndarray[tuple[int, …], dtype[float64]]

class scotty.geometry.ConstantCurrentDensityField(B_T_axis, R_axis, minor_radius_a, B_p_a, R_points=101, Z_points=101, grid_buffer_factor=1)#

Bases: MagneticField

Circular cross-section magnetic geometry with constant current density

Parameters:
  • B_T_axis (float) – Toroidal magnetic field at the magnetic axis (Tesla)

  • R_axis (float) – Major radius of the magnetic axis (metres)

  • minor_radius_a (float) – Minor radius of the last closed flux surface (metres)

  • B_p_a (float) – Poloidal magnetic field at minor_radius_a (Tesla)

  • R_points (int)

  • Z_points (int) – Number of points for sample (R, Z) grid

  • grid_buffer_factor (float) – Multiplicative factor to increase size of sample grid by

B_R(q_R, q_Z)#
Parameters:
  • q_R (numpy.typing.ArrayLike)

  • q_Z (numpy.typing.ArrayLike)

Return type:

ndarray[tuple[int, …], dtype[float64]]

B_T(q_R, q_Z)#
Parameters:
  • q_R (numpy.typing.ArrayLike)

  • q_Z (numpy.typing.ArrayLike)

Return type:

ndarray[tuple[int, …], dtype[float64]]

B_Z(q_R, q_Z)#
Parameters:
  • q_R (numpy.typing.ArrayLike)

  • q_Z (numpy.typing.ArrayLike)

Return type:

ndarray[tuple[int, …], dtype[float64]]

poloidal_flux(q_R, q_Z)#
Parameters:
  • q_R (numpy.typing.ArrayLike)

  • q_Z (numpy.typing.ArrayLike)

Return type:

ndarray[tuple[int, …], dtype[float64]]

rho(q_R, q_Z)#
Parameters:
  • q_R (numpy.typing.ArrayLike)

  • q_Z (numpy.typing.ArrayLike)

Return type:

ndarray[tuple[int, …], dtype[float64]]

class scotty.geometry.CurvySlabField(B_T_axis, R_axis)#

Bases: MagneticField

Analytical curvy slab geometry

Parameters:
B_R(q_R, q_Z)#
Parameters:
  • q_R (numpy.typing.ArrayLike)

  • q_Z (numpy.typing.ArrayLike)

Return type:

ndarray[tuple[int, …], dtype[float64]]

B_T(q_R, q_Z)#
Parameters:
  • q_R (numpy.typing.ArrayLike)

  • q_Z (numpy.typing.ArrayLike)

Return type:

ndarray[tuple[int, …], dtype[float64]]

B_Z(q_R, q_Z)#
Parameters:
  • q_R (numpy.typing.ArrayLike)

  • q_Z (numpy.typing.ArrayLike)

Return type:

ndarray[tuple[int, …], dtype[float64]]

class scotty.geometry.EFITField(R_grid, Z_grid, rBphi, psi_norm_2D, psi_unnorm_axis, psi_unnorm_boundary, psi_norm_1D=None, delta_R=0.0001, delta_Z=0.0001, interp_order=5, interp_smoothing=0)#

Bases: InterpolatedField

Parameters:
  • R_grid (FloatArray)

  • Z_grid (FloatArray)

  • rBphi (FloatArray)

  • psi_norm_2D (FloatArray)

  • psi_unnorm_axis (float)

  • psi_unnorm_boundary (float)

  • psi_norm_1D (Optional[FloatArray])

  • delta_R (Optional[float])

  • delta_Z (Optional[float])

  • interp_order (int)

  • interp_smoothing (int)

B_R(q_R, q_Z)#
Parameters:
  • q_R (numpy.typing.ArrayLike)

  • q_Z (numpy.typing.ArrayLike)

Return type:

ndarray[tuple[int, …], dtype[float64]]

B_T(q_R, q_Z)#
Parameters:
  • q_R (numpy.typing.ArrayLike)

  • q_Z (numpy.typing.ArrayLike)

Return type:

ndarray[tuple[int, …], dtype[float64]]

B_Z(q_R, q_Z)#
Parameters:
  • q_R (numpy.typing.ArrayLike)

  • q_Z (numpy.typing.ArrayLike)

Return type:

ndarray[tuple[int, …], dtype[float64]]

classmethod from_EFITpp(filename, equil_time, delta_R, delta_Z, interp_order, interp_smoothing)#
Parameters:
classmethod from_MAST_U_saved(filename, equil_time, delta_R, delta_Z, interp_order, interp_smoothing)#
Parameters:
classmethod from_MAST_saved(filename, equil_time, delta_R, delta_Z, interp_order, interp_smoothing)#
Parameters:
class scotty.geometry.InterpolatedField(R_grid, Z_grid, B_R, B_T, B_Z, psi, interp_order=5, interp_smoothing=0)#

Bases: MagneticField

Interpolated numerical equilibrium using bivariate splines

Parameters:
  • R_grid (FloatArray) – 1D array of points in R (metres)

  • Z_grid (FloatArray) – 1D array of points in Z (metres)

  • B_R (FloatArray) – 2D (R, Z) grid of radial magnetic field values (Tesla)

  • B_T (FloatArray) – 2D (R, Z) grid of toroidal magnetic field values (Tesla)

  • B_Z (FloatArray) – 2D (R, Z) grid of vertical magnetic field values (Tesla)

  • psi (FloatArray) – 2D (R, Z) grid of poloidal flux values (Weber/radian)

  • interp_order (int) – Order of interpolating splines

  • interp_smoothing (int) – Smoothing factor for interpolating splines

B_R(q_R, q_Z)#
Parameters:
  • q_R (numpy.typing.ArrayLike)

  • q_Z (numpy.typing.ArrayLike)

Return type:

ndarray[tuple[int, …], dtype[float64]]

B_T(q_R, q_Z)#
Parameters:
  • q_R (numpy.typing.ArrayLike)

  • q_Z (numpy.typing.ArrayLike)

Return type:

ndarray[tuple[int, …], dtype[float64]]

B_Z(q_R, q_Z)#
Parameters:
  • q_R (numpy.typing.ArrayLike)

  • q_Z (numpy.typing.ArrayLike)

Return type:

ndarray[tuple[int, …], dtype[float64]]

d2_poloidal_flux_dR2(q_R, q_Z, delta_R)#
Parameters:
  • q_R (numpy.typing.ArrayLike)

  • q_Z (numpy.typing.ArrayLike)

  • delta_R (float)

Return type:

ndarray[tuple[int, …], dtype[float64]]

d2_poloidal_flux_dRdZ(q_R, q_Z, delta_R, delta_Z)#
Parameters:
  • q_R (numpy.typing.ArrayLike)

  • q_Z (numpy.typing.ArrayLike)

  • delta_R (float)

  • delta_Z (float)

Return type:

ndarray[tuple[int, …], dtype[float64]]

d2_poloidal_flux_dZ2(q_R, q_Z, delta_R)#
Parameters:
  • q_R (numpy.typing.ArrayLike)

  • q_Z (numpy.typing.ArrayLike)

  • delta_R (float)

Return type:

ndarray[tuple[int, …], dtype[float64]]

d_poloidal_flux_dR(q_R, q_Z, delta_R)#
Parameters:
  • q_R (numpy.typing.ArrayLike)

  • q_Z (numpy.typing.ArrayLike)

  • delta_R (float)

Return type:

ndarray[tuple[int, …], dtype[float64]]

d_poloidal_flux_dZ(q_R, q_Z, delta_R)#
Parameters:
  • q_R (numpy.typing.ArrayLike)

  • q_Z (numpy.typing.ArrayLike)

  • delta_R (float)

Return type:

ndarray[tuple[int, …], dtype[float64]]

poloidal_flux(q_R, q_Z)#
Parameters:
  • q_R (numpy.typing.ArrayLike)

  • q_Z (numpy.typing.ArrayLike)

Return type:

ndarray[tuple[int, …], dtype[float64]]

class scotty.geometry.MagneticField#

Bases: ABC

Abstract base class for magnetic field geometries

B_R(q_R, q_Z)#
Parameters:
  • q_R (numpy.typing.ArrayLike)

  • q_Z (numpy.typing.ArrayLike)

Return type:

ndarray[tuple[int, …], dtype[float64]]

B_T(q_R, q_Z)#
Parameters:
  • q_R (numpy.typing.ArrayLike)

  • q_Z (numpy.typing.ArrayLike)

Return type:

ndarray[tuple[int, …], dtype[float64]]

B_Z(q_R, q_Z)#
Parameters:
  • q_R (numpy.typing.ArrayLike)

  • q_Z (numpy.typing.ArrayLike)

Return type:

ndarray[tuple[int, …], dtype[float64]]

R_coord: ndarray[tuple[int, ...], dtype[float64]]#

Sample locations for the major radius coordinate

Z_coord: ndarray[tuple[int, ...], dtype[float64]]#

Sample locations for the vertical coordinate

d2_poloidal_flux_dR2(q_R, q_Z, delta_R)#
Parameters:
  • q_R (numpy.typing.ArrayLike)

  • q_Z (numpy.typing.ArrayLike)

  • delta_R (float)

Return type:

ndarray[tuple[int, …], dtype[float64]]

d2_poloidal_flux_dRdZ(q_R, q_Z, delta_R, delta_Z)#
Parameters:
  • q_R (numpy.typing.ArrayLike)

  • q_Z (numpy.typing.ArrayLike)

  • delta_R (float)

  • delta_Z (float)

Return type:

ndarray[tuple[int, …], dtype[float64]]

d2_poloidal_flux_dZ2(q_R, q_Z, delta_Z)#
Parameters:
  • q_R (numpy.typing.ArrayLike)

  • q_Z (numpy.typing.ArrayLike)

  • delta_Z (float)

Return type:

ndarray[tuple[int, …], dtype[float64]]

d_poloidal_flux_dR(q_R, q_Z, delta_R)#
Parameters:
  • q_R (numpy.typing.ArrayLike)

  • q_Z (numpy.typing.ArrayLike)

  • delta_R (float)

Return type:

ndarray[tuple[int, …], dtype[float64]]

d_poloidal_flux_dZ(q_R, q_Z, delta_Z)#
Parameters:
  • q_R (numpy.typing.ArrayLike)

  • q_Z (numpy.typing.ArrayLike)

  • delta_Z (float)

Return type:

ndarray[tuple[int, …], dtype[float64]]

magnitude(q_R, q_Z)#

Returns \(|B|\), the magnitude of the magnetic field

Parameters:
  • q_R (numpy.typing.ArrayLike)

  • q_Z (numpy.typing.ArrayLike)

Return type:

ndarray[tuple[int, …], dtype[float64]]

poloidalFlux_grid: ndarray[tuple[int, ...], dtype[float64]]#

Value of the poloidal magnetic flux, \(\psi\), on (R_coord, Z_coord)

poloidal_flux(q_R, q_Z)#
Parameters:
  • q_R (numpy.typing.ArrayLike)

  • q_Z (numpy.typing.ArrayLike)

Return type:

ndarray[tuple[int, …], dtype[float64]]

unit(q_R, q_Z)#

Returns \(\mathbf{B}/|B|\), the unit vector of the magnetic field

Parameters:
  • q_R (numpy.typing.ArrayLike)

  • q_Z (numpy.typing.ArrayLike)

Return type:

ndarray[tuple[int, …], dtype[float64]]