Neko 1.99.9
A portable framework for high-order spectral element flow simulations
Loading...
Searching...
No Matches
gmres::gmres_t Type Referenceabstract

CPU implementation of the preconditioned standard GMRES method. More...

Inheritance diagram for gmres::gmres_t:
Collaboration diagram for gmres::gmres_t:

Public Member Functions

procedure, pass(this) init (this, n, max_iter, m, rel_tol, abs_tol, monitor)
 Initialise a standard GMRES solver.
 
procedure, pass(this) free (this)
 Free a standard GMRES solver.
 
procedure, pass(this) solve (this, ax, x, f, n, coef, bc_projector, gs_h, niter)
 Solve a linear system with the standard GMRES method.
 
procedure, pass(this) solve_coupled (this, ax, x, y, z, fx, fy, fz, n, coef, bc_projector, gs_h, niter)
 Solve three independent systems with the standard GMRES method.
 
procedure(ksp_init_intrf), deferred, pass(this) init (this, n, max_iter, m, rel_tol, abs_tol, monitor)
 Constructor.
 
procedure, pass(this) ksp_init (this, max_iter, rel_tol, abs_tol, m, monitor)
 Base type constructor.
 
procedure, pass(this) ksp_free (this)
 Base type destructor.
 
procedure, pass(this) set_pc (this, m)
 Set preconditioner.
 
procedure(ksp_method), deferred, pass solve (this, ax, x, f, n, coef, bc_projector, gs_h, niter)
 Solve the system.
 
procedure(ksp_method_coupled), deferred, pass solve_coupled (this, ax, x, y, z, fx, fy, fz, n, coef, bc_projector, gs_h, niter)
 Solve the system (coupled version).
 
procedure, pass(this) monitor_start (this, name)
 Monitor start.
 
procedure, pass(this) monitor_stop (this)
 Monitor stop.
 
procedure, pass(this) monitor_iter (this, iter, rnorm)
 Monitor iteration.
 
procedure, pass(this) is_converged (this, iter, residual)
 Check for convergence.
 
procedure(ksp_t_free), deferred, pass free (this)
 Destructor.
 

Public Attributes

integer lgmres = 30
 Maximum dimension of the Krylov basis before restarting.
 
real(kind=rp), dimension(:), pointer w => null()
 Operator action used during Arnoldi orthogonalisation.
 
real(kind=rp), dimension(:), pointer r => null()
 Residual at the start of a restart cycle.
 
type(matrix_t), pointer z => null()
 Preconditioned Krylov basis.
 
type(matrix_t), pointer v => null()
 Krylov basis.
 
real(kind=xp), dimension(:,:), allocatable h
 Upper-Hessenberg matrix in extra precision.
 
real(kind=xp), dimension(:), allocatable s
 Sines of the Givens rotations in extra precision.
 
real(kind=xp), dimension(:), allocatable gam
 Rotated residual vector in extra precision.
 
real(kind=xp), dimension(:), allocatable c
 Cosines of the Givens rotations and solution coefficients.
 
real(kind=xp), dimension(:,:), allocatable hp
 Per-thread inner-product buffer in extra precision.
 
class(pc_t), pointer m => null()
 Preconditioner.
 
real(kind=rp) rel_tol
 Relative tolerance.
 
real(kind=rp) abs_tol
 Absolute tolerance.
 
integer max_iter
 Maximum number of iterations.
 
class(pc_t), allocatable m_ident
 Internal preconditioner (Identity)
 
logical monitor
 Turn on/off monitoring.
 

Detailed Description

The large working vectors and Krylov bases are associated with arrays and matrices from the scratch registry only for the duration of a solve. The small extra-precision reduction arrays remain owned by the solver.

Definition at line 60 of file gmres.f90.

Member Function/Subroutine Documentation

◆ free() [1/2]

procedure, pass(this) gmres::gmres_t::free ( class(gmres_t), intent(inout)  this)

Definition at line 85 of file gmres.f90.

◆ free() [2/2]

procedure(ksp_t_free), deferred, pass krylov::ksp_t::free ( class(ksp_t), intent(inout)  this)
pure virtualinherited

