theta_grid_parameters_config_type Derived Type

type, public, extends(abstract_config_type) :: theta_grid_parameters_config_type

Used to represent the input configuration of theta_grid. Sets a number of parameters used by the different theta grid implementations. Not all parameters are active for a given theta grid type.


Contents


Components

Type Visibility Attributes Name Initial
logical, public :: exist = .false.

Does the related namelist exist in the target input file?

integer, public :: index = 0

Used to hold the specific index of numbered namelists

logical, public :: skip_read = .false.

Do we want to skip the read step in init?

logical, public :: skip_broadcast = .false.

Do we want to skip the broadcast step in init?

real, public :: akappa = 1.0

The flux surface elongation (only used when geoType=0, which selects the Generalised Miller analytic geometry specification).

real, public :: akappri = 0.0

The radial gradient flux surface elongation (only used when geoType=0, which selects the Generalised Miller analytic geometry specification). akappri =

real, public :: alpmhd = 0.0

Used in conjunction with alpmhdfac to override shift, set as shift=-alpmhd*alpmhdfac. Do not use unless you know what you are doing.

real, public :: asurf = 1.0

Minor radius of the flux surface that receives the specified shaping (only used when geoType=1, which selects the Global MHD analytic geometry specification). See Section 2.1.2 of the Analytic Geometry Specification documentation for more details.

real, public :: btor_slab = 0.0

In the slab limit, determines the angle between the field and the background flow (which flows in an imaginary toroidal direction). It is effectively equal to . btor_slab = btor/bpol defines direction of a flow relative to B in slab geometry, where flow is by definition in the toroidal direction.

real, public :: c0_mxh = 0.0

Zeroth cosine moment for the MXH local equilibrum. See geoType and local_eq

real, public, dimension(mxh_max_moments) :: c_mxh = 0.0

Cosine moments for the MXH local equilibrum. See geoType and local_eq

real, public, dimension(mxh_max_moments) :: dc_mxh_dr = 0.0

Radial derivatives of cosine moments for the MXH local equilibrum. See geoType and local_eq

real, public :: delta2 = 1.0

The elongation of the flux surface labeled by aSurf (only used when geoType=1, which selects the Global MHD analytic geometry specifications). See Section 2.1.2 of the Analytic Geometry Specification documentation for more details.

real, public :: delta3 = 1.0

The triangularity of the flux surface labeled by aSurf (only used when geoType=1, which selects the Global MHD analytic geometry specifications). See Section 2.1.2 of the Analytic Geometry Specification documentation for more details.

real, public :: deltam = 1.0

The magnitude of the mMode shaping effect (only used when geoType=2 or 3, which selects the Generalised Elongation or Fourier analytic geometry specifications). See Sections 2.1.3 and 2.1.4 of the Analytic Geometry Specification documentation for more details.

real, public :: deltampri = 0.0

Radial derivative of the magnitude of the mMode shaping effect (only used when geoType=2 or 3, which selects the Generalised Elongation or Fourier analytic geometry specifications). See Sections 2.1.3 and 2.1.4 of the Analytic Geometry Specification documentation for more details.

real, public :: deltan = 1.0

The magnitude of the nMode shaping effect (only used when geoType=2 or 3, which selects the Generalised Elongation or Fourier analytic geometry specifications). See Sections 2.1.3 and 2.1.4 of the Analytic Geometry Specification documentation for more details.

real, public :: deltanpri = 0.0

Radial derivative of the magnitude of the nMode shaping effect (only used when geoType=2 or 3, which selects the Generalised Elongation or Fourier analytic geometry specifications). See Sections 2.1.3 and 2.1.4 of the Analytic Geometry Specification documentation for more details.

real, public :: eps = 0.3

Controls particle trapping (among other things) in simple geometric models.

real, public :: epsl = 0.3

Sets curvature drift in s-alpha model, where is the GS2 equilibrium reference normalisation length and is the major radius at the centre of the flux surface.

integer, public :: geotype = 0

Selects between different analytic geometry specifications (only used when local_eq = T):

  • geoType = 0: Generalised Miller
  • geoType = 1: Global MHD
  • geoType = 2: Generalised Elongation
  • geoType = 3: Fourier specification.
  • geoType = 4: Miller Extended Harmonic (MXH)

See Section 2.1 of the Analytic Geometry Specification documentation for more details on options 0-3, and PPCF 63 (2021) 012001 (5pp) for details of 4 (MXH).

real, public :: kp = -1.0

kp sets parallel wavenumber and box length in slab geometry. .

  • always use kp instead of pk in slab geometry (if kp > 0 then gs2 sets pk = 2*kp)
  • in slab limit : nb if kp = 1, , where is the magnetic shear scale length.
integer, public :: mmode = 2

First flux surface shaping mode number (only used when geoType=2 or 3, which selects the Generalised Elongation or Fourier analytic geometry specifications). See Sections 2.1.3 and 2.1.4 of the Analytic Geometry Specification documentation for more details.

integer, public :: nmode = 3

Second flux surface shaping mode number (only used when geoType=2 or 3, which selects the Generalised Elongation or Fourier analytic geometry specifications). See Sections 2.1.3 and 2.1.4 of the Analytic Geometry Specification documentation for more details.

integer, public :: n_mxh = 0

Number of moments for the MXH local equilibrum. Maximum value is mxh_max_moments. See geoType and local_eq for more details.

integer, public :: nperiod = 2

Sets the number of segments along equilibrium magnetic field to include in simulation domain. . Ignored in some cases

integer, public :: ntheta = 24

Rough number of grid points along equilibrium magnetic field between . Actual number of grid points determined as follows:

  • number of points in GS2 theta grid always odd because grid must contain both bounce points of trapped particles and one grid point at . For even values, an extra point is added
  • theta grid in code runs from -ntgrid:ntgrid, with ntgrid=int(ntheta/2) for nperiod=1.
  • ntheta is used for local equilibria, s-alpha, and EFIT, and ignored for all other numerical equilibria
real, public :: pk = 0.3

Sets , the magnetic safety factor, and therefore also sets the connection length, i.e. the length of the box in the parallel direction, in terms of . Used only in high aspect ratio equilibrium model.

real, public :: qinp = 1.5

Sets value of the safety factor when using local toroidal equilibrium model.

real, public :: r_geo = 3.0

When not local_eq: Centerpoint of LCFS (normalized to ) - When local_eq: Major radius of magnetic field reference point (normalized to ). Specifically, the reference magnetic field is defined to be the value of the toroidal magnetic field at R=r_geo on the flux surface labeled by rhoc.

real, public :: raxis = 3.0

Major radial location of the magnetic axis (only used when geoType=1, which selects the Global MHD analytic geometry specification). See Section 2.1.2 of the Analytic Geometry Specification documentation for more details.

real, public :: rhoc = 0.5

rhoc is the flux surface label (0< rhoc< 1). Its exact meaning depends on irho. Usually rho = midplane diameter/midplane diameter of LCFS (here, "LCFS" refers to the flux surface at a radius of . If using Miller geometry with , this is not the physical last closed flux surface.

  • When irho = 1, rhoc = sqrt(toroidal flux)/sqrt(toroidal flux of LCFS)
  • When irho = 2, rhoc = midplane diameter/(midplane diameter of LCFS). recommended
  • When irho = 3, rhoc = poloidal flux/(poloidal flux of LCFS)
real, public :: rmaj = 3.0

When not local_eq: Position of magnetic axis (normalized to ). When local_eq: Major radius of the centre of the flux surface of interest (normalized to )

real, public, dimension(mxh_max_moments) :: s_mxh = 0.0

Sine moments for the MXH local equilibrum. See geoType and local_eq

real, public, dimension(mxh_max_moments) :: ds_mxh_dr = 0.0

Radial derivatives of sine moments for the MXH local equilibrum. See geoType and local_eq

real, public :: shat = 0.75

Sets value of magnetic shear in simple geometric models. Over-ridden by s_hat_input in theta_grid_eik_knobs for most values of bishop.

real, public :: shift = 0.0

shift is related to minor radial derivatives of the major radial location of the flux surface centers (i.e. the Shafranov shift), but this input variable has different physical definitions in s-alpha and other analytic equilbrium models:

  • In s-alpha (i.e. equilibrium_option='s-alpha'), shift is a parameter for local (and not which is constant):
  • In other analytic specifications (i.e. equilibrium_option='eik' and geoType=0, 2, or 3), shift is a parameter for local (and NOT for ):

NB in Miller shift contains the 1st radial derivative of the Shafranov shift, BUT in s-alpha shift is related to a 2nd radial derivative of the Shafranov shift.

  • in s-alpha(i.e. equilibrium_option='s-alpha'), no additional parameter is required as the piece of p' is specified by shift.
  • in other analytic specifications (i.e. equilibrium_option='eik'), an additional parameter(beta_prime) is required to specify the piece of p'
real, public :: shiftvert = 0.0

Minor radial derivative of the axial location of the flux surface centers (i.e. the vertical Shafranov shift). It is only used when equilibrium_option='eik' and geoType=0, 2, or 3 (which selects the Generalised Miller, Generalised Elongation, or Fourier analytic geometry specifications). See Sections 2.1.1, 2.1.3, and 2.1.4 of the Analytic Geometry Specification documentation for more details.

real, public :: theta2 = 0.0

The tilt angle of the elongation of the flux surface labeled by aSurf (only used when geoType=1, which selects the Global MHD analytic geometry specification). See Section 2.1.2 of the Analytic Geometry Specification documentation for more details.

real, public :: theta3 = 0.0

The tilt angle of the triangularity of the flux surface labeled by aSurf (only used when geoType=1, which selects the Global MHD analytic geometry specification). See Section 2.1.2 of the Analytic Geometry Specification documentation for more details.

real, public :: thetad = 0.0

The tilt angle of the triangularity (only used when geoType=0, which selects the Generalised Miller specification). See Section 2.1.1 of the Analytic Geometry Specification documentation for more details.

real, public :: thetak = 0.0

The tilt angle of the elongation (only used when geoType=0, which selects the Generalised Miller specification). See Section 2.1.1 of the Analytic Geometry Specification documentation for more details.

real, public :: thetam = 0.0

The tilt angle of the mMode shaping effect (only used when geoType=2 or 3, which selects the Generalised Elongation or Fourier analytic geometry specifications). See Sections 2.1.3 and 2.1.4 of the Analytic Geometry Specification documentation for more details.

real, public :: thetan = 0.0

The tilt angle of the nMode shaping effect (only used when geoType=2 or 3, which selects the Generalised Elongation or Fourier analytic geometry specifications). See Sections 2.1.3 and 2.1.4 of the Analytic Geometry Specification documentation for more details.

real, public :: tri = 0.0

The flux surface triangularity (only used when geoType=0, which selects the Generalised Miller analytic geometry specification). triangularity is tri = arcsin[(R(max(Z))-R_major)/r_mid]

real, public :: tripri = 0.0

The radial gradient of the flux surface triangularity (only used when geoType=0, which selects the Generalised Miller analytic geometry specification). tripri = dtri/drho

real, public :: zaxis = 0.0

Axial location of the magnetic axis (only used when geoType=1, which selects the Global MHD analytic geometry specification). See Section 2.1.2 of the Analytic Geometry Specification documentation for more details.


Type-Bound Procedures

procedure, public, :: is_initialised => is_initialised_generic

procedure, public, :: init => init_generic

  • private subroutine init_generic(self, name, requires_index, index)

    Fully initialise the config object

    Arguments

    Type IntentOptional Attributes Name
    class(abstract_config_type), intent(inout) :: self
    character(len=*), intent(in), optional :: name
    logical, intent(in), optional :: requires_index
    integer, intent(in), optional :: index

procedure, public, :: setup => setup_generic

  • private subroutine setup_generic(self, name, requires_index, index)

    Do some standard setup/checking

    Arguments

    Type IntentOptional Attributes Name
    class(abstract_config_type), intent(inout) :: self
    character(len=*), intent(in), optional :: name
    logical, intent(in), optional :: requires_index
    integer, intent(in), optional :: index

procedure, public, :: write_namelist_header

  • private subroutine write_namelist_header(self, unit)

    Write the namelist header for this instance

    Arguments

    Type IntentOptional Attributes Name
    class(abstract_config_type), intent(in) :: self
    integer, intent(in) :: unit

procedure, public, :: get_name => get_name_generic

  • private function get_name_generic(self)

    Returns the namelist name. Not very useful at the moment but may want to do more interesting things in the future

    Arguments

    Type IntentOptional Attributes Name
    class(abstract_config_type), intent(in) :: self

    Return Value character(len=CONFIG_MAX_NAME_LEN)

procedure, public, :: get_requires_index => get_requires_index_generic

  • private function get_requires_index_generic(self)

    Returns the requires_index value. Allows access whilst keeping the variable private

    Arguments

    Type IntentOptional Attributes Name
    class(abstract_config_type), intent(in) :: self

    Return Value logical

procedure, public, nopass :: write_namelist_footer

  • private subroutine write_namelist_footer(unit)

    Write the namelist footer

    Arguments

    Type IntentOptional Attributes Name
    integer, intent(in) :: unit
  • private subroutine write_key_val_string(key, val, unit)

    Writes a {key,val} pair where the value is of type character

    Arguments

    Type IntentOptional Attributes Name
    character(len=*), intent(in) :: key
    character(len=*), intent(in) :: val
    integer, intent(in) :: unit
  • private subroutine write_key_val_real(key, val, unit)

    Writes a {key,val} pair where the value is of type real

    Arguments

    Type IntentOptional Attributes Name
    character(len=*), intent(in) :: key
    real, intent(in) :: val
    integer, intent(in) :: unit
  • private subroutine write_key_val_complex(key, val, unit)

    Writes a {key,val} pair where the value is of type complex

    Arguments

    Type IntentOptional Attributes Name
    character(len=*), intent(in) :: key
    complex, intent(in) :: val
    integer, intent(in) :: unit
  • private subroutine write_key_val_integer(key, val, unit)

    Writes a {key,val} pair where the value is of type integer

    Arguments

    Type IntentOptional Attributes Name
    character(len=*), intent(in) :: key
    integer, intent(in) :: val
    integer, intent(in) :: unit
  • private subroutine write_key_val_logical(key, val, unit)

    Writes a {key,val} pair where the value is of type logical

    Arguments

    Type IntentOptional Attributes Name
    character(len=*), intent(in) :: key
    logical, intent(in) :: val
    integer, intent(in) :: unit
  • private subroutine write_key_val_real_array(self, key, val, unit)

    Writes a {key,val} pair where the value is of type real array

    Arguments

    Type IntentOptional Attributes Name
    class(abstract_config_type), intent(in) :: self
    character(len=*), intent(in) :: key
    real, intent(in), dimension(:) :: val
    integer, intent(in) :: unit
  • private subroutine write_key_val_complex_array(self, key, val, unit)

    Writes a {key,val} pair where the value is of type complex array

    Arguments

    Type IntentOptional Attributes Name
    class(abstract_config_type), intent(in) :: self
    character(len=*), intent(in) :: key
    complex, intent(in), dimension(:) :: val
    integer, intent(in) :: unit
  • private subroutine write_key_val_integer_array(self, key, val, unit)

    Writes a {key,val} pair where the value is of type integer array

    Arguments

    Type IntentOptional Attributes Name
    class(abstract_config_type), intent(in) :: self
    character(len=*), intent(in) :: key
    integer, intent(in), dimension(:) :: val
    integer, intent(in) :: unit

procedure, public :: read => read_theta_grid_parameters_config

procedure, public :: write => write_theta_grid_parameters_config

procedure, public :: reset => reset_theta_grid_parameters_config

procedure, public :: broadcast => broadcast_theta_grid_parameters_config

procedure, public, nopass :: get_default_name => get_default_name_theta_grid_parameters_config

procedure, public, nopass :: get_default_requires_index => get_default_requires_index_theta_grid_parameters_config

Source Code

  type, extends(abstract_config_type) :: theta_grid_parameters_config_type
     ! namelist : theta_grid_parameters
     ! indexed : false
     !> The flux surface elongation (only used when `geoType=0`, which
     !> selects the Generalised Miller analytic geometry
     !> specification).
     real :: akappa = 1.0
     !> The radial gradient flux surface elongation (only used when
     !> `geoType=0`, which selects the Generalised Miller analytic
     !> geometry specification).  `akappri` = \(d\kappa/d\rho\)
     real :: akappri = 0.0
     !> Used in conjunction with [[theta_grid_salpha_knobs:alpmhdfac]]
     !> to override `shift`, set as `shift=-alpmhd*alpmhdfac`. Do not
     !> use unless you know what you are doing.
     real :: alpmhd = 0.0
     !> Minor radius of the flux surface that receives the specified
     !> shaping (only used when `geoType=1`, which selects the Global
     !> MHD analytic geometry specification). See Section 2.1.2 of the
     !> [Analytic Geometry
     !> Specification](https://bitbucket.org/gyrokinetics/wikifiles/raw/master/JRB/GS2GeoDoc.pdf)
     !> documentation for more details.
     real :: asurf = 1.0
     !> In the slab limit, determines the angle between the field and
     !> the background flow (which flows in an imaginary toroidal
     !> direction). It is effectively equal to
     !> \(\frac{B_t}{B}=\frac{u_{\parallel}}{u}\).  `btor_slab =
     !> btor/bpol` defines direction of a flow relative to B in slab
     !> geometry, where flow is by definition in the toroidal
     !> direction.
     real :: btor_slab = 0.0
     !> Zeroth cosine moment for the MXH local equilibrum. See [[geoType]] and [[local_eq]]
     real :: c0_mxh = 0.0
     !> Cosine moments for the MXH local equilibrum. See [[geoType]] and [[local_eq]]
     real, dimension(mxh_max_moments) :: c_mxh = 0.0
     !> Radial derivatives of cosine moments for the MXH local equilibrum. See [[geoType]] and [[local_eq]]
     real, dimension(mxh_max_moments) :: dc_mxh_dr = 0.0
     !> The elongation of the flux surface labeled by aSurf (only used
     !> when `geoType`=1, which selects the Global MHD analytic
     !> geometry specifications). See Section 2.1.2 of the [Analytic
     !> Geometry
     !> Specification](https://bitbucket.org/gyrokinetics/wikifiles/raw/master/JRB/GS2GeoDoc.pdf)
     !> documentation for more details.
     real :: delta2 = 1.0
     !> The triangularity of the flux surface labeled by aSurf (only
     !> used when geoType=1, which selects the Global MHD analytic
     !> geometry specifications). See Section 2.1.2 of the [Analytic
     !> Geometry
     !> Specification](https://bitbucket.org/gyrokinetics/wikifiles/raw/master/JRB/GS2GeoDoc.pdf)
     !> documentation for more details.
     real :: delta3 = 1.0
     !> The magnitude of the mMode shaping effect (only used when
     !> `geoType`=2 or 3, which selects the Generalised Elongation or
     !> Fourier analytic geometry specifications). See Sections 2.1.3
     !> and 2.1.4 of the [Analytic Geometry
     !> Specification](https://bitbucket.org/gyrokinetics/wikifiles/raw/master/JRB/GS2GeoDoc.pdf)
     !> documentation for more details.
     real :: deltam = 1.0
     !> Radial derivative of the magnitude of the mMode shaping effect
     !> (only used when `geoType`=2 or 3, which selects the
     !> Generalised Elongation or Fourier analytic geometry
     !> specifications). See Sections 2.1.3 and 2.1.4 of the [Analytic
     !> Geometry
     !> Specification](https://bitbucket.org/gyrokinetics/wikifiles/raw/master/JRB/GS2GeoDoc.pdf)
     !> documentation for more details.
     real :: deltampri = 0.0
     !> The magnitude of the nMode shaping effect (only used when
     !> `geoType`=2 or 3, which selects the Generalised Elongation or
     !> Fourier analytic geometry specifications). See Sections 2.1.3
     !> and 2.1.4 of the [Analytic Geometry
     !> Specification](https://bitbucket.org/gyrokinetics/wikifiles/raw/master/JRB/GS2GeoDoc.pdf)
     !> documentation for more details.
     real :: deltan = 1.0
     !> Radial derivative of the magnitude of the nMode shaping effect
     !> (only used when `geoType`=2 or 3, which selects the
     !> Generalised Elongation or Fourier analytic geometry
     !> specifications). See Sections 2.1.3 and 2.1.4 of the [Analytic
     !> Geometry
     !> Specification](https://bitbucket.org/gyrokinetics/wikifiles/raw/master/JRB/GS2GeoDoc.pdf)
     !> documentation for more details.
     real :: deltanpri = 0.0
     !> Controls particle trapping (among other things) in simple
     !> geometric models. \(\epsilon = r/R\)
     real :: eps = 0.3
     !>  \(\epsilon_\ell = \frac{2 L_\textrm{ref}}{ R}\) Sets
     !>  curvature drift in s-alpha model, where \(L_\textrm{ref}\) is
     !>  the GS2 equilibrium reference normalisation length and \(R\)
     !>  is the major radius at the centre of the flux surface.
     real :: epsl = 0.3
     !> Selects between different analytic geometry specifications
     !> (only used when `local_eq = T`):
     !>
     !> - `geoType = 0`: Generalised Miller
     !> - `geoType = 1`: Global MHD
     !> - `geoType = 2`: Generalised Elongation
     !> - `geoType = 3`: Fourier specification.
     !> - `geoType = 4`: Miller Extended Harmonic (MXH)
     !>
     !> See Section 2.1 of the [Analytic Geometry
     !> Specification](https://bitbucket.org/gyrokinetics/wikifiles/raw/master/JRB/GS2GeoDoc.pdf)
     !> documentation for more details on options 0-3, and [PPCF 63
     !> (2021) 012001 (5pp)](https://doi.org/10.1088/1361-6587/abc63b)
     !> for details of 4 (MXH).
     !>
     !> @note The default for this *MUST* be zero otherwise the
     !> Trinity interface will break.
     integer :: geotype = 0
     !> `kp` sets parallel wavenumber and box length in slab
     !> geometry. \(k_p = \frac{2 \pi L_\textrm{ref}}{L_z}\).
     !>
     !> - always use `kp` instead of `pk` in slab geometry (if `kp > 0`
     !> then gs2 sets `pk = 2*kp`)
     !> - in slab limit \(\textrm{shat} = \frac{L_z}{2 \pi L_s} =
     !> \frac{L_\textrm{ref}}{k_p L_s}\) : nb if `kp = 1`, \(\textrm{shat} =
     !> \frac{L_\textrm{ref}}{L_s}\), where \(L_s\) is the magnetic shear
     !> scale length.
     !>
     real :: kp = -1.0
     !> First flux surface shaping mode number (only used when
     !> `geoType`=2 or 3, which selects the Generalised Elongation or
     !> Fourier analytic geometry specifications). See Sections 2.1.3
     !> and 2.1.4 of the [Analytic Geometry
     !> Specification](https://bitbucket.org/gyrokinetics/wikifiles/raw/master/JRB/GS2GeoDoc.pdf)
     !> documentation for more details.
     integer :: mmode = 2
     !> Second flux surface shaping mode number (only used when
     !> `geoType`=2 or 3, which selects the Generalised Elongation or
     !> Fourier analytic geometry specifications). See Sections 2.1.3
     !> and 2.1.4 of the [Analytic Geometry
     !> Specification](https://bitbucket.org/gyrokinetics/wikifiles/raw/master/JRB/GS2GeoDoc.pdf)
     !> documentation for more details.
     integer :: nmode = 3
     !> Number of moments for the MXH local equilibrum. Maximum value
     !> is [[mxh_max_moments]]. See [[geoType]] and [[local_eq]] for
     !> more details.
     integer :: n_mxh = 0
     !> Sets the number of \(2\pi\) segments along equilibrium
     !> magnetic field to include in simulation
     !> domain. \(N_\textrm{segments} = (2n_\textrm{period} - 1)\).
     !> Ignored in some cases
     !>
     !> @todo Document when this is ignored
     integer :: nperiod = 2
     !> Rough number of grid points along equilibrium magnetic field between \(\theta=[-\pi,\pi]\).
     !> Actual number of grid points determined as follows:
     !>
     !> - number of points in GS2 theta grid always odd because grid
     !>   must contain both bounce points of trapped particles and one
     !>   grid point at \(\theta=0\). For even values, an extra point
     !>   is added
     !> - theta grid in code runs from `-ntgrid:ntgrid`, with
     !>   `ntgrid=int(ntheta/2)` for `nperiod=1`.
     !> - `ntheta` is used for local equilibria, s-alpha, and EFIT,
     !>   and ignored for all other numerical equilibria
     integer :: ntheta = 24
     !> \(p_k = \frac{\textrm{epsl}}{q} = \frac{2 L_\textrm{ref}}{ q R}\)
     !> Sets \(q\), the magnetic safety factor, and therefore also
     !> sets the connection length, i.e. the length of the box in the
     !> parallel direction, in terms of \(L_\textrm{ref}\). Used only in high
     !> aspect ratio \(\hat{s}-\alpha\) equilibrium model.
     real :: pk = 0.3
     !> Sets value of the safety factor when using local toroidal
     !> equilibrium model.
     real :: qinp = 1.5
     !> When not local_eq: Centerpoint of LCFS (normalized to
     !> \(L_\textrm{ref}\)) - When local_eq: Major radius of
     !> magnetic field reference point (normalized to
     !> \(L_\textrm{ref}\)). Specifically, the reference magnetic
     !> field is defined to be the value of the toroidal magnetic
     !> field at `R=r_geo` on the flux surface labeled by `rhoc`.
     real :: r_geo = 3.0
     !> Major radial location of the magnetic axis (only used when
     !> `geoType`=1, which selects the Global MHD analytic geometry
     !> specification). See Section 2.1.2 of the [Analytic Geometry
     !> Specification](https://bitbucket.org/gyrokinetics/wikifiles/raw/master/JRB/GS2GeoDoc.pdf)
     !> documentation for more details.
     real :: raxis = 3.0
     !> `rhoc` is the flux surface label (0< `rhoc`< 1). Its exact
     !> meaning depends on `irho`. Usually rho = midplane
     !> diameter/midplane diameter of LCFS (here, "LCFS" refers to the
     !> flux surface at a radius of \(L_\textrm{ref}\). If using
     !> Miller geometry with \(L_\textrm{ref} \neq a\), this is
     !> **not** the physical last closed flux surface.
     !>
     !> - When `irho` = 1, `rhoc` = sqrt(toroidal flux)/sqrt(toroidal flux of LCFS)
     !> - When `irho` = 2, `rhoc` = midplane diameter/(midplane diameter of LCFS). recommended
     !> - When `irho` = 3, `rhoc` = poloidal flux/(poloidal flux of LCFS)
     !>
     real :: rhoc = 0.5
     !> When not local_eq: Position of magnetic axis (normalized to \(L_\textrm{ref}\)).
     !> When local_eq: Major radius of the centre of the
     !> flux surface of interest (normalized to \(L_\textrm{ref}\))
     real :: rmaj = 3.0
     !> Sine moments for the MXH local equilibrum. See [[geoType]] and [[local_eq]]
     real, dimension(mxh_max_moments) :: s_mxh = 0.0
     !> Radial derivatives of sine moments for the MXH local equilibrum. See [[geoType]] and [[local_eq]]
     real, dimension(mxh_max_moments) :: ds_mxh_dr = 0.0
     !> Sets value of magnetic shear in simple geometric models.
     !> Over-ridden by `s_hat_input` in [[theta_grid_eik_knobs]] for most values of `bishop`.
     real :: shat = 0.75
     !> shift is related to minor radial derivatives of the major
     !>radial location of the flux surface centers (i.e. the Shafranov
     !>shift), but this input variable has **different physical
     !>definitions** in s-alpha and other analytic equilbrium models:
     !>
     !> - In s-alpha (i.e. equilibrium_option='s-alpha'), shift
     !> \(\propto p^\prime\) is a parameter for local \(J_{\phi}\)
     !> (and not \(B_{\theta}\) which is constant): \(\textrm{shift} =
     !> \frac{2\textrm{epsl}}{\textrm{pk}^2}\frac{d\beta}{d\rho} =
     !> -\frac{q^2R}{L_\textrm{ref}}\frac{d\beta}{d\rho} > 0\)
     !>- In other analytic specifications
     !> (i.e. equilibrium_option='eik' and `geoType`=0, 2, or 3),
     !> shift is a parameter for local \(B_{\theta}\) (and NOT for
     !> \(J_{\phi}\)): \(\textrm{shift} = \frac{1}{L_\textrm{ref}} \frac{dR}{d\rho} <
     !> 0\)
     !>
     !> NB in Miller shift contains the *1st* radial derivative of the
     !> Shafranov shift, BUT in s-alpha shift is related to a *2nd*
     !> radial derivative of the Shafranov shift.
     !>
     !> - in s-alpha(i.e. equilibrium_option='s-alpha'), no additional parameter
     !> is required as the piece of \(J_{\phi} \propto\) p' is
     !> specified by shift.
     !> - in other analytic specifications (i.e. equilibrium_option='eik'),
     !> an additional parameter(beta_prime) is required to specify the piece of
     !> \(J_{\phi} \propto\) p'
     !>
     real :: shift = 0.0
     !> Minor radial derivative of the axial location of the flux
     !> surface centers (i.e. the vertical Shafranov shift). It is
     !> only used when equilibrium_option='eik' and `geoType`=0, 2, or
     !> 3 (which selects the Generalised Miller, Generalised
     !> Elongation, or Fourier analytic geometry specifications). See
     !> Sections 2.1.1, 2.1.3, and 2.1.4 of the [Analytic Geometry
     !> Specification](https://bitbucket.org/gyrokinetics/wikifiles/raw/master/JRB/GS2GeoDoc.pdf)
     !> documentation for more details.
     real :: shiftvert = 0.0
     !> The tilt angle of the elongation of the flux surface labeled
     !> by `aSurf` (only used when `geoType`=1, which selects the
     !> Global MHD analytic geometry specification). See Section 2.1.2
     !> of the [Analytic Geometry
     !> Specification](https://bitbucket.org/gyrokinetics/wikifiles/raw/master/JRB/GS2GeoDoc.pdf)
     !> documentation for more details.
     real :: theta2 = 0.0
     !> The tilt angle of the triangularity of the flux surface
     !> labeled by `aSurf` (only used when `geoType`=1, which selects
     !> the Global MHD analytic geometry specification). See Section
     !> 2.1.2 of the [Analytic Geometry
     !> Specification](https://bitbucket.org/gyrokinetics/wikifiles/raw/master/JRB/GS2GeoDoc.pdf)
     !> documentation for more details.
     real :: theta3 = 0.0
     !> The tilt angle of the triangularity (only used when
     !> `geoType`=0, which selects the Generalised Miller
     !> specification). See Section 2.1.1 of the [Analytic Geometry
     !> Specification](https://bitbucket.org/gyrokinetics/wikifiles/raw/master/JRB/GS2GeoDoc.pdf)
     !> documentation for more details.
     real :: thetad = 0.0
     !> The tilt angle of the elongation (only used when `geoType`=0,
     !> which selects the Generalised Miller specification). See
     !> Section 2.1.1 of the [Analytic Geometry
     !> Specification](https://bitbucket.org/gyrokinetics/wikifiles/raw/master/JRB/GS2GeoDoc.pdf)
     !> documentation for more details.
     real :: thetak = 0.0
     !> The tilt angle of the mMode shaping effect (only used when
     !> `geoType`=2 or 3, which selects the Generalised Elongation or
     !> Fourier analytic geometry specifications). See Sections 2.1.3
     !> and 2.1.4 of the [Analytic Geometry
     !> Specification](https://bitbucket.org/gyrokinetics/wikifiles/raw/master/JRB/GS2GeoDoc.pdf)
     !> documentation for more details.
     real :: thetam = 0.0
     !> The tilt angle of the nMode shaping effect (only used when
     !> `geoType`=2 or 3, which selects the Generalised Elongation or
     !> Fourier analytic geometry specifications). See Sections 2.1.3
     !> and 2.1.4 of the [Analytic Geometry
     !> Specification](https://bitbucket.org/gyrokinetics/wikifiles/raw/master/JRB/GS2GeoDoc.pdf)
     !> documentation for more details.
     real :: thetan = 0.0
     !>The flux surface triangularity (only used when `geoType`=0,
     !>which selects the Generalised Miller analytic geometry
     !>specification).  triangularity is `tri =
     !>arcsin[(R(max(Z))-R_major)/r_mid]`
     real :: tri = 0.0
     !> The radial gradient of the flux surface triangularity (only
     !> used when `geoType`=0, which selects the Generalised Miller
     !> analytic geometry specification). `tripri = dtri/drho`
     real :: tripri = 0.0
     !> Axial location of the magnetic axis (only used when geoType=1,
     !> which selects the Global MHD analytic geometry
     !> specification). See Section 2.1.2 of the [Analytic Geometry
     !> Specification](https://bitbucket.org/gyrokinetics/wikifiles/raw/master/JRB/GS2GeoDoc.pdf)
     !> documentation for more details.
     real :: zaxis = 0.0
   contains
     procedure, public :: read => read_theta_grid_parameters_config
     procedure, public :: write => write_theta_grid_parameters_config
     procedure, public :: reset => reset_theta_grid_parameters_config
     procedure, public :: broadcast => broadcast_theta_grid_parameters_config
     procedure, public, nopass :: get_default_name => get_default_name_theta_grid_parameters_config
     procedure, public, nopass :: get_default_requires_index => get_default_requires_index_theta_grid_parameters_config
  end type theta_grid_parameters_config_type