56 character(len=20) :: AX_HELM_KNOWN_TYPES(5) = [character(len=20) :: &
69 module subroutine ax_helm_allocator(object, type_name)
70 class(ax_t),
allocatable,
intent(inout) :: object
71 character(len=*),
intent(in) :: type_name
74 if (
allocated(object))
then
79 select case (trim(type_name))
90 case (
"standard_compr")
104 call neko_error(
"Full stress formulation is only available " // &
105 "on the CPU and device")
111 case (
"standard_svv")
113 call neko_error(
"SVV is not available with the SX or " // &
117 call neko_error(
"SVV is only available on CPU, " // &
118 "CUDA, and HIP backends")
126 call neko_error(
"Full stress formulation is only available &
127 &on the CPU and device")
130 call neko_error(
"Full-stress SVV is only " // &
131 "available on CPU, CUDA, and HIP backends")
138 do i = 1, ax_helm_registry_size
139 if (trim(type_name) .eq. &
140 trim(ax_helm_registry(i)%type_name))
then
141 call ax_helm_registry(i)%allocator(object)
150 end subroutine ax_helm_allocator
157 module subroutine register_ax_helm(type_name, allocator)
158 character(len=*),
intent(in) :: type_name
159 procedure(ax_helm_allocate),
pointer,
intent(in) :: allocator
160 type(ax_helm_allocator_entry),
allocatable :: temp(:)
163 do i = 1,
size(ax_helm_known_types)
164 if (trim(type_name) .eq. trim(ax_helm_known_types(i)))
then
170 do i = 1, ax_helm_registry_size
171 if (trim(type_name) .eq. trim(ax_helm_registry(i)%type_name))
then
177 if (ax_helm_registry_size .eq. 0)
then
178 allocate(ax_helm_registry(1))
180 allocate(temp(ax_helm_registry_size + 1))
181 temp(1:ax_helm_registry_size) = ax_helm_registry
182 call move_alloc(temp, ax_helm_registry)
185 ax_helm_registry_size = ax_helm_registry_size + 1
186 ax_helm_registry(ax_helm_registry_size)%type_name = type_name
187 ax_helm_registry(ax_helm_registry_size)%allocator => allocator
188 end subroutine register_ax_helm
190end submodule ax_helm_fctry
CPU Helmholtz matrix-vector product on compressed geometric factors.
Device Helmholtz matrix-vector product on compressed geometric factors.
SX Helmholtz matrix-vector product on compressed geometric factors.
CPU implementation of the one-sided SVV Helmholtz operator.
CPU implementation of the full-stress one-sided SVV Helmholtz operator.
Device implementation of the full-stress one-sided SVV operator.
Defines a Matrix-vector product.
integer, parameter neko_bcknd_sx
integer, parameter neko_bcknd_hip
integer, parameter neko_bcknd_device
integer, parameter neko_bcknd_cuda
integer, parameter neko_bcknd_xsmm
Data and filter construction for spectral vanishing viscosity.
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.
Matrix-vector product for a Helmholtz problem.
CPU matrix-vector product for a Helmholtz problem, reading the geometric factors from their compress...
Device matrix-vector product for a Helmholtz problem, reading the geometric factors from their compr...
SX matrix-vector product for a Helmholtz problem, reading the geometric factors from their compresse...
CPU matrix-vector product for a Helmholtz problem.
CPU matrix-vector product for a Helmholtz problem with full stress tensor.
CPU one-sided SVV Helmholtz operator.
Device matrix-vector product for an SVV Helmholtz problem.
CPU matrix-vector product for a Helmholtz problem.
Device one-sided full-stress SVV Helmholtz operator.
Spectral vanishing viscosity configuration and coefficients.