PETScController Derived Type

type, public, extends(Object) :: PETScController

Object responsible for interfacing with PETSc


Components

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

True only if user explicitly sets it to true

type(PETScPreallocationData), private :: preallocData

Data used for preallocating PETSc objects

type(SolverOptions), private :: options

Solver options for the KSP solver

logical, private :: objCreated

True if PETSc object components have been created

type(PETSsObjs), private, allocatable, dimension(:) :: objs

Groups of PETSc objects

ksp, public :: ConvergedReason::lastConvergedReason

Converged reason for last attempted solve

petscint, public :: lastNumIterations

Number of iterations for last attemtped solve


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, public :: addRowDataToPreallocation

  • interface

    private pure module subroutine addRowDataToPreallocation(this, rowData)

    Add sparse row data structure to total preallocation sparsity pattern

    Arguments

    Type IntentOptional Attributes Name
    class(PETScController), intent(inout) :: this
    type(SparseRowData), intent(in) :: rowData

procedure, public :: createPETScObjs

  • interface

    private module subroutine createPETScObjs(this)

    Assemble the preallocation object, create PETSc objects, and deallocate the preallocation object

    Arguments

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

procedure, public :: addRowValuesToMatrix

  • interface

    private module subroutine addRowValuesToMatrix(this, rowData, multConst, objGroup)

    Add row data to matrix, optionally multiplied by a real constant

    Arguments

    Type IntentOptional Attributes Name
    class(PETScController), intent(inout) :: this
    type(SparseRowData), intent(in) :: rowData
    real(kind=rk), intent(in), optional :: multConst
    integer(kind=ik), intent(in), optional :: objGroup

procedure, public :: linearSolve

  • interface

    private module subroutine linearSolve(this, knownVec, unknownVec, objGroup)

    Solve the equation petscMat * unknownVec = knownVec where the vectors are local to each processor - assembles and zeros out the matrix before/after the solve

    Arguments

    Type IntentOptional Attributes Name
    class(PETScController), intent(inout) :: this
    real(kind=rk), intent(in), dimension(:) :: knownVec
    real(kind=rk), intent(out), dimension(:) :: unknownVec
    integer(kind=ik), intent(in), optional :: objGroup

procedure, public :: objectsCreated

  • interface

    private pure module function objectsCreated(this) result(created)

    Return true if PETSc objects have been created

    Arguments

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

    Return Value logical

procedure, public :: getLastConvergedReason

  • interface

    private pure module function getLastConvergedReason(this) result(conv)

    Getter for lastConvergedReason

    Arguments

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

    Return Value integer(kind=ik)

procedure, public :: getLastNumIterations

  • interface

    private pure module function getLastNumIterations(this) result(numIters)

    Getter for lastNumIterations

    Arguments

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

    Return Value integer(kind=ik)

procedure, public :: init => initPETScController

  • interface

    private module subroutine initPETScController(this, indexingObj, mpiCont, solOptions, numObjs)

    PETSc controller initialization routine

    Arguments

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

    Indexing object used to initialize preallocation data

    type(MPIController), intent(in) :: mpiCont

    Reference MPI controller

    type(SolverOptions), intent(in) :: solOptions

    KSP solver options

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

    Number of PETSc object groups

procedure, public :: finalize

  • interface

    private module subroutine finalize(this)

    Finalizes PETSc and destroys all PETSc objects

    Arguments

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