solver3d_m Module

3D solvers, involving MPI communication


Used by


Interfaces

interface

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

    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

interface

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

    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

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

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

interface

  • public module subroutine destructor_PIM(self)

    Clears solver

    Arguments

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

    PIM solver

interface

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

    Initialisation of 3d solver

    Arguments

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

    CERFACS solver

    integer, intent(in) :: comm

    MPI communicator

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

    Krylov method to be used, available options are: - RGMRES

    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

    TODO

    integer, intent(in), optional :: nrestart

    TODO

    integer, intent(in), optional :: dbgout

    Debug output level

interface

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

    Solves 3d problem

    Arguments

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

    CERFACS solver

    integer, intent(in) :: comm

    TODO

    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

    Residuum of preconditioned system

    integer, intent(out) :: info

    On succesful solve (info>0) the number of iterations

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

    Residuum of unpreconditioned system

interface

  • public module subroutine destructor_CERFACS(self)

    Clears solver

    Arguments

    Type IntentOptional Attributes Name
    type(solver3d_CERFACS_t), intent(inout) :: self

    PIM solver


Abstract Interfaces

abstract interface

  • public subroutine matvec_interface(u, v, ipar)

    Interface for matrix vector multiplication v = A*u

    Arguments

    Type IntentOptional Attributes Name
    real(kind=FP), dimension(*) :: u
    real(kind=FP), dimension(*) :: v
    integer :: ipar(*)

abstract interface

  • public subroutine precond_interface(u, v, ipar)

    Interface for preconditioner

    Arguments

    Type IntentOptional Attributes Name
    real(kind=FP), dimension(*) :: u
    real(kind=FP), dimension(*) :: v
    integer :: ipar(*)

Derived Types

type, public, abstract ::  solver3d_t

Abstract class for 3D solver

Type-Bound Procedures

procedure(create_abstract), public, deferred :: create
procedure(solve_abstract), public, deferred :: solve

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

Finalizations Procedures

final :: destructor_PIM

Type-Bound Procedures

procedure, public :: create => create_PIM
procedure, public :: solve => solve_PIM

type, public, extends(solver3d_t) ::  solver3d_CERFACS_t

Iterative 3D solver based on CERFACS library

Finalizations Procedures

final :: destructor_CERFACS

Type-Bound Procedures

procedure, public :: create => create_CERFACS
procedure, public :: solve => solve_CERFACS