solver3d_PIM_t Derived Type

type, public, extends(solver3d_t) :: solver3d_PIM_t

Iterative 3D solver based on PIM library


Components

Type Visibility Attributes Name Initial
integer, public, dimension(13) :: ipar

Integer parameters of PIM solver


Finalization Procedures

final :: destructor_PIM


Type-Bound Procedures

procedure, public :: create => create_PIM

  • interface

    public module subroutine create_PIM(self, comm, krylov_method, ndim_loc, resmax, matvec, precondl, precondr, maxiter, nrestart, dbgout)

    Initialisation of 3d solver

    Arguments

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

    PIM solver

    integer, intent(in) :: comm

    MPI communicator

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

    Krylov method to be used, available options are (see PIM manual): - CG - RGMRES - BICGSTAB - RBICGSTAB

    integer, intent(in) :: ndim_loc

    Local dimension (on rank) of matrix

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

    Maximum allowed tolerance of solution x on normalised residual

    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, public :: solve => solve_PIM

  • interface

    public module subroutine solve_PIM(self, comm, rhs, sol, res, info, res_true)

    Solves 3d problem

    Arguments

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

    PIM solver

    integer, intent(in) :: comm

    Not used, only the communicator from the create_PIM routine is used

    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 see PIM manual table 2

    integer, intent(out) :: info

    On succesful solve (info>0) the number of iterations/restarts, for negative numbers see PIM manual

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

    True relative residuum after solve