solver3d_t Derived Type

type, public, abstract :: solver3d_t

Abstract class for 3D solver


Type-Bound Procedures

procedure(create_abstract), public, deferred :: create

  • module subroutine create_abstract(self, comm, krylov_method, ndim_loc, resmax, matvec, precondl, precondr, maxiter, nrestart, dbgout) Prototype

    Initialisation of 3d solver

    Arguments

    Type IntentOptional Attributes Name
    class(solver3d_t), intent(inout) :: self

    Instance of class

    integer, intent(in) :: comm

    MPI communicator

    character(len=*), intent(in) :: krylov_method

    Krylov method to be used

    integer, intent(in) :: ndim_loc

    Local dimension (on rank) of matrix

    real(kind=FP), intent(in) :: resmax

    Maximum allowed residual of solution

    procedure(matvec_interface) :: matvec

    Routine performing matrix vector multiplication

    procedure(precond_interface), optional :: precondl

    Routine performing left preconditioning

    procedure(precond_interface), optional :: precondr

    Routine performing right preconditioning

    integer, intent(in), optional :: maxiter

    Maximum number of outer iterations (default=10)

    integer, intent(in), optional :: nrestart

    Number of iterations before restart (default=10)

    integer, intent(in), optional :: dbgout

    Debug output level

procedure(solve_abstract), public, deferred :: solve

  • module subroutine solve_abstract(self, comm, rhs, sol, res, info, res_true) Prototype

    Solves 3d problem

    Arguments

    Type IntentOptional Attributes Name
    class(solver3d_t), intent(inout) :: self

    Instance of class

    integer, intent(in) :: comm

    MPI communicator

    real(kind=FP), intent(in), dimension(self%ndim_loc) :: rhs

    Right hand side

    real(kind=FP), intent(inout), dimension(self%ndim_loc) :: sol

    Solution on output, on input initial guess

    real(kind=FP), intent(out) :: res

    Relative pseudo-residuum after solve

    integer, intent(out) :: info

    Info parameter, successful solve if >= 0

    real(kind=FP), intent(out), optional :: res_true

    True relative residuum after solve