Implicit Backwards Euler integrator with Picard iterations for handling non-linearities
| 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 |
||
| real(kind=rk), | private, | allocatable, dimension(:) | :: | implicitVectorInit |
Buffer for initial guess for linear solve |
||
| 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 |
||
| type(RealArray), | private, | allocatable, dimension(:) | :: | oldBufferVals |
Buffer for variable array for Picard iterations |
||
| 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 |
||
| real(kind=rk), | private | :: | relaxationWeight |
<1 for under-relaxation >1 for over-relaxation |
Getter for userDefined
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Object), | intent(in) | :: | this |
Set userDefined to .true.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Object), | intent(inout) | :: | this |
Set userDefined to .false.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Object), | intent(inout) | :: | this |
Setter for dt
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Integrator), | intent(inout) | :: | this | |||
| real(kind=rk), | intent(in) | :: | timestep |
Getter for dt
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Integrator), | intent(in) | :: | this |
Setter for termGroups
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Integrator), | intent(inout) | :: | this | |||
| type(IntArray), | intent(in), | dimension(:) | :: | groups |
Getter for termGroups
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Integrator), | intent(in) | :: | this |
Setter for modelIndices
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Integrator), | intent(inout) | :: | this | |||
| integer(kind=ik), | intent(in), | dimension(:) | :: | indices |
Getter for modelIndices
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Integrator), | intent(in) | :: | this |
Setter for evolvesTimeVar
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Integrator), | intent(inout) | :: | this | |||
| logical, | intent(in) | :: | evo |
Check if this Integrator is allowed to evolve a time variable if present
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Integrator), | intent(in) | :: | this |
Setter for dtController
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Integrator), | intent(inout) | :: | this | |||
| class(TimestepController), | intent(in) | :: | controller |
Check if this Integrator has an allocated timestep controller
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Integrator), | intent(in) | :: | this |
Get the individual timestep size if Integrator has a timestep controller
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Integrator), | intent(inout) | :: | this | |||
| class(VariableContainer), | intent(in) | :: | inputVars |
Check whether this Integrator requires MPI communication
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Integrator), | intent(in) | :: | this |
Setter for communicationNeeded
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Integrator), | intent(inout) | :: | this | |||
| logical, | intent(in) | :: | commNeeded |
Getter for commData
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Integrator), | intent(in) | :: | this |
Setter for commData
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Integrator), | intent(inout) | :: | this | |||
| type(CommunicationData), | intent(in) | :: | commData |
Getter for updateOnInternalIteration
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Integrator), | intent(in) | :: | this |
Setter for updateOnInternalIteration
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Integrator), | intent(inout) | :: | this | |||
| type(LogicalArray), | intent(in), | dimension(:) | :: | updateRules |
Getter for updateModelDataOnInternalIteration
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Integrator), | intent(in) | :: | this |
Setter for updateModelDataOnInternalIteration
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Integrator), | intent(inout) | :: | this | |||
| logical, | intent(in), | dimension(:) | :: | updateRules |
Getter for nonTrivialUpdate
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Integrator), | intent(in) | :: | this |
Setter for nonTrivialUpdate
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Integrator), | intent(inout) | :: | this | |||
| logical, | intent(in) | :: | nonTrivialUpdate |
Getter for nonTrivialModelDataUpdate
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Integrator), | intent(in) | :: | this |
Setter for nonTrivialModelDataUpdate
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Integrator), | intent(inout) | :: | this | |||
| logical, | intent(in) | :: | nonTrivialUpdate |
Integration routine for BDE integrator - implementation of abstract manipulate routine
| Type | Intent | Optional | 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 |
BDE integrator constructor
| Type | Intent | Optional | 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 |
|
| real(kind=rk), | intent(in), | optional | :: | relaxationWeight |
relaxationWeight |
Setter for nonlinTol value
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(PicardBDEIntegrator), | intent(inout) | :: | this | |||
| real(kind=rk), | intent(in) | :: | nonlinTol |
Picard iteration tolerance |
Getter for nonlinTol value
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(PicardBDEIntegrator), | intent(in) | :: | this |
Setter for maxIterations value
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(PicardBDEIntegrator), | intent(inout) | :: | this | |||
| integer(kind=ik), | intent(in) | :: | maxIter |
Maximum number of Picard iterations |
Geter for maxIterations value
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(PicardBDEIntegrator), | intent(in) | :: | this |
Setter for convergenceTestVars array
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(PicardBDEIntegrator), | intent(inout) | :: | this | |||
| integer(kind=ik), | intent(in), | dimension(:) | :: | convVars |
Getter for convergenceTestVars array
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(PicardBDEIntegrator), | intent(in) | :: | this |