implicit_PicardBDE_integrator_class Module

Contains an implicit Picard Backwards Euler integrator class



Interfaces

interface

  • private pure module function getNonlinTol(this) result(nonlinTol)

    Getter for nonlinTol value

    Arguments

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

    Return Value real(kind=rk)

interface

  • private pure module function getMaxIterations(this) result(maxIter)

    Geter for maxIterations value

    Arguments

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

    Return Value integer(kind=ik)

interface

  • private pure module function getConvergenceIndices(this) result(convVars)

    Getter for convergenceTestVars array

    Arguments

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

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

interface

  • private module subroutine integrateBDE(this, manipulatedModeller, outputVars, inputVars)

    Integration routine for BDE integrator - implementation of abstract manipulate routine

    Arguments

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

    Modeller to be used in callbacks during integration

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

    VariableContainer object to store the integration output

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

    VariableContainer object housing input data for the integration routine

interface

  • private module subroutine initBDEIntegrator(this, indexingObj, procRank, nonlinTol, absTol, maxIters, convergenceIndices, modelList, termGroups, evolvesTimeVar, dtController, initialTimestep, use2Norm, petscGroup, intContOptions, integratorName)

    BDE integrator constructor

    Arguments

    Type IntentOptional Attributes Name
    class(PicardBDEIntegrator), intent(inout) :: this
    type(Indexing), intent(in) :: indexingObj

    Indexing object to be used in initializing the implicit vectors

    integer(kind=ik), intent(in) :: procRank

    Rank of current processors

    real(kind=rk), intent(in), optional :: nonlinTol

    Picard iteration relative tolerance

    real(kind=rk), intent(in), optional :: absTol

    Picard iteration absolute tolerance in epsilon units

    integer(kind=ik), intent(in), optional :: maxIters

    Maximum number of Picard iterations

    integer(kind=ik), intent(in), optional, dimension(:) :: convergenceIndices

    Variable indices in VariableContainer used to determine convergence of Picard iterations

    integer(kind=ik), intent(in), optional, dimension(:) :: modelList

    List of models this integrator is responsible for

    type(IntArray), intent(in), optional, dimension(:) :: termGroups

    Term groups this integrator is responsible for - should conform with modelList

    logical, intent(in), optional :: evolvesTimeVar

    Set to true if this integrator is allowed to change the "time" varible (if present in passed variable container)

    class(TimestepController), intent(in), optional :: dtController

    User-supplied timestep controller object

    real(kind=rk), intent(in), optional :: initialTimestep

    Default timestep

    logical, intent(in), optional :: use2Norm

    Set to true if this integrator uses the 2-norm instead of the local inf-norm for checking individual variable convergence

    integer(kind=ik), intent(in), optional :: petscGroup

    PETSc obj group this solver should interact with (defaults to 1)

    type(InternalControllerOptions), intent(in), optional :: intContOptions

    InternalControlOptions (if present turns on internal control)

    character(len=*), intent(in), optional :: integratorName

    Name of integrator used in printing

interface

  • private pure module subroutine setNonlinTol(this, nonlinTol)

    Setter for nonlinTol value

    Arguments

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

    Picard iteration tolerance

interface

  • private pure module subroutine setMaxIterations(this, maxIter)

    Setter for maxIterations value

    Arguments

    Type IntentOptional Attributes Name
    class(PicardBDEIntegrator), intent(inout) :: this
    integer(kind=ik), intent(in) :: maxIter

    Maximum number of Picard iterations

interface

  • private pure module subroutine setConvergenceIndices(this, convVars)

    Setter for convergenceTestVars array

    Arguments

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

Derived Types

type, public ::  InternalControllerOptions

Components

Type Visibility Attributes Name Initial
integer(kind=ik), public :: currentNumSubsteps = 1

The current number of sub- timesteps

integer(kind=ik), public :: stepMultiplier = 2

Which number to multiply the current number of substeps when a solve failure is detected

integer(kind=ik), public :: stepDecrament = 1

By how much to decrament the current number of timesteps when the number of nonlinear iterations drops below minNonlinIters

integer(kind=ik), public :: minNonlinIters = 5

Number of nonlinear iterations below which the number of substeps gets reduced

integer(kind=ik), public :: maxRestarts = 3

Maximum number of consecutive solver restart attempts before critical failure is announced

integer(kind=ik), public :: hardMaxRestarts = 10

Maximum number of consecutive solver restart attempts before critical failure is announced regardless of whether consolidation happened or not

integer(kind=ik), public :: restartCount = 0

Counter for consecutive number of solver restars

integer(kind=ik), public :: consolidationInterval = 50

How many integration calls before currentNumSubsteps is again reduced to 1

integer(kind=ik), public :: stepsSinceLastConsolidation = 0

Counter for steps since last consolidation to 1 substep

type, public, extends(Integrator) ::  PicardBDEIntegrator

Implicit Backwards Euler integrator with Picard iterations for handling non-linearities

Components

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

True only if user explicitly sets it to true

logical, public :: communicationNeeded

True if this Integrator requires MPI communication during evolution

type(CommunicationData), public :: commData

Communication data object for this Integrator

logical, public :: nonTrivialUpdate

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

logical, public :: nonTrivialModelDataUpdate

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

real(kind=rk), private, allocatable, dimension(:) :: implicitVectorOld

Buffer for implicit vector from previous Picard iteration

real(kind=rk), private, allocatable, dimension(:) :: implicitVectorNew

Buffer for implicit vector from current Picard iteration

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

Variable indices in VariableContainer used to determine convergence of Picard iterations

real(kind=rk), private :: nonlinTol

Picard iteration relative convergence tolerance

real(kind=rk), private :: absTol

Picard iteration absolute convergence tolerance in epsilon units

integer(kind=ik), private :: maxIterations

Maximum allowed number of Picard iterations

type(VariableContainer), private, allocatable :: buffer

VariableContainer buffer for passing to Modeller routines

integer(kind=ik), private :: timesCalled

Tracker for number of times called

integer(kind=ik), private :: totNumIters

Tracker for total number of iterations

logical, private :: use2Norm

True if the norm to be used is the 2norm instead of local inf-norm

integer(kind=ik), private :: associatedPETScObjGroup

PETSc obj group this solver should interact with (defaults to 1)

logical, private :: internalStepControl

True if using internal step control - will attempt restarts on failed solves and will ignore timestep controller

type(InternalControllerOptions), private :: internalControlOpts
character(len=:), private, allocatable :: integratorName

Integrator named used in printing

Type-Bound Procedures

procedure, public :: isDefined => isDefinedObject
procedure, public :: makeDefined => makeDefinedObject
procedure, public :: makeUndefined => makeUndefinedObject
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
procedure, public :: affect => integrateBDE
procedure, public :: init => initBDEIntegrator
procedure, public :: setNonlinTol
procedure, public :: getNonlinTol
procedure, public :: setMaxIterations
procedure, public :: getMaxIterations
procedure, public :: setConvergenceIndices
procedure, public :: getConvergenceIndices