33submodule(
krylov) krylov_fctry
60 character(len=20) :: KSP_KNOWN_TYPES(10) = [character(len=20) :: &
82 module subroutine krylov_solver_factory(object, n, type_name, &
83 max_iter, abstol, m, monitor)
84 class(ksp_t),
allocatable,
intent(inout) :: object
85 integer,
intent(in),
value :: n
86 character(len=*),
intent(in) :: type_name
87 integer,
intent(in) :: max_iter
88 real(kind=
rp),
optional :: abstol
89 class(pc_t),
optional,
intent(in),
target :: M
90 logical,
optional,
intent(in) :: monitor
92 call krylov_solver_allocator(object, type_name)
94 call object%init(n, max_iter, m = m, abs_tol = abstol, monitor = monitor)
96 end subroutine krylov_solver_factory
101 module subroutine krylov_solver_allocator(object, type_name)
102 class(ksp_t),
allocatable,
intent(inout) :: object
103 character(len=*),
intent(in) :: type_name
106 if (
allocated(object))
then
111 select case (trim(type_name))
118 allocate(
cg_t::object)
133 call neko_error(
'PipeCG not supported for OpenCL/Metal')
143 call neko_error(
'FusedCG not supported for OpenCL/Metal')
147 call neko_error(
'FusedCG only supported for CUDA/HIP')
150 case (
'fused_coupled_cg')
153 call neko_error(
'Coupled FusedCG not supported for OpenCL/Metal')
157 call neko_error(
'Coupled FusedCG only supported for CUDA/HIP')
186 case (
'coupled_bicgstab')
188 call neko_error(
'Coupled BiCGStab is not supported on devices')
194 do i = 1, krylov_registry_size
195 if (trim(type_name) .eq. trim(krylov_registry(i)%type_name))
then
196 call krylov_registry(i)%allocator(object)
204 end subroutine krylov_solver_allocator
211 module subroutine register_krylov(type_name, allocator)
212 character(len=*),
intent(in) :: type_name
213 procedure(krylov_allocate),
pointer,
intent(in) :: allocator
214 type(krylov_allocator_entry),
allocatable :: temp(:)
217 do i = 1,
size(ksp_known_types)
218 if (trim(type_name) .eq. trim(ksp_known_types(i)))
then
224 do i = 1, krylov_registry_size
225 if (trim(type_name) .eq. trim(krylov_registry(i)%type_name))
then
231 if (krylov_registry_size .eq. 0)
then
232 allocate(krylov_registry(1))
234 allocate(temp(krylov_registry_size + 1))
235 temp(1:krylov_registry_size) = krylov_registry
236 call move_alloc(temp, krylov_registry)
239 krylov_registry_size = krylov_registry_size + 1
240 krylov_registry(krylov_registry_size)%type_name = type_name
241 krylov_registry(krylov_registry_size)%allocator => allocator
242 end subroutine register_krylov
244end submodule krylov_fctry
Provides a coupled CPU implementation of the BiCGStab method.
Provides a device implementation of the BiCGStab method.
Provides a CPU implementation of the BiCGStab method.
Defines a communication avoiding Conjugate Gradient method.
Defines a coupled Conjugate Gradient methods for accelerators.
Defines a coupled Conjugate Gradient methods.
Defines various Conjugate Gradient methods for accelerators.
Defines various Conjugate Gradient methods.
Defines various Conjugate Gradient methods.
Chebyshev preconditioner.
Chebyshev preconditioner.
Defines a fused Conjugate Gradient method for accelerators.
Defines a fused Conjugate Gradient method for accelerators.
Defines various GMRES methods.
Defines various GMRES methods.
Defines various GMRES methods.
Implements the base abstract type for Krylov solvers plus helper types.
integer, parameter neko_bcknd_sx
integer, parameter neko_bcknd_device
integer, parameter neko_bcknd_opencl
integer, parameter neko_bcknd_metal
integer, parameter, public rp
Global precision used in computations.
Defines a pipelined Conjugate Gradient methods.
Defines a pipelined Conjugate Gradient methods SX-Aurora backend.
Defines a pipelined Conjugate Gradient methods.
subroutine, public neko_type_registration_error(base_type, wrong_type, known)
subroutine, public neko_type_error(base_type, wrong_type, known_types)
Reports an error allocating a type for a particular base pointer class.
CPU implementation of the right-preconditioned BiCGStab method.
Coupled right-preconditioned CPU BiCGStab method.
Device implementation of the right-preconditioned BiCGStab method.
S-step communication avoiding preconditioned conjugate gradient method.
Standard preconditioned conjugate gradient method.
Coupled preconditioned conjugate gradient method.
Device based coupled preconditioned conjugate gradient method.
Device based preconditioned conjugate gradient method.
Standard preconditioned conjugate gradient method (SX version)
Defines a Chebyshev preconditioner.
Defines a Chebyshev preconditioner.
Fused preconditioned conjugate gradient method.
Fused preconditioned conjugate gradient method.
Standard preconditioned generalized minimal residual method.
Standard preconditioned generalized minimal residual method.
Standard preconditioned generalized minimal residual method (SX version)
Pipelined preconditioned conjugate gradient method.
Pipelined preconditioned conjugate gradient method.
Pipelined preconditioned conjugate gradient method for SX-Aurora.
Defines a canonical Krylov preconditioner.