|
Neko 1.99.9
A portable framework for high-order spectral element flow simulations
|
CPU implementation of the preconditioned standard GMRES method. More...


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. | |
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.
|
pure virtualinherited |
Definition at line 103 of file krylov.f90.
| 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 | ||
| ) |
|
pure virtualinherited |
Definition at line 83 of file krylov.f90.
|
inherited |
This function checks if the Krylov solver has converged. The solver is considered converged if the residual is less than the absolute tolerance.
| residual | Residual |
| iter | Iteration number |
Definition at line 101 of file krylov.f90.
Definition at line 87 of file krylov.f90.
|
inherited |
| max_iter | Maximum number of iterations. |
| rel_tol | Relative tolarance for converence. |
| rel_tol | Absolute tolarance for converence. |
| M | The preconditioner. |
Definition at line 85 of file krylov.f90.
|
inherited |
Definition at line 99 of file krylov.f90.
|
inherited |
Definition at line 95 of file krylov.f90.
Definition at line 97 of file krylov.f90.
|
inherited |
| M | The preconditioner. |
Definition at line 89 of file krylov.f90.
| 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 | ||
| ) |
|
pure virtualinherited |
Definition at line 91 of file krylov.f90.
| 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 | ||
| ) |
|
pure virtualinherited |
Definition at line 93 of file krylov.f90.
|
inherited |
Definition at line 77 of file krylov.f90.
| real(kind=xp), dimension(:), allocatable gmres::gmres_t::c |
| real(kind=xp), dimension(:), allocatable gmres::gmres_t::gam |
| real(kind=xp), dimension(:,:), allocatable gmres::gmres_t::h |
| real(kind=xp), dimension(:,:), allocatable gmres::gmres_t::hp |
|
inherited |
Definition at line 79 of file krylov.f90.
|
inherited |
Definition at line 78 of file krylov.f90.
|
inherited |
Definition at line 80 of file krylov.f90.
|
inherited |
Definition at line 76 of file krylov.f90.
| real(kind=xp), dimension(:), allocatable gmres::gmres_t::s |