42 use,
intrinsic :: iso_c_binding, only : c_ptr, c_int
56 drdx_d, drdy_d, drdz_d, dsdx_d, dsdy_d, dsdz_d, &
57 dtdx_d, dtdy_d, dtdz_d, jacinv_d, w3_d, svv_h1_d, &
58 filter_r_d, filter_s_d, filter_t_d, nelv, lx) &
59 bind(c, name=
'hip_ax_helm_svv_one_sided')
60 use,
intrinsic :: iso_c_binding, only : c_ptr, c_int
61 type(c_ptr),
value :: w_d, u_d
62 type(c_ptr),
value :: dx_d, dy_d, dz_d, h1_d
63 type(c_ptr),
value :: drdx_d, drdy_d, drdz_d
64 type(c_ptr),
value :: dsdx_d, dsdy_d, dsdz_d
65 type(c_ptr),
value :: dtdx_d, dtdy_d, dtdz_d
66 type(c_ptr),
value :: jacinv_d, w3_d, svv_h1_d
67 type(c_ptr),
value :: filter_r_d, filter_s_d, filter_t_d
68 integer(c_int) :: nelv, lx
74 drdx_d, drdy_d, drdz_d, dsdx_d, dsdy_d, dsdz_d, &
75 dtdx_d, dtdy_d, dtdz_d, jacinv_d, w3_d, svv_h1_d, &
76 filter_r_d, filter_s_d, filter_t_d, nelv, lx) &
77 bind(c, name=
'cuda_ax_helm_svv_one_sided')
78 use,
intrinsic :: iso_c_binding, only : c_ptr, c_int
79 type(c_ptr),
value :: w_d, u_d
80 type(c_ptr),
value :: dx_d, dy_d, dz_d, h1_d
81 type(c_ptr),
value :: drdx_d, drdy_d, drdz_d
82 type(c_ptr),
value :: dsdx_d, dsdy_d, dsdz_d
83 type(c_ptr),
value :: dtdx_d, dtdy_d, dtdz_d
84 type(c_ptr),
value :: jacinv_d, w3_d, svv_h1_d
85 type(c_ptr),
value :: filter_r_d, filter_s_d, filter_t_d
86 integer(c_int) :: nelv, lx
102 type(
mesh_t),
intent(in) :: msh
103 type(
space_t),
intent(in) :: Xh
104 type(
coef_t),
intent(in) :: coef
105 real(kind=
rp),
intent(inout) :: w(xh%lx, xh%ly, xh%lz, msh%nelv)
106 real(kind=
rp),
intent(in) :: u(xh%lx, xh%ly, xh%lz, msh%nelv)
107 type(c_ptr) :: u_d, w_d
108 type(c_ptr) :: filter_r_d, filter_s_d, filter_t_d
113 if (index(this%svv%direction,
"r") > 0)
then
114 filter_r_d = this%svv%filter%fh_d
116 filter_r_d = this%svv%ident_d
119 if (index(this%svv%direction,
"s") > 0)
then
120 filter_s_d = this%svv%filter%fht_d
122 filter_s_d = this%svv%ident_d
125 if (index(this%svv%direction,
"t") > 0)
then
126 filter_t_d = this%svv%filter%fht_d
128 filter_t_d = this%svv%ident_d
133 coef%h1_d, coef%drdx_d, coef%drdy_d, coef%drdz_d, &
134 coef%dsdx_d, coef%dsdy_d, coef%dsdz_d, &
135 coef%dtdx_d, coef%dtdy_d, coef%dtdz_d, coef%jacinv_d, &
136 xh%w3_d, this%svv%h1_d, filter_r_d, filter_s_d, filter_t_d, &
140 coef%h1_d, coef%drdx_d, coef%drdy_d, coef%drdz_d, &
141 coef%dsdx_d, coef%dsdy_d, coef%dsdz_d, &
142 coef%dtdx_d, coef%dtdy_d, coef%dtdz_d, coef%jacinv_d, &
143 xh%w3_d, this%svv%h1_d, filter_r_d, filter_s_d, filter_t_d, &
146 call neko_error(
'OPENCL is not implemented for SVV')
148 call neko_error(
'Metal is not implemented for SVV')
150 call neko_error(
'No supported device backend is enabled for SVV')
154 call device_addcol4(w_d, coef%h2_d, coef%B_d, u_d, coef%dof%size())
void cuda_ax_helm_svv_one_sided(void *w, void *u, void *dx, void *dy, void *dz, void *h1, void *drdx, void *drdy, void *drdz, void *dsdx, void *dsdy, void *dsdz, void *dtdx, void *dtdy, void *dtdz, void *jacinv, void *w3, void *h1_svv, void *filter_r, void *filter_s, void *filter_t, int *nelv, int *lx)
Return the device pointer for an associated Fortran array.
subroutine ax_helm_svv_one_sided_device_compute(this, w, u, coef, msh, xh)
Compute the product.
Base type for an SVV Helmholtz operator.
subroutine, public device_addcol4(a_d, b_d, c_d, d_d, n, strm)
Returns .
Device abstraction, common interface for various accelerators.
integer, parameter, public rp
Global precision used in computations.
Defines a function space.
Helmholtz operator carrying a non-owning SVV object.
Device matrix-vector product for an SVV Helmholtz problem.
Coefficients defined on a given (mesh, ) tuple. Arrays use indices (i,j,k,e): element e,...
The function space for the SEM solution fields.