integrator_abstract_class Module

ouses abstract Integrator object, a ,anipulator with a timestep size and term group component and corresponding getters/setters


Used by


Interfaces

interface

  • private pure module function getTimestep(this) result(timestep)

    Getter for dt

    Arguments

    Type IntentOptional Attributes Name
    class(Integrator), intent(in) :: this

    Return Value real(kind=rk)

interface

  • private pure module function getTermGroups(this) result(groups)

    Getter for termGroups

    Arguments

    Type IntentOptional Attributes Name
    class(Integrator), intent(in) :: this

    Return Value type(IntArray), allocatable, dimension(:)

interface

  • private pure module function getModelIndices(this) result(indices)

    Getter for modelIndices

    Arguments

    Type IntentOptional Attributes Name
    class(Integrator), intent(in) :: this

    Return Value integer(kind=ik), allocatable, dimension(:)

interface

  • private pure module function isTimeEvolving(this) result(evo)

    Check if this Integrator is allowed to evolve a time variable if present

    Arguments

    Type IntentOptional Attributes Name
    class(Integrator), intent(in) :: this

    Return Value logical

interface

  • private pure module function hasTimestepController(this) result(hasController)

    Check if this Integrator has an allocated timestep controller

    Arguments

    Type IntentOptional Attributes Name
    class(Integrator), intent(in) :: this

    Return Value logical

interface

  • private module function getTimestepFromController(this, inputVars) result(timestep)

    Get the individual timestep size if Integrator has a timestep controller

    Arguments

    Type IntentOptional Attributes Name
    class(Integrator), intent(inout) :: this
    class(VariableContainer), intent(in) :: inputVars

    Return Value real(kind=rk)

interface

  • private pure module function isCommunicationNeeded(this) result(commNeeded)

    Check whether this Integrator requires MPI communication

    Arguments

    Type IntentOptional Attributes Name
    class(Integrator), intent(in) :: this

    Return Value logical

interface

  • private pure module function getCommunicationData(this) result(commData)

    Getter for commData

    Arguments

    Type IntentOptional Attributes Name
    class(Integrator), intent(in) :: this

    Return Value type(CommunicationData), allocatable

interface

  • private pure module function getUpdateRules(this) result(updateRules)

    Getter for updateOnInternalIteration

    Arguments

    Type IntentOptional Attributes Name
    class(Integrator), intent(in) :: this

    Return Value type(LogicalArray), dimension(:), allocatable

interface

  • private pure module function hasNonTrivialUpdate(this) result(nonTrivialUpdate)

    Getter for nonTrivialUpdate

    Arguments

    Type IntentOptional Attributes Name
    class(Integrator), intent(in) :: this

    Return Value logical

interface

  • private pure module function getModelDataUpdateRules(this) result(updateRules)

    Getter for updateModelDataOnInternalIteration

    Arguments

    Type IntentOptional Attributes Name
    class(Integrator), intent(in) :: this

    Return Value logical, dimension(:), allocatable

interface

  • private pure module function hasNonTrivialModelDataUpdate(this) result(nonTrivialUpdate)

    Getter for nonTrivialModelDataUpdate

    Arguments

    Type IntentOptional Attributes Name
    class(Integrator), intent(in) :: this

    Return Value logical

interface

  • private pure module subroutine setTimestep(this, timestep)

    Setter for dt

    Arguments

    Type IntentOptional Attributes Name
    class(Integrator), intent(inout) :: this
    real(kind=rk), intent(in) :: timestep

interface

  • private pure module subroutine setTermGroups(this, groups)

    Setter for termGroups

    Arguments

    Type IntentOptional Attributes Name
    class(Integrator), intent(inout) :: this
    type(IntArray), intent(in), dimension(:) :: groups

interface

  • private pure module subroutine setModelIndices(this, indices)

    Setter for modelIndices

    Arguments

    Type IntentOptional Attributes Name
    class(Integrator), intent(inout) :: this
    integer(kind=ik), intent(in), dimension(:) :: indices

interface

  • private pure module subroutine setTimeEvolving(this, evo)

    Setter for evolvesTimeVar

    Arguments

    Type IntentOptional Attributes Name
    class(Integrator), intent(inout) :: this
    logical, intent(in) :: evo

interface

  • private pure module subroutine setTimestepController(this, controller)

    Setter for dtController

    Arguments

    Type IntentOptional Attributes Name
    class(Integrator), intent(inout) :: this
    class(TimestepController), intent(in) :: controller

