eigval Module

A module for finding eigenvalues and eigenmodes Requires SLEPC and PETSC



Contents


Variables

Type Visibility Attributes Name Initial
integer, private, parameter :: SolverTypePower = 1
integer, private, parameter :: SolverTypeSubspace = 2
integer, private, parameter :: SolverTypeArnoldi = 3
integer, private, parameter :: SolverTypeLanczos = 4
integer, private, parameter :: SolverTypeKrylovSchur = 5
integer, private, parameter :: SolverTypeGD = 6
integer, private, parameter :: SolverTypeJD = 7
integer, private, parameter :: SolverTypeRQCG = 8
integer, private, parameter :: SolverTypeCISS = 9
integer, private, parameter :: SolverTypeLapack = 10
integer, private, parameter :: SolverTypeArpack = 11
integer, private, parameter :: SolverTypeBlzpack = 12
integer, private, parameter :: SolverTypeTrlan = 13
integer, private, parameter :: SolverTypeBlopex = 14
integer, private, parameter :: SolverTypePrimme = 15
integer, private, parameter :: SolverTypeFeast = 16
integer, private, parameter :: SolverTypeNotSpecified = 17
integer, private :: solver_option_switch
integer, private, parameter :: ExtractionRitz = 1
integer, private, parameter :: ExtractionHarmonic = 2
integer, private, parameter :: ExtractionHarmonicRelative = 3
integer, private, parameter :: ExtractionHarmonicRight = 4
integer, private, parameter :: ExtractionHarmonicLargest = 5
integer, private, parameter :: ExtractionRefined = 6
integer, private, parameter :: ExtractionRefinedHarmonic = 7
integer, private, parameter :: ExtractionNotSpecified = 8
integer, private :: extraction_option_switch
integer, private, parameter :: WhichLargestMagnitude = 1
integer, private, parameter :: WhichSmallestMagnitude = 2
integer, private, parameter :: WhichLargestReal = 3
integer, private, parameter :: WhichSmallestReal = 4
integer, private, parameter :: WhichLargestImaginary = 5
integer, private, parameter :: WhichSmallestImaginary = 6
integer, private, parameter :: WhichTargetMagnitude = 7
integer, private, parameter :: WhichTargetReal = 8
integer, private, parameter :: WhichTargetImaginary = 9
integer, private, parameter :: WhichAll = 10
integer, private, parameter :: WhichUser = 11
integer, private, parameter :: WhichNotSpecified = 12
integer, private :: which_option_switch
integer, private, parameter :: TransformShell = 1
integer, private, parameter :: TransformShift = 2
integer, private, parameter :: TransformInvert = 3
integer, private, parameter :: TransformCayley = 4
integer, private, parameter :: TransformFold = 5
integer, private, parameter :: TransformPrecond = 6
integer, private, parameter :: TransformNotSpecified = 7
integer, private :: transform_option_switch
integer, private :: n_eig
integer, private :: max_iter
real, private :: tolerance
real, private :: targ_re
real, private :: targ_im
logical, private :: use_ginit
logical, private :: analyse_ddt_operator
integer, private :: nadv
logical, private :: save_restarts
logical, private, parameter :: allow_command_line_settings = .true.
character(len=12), private, parameter :: nml_name = "eigval_knobs"
type(eigval_config_type), private :: eigval_config

Derived Types

type, private ::  EpsSettings

A custom type to make it easy to encapsulate specific settings

Components

Type Visibility Attributes Name Initial
logical, public :: use_ginit
logical, public :: analyse_ddt_operator
integer, public :: n_eig
integer, public :: max_iter
integer, public :: solver_option_switch
integer, public :: extraction_option_switch
integer, public :: which_option_switch
integer, public :: transform_option_switch
integer, public :: local_size
integer, public :: global_size
real, public :: tolerance
real, public :: targ_re
real, public :: targ_im
complex, public :: target
complex, public :: target_slepc

type, public, extends(abstract_config_type) ::  eigval_config_type

Used to represent the input configuration of eigval. Several of these options are controlling SLEPc settings, which can also be set using the SLEPc command line flags.

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 :: skip_smart_defaults = .false.

Do we want to skip the smaart defaults in init?

logical, public :: analyse_ddt_operator = .false.

Determines which operator SLEPc is finding eigenvalues of. If .false. then SLEPc analyses the time advance operator, so internally works with the eigenvalue exp(-i*omega*nadv*dt). If .true. then SLEPc analyses a time derivative operator, so internally works with the eigenvalue -i*omega. Note we form a first order one sided approximation of the time derivative (e.g. (g_{n+nadv}-g_{n})/(nadv*code_dt)) to be analysed.

character(len=20), public :: extraction_option = 'default'

