46 use,
intrinsic :: iso_c_binding, only : c_ptr, c_int
64 wa1_d, wa2_d, wa3_d, f_u_d, f_v_d, f_w_d, &
65 B_d, h1_d, mu, rho, n) &
66 bind(c, name =
'pnpn_prs_res_part1_hip')
67 use,
intrinsic :: iso_c_binding
70 type(c_ptr),
value :: ta1_d, ta2_d, ta3_d
71 type(c_ptr),
value :: wa1_d, wa2_d, wa3_d
72 type(c_ptr),
value :: f_u_d, f_v_d, f_w_d
73 type(c_ptr),
value :: B_d, h1_d
81 bind(c, name =
'pnpn_prs_res_part2_hip')
82 use,
intrinsic :: iso_c_binding
84 type(c_ptr),
value :: p_res_d, wa1_d, wa2_d, wa3_d
91 bind(c, name =
'pnpn_prs_res_part3_hip')
92 use,
intrinsic :: iso_c_binding
95 type(c_ptr),
value :: p_res_d, ta1_d, ta2_d, ta3_d
103 ta1_d, ta2_d, ta3_d, f_u_d, f_v_d, f_w_d, n) &
104 bind(c, name =
'pnpn_vel_res_update_hip')
105 use,
intrinsic :: iso_c_binding
107 type(c_ptr),
value :: u_res_d, v_res_d, w_res_d
108 type(c_ptr),
value :: ta1_d, ta2_d, ta3_d
109 type(c_ptr),
value :: f_u_d, f_v_d, f_w_d
116 wa1_d, wa2_d, wa3_d, f_u_d, f_v_d, f_w_d, &
117 B_d, h1_d, mu, rho, n) &
118 bind(c, name =
'pnpn_prs_res_part1_cuda')
119 use,
intrinsic :: iso_c_binding
122 type(c_ptr),
value :: ta1_d, ta2_d, ta3_d
123 type(c_ptr),
value :: wa1_d, wa2_d, wa3_d
124 type(c_ptr),
value :: f_u_d, f_v_d, f_w_d
125 type(c_ptr),
value :: B_d, h1_d
126 real(c_rp) :: mu, rho
133 bind(c, name =
'pnpn_prs_res_part2_cuda')
134 use,
intrinsic :: iso_c_binding
136 type(c_ptr),
value :: p_res_d, wa1_d, wa2_d, wa3_d
143 bind(c, name =
'pnpn_prs_res_part3_cuda')
144 use,
intrinsic :: iso_c_binding
147 type(c_ptr),
value :: p_res_d, ta1_d, ta2_d, ta3_d
155 ta1_d, ta2_d, ta3_d, f_u_d, f_v_d, f_w_d, n) &
156 bind(c, name =
'pnpn_vel_res_update_cuda')
157 use,
intrinsic :: iso_c_binding
159 type(c_ptr),
value :: u_res_d, v_res_d, w_res_d
160 type(c_ptr),
value :: ta1_d, ta2_d, ta3_d
161 type(c_ptr),
value :: f_u_d, f_v_d, f_w_d
168 wa1_d, wa2_d, wa3_d, f_u_d, f_v_d, f_w_d, &
169 B_d, h1_d, mu, rho, n) &
170 bind(c, name =
'pnpn_prs_res_part1_opencl')
171 use,
intrinsic :: iso_c_binding
174 type(c_ptr),
value :: ta1_d, ta2_d, ta3_d
175 type(c_ptr),
value :: wa1_d, wa2_d, wa3_d
176 type(c_ptr),
value :: f_u_d, f_v_d, f_w_d
177 type(c_ptr),
value :: B_d, h1_d
178 real(c_rp) :: mu, rho
185 bind(c, name =
'pnpn_prs_res_part2_opencl')
186 use,
intrinsic :: iso_c_binding
188 type(c_ptr),
value :: p_res_d, wa1_d, wa2_d, wa3_d
195 n) bind(c, name = 'pnpn_prs_res_part3_opencl')
196 use,
intrinsic :: iso_c_binding
199 type(c_ptr),
value :: p_res_d, ta1_d, ta2_d, ta3_d
207 ta1_d, ta2_d, ta3_d, f_u_d, f_v_d, f_w_d, n) &
208 bind(c, name =
'pnpn_vel_res_update_opencl')
209 use,
intrinsic :: iso_c_binding
211 type(c_ptr),
value :: u_res_d, v_res_d, w_res_d
212 type(c_ptr),
value :: ta1_d, ta2_d, ta3_d
213 type(c_ptr),
value :: f_u_d, f_v_d, f_w_d
223 f_x, f_y, f_z, c_Xh, gs_Xh, bc_prs_surface, bc_sym_surface, Ax, bd, dt,&
225 type(
field_t),
intent(inout) :: p, u, v, w
226 type(
field_t),
intent(inout) :: u_e, v_e, w_e
227 type(
field_t),
intent(inout) :: p_res
228 type(
field_t),
intent(inout) :: f_x, f_y, f_z
229 type(
coef_t),
intent(inout) :: c_Xh
230 type(
gs_t),
intent(inout) :: gs_Xh
233 class(
ax_t),
intent(inout) :: Ax
234 real(kind=
rp),
intent(inout) :: bd
235 real(kind=
rp),
intent(in) :: dt
236 type(
field_t),
intent(in) :: mu
237 type(
field_t),
intent(in) :: rho
238 real(kind=
rp) :: dtbd
239 real(kind=
rp) :: mu_val, rho_val
241 type(
field_t),
pointer :: ta1, ta2, ta3, wa1, wa2, wa3, work1, work2
242 integer :: temp_indices(8)
246 mu_val = mu%x(1,1,1,1)
247 rho_val = rho%x(1,1,1,1)
261 call curl(ta1, ta2, ta3, u_e, v_e, w_e, work1, work2, c_xh)
262 call curl(wa1, wa2, wa3, ta1, ta2, ta3, work1, work2, c_xh)
267 wa1%x_d, wa2%x_d, wa3%x_d, f_x%x_d, f_y%x_d, f_z%x_d, &
268 c_xh%B_d, c_xh%h1_d, mu_val, rho_val, n)
272 wa1%x_d, wa2%x_d, wa3%x_d, f_x%x_d, f_y%x_d, f_z%x_d, &
273 c_xh%B_d, c_xh%h1_d, mu_val, rho_val, n)
276 wa1%x_d, wa2%x_d, wa3%x_d, f_x%x_d, f_z%x_d, f_z%x_d, &
277 c_xh%B_d, c_xh%h1_d, mu_val, rho_val, n)
282 call gs_xh%op(ta1, gs_op_add)
283 call gs_xh%op(ta2, gs_op_add)
284 call gs_xh%op(ta3, gs_op_add)
286 call device_opcolv(ta1%x_d, ta2%x_d, ta3%x_d, c_xh%Binv_d, gdim, n)
288 call cdtp(wa1%x, ta1%x, c_xh%drdx, c_xh%dsdx, c_xh%dtdx, c_xh)
289 call cdtp(wa2%x, ta2%x, c_xh%drdy, c_xh%dsdy, c_xh%dtdy, c_xh)
290 call cdtp(wa3%x, ta3%x, c_xh%drdz, c_xh%dsdz, c_xh%dtdz, c_xh)
292 call ax%compute(p_res%x, p%x, c_xh, p%msh, p%Xh)
309 call bc_sym_surface%apply_surfvec_dev(wa1%x_d, wa2%x_d, wa3%x_d, ta1%x_d, &
327 call bc_prs_surface%apply_surfvec_dev(ta1%x_d, ta2%x_d, ta3%x_d, &
344 p, f_x, f_y, f_z, c_Xh, msh, Xh, mu, rho, bd, dt, n)
345 class(
ax_t),
intent(in) :: Ax
346 type(
mesh_t),
intent(inout) :: msh
347 type(
space_t),
intent(inout) :: Xh
348 type(
field_t),
intent(inout) :: p, u, v, w
349 type(
field_t),
intent(inout) :: u_res, v_res, w_res
350 type(
field_t),
intent(inout) :: f_x, f_y, f_z
351 type(
coef_t),
intent(inout) :: c_Xh
352 type(
field_t),
intent(in) :: mu
353 type(
field_t),
intent(in) :: rho
354 real(kind=
rp),
intent(in) :: bd
355 real(kind=
rp),
intent(in) :: dt
356 integer,
intent(in) :: n
357 integer :: temp_indices(3)
358 type(
field_t),
pointer :: ta1, ta2, ta3
359 real(kind=
rp) :: mu_val, rho_val
362 mu_val = mu%x(1,1,1,1)
363 rho_val = rho%x(1,1,1,1)
369 call ax%compute_vector(u_res%x, v_res%x, w_res%x, &
370 u%x, v%x, w%x, c_xh, msh, xh)
376 call opgrad(ta1%x, ta2%x, ta3%x, p%x, c_xh)
380 ta1%x_d, ta2%x_d, ta3%x_d, f_x%x_d, f_y%x_d, f_z%x_d, n)
383 ta1%x_d, ta2%x_d, ta3%x_d, f_x%x_d, f_y%x_d, f_z%x_d, n)
386 ta1%x_d, ta2%x_d, ta3%x_d, f_x%x_d, f_y%x_d, f_z%x_d, n)
Defines a Matrix-vector product.
subroutine, public device_rzero(a_d, n)
Zero a real vector.
subroutine, public device_cfill(a_d, c, n)
Set all elements to a constant c .
subroutine, public device_opcolv(a1_d, a2_d, a3_d, c_d, gdim, n)
Dirichlet condition applied in the facet normal direction.
integer, parameter, public c_rp
integer, parameter, public rp
Global precision used in computations.
subroutine, public opgrad(ux, uy, uz, u, coef, es, ee)
Compute the weak gradient of a scalar field, i.e. the gradient multiplied by the mass matrix.
subroutine, public curl(w1, w2, w3, u1, u2, u3, work1, work2, coef)
subroutine, public cdtp(dtx, x, dr, ds, dt, coef, es, ee)
Apply D^T to a scalar field, where D is the derivative matrix.
subroutine pnpn_vel_res_device_compute(Ax, u, v, w, u_res, v_res, w_res, p, f_x, f_y, f_z, c_Xh, msh, Xh, mu, rho, bd, dt, n)
subroutine pnpn_prs_res_device_compute(p, p_res, u, v, w, u_e, v_e, w_e, f_x, f_y, f_z, c_Xh, gs_Xh, bc_prs_surface, bc_sym_surface, Ax, bd, dt, mu, rho)
Defines Pressure and velocity residuals in the Pn-Pn formulation.
Defines a registry for storing and requesting temporary fields This can be used when you have a funct...
type(scratch_registry_t), target, public neko_scratch_registry
Global scratch registry.
Defines a function space.
void pnpn_prs_res_part3_opencl(void *p_res, void *ta1, void *ta2, void *ta3, real *dtbd, int *n)
void pnpn_prs_res_part1_opencl(void *ta1, void *ta2, void *ta3, void *wa1, void *wa2, void *wa3, void *f_u, void *f_v, void *f_w, void *B, void *h1, real *mu, real *rho, int *n)
void pnpn_prs_res_part2_opencl(void *p_res, void *wa1, void *wa2, void *wa3, int *n)
void pnpn_vel_res_update_opencl(void *u_res, void *v_res, void *w_res, void *ta1, void *ta2, void *ta3, void *f_u, void *f_v, void *f_w, int *n)
void pnpn_prs_res_part2_cuda(void *p_res, void *wa1, void *wa2, void *wa3, int *n)
void pnpn_prs_res_part3_cuda(void *p_res, void *ta1, void *ta2, void *ta3, real *dtbd, int *n)
void pnpn_vel_res_update_cuda(void *u_res, void *v_res, void *w_res, void *ta1, void *ta2, void *ta3, void *f_u, void *f_v, void *f_w, int *n)
void pnpn_prs_res_part1_cuda(void *ta1, void *ta2, void *ta3, void *wa1, void *wa2, void *wa3, void *f_u, void *f_v, void *f_w, void *B, void *h1, real *mu, real *rho, int *n)
Base type for a matrix-vector product providing .
Coefficients defined on a given (mesh, ) tuple. Arrays use indices (i,j,k,e): element e,...
Dirichlet condition in facet normal direction.
Abstract type to compute pressure residual.
Abstract type to compute velocity residual.
The function space for the SEM solution fields.