Definition at line 103 of file krylov.f90.

◆ init() [1/2]

procedure, pass(this) gmres::gmres_t::init ( class(gmres_t), intent(inout), target  this,
integer, intent(in)  n,
integer, intent(in)  max_iter,
class(pc_t), intent(in), optional, target  m,
real(kind=rp), intent(in), optional  rel_tol,
real(kind=rp), intent(in), optional  abs_tol,
logical, intent(in), optional  monitor 
)

Definition at line 83 of file gmres.f90.

◆ init() [2/2]

procedure(ksp_init_intrf), deferred, pass(this) krylov::ksp_t::init ( class(ksp_t), intent(inout), target  this,
integer, intent(in)  n,
integer, intent(in)  max_iter,
class(pc_t), intent(in), optional, target  m,
real(kind=rp), intent(in), optional  rel_tol,
real(kind=rp), intent(in), optional  abs_tol,
logical, intent(in), optional  monitor 
)
pure virtualinherited

Definition at line 83 of file krylov.f90.

◆ is_converged()

procedure, pass(this) krylov::ksp_t::is_converged ( class(ksp_t), intent(in)  this,
integer, intent(in)  iter,
real(kind=rp), intent(in)  residual 
)
inherited

This function checks if the Krylov solver has converged. The solver is considered converged if the residual is less than the absolute tolerance.

Parameters
residualResidual
iterIteration number

Definition at line 101 of file krylov.f90.

◆ ksp_free()

procedure, pass(this) krylov::ksp_t::ksp_free ( class(ksp_t), intent(inout)  this)
inherited

Definition at line 87 of file krylov.f90.

◆ ksp_init()

procedure, pass(this) krylov::ksp_t::ksp_init ( class(ksp_t), intent(inout), target  this,
integer, intent(in)  max_iter,
real(kind=rp), intent(in), optional  rel_tol,
real(kind=rp), intent(in), optional  abs_tol,
class(pc_t), intent(in), optional, target  m,
logical, intent(in), optional  monitor 
)
inherited
Parameters
max_iterMaximum number of iterations.
rel_tolRelative tolarance for converence.
rel_tolAbsolute tolarance for converence.
MThe preconditioner.

Definition at line 85 of file krylov.f90.

◆ monitor_iter()

procedure, pass(this) krylov::ksp_t::monitor_iter ( class(ksp_t), intent(in)  this,
integer, intent(in)  iter,
real(kind=rp), intent(in)  rnorm 
)
inherited

Definition at line 99 of file krylov.f90.

◆ monitor_start()

procedure, pass(this) krylov::ksp_t::monitor_start ( class(ksp_t), intent(in)  this,
character(len=*)  name 
)
inherited

Definition at line 95 of file krylov.f90.

◆ monitor_stop()

procedure, pass(this) krylov::ksp_t::monitor_stop ( class(ksp_t), intent(in)  this)
inherited

Definition at line 97 of file krylov.f90.

◆ set_pc()

procedure, pass(this) krylov::ksp_t::set_pc ( class(ksp_t), intent(inout)  this,
class(pc_t), intent(in), target  m 
)
inherited
Parameters
MThe preconditioner.

Definition at line 89 of file krylov.f90.

◆ solve() [1/2]

procedure, pass(this) gmres::gmres_t::solve ( class(gmres_t), intent(inout)  this,
class(ax_t), intent(in)  ax,
type(field_t), intent(inout)  x,
real(kind=rp), dimension(n), intent(in)  f,
integer, intent(in)  n,
type(coef_t), intent(inout)  coef,
class(scalar_bc_projector_t), intent(inout)  bc_projector,
type(gs_t), intent(inout)  gs_h,
integer, intent(in), optional  niter 
)

Definition at line 87 of file gmres.f90.

◆ solve() [2/2]

