matrix_term_abstract_procedures Submodule

Contains module procedures associated with the abstract matrix term class


Uses


Module Functions

pure module function getNormalizationConst(this) result(norm)

Getter for normalizationConst

Arguments

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

Return Value real(kind=rk)

pure module function evaluateMatTerm(this, varCont) result(res)

Get explicit value for the term by crudely dotting each sparse row with the locally stored implicit variable vector in varCont

Arguments

Type IntentOptional Attributes Name
class(MatrixTerm), intent(in) :: this
type(VariableContainer), intent(in) :: varCont

Return Value real(kind=rk), allocatable, dimension(:)

pure module function getMultConst(this) result(multConst)

Getter for multConst

Arguments

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

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

pure module function getRowVarName(this) result(name)

Get name of the evolved variable of this term

Arguments

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

Return Value character(len=:), allocatable

pure module function getIndexingData(this) result(indData)

Getter for indexingData

Arguments

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

Return Value type(MatrixTermIndexingData)

pure module function getRowData(this) result(rowData)

Getter for rowData

Arguments

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

Return Value type(SparseRowData)


Module Subroutines

pure module subroutine unityRow(this, varCont, rowVals, indexingData)

Default row function. In general should use the passed variable container, row buffer, and matrix indexing data to provide values which is only a function of the row

Arguments

Type IntentOptional Attributes Name
class(MatrixTerm), intent(inout) :: this
type(VariableContainer), intent(in) :: varCont
real(kind=rk), intent(inout), dimension(:) :: rowVals
type(MatrixTermIndexingData), intent(in) :: indexingData

pure module subroutine unityCol(this, varCont, colVals, indexingData)

Default column function. In general should provide values for each column

Arguments

Type IntentOptional Attributes Name
class(MatrixTerm), intent(inout) :: this
type(VariableContainer), intent(in) :: varCont
type(RealArray), intent(inout), dimension(:) :: colVals
type(MatrixTermIndexingData), intent(in) :: indexingData

pure module subroutine calculateValues(this, varCont)

Default matrix entry calculation routine - loops over each row and applies calculateRows and colFun to variables in provided container

Arguments

Type IntentOptional Attributes Name
class(MatrixTerm), intent(inout) :: this
type(VariableContainer), intent(in) :: varCont

pure module subroutine setNormalizationConst(this, norm)

Setter for normalizationConst

Arguments

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

pure module subroutine setReqVars(this, rowReqVars, colReqVars, varCont)

Set variable names required by the row and column functions and find their indices in variable container

Arguments

Type IntentOptional Attributes Name
class(MatrixTerm), intent(inout) :: this
type(StringArray), intent(in), dimension(:) :: rowReqVars
type(StringArray), intent(in), dimension(:) :: colReqVars
type(VariableContainer), intent(in) :: varCont

pure module subroutine setEvolvedAndImplicitVar(this, rowVarName, colVarName, varCont)

Set evolved (row) and implicit (column) variable names, and check if evolved variable is stationary using varCont

Arguments

Type IntentOptional Attributes Name
class(MatrixTerm), intent(inout) :: this
character(len=*), intent(in) :: rowVarName
character(len=*), intent(in) :: colVarName
type(VariableContainer), intent(in) :: varCont

module subroutine initRowData(this, rowCoords, rowToColMapping, indexingObj)

Initialize row data objects based on a set of evolved global coordinates, the row/col var name, and a function that returns column coordinates given a row coordinate input. Requires a reference Indexing object.

Arguments

Type IntentOptional Attributes Name
class(MatrixTerm), intent(inout) :: this
integer(kind=ik), intent(in), dimension(:,:) :: rowCoords
procedure(coordMapping) :: rowToColMapping
type(Indexing), intent(in) :: indexingObj

module subroutine addRowDataToPreallocationData(this, petscPreallocData)

Add this term's row data to a PETSc preallocation object

Arguments

Type IntentOptional Attributes Name
class(MatrixTerm), intent(inout) :: this
type(PETScPreallocationData), intent(inout) :: petscPreallocData

module subroutine addRowDataPatternToController(this, petscCont)

Add this term's row data to a petsc preallocation object in PETSc controller

Arguments

Type IntentOptional Attributes Name
class(MatrixTerm), intent(in) :: this
type(PETScController), intent(inout) :: petscCont

module subroutine addRowValuesToPETScMatrix(this, petscCont, mult, petscGroup)

Add this term's row values to a petsc matrix object in PETSc controller, multiplied by mult. If evolved variable is stationary mult is ignored and set to -1

Arguments

Type IntentOptional Attributes Name
class(MatrixTerm), intent(in) :: this
type(PETScController), intent(inout) :: petscCont
real(kind=rk), intent(in) :: mult
integer(kind=ik), intent(in), optional :: petscGroup

pure module subroutine setMultConst(this, multConst)

Setter for multConst

Arguments

Type IntentOptional Attributes Name
class(MatrixTerm), intent(inout) :: this
type(RealArray), intent(in), dimension(:) :: multConst

pure module subroutine setFixedMatrix(this, isFixed)

Set whether the matrix is fixed -> only calculated once

Arguments

Type IntentOptional Attributes Name
class(MatrixTerm), intent(inout) :: this
logical, intent(in) :: isFixed

pure module subroutine setNonTrivialRowFun(this, nontriv)

Set whether the matrix has a non-trivial row function

Arguments

Type IntentOptional Attributes Name
class(MatrixTerm), intent(inout) :: this
logical, intent(in) :: nontriv

pure module subroutine setNonTrivialColFun(this, nontriv)

Set whether the matrix has a non-trivial col function

Arguments

Type IntentOptional Attributes Name
class(MatrixTerm), intent(inout) :: this
logical, intent(in) :: nontriv

module subroutine matTermUpdate(this, varCont, modelData, hostModel)

Default matrix term update, call matrixTermUpdate

Arguments

Type IntentOptional Attributes Name
class(MatrixTerm), intent(inout) :: this
type(VariableContainer), intent(in) :: varCont
class(ModelboundData), intent(in), optional :: modelData
class(ModelSurrogate), intent(in), optional :: hostModel

module subroutine matrixNoUpdate(this, varCont, indexingData, modelData, hostModel)

Default MatrixTerm updateMatTerm function - does nothing

Arguments

Type IntentOptional Attributes Name
class(MatrixTerm), intent(inout) :: this
type(VariableContainer), intent(in) :: varCont
type(MatrixTermIndexingData), intent(in) :: indexingData
class(ModelboundData), intent(in), optional :: modelData
class(ModelSurrogate), intent(in), optional :: hostModel