interface

  • private pure module subroutine setCommunicationNeeded(this, commNeeded)

    Setter for communicationNeeded

    Arguments

    Type IntentOptional Attributes Name
    class(Integrator), intent(inout) :: this
    logical, intent(in) :: commNeeded

interface

  • private pure module subroutine setCommunicationData(this, commData)

    Setter for commData

    Arguments

    Type IntentOptional Attributes Name
    class(Integrator), intent(inout) :: this
    type(CommunicationData), intent(in) :: commData

interface

  • private pure module subroutine setUpdateRules(this, updateRules)

    Setter for updateOnInternalIteration

    Arguments

    Type IntentOptional Attributes Name
    class(Integrator), intent(inout) :: this
    type(LogicalArray), intent(in), dimension(:) :: updateRules

interface

  • private pure module subroutine setNonTrivialUpdate(this, nonTrivialUpdate)

    Setter for nonTrivialUpdate

    Arguments

    Type IntentOptional Attributes Name
    class(Integrator), intent(inout) :: this
    logical, intent(in) :: nonTrivialUpdate

interface

  • private pure module subroutine setModelDataUpdateRules(this, updateRules)

    Setter for updateModelDataOnInternalIteration

    Arguments

    Type IntentOptional Attributes Name
    class(Integrator), intent(inout) :: this
    logical, intent(in), dimension(:) :: updateRules

interface

  • private pure module subroutine setNonTrivialModelDataUpdate(this, nonTrivialUpdate)

    Setter for nonTrivialModelDataUpdate

    Arguments

    Type IntentOptional Attributes Name
    class(Integrator), intent(inout) :: this
    logical, intent(in) :: nonTrivialUpdate

Derived Types

type, public, abstract, extends(Manipulator) ::  Integrator

Abstract Integrator object

Components

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

True only if user explicitly sets it to true

real(kind=rk), private :: dt

The timestep this Integrator needs to take

type(IntArray), private, allocatable, dimension(:) :: termGroups

Term groups for each model this Integrator is responsible for

integer(kind=ik), private, allocatable, dimension(:) :: modelIndices

Model indices this Integrator is responsible for

logical, private :: evolvesTimeVar

If true and a variable named "time" exists in passed variable container the Integrator will be allowed to evolve it

class(TimestepController), private, allocatable :: dtController

Optional timestep controller that computes the timestep based on input variables

logical, public :: communicationNeeded

True if this Integrator requires MPI communication during evolution

type(CommunicationData), public :: commData

Communication data object for this Integrator

type(LogicalArray), private, allocatable, dimension(:) :: updateOnInternalIteration

Array that conforms to termGroups and is true when given group should be updated on each internal iteration, otherwise they are only to be updated every timestep

logical, public :: nonTrivialUpdate

True if this integrator should perform non-trivial updates of terms

logical, private, allocatable, dimension(:) :: updateModelDataOnInternalIteration

Array that conforms with modelIndices and is true when the given model has model data that should be updated on every internal iteration

logical, public :: nonTrivialModelDataUpdate

True if this integrator should perform non-trivial updates of model data

Type-Bound Procedures

procedure, public :: isDefined => isDefinedObject
procedure, public :: makeDefined => makeDefinedObject
procedure, public :: makeUndefined => makeUndefinedObject
procedure(manipulation), public, deferred :: affect
procedure, public :: setTimestep
procedure, public :: getTimestep
procedure, public :: setTermGroups
procedure, public :: getTermGroups
procedure, public :: setModelIndices
procedure, public :: getModelIndices
procedure, public :: setTimeEvolving
procedure, public :: isTimeEvolving
procedure, public :: setTimestepController
procedure, public :: hasTimestepController
procedure, public :: getTimestepFromController
procedure, public :: isCommunicationNeeded
procedure, public :: setCommunicationNeeded
procedure, public :: getCommunicationData
procedure, public :: setCommunicationData
procedure, public :: getUpdateRules
procedure, public :: setUpdateRules
procedure, public :: getModelDataUpdateRules
procedure, public :: setModelDataUpdateRules
procedure, public :: hasNonTrivialUpdate
procedure, public :: setNonTrivialUpdate
procedure, public :: hasNonTrivialModelDataUpdate
procedure, public :: setNonTrivialModelDataUpdate