procedure(ksp_method), deferred, pass krylov::ksp_t::solve ( class(ksp_t), intent(inout)  this,
class(ax_t), intent(in)  ax,
type(field_t), intent(inout)  x,
real(kind=rp), dimension(n), intent(in)  f,
integer, intent(in)  n,
type(coef_t), intent(inout)  coef,
class(scalar_bc_projector_t), intent(inout)  bc_projector,
type(gs_t), intent(inout)  gs_h,
integer, intent(in), optional  niter 
)
pure virtualinherited

Definition at line 91 of file krylov.f90.

◆ solve_coupled() [1/2]

procedure, pass(this) gmres::gmres_t::solve_coupled ( class(gmres_t), intent(inout)  this,
class(ax_t), intent(in)  ax,
type(field_t), intent(inout)  x,
type(field_t), intent(inout)  y,
type(field_t), intent(inout)  z,
real(kind=rp), dimension(n), intent(in)  fx,
real(kind=rp), dimension(n), intent(in)  fy,
real(kind=rp), dimension(n), intent(in)  fz,
integer, intent(in)  n,
type(coef_t), intent(inout)  coef,
class(vector_bc_projector_t), intent(inout)  bc_projector,
type(gs_t), intent(inout)  gs_h,
integer, intent(in), optional  niter 
)

Definition at line 89 of file gmres.f90.

◆ solve_coupled() [2/2]

procedure(ksp_method_coupled), deferred, pass krylov::ksp_t::solve_coupled ( class(ksp_t), intent(inout)  this,
class(ax_t), intent(in)  ax,
type(field_t), intent(inout)  x,
type(field_t), intent(inout)  y,
type(field_t), intent(inout)  z,
real(kind=rp), dimension(n), intent(in)  fx,
real(kind=rp), dimension(n), intent(in)  fy,
real(kind=rp), dimension(n), intent(in)  fz,
integer, intent(in)  n,
type(coef_t), intent(inout)  coef,
class(vector_bc_projector_t), intent(inout)  bc_projector,
type(gs_t), intent(inout)  gs_h,
integer, intent(in), optional  niter 
)
pure virtualinherited

Definition at line 93 of file krylov.f90.

Member Data Documentation

◆ abs_tol

real(kind=rp) krylov::ksp_t::abs_tol
inherited

Definition at line 77 of file krylov.f90.

◆ c

real(kind=xp), dimension(:), allocatable gmres::gmres_t::c

Definition at line 78 of file gmres.f90.

◆ gam

real(kind=xp), dimension(:), allocatable gmres::gmres_t::gam

Definition at line 76 of file gmres.f90.

◆ h

real(kind=xp), dimension(:,:), allocatable gmres::gmres_t::h

Definition at line 72 of file gmres.f90.

◆ hp

real(kind=xp), dimension(:,:), allocatable gmres::gmres_t::hp

Definition at line 80 of file gmres.f90.

◆ lgmres

integer gmres::gmres_t::lgmres = 30

Definition at line 62 of file gmres.f90.

◆ m

class(pc_t), pointer krylov::ksp_t::m => null()
inherited

Definition at line 75 of file krylov.f90.

◆ m_ident

class(pc_t), allocatable krylov::ksp_t::m_ident
inherited

Definition at line 79 of file krylov.f90.

◆ max_iter

integer krylov::ksp_t::max_iter
inherited

Definition at line 78 of file krylov.f90.

◆ monitor

logical krylov::ksp_t::monitor
inherited

Definition at line 80 of file krylov.f90.

◆ r

real(kind=rp), dimension(:), pointer gmres::gmres_t::r => null()

Definition at line 66 of file gmres.f90.

◆ rel_tol

real(kind=rp) krylov::ksp_t::rel_tol
inherited

Definition at line 76 of file krylov.f90.

◆ s

real(kind=xp), dimension(:), allocatable gmres::gmres_t::s

Definition at line 74 of file gmres.f90.

◆ v

type(matrix_t), pointer gmres::gmres_t::v => null()

Definition at line 70 of file gmres.f90.

◆ w

real(kind=rp), dimension(:), pointer gmres::gmres_t::w => null()

Definition at line 64 of file gmres.f90.

◆ z

type(matrix_t), pointer gmres::gmres_t::z => null()

Definition at line 68 of file gmres.f90.


The documentation for this type was generated from the following file: