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

Device implementation of the right-preconditioned BiCGStab method. More...

Inheritance diagram for bicgstab_device::bicgstab_device_t:
Collaboration diagram for bicgstab_device::bicgstab_device_t:

Public Member Functions

procedure, pass(thisinit (this, n, max_iter, m, rel_tol, abs_tol, monitor)
 Initialise a device BiCGStab solver.
 
procedure, pass(thisfree (this)
 Free a device BiCGStab solver.
 
procedure, pass(thissolve (this, ax, x, f, n, coef, bc_projector, gs_h, niter)
 Solve a linear system with the device BiCGStab method.
 
procedure, pass(thissolve_coupled (this, ax, x, y, z, fx, fy, fz, n, coef, bc_projector, gs_h, niter)
 Solve three independent systems with the device BiCGStab method.
 
procedure(ksp_init_intrf), deferred, pass(thisinit (this, n, max_iter, m, rel_tol, abs_tol, monitor)
 Constructor.
 
procedure, pass(thisksp_init (this, max_iter, rel_tol, abs_tol, m, monitor)
 Base type constructor.
 
procedure, pass(thisksp_free (this)
 Base type destructor.
 
procedure, pass(thisset_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(thismonitor_start (this, name)
 Monitor start.
 
procedure, pass(thismonitor_stop (this)
 Monitor stop.
 
procedure, pass(thismonitor_iter (this, iter, rnorm)
 Monitor iteration.
 
procedure, pass(thisis_converged (this, iter, residual)
 Check for convergence.
 
procedure(ksp_t_free), deferred, pass free (this)
 Destructor.
 

Public Attributes

real(kind=rp), dimension(:), allocatable p
 Search direction \(p\).
 
real(kind=rp), dimension(:), allocatable p_hat
 Preconditioned search direction \(\hat{p} = M^{-1}p\).
 
real(kind=rp), dimension(:), allocatable r
 Residual \(r\).
 
real(kind=rp), dimension(:), allocatable s
 Intermediate residual \(s = r - \alpha v\).
 
real(kind=rp), dimension(:), allocatable s_hat
 Preconditioned intermediate residual \(\hat{s} = M^{-1}s\).
 
real(kind=rp), dimension(:), allocatable t
 Operator action \(t = A\hat{s}\).
 
real(kind=rp), dimension(:), allocatable v
 Operator action \(v = A\hat{p}\).
 
type(c_ptr) p_d = C_NULL_PTR
 
type(c_ptr) p_hat_d = C_NULL_PTR
 
type(c_ptr) r_d = C_NULL_PTR
 
type(c_ptr) s_d = C_NULL_PTR
 
type(c_ptr) s_hat_d = C_NULL_PTR
 
type(c_ptr) t_d = C_NULL_PTR
 
type(c_ptr) v_d = C_NULL_PTR
 
type(c_ptr) gs_event = C_NULL_PTR
 
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 recurrence and the breakdown criteria mirror the CPU implementation in bicgstab_t. The solve starts from a zero initial guess and uses the preconditioner provided by ksp_t. The coupled interface solves the three components independently and does not apply a coupled operator.

Each vector update is fused with the reduction that follows it, so an iteration issues four kernels and four global reductions rather than thirteen and seven.

Definition at line 71 of file bicgstab_device.F90.

Member Function/Subroutine Documentation

◆ free() [1/2]

procedure, pass(this) bicgstab_device::bicgstab_device_t::free ( class(bicgstab_device_t), intent(inout this)

Definition at line 98 of file bicgstab_device.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) bicgstab_device::bicgstab_device_t::init ( class(bicgstab_device_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 
)
Parameters
nNumber of degrees of freedom.
max_iterMaximum number of iterations.
MOptional preconditioner. An identity preconditioner is used if absent.
rel_tolOptional relative convergence tolerance.
abs_tolOptional absolute convergence tolerance.
monitorOptional switch for logging the residual at each iteration.

Definition at line 96 of file bicgstab_device.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) bicgstab_device::bicgstab_device_t::solve ( class(bicgstab_device_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 
)

The initial guess in x is discarded and the iteration starts from zero.

Parameters
AxLinear operator.
xSolution field.
fRight-hand side.
nNumber of degrees of freedom.
coefSpectral element coefficients and multiplicity weights.
bc_projectorProjector for dirichlet boundary nodes.
gs_hGather-scatter handle used to assemble the operator result.
niterOptional maximum number of iterations, overriding the configured value.
Returns
Convergence information for the solve.

Definition at line 100 of file bicgstab_device.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) bicgstab_device::bicgstab_device_t::solve_coupled ( class(bicgstab_device_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 
)

This routine sequentially invokes the scalar solver for each component.

Parameters
AxLinear operator.
xSolution field for the first component.
ySolution field for the second component.
zSolution field for the third component.
fxRight-hand side for the first component.
fyRight-hand side for the second component.
fzRight-hand side for the third component.
nNumber of degrees of freedom per component.
coefSpectral element coefficients and multiplicity weights.
bc_projectorBoundary conditions for the three components.
gs_hGather-scatter handle used to assemble operator results.
niterOptional maximum number of iterations, overriding the configured value.
Returns
Convergence information for each component.

Definition at line 102 of file bicgstab_device.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.

◆ gs_event

type(c_ptr) bicgstab_device::bicgstab_device_t::gs_event = C_NULL_PTR

Definition at line 93 of file bicgstab_device.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.

◆ p

real(kind=rp), dimension(:), allocatable bicgstab_device::bicgstab_device_t::p

Definition at line 73 of file bicgstab_device.F90.

◆ p_d

type(c_ptr) bicgstab_device::bicgstab_device_t::p_d = C_NULL_PTR

Definition at line 86 of file bicgstab_device.F90.

◆ p_hat

real(kind=rp), dimension(:), allocatable bicgstab_device::bicgstab_device_t::p_hat

Definition at line 75 of file bicgstab_device.F90.

◆ p_hat_d

type(c_ptr) bicgstab_device::bicgstab_device_t::p_hat_d = C_NULL_PTR

Definition at line 87 of file bicgstab_device.F90.

◆ r

real(kind=rp), dimension(:), allocatable bicgstab_device::bicgstab_device_t::r

Definition at line 77 of file bicgstab_device.F90.

◆ r_d

type(c_ptr) bicgstab_device::bicgstab_device_t::r_d = C_NULL_PTR

Definition at line 88 of file bicgstab_device.F90.

◆ rel_tol

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

Definition at line 76 of file krylov.f90.

◆ s

real(kind=rp), dimension(:), allocatable bicgstab_device::bicgstab_device_t::s

Definition at line 79 of file bicgstab_device.F90.

◆ s_d

type(c_ptr) bicgstab_device::bicgstab_device_t::s_d = C_NULL_PTR

Definition at line 89 of file bicgstab_device.F90.

◆ s_hat

real(kind=rp), dimension(:), allocatable bicgstab_device::bicgstab_device_t::s_hat

Definition at line 81 of file bicgstab_device.F90.

◆ s_hat_d

type(c_ptr) bicgstab_device::bicgstab_device_t::s_hat_d = C_NULL_PTR

Definition at line 90 of file bicgstab_device.F90.

◆ t

real(kind=rp), dimension(:), allocatable bicgstab_device::bicgstab_device_t::t

Definition at line 83 of file bicgstab_device.F90.

◆ t_d

type(c_ptr) bicgstab_device::bicgstab_device_t::t_d = C_NULL_PTR

Definition at line 91 of file bicgstab_device.F90.

◆ v

real(kind=rp), dimension(:), allocatable bicgstab_device::bicgstab_device_t::v

Definition at line 85 of file bicgstab_device.F90.

◆ v_d

type(c_ptr) bicgstab_device::bicgstab_device_t::v_d = C_NULL_PTR

Definition at line 92 of file bicgstab_device.F90.


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