driver_config_type Derived Type

type, public, extends(abstract_config_type) :: driver_config_type

Used to represent the input configuration of driver. See the documentation of the antenna module for more details.


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?

real, public :: amplitude = 0.0

Amplitude of Langevin antenna.

logical, public :: ant_off = .false.

Overrides all other options and turns off antenna if true.

integer, public :: nk_stir = 1

Number of independent Fourier modes driven by antenna.

logical, public :: restarting = .false.

If true then try to get initial antenna amplitudes from the restart file. If not found in restart file then will be set to 0.

real, public :: t0 = -1.0

Sets the time at which the antenna frequency changes from constant w_antenna to linearly varying, with linear piece proprtional to w_dot multiplied by time - t0.

complex, public :: w_antenna = (1.0, 0.0)

Frequency of Langevin antenna. Sets the constant part of the complex antenna frequency.

real, public :: w_dot = 0.0

Sets the coefficient in front of the time varying antenna frequency (real) component activated when time > t0.

logical, public :: write_antenna = .false.

Write antenna amplitudes to ASCII file for debugging.


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_driver_config

  • private subroutine read_driver_config(self)

    Reads in the driver namelist and populates the member variables

    Arguments

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

procedure, public :: write => write_driver_config

  • private subroutine write_driver_config(self, unit)

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

    Arguments

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

procedure, public :: reset => reset_driver_config

  • private subroutine reset_driver_config(self)

    Resets the config object to the initial empty state

    Arguments

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

procedure, public :: broadcast => broadcast_driver_config

  • private subroutine broadcast_driver_config(self)

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

    Arguments

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

procedure, public, nopass :: get_default_name => get_default_name_driver_config

  • private function get_default_name_driver_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_driver_config

Source Code

  type, extends(abstract_config_type) :: driver_config_type
     ! namelist : driver
     ! indexed : false
     !> Amplitude of Langevin antenna.
     real :: amplitude = 0.0
     !> Overrides all other options and turns off antenna if `true`.
     logical :: ant_off = .false.
     !> Number of independent Fourier modes driven by antenna.
     integer :: nk_stir = 1
     !> If `true` then try to get initial antenna amplitudes from the
     !> restart file. If not found in restart file then will be set to
     !> 0.
     logical :: restarting = .false.
     !> Sets the time at which the antenna frequency changes from
     !> constant [[driver:w_antenna]] to linearly varying, with linear piece
     !> proprtional to [[driver:w_dot]] multiplied by `time - t0`.
     real :: t0 = -1.0
     !> Frequency of Langevin antenna. Sets the constant part of the
     !> complex antenna frequency.
     complex :: w_antenna = (1.0, 0.0)
     !> Sets the coefficient in front of the time varying antenna
     !> frequency (real) component activated when `time > t0`.
     real :: w_dot = 0.0
     !> Write antenna amplitudes to ASCII file for debugging.
     logical :: write_antenna = .false.
   contains
     procedure, public :: read => read_driver_config
     procedure, public :: write => write_driver_config
     procedure, public :: reset => reset_driver_config
     procedure, public :: broadcast => broadcast_driver_config
     procedure, public, nopass :: get_default_name => get_default_name_driver_config
     procedure, public, nopass :: get_default_requires_index => get_default_requires_index_driver_config
  end type driver_config_type