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: scotty.geometry.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

numpy.ndarray[Any, numpy.dtype[numpy.float64]]

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

  • q_Z (numpy.typing.ArrayLike) –

Return type

numpy.ndarray[Any, numpy.dtype[numpy.float64]]

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

  • q_Z (numpy.typing.ArrayLike) –

Return type

numpy.ndarray[Any, numpy.dtype[numpy.float64]]

R_coord: numpy.ndarray[Any, numpy.dtype[numpy.float64]]#

Sample locations for the major radius coordinate

Z_coord: numpy.ndarray[Any, numpy.dtype[numpy.float64]]#

Sample locations for the vertical coordinate

poloidalFlux_grid: numpy.ndarray[Any, numpy.dtype[numpy.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

numpy.ndarray[Any, numpy.dtype[numpy.float64]]

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

  • q_Z (numpy.typing.ArrayLike) –

Return type

numpy.ndarray[Any, numpy.dtype[numpy.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: scotty.geometry.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

numpy.ndarray[Any, numpy.dtype[numpy.float64]]

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

  • q_Z (numpy.typing.ArrayLike) –

Return type

numpy.ndarray[Any, numpy.dtype[numpy.float64]]

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

  • q_Z (numpy.typing.ArrayLike) –

Return type

numpy.ndarray[Any, numpy.dtype[numpy.float64]]

R_coord: numpy.ndarray[Any, numpy.dtype[numpy.float64]]#

Sample locations for the major radius coordinate

Z_coord: numpy.ndarray[Any, numpy.dtype[numpy.float64]]#

Sample locations for the vertical coordinate

poloidalFlux_grid: numpy.ndarray[Any, numpy.dtype[numpy.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

numpy.ndarray[Any, numpy.dtype[numpy.float64]]

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

  • q_Z (numpy.typing.ArrayLike) –

Return type

numpy.ndarray[Any, numpy.dtype[numpy.float64]]

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

Bases: scotty.geometry.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

numpy.ndarray[Any, numpy.dtype[numpy.float64]]

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

  • q_Z (numpy.typing.ArrayLike) –

Return type

numpy.ndarray[Any, numpy.dtype[numpy.float64]]

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

  • q_Z (numpy.typing.ArrayLike) –

Return type

numpy.ndarray[Any, numpy.dtype[numpy.float64]]

R_coord: numpy.ndarray[Any, numpy.dtype[numpy.float64]]#

Sample locations for the major radius coordinate

Z_coord: numpy.ndarray[Any, numpy.dtype[numpy.float64]]#

Sample locations for the vertical coordinate

poloidalFlux_grid: numpy.ndarray[Any, numpy.dtype[numpy.float64]]#

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

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: scotty.geometry.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

numpy.ndarray[Any, numpy.dtype[numpy.float64]]

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

  • q_Z (numpy.typing.ArrayLike) –

Return type

numpy.ndarray[Any, numpy.dtype[numpy.float64]]

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

  • q_Z (numpy.typing.ArrayLike) –

Return type

numpy.ndarray[Any, numpy.dtype[numpy.float64]]

R_coord: numpy.ndarray[Any, numpy.dtype[numpy.float64]]#

Sample locations for the major radius coordinate

Z_coord: numpy.ndarray[Any, numpy.dtype[numpy.float64]]#

Sample locations for the vertical coordinate

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
poloidalFlux_grid: numpy.ndarray[Any, numpy.dtype[numpy.float64]]#

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

class scotty.geometry.InterpolatedField(R_grid, Z_grid, B_R, B_T, B_Z, psi, interp_order=5, interp_smoothing=0)#

Bases: scotty.geometry.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

numpy.ndarray[Any, numpy.dtype[numpy.float64]]

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

  • q_Z (numpy.typing.ArrayLike) –

Return type

numpy.ndarray[Any, numpy.dtype[numpy.float64]]

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

  • q_Z (numpy.typing.ArrayLike) –

Return type

numpy.ndarray[Any, numpy.dtype[numpy.float64]]

R_coord: numpy.ndarray[Any, numpy.dtype[numpy.float64]]#

Sample locations for the major radius coordinate

Z_coord: numpy.ndarray[Any, numpy.dtype[numpy.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

numpy.ndarray[Any, numpy.dtype[numpy.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

numpy.ndarray[Any, numpy.dtype[numpy.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

numpy.ndarray[Any, numpy.dtype[numpy.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

numpy.ndarray[Any, numpy.dtype[numpy.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

numpy.ndarray[Any, numpy.dtype[numpy.float64]]

poloidalFlux_grid: numpy.ndarray[Any, numpy.dtype[numpy.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

numpy.ndarray[Any, numpy.dtype[numpy.float64]]

class scotty.geometry.MagneticField#

Bases: abc.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

numpy.ndarray[Any, numpy.dtype[numpy.float64]]

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

  • q_Z (numpy.typing.ArrayLike) –

Return type

numpy.ndarray[Any, numpy.dtype[numpy.float64]]

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

  • q_Z (numpy.typing.ArrayLike) –

Return type

numpy.ndarray[Any, numpy.dtype[numpy.float64]]

R_coord: numpy.ndarray[Any, numpy.dtype[numpy.float64]]#

Sample locations for the major radius coordinate

Z_coord: numpy.ndarray[Any, numpy.dtype[numpy.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

numpy.ndarray[Any, numpy.dtype[numpy.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

numpy.ndarray[Any, numpy.dtype[numpy.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

numpy.ndarray[Any, numpy.dtype[numpy.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

numpy.ndarray[Any, numpy.dtype[numpy.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

numpy.ndarray[Any, numpy.dtype[numpy.float64]]

poloidalFlux_grid: numpy.ndarray[Any, numpy.dtype[numpy.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

numpy.ndarray[Any, numpy.dtype[numpy.float64]]