reinit_config_type Derived Type

type, public, extends(abstract_config_type) :: reinit_config_type

Used to represent the input configuration of reinit


Contents

Source Code


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?

logical, public :: abort_rapid_time_step_change = .true.

If true (default), exit if time step changes rapidly, that is, if the time step changes at four consecutive time steps.

real, public :: delt_adj = 2.0

When the time step needs to be changed it is adjusted by this factor, i.e dt --> dt/delt_adj or dt --> dt*delt_adj when reducing/increasing the timestep. For non-linear runs good choice of delt_adj can make a moderate difference to efficiency. Need to balance time taken to reinitialise against frequency of time step adjustments (i.e. if your run takes a long time to initialise you probably want to set delt_adj to be reasonably large).

real, public :: delt_cushion = 1.5

Used in deciding when to increase the time step to help prevent oscillations in time step around some value. We only increase the time step when it is less than the scaled cfl estimate divided by delt_adj*delt_cushion whilst we decrease it as soon as the time step is larger than the scaled cfl estimate.

real, public :: delt_minimum = 1.e-5

The minimum time step allowed is delt_minimum. If the code wants to drop below this value then the run will end.

real, public :: dt0 = 0.0

Sets the maximum value the time step can take.

logical, public :: in_memory = .false.

If true then attempts to create temporary copies of the distribution fn and fields in memory to be restored after the time step reset rather than dumping to fields. This could be faster on machines with slow file systems. If the required memory allocation fails then we set in_memory=.false. and fall back to the traditional file based approach.


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_reinit_config

  • private subroutine read_reinit_config(self)

    Reads in the reinit_knobs namelist and populates the member variables

    Arguments

    Type IntentOptional Attributes Name
    class(reinit_config_type), intent(inout) :: self

procedure, public :: write => write_reinit_config

  • private subroutine write_reinit_config(self, unit)

    Writes out a namelist representing the current state of the config object

    Arguments

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

procedure, public :: reset => reset_reinit_config

  • private subroutine reset_reinit_config(self)

    Resets the config object to the initial empty state

    Arguments

    Type IntentOptional Attributes Name
    class(reinit_config_type), intent(inout) :: self

procedure, public :: broadcast => broadcast_reinit_config

  • private subroutine broadcast_reinit_config(self)

    Broadcasts all config parameters so object is populated identically on all processors

    Arguments

    Type IntentOptional Attributes Name
    class(reinit_config_type), intent(inout) :: self

procedure, public, nopass :: get_default_name => get_default_name_reinit_config

  • private function get_default_name_reinit_config()

    Gets the default name for this namelist

    Arguments

    None

    Return Value character(len=CONFIG_MAX_NAME_LEN)

procedure, public, nopass :: get_default_requires_index => get_default_requires_index_reinit_config

Source Code

  type, extends(abstract_config_type) :: reinit_config_type
     ! namelist : reinit_knobs
     ! indexed : false
     !> If `true` (default), exit if time step changes rapidly, that
     !> is, if the time step changes at four consecutive time steps.
     logical :: abort_rapid_time_step_change = .true.
     !> When the time step needs to be changed it is adjusted by this
     !> factor, i.e `dt --> dt/delt_adj` or `dt --> dt*delt_adj` when
     !> reducing/increasing the timestep. For non-linear runs
     !> good choice of `delt_adj` can make a moderate difference to
     !> efficiency. Need to balance time taken to reinitialise against
     !> frequency of time step adjustments (i.e. if your run takes a long
     !> time to initialise you probably want to set `delt_adj` to be
     !> reasonably large).
     real :: delt_adj = 2.0
     !> Used in deciding when to increase the time step to help
     !> prevent oscillations in time step around some value. We only
     !> increase the time step when it is less than the scaled cfl
     !> estimate divided by `delt_adj*delt_cushion` whilst we decrease
     !> it as soon as the time step is larger than the scaled cfl
     !> estimate.
     real :: delt_cushion = 1.5
     !> The minimum time step allowed is delt_minimum. If the code
     !> wants to drop below this value then the run will end.
     real :: delt_minimum = 1.e-5
     !> Sets the maximum value the time step can take.
     !>
     !> @note This gets a smart default of [[knobs:delt]].
     real :: dt0 = 0.0
     !> If `true` then attempts to create temporary copies of the
     !> distribution fn and fields in memory to be restored after the
     !> time step reset rather than dumping to fields.  This could be
     !> faster on machines with slow file systems. If the required
     !> memory allocation fails then we set `in_memory=.false.` and
     !> fall back to the traditional file based approach.
     logical :: in_memory = .false.
   contains
     procedure, public :: read => read_reinit_config
     procedure, public :: write => write_reinit_config
     procedure, public :: reset => reset_reinit_config
     procedure, public :: broadcast => broadcast_reinit_config
     procedure, public, nopass :: get_default_name => get_default_name_reinit_config
     procedure, public, nopass :: get_default_requires_index => get_default_requires_index_reinit_config
  end type reinit_config_type