Integrator Derived Type

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

  • interface

    private pure module function isDefinedObject(this) result(defined)

    Getter for userDefined

    Arguments

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

    Return Value logical

procedure, public :: makeDefined => makeDefinedObject

  • interface

    private pure module subroutine makeDefinedObject(this)

    Set userDefined to .true.

    Arguments

    Type IntentOptional Attributes Name
    class(Object), intent(inout) :: this

procedure, public :: makeUndefined => makeUndefinedObject

  • interface

    private pure module subroutine makeUndefinedObject(this)

    Set userDefined to .false.

    Arguments

    Type IntentOptional Attributes Name
    class(Object), intent(inout) :: this

procedure(manipulation), public, deferred :: affect

  • subroutine manipulation(this, manipulatedModeller, outputVars, inputVars) Prototype

    Transform inputVars data to outputVars data based on this Manipulator and passed Modeller callback

    Arguments

    Type IntentOptional Attributes Name
    class(Manipulator), intent(inout) :: this
    class(ModellerSurrogate), intent(inout) :: manipulatedModeller

    Modeller to be used in callback data manipulation

    class(VariableContainer), intent(inout) :: outputVars

    VariableContainer object to store the manipulation output

    class(VariableContainer), intent(in) :: inputVars

    VariableContainer object housing input data for the manipulation routine

procedure, public :: setTimestep

  • 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

procedure, public :: getTimestep

  • 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)

procedure, public :: setTermGroups

  • 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

procedure, public :: getTermGroups

  • 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(:)

procedure, public :: setModelIndices

  • 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

procedure, public :: getModelIndices

  • 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(:)

procedure, public :: setTimeEvolving

  • 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

procedure, public :: isTimeEvolving

  • 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

procedure, public :: setTimestepController

  • 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

procedure, public :: hasTimestepController

  • 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

procedure, public :: getTimestepFromController

  • 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)

procedure, public :: isCommunicationNeeded

  • 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

procedure, public :: setCommunicationNeeded

  • 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

procedure, public :: getCommunicationData

  • 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

procedure, public :: setCommunicationData

  • 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

procedure, public :: getUpdateRules

  • 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

procedure, public :: setUpdateRules

  • 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

procedure, public :: getModelDataUpdateRules

  • 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

procedure, public :: setModelDataUpdateRules

  • 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

procedure, public :: hasNonTrivialUpdate

  • 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

procedure, public :: setNonTrivialUpdate

  • 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

procedure, public :: hasNonTrivialModelDataUpdate

  • 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

procedure, public :: setNonTrivialModelDataUpdate

  • 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