Sets the extraction technique, must be one of:

Read more…
integer, public :: max_iter = 0

Sets the maximum number of SLEPC iterations used. If not set (recommended) then let SLEPC decide what to use (varies with different options).

integer, public :: n_eig = 1

The number of eigenmodes to search for. The actual number of modes found may be larger than this.

integer, public :: nadv = 1

How many GS2 timesteps to take each time SLEPc wants to advance the distribution function. Useful to separate closely spaced eigenvalues without changing delt.

logical, public :: save_restarts = .false.

If true then we save a set of restart files for each eigenmode found. These are named as the standard restart file (i.e. influenced by the restart_file input), but have eig_<id> appended near the end, where <id> is an integer representing the eigenmode id. If save_distfn of gs2_diagnostics_knobs is true then will also save the distribution function files.

character(len=20), public :: solver_option = 'default'

Sets the type of solver to use, must be one of:

Read more…
real, public :: targ_im = 0.5

Imaginary part of the eigenvalue target. Often beneficial to set this fairly large (e.g. 10) when looking for unstable modes. Used with the target_* which_option mode.

real, public :: targ_re = 0.5

Real part of the eigenvalue target. Often beneficial to set this fairly small (e.g. ~0). Used with the target_* which_option mode.

real, public :: tolerance = 1.0d-6

Sets tolerance on SLEPC eigenmode search. Used to determine when an eigenmode has been found. Note this is the tolerance based on the SLEPc eigenvalue, which is the time advance eigenvalue rather than the GS2 eigenvalue, .

character(len=20), public :: transform_option = 'default'

Sets the type of spectral transform to be used. This can help extract interior eigenvalues. Must be one of

Read more…
logical, public :: use_ginit = .false.

If true then provide an initial guess for the eigenmode based on using init_g routines to initialise g. Can be helpful in accelerating initial phase of eigensolver. Can also be quite useful with ginit_option='many' (etc.) to start an eigenvalue search from a previously obtained solution, allowing both eigenmode refinement and sub-dominant mode detection.

character(len=20), public :: which_option = 'default'

Sets SLEPC mode of operation (i.e. what sort of eigenvalues it looks for). Note that this refers to the SLEPc eigenvalue, i.e. the time advance eigenvalue . In other words one should select 'largest_real' to search for modes with the largest growth rate. Must be one of

Read more…

Type-Bound Procedures

procedure , public , :: is_initialised => is_initialised_generic Function
procedure , public , :: init => init_generic Subroutine
procedure , public , :: setup => setup_generic Subroutine
procedure , public , :: write_namelist_header Subroutine
procedure , public , :: get_name => get_name_generic Function
procedure , public , :: get_requires_index => get_requires_index_generic Function
procedure , public , :: set_smart_defaults => set_smart_defaults_null Subroutine
procedure , public , nopass :: write_namelist_footer Subroutine
generic, public , :: write_key_val => write_key_val_string, write_key_val_real, write_key_val_complex, write_key_val_integer, write_key_val_logical, write_key_val_real_array, write_key_val_complex_array, write_key_val_integer_array
procedure , public :: read => read_eigval_config Subroutine
procedure , public :: write => write_eigval_config Subroutine
procedure , public :: reset => reset_eigval_config Subroutine
procedure , public :: broadcast => broadcast_eigval_config Subroutine
procedure , public , nopass :: get_default_name => get_default_name_eigval_config Function
procedure , public , nopass :: get_default_requires_index => get_default_requires_index_eigval_config Function

Functions

public pure function eigval_functional()

Returns true if GS2 was compiled with WITH_EIG defined

Arguments

None

Return Value logical

private function get_default_name_eigval_config()

Gets the default name for this namelist

Arguments

None

Return Value character(len=CONFIG_MAX_NAME_LEN)

Gets the default requires index for this namelist

Arguments

None

Return Value logical

public pure function get_eigval_config()

Get the module level config instance

Arguments

None

Return Value type(eigval_config_type)


Subroutines

public subroutine read_parameters(eigval_config_in)

Read the eigval_knobs namelist

Arguments

Type IntentOptional Attributes Name
type(eigval_config_type), intent(in), optional :: eigval_config_in

private subroutine read_eigval_config(self)

Reads in the eigval_knobs namelist and populates the member variables

Arguments

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

private subroutine write_eigval_config(self, unit)

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

Arguments

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

private subroutine reset_eigval_config(self)

Resets the config object to the initial empty state

Arguments

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

private subroutine broadcast_eigval_config(self)

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

Arguments

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

public subroutine set_eigval_config(eigval_config_in)

Set the module level config instance

Arguments

Type IntentOptional Attributes Name
type(eigval_config_type), intent(in), optional :: eigval_config_in