47 use,
intrinsic :: iso_c_binding, only : c_ptr, c_int
65 wa1_d, wa2_d, wa3_d, f_u_d, f_v_d, f_w_d, &
66 B_d, h1_d, mu, rho, n) &
67 bind(c, name =
'pnpn_prs_res_part1_hip')
68 use,
intrinsic :: iso_c_binding
71 type(c_ptr),
value :: ta1_d, ta2_d, ta3_d
72 type(c_ptr),
value :: wa1_d, wa2_d, wa3_d
73 type(c_ptr),
value :: f_u_d, f_v_d, f_w_d
74 type(c_ptr),
value :: B_d, h1_d
82 bind(c, name =
'pnpn_prs_res_part2_hip')
83 use,
intrinsic :: iso_c_binding
85 type(c_ptr),
value :: p_res_d, wa1_d, wa2_d, wa3_d
92 bind(c, name =
'pnpn_prs_res_part3_hip')
93 use,
intrinsic :: iso_c_binding
96 type(c_ptr),
value :: p_res_d, ta1_d, ta2_d, ta3_d
104 ta1_d, ta2_d, ta3_d, f_u_d, f_v_d, f_w_d, n) &
105 bind(c, name =
'pnpn_vel_res_update_hip')
106 use,
intrinsic :: iso_c_binding
108 type(c_ptr),
value :: u_res_d, v_res_d, w_res_d
109 type(c_ptr),
value :: ta1_d, ta2_d, ta3_d
110 type(c_ptr),
value :: f_u_d, f_v_d, f_w_d
117 wa1_d, wa2_d, wa3_d, f_u_d, f_v_d, f_w_d, &
118 B_d, h1_d, mu, rho, n) &
119 bind(c, name =
'pnpn_prs_res_part1_cuda')
120 use,
intrinsic :: iso_c_binding
123 type(c_ptr),
value :: ta1_d, ta2_d, ta3_d
124 type(c_ptr),
value :: wa1_d, wa2_d, wa3_d
125 type(c_ptr),
value :: f_u_d, f_v_d, f_w_d
126 type(c_ptr),
value :: B_d, h1_d
127 real(c_rp) :: mu, rho
134 bind(c, name =
'pnpn_prs_res_part2_cuda')
135 use,
intrinsic :: iso_c_binding
137 type(c_ptr),
value :: p_res_d, wa1_d, wa2_d, wa3_d
144 bind(c, name =
'pnpn_prs_res_part3_cuda')
145 use,
intrinsic :: iso_c_binding
148 type(c_ptr),
value :: p_res_d, ta1_d, ta2_d, ta3_d
156 ta1_d, ta2_d, ta3_d, f_u_d, f_v_d, f_w_d, n) &
157 bind(c, name =
'pnpn_vel_res_update_cuda')
158 use,
intrinsic :: iso_c_binding
160 type(c_ptr),
value :: u_res_d, v_res_d, w_res_d
161 type(c_ptr),
value :: ta1_d, ta2_d, ta3_d
162 type(c_ptr),
value :: f_u_d, f_v_d, f_w_d
169 wa1_d, wa2_d, wa3_d, f_u_d, f_v_d, f_w_d, &
170 B_d, h1_d, mu, rho, n) &
171 bind(c, name =
'pnpn_prs_res_part1_opencl')
172 use,
intrinsic :: iso_c_binding
175 type(c_ptr),
value :: ta1_d, ta2_d, ta3_d
176 type(c_ptr),
value :: wa1_d, wa2_d, wa3_d
177 type(c_ptr),
value :: f_u_d, f_v_d, f_w_d
178 type(c_ptr),
value :: B_d, h1_d
179 real(c_rp) :: mu, rho
186 bind(c, name =
'pnpn_prs_res_part2_opencl')
187 use,
intrinsic :: iso_c_binding
189 type(c_ptr),
value :: p_res_d, wa1_d, wa2_d, wa3_d
196 n) bind(c, name = 'pnpn_prs_res_part3_opencl')
197 use,
intrinsic :: iso_c_binding
200 type(c_ptr),
value :: p_res_d, ta1_d, ta2_d, ta3_d
208 ta1_d, ta2_d, ta3_d, f_u_d, f_v_d, f_w_d, n) &
209 bind(c, name =
'pnpn_vel_res_update_opencl')
210 use,
intrinsic :: iso_c_binding
212 type(c_ptr),
value :: u_res_d, v_res_d, w_res_d
213 type(c_ptr),
value :: ta1_d, ta2_d, ta3_d
214 type(c_ptr),
value :: f_u_d, f_v_d, f_w_d
224 f_x, f_y, f_z, c_Xh, gs_Xh, bc_prs_surface, bc_sym_surface, Ax, bd, dt,&
226 type(
field_t),
intent(inout) :: p, u, v, w
227 type(
field_t),
intent(in) :: u_e, v_e, w_e
228 type(
field_t),
intent(inout) :: p_res
229 type(
field_t),
intent(in) :: f_x, f_y, f_z
230 type(
coef_t),
intent(inout) :: c_Xh
231 type(
gs_t),
intent(inout) :: gs_Xh
234 class(
ax_t),
intent(inout) :: Ax
235 real(kind=
rp),
intent(in) :: bd
236 real(kind=
rp),
intent(in) :: dt
237 type(
field_t),
intent(in) :: mu
238 type(
field_t),
intent(in) :: rho
239 type(c_ptr),
intent(inout) :: event
240 real(kind=
rp) :: dtbd
241 real(kind=
rp) :: mu_val, rho_val
243 type(
field_t),
pointer :: ta1, ta2, ta3, wa1, wa2, wa3, work1, work2
244 integer :: temp_indices(8)
248 mu_val = mu%x(1,1,1,1)
249 rho_val = rho%x(1,1,1,1)
263 call curl(ta1, ta2, ta3, u_e, v_e, w_e, work1, work2, c_xh, event)
264 call curl(wa1, wa2, wa3, ta1, ta2, ta3, work1, work2, c_xh, event)
269 wa1%x_d, wa2%x_d, wa3%x_d, f_x%x_d, f_y%x_d, f_z%x_d, &
270 c_xh%B_d, c_xh%h1_d, mu_val, rho_val, n)
274 wa1%x_d, wa2%x_d, wa3%x_d, f_x%x_d, f_y%x_d, f_z%x_d, &
275 c_xh%B_d, c_xh%h1_d, mu_val, rho_val, n)
278 wa1%x_d, wa2%x_d, wa3%x_d, f_x%x_d, f_z%x_d, f_z%x_d, &
279 c_xh%B_d, c_xh%h1_d, mu_val, rho_val, n)
284 call gs_xh%op(ta1, gs_op_add, event)
285 call gs_xh%op(ta2, gs_op_add, event)
286 call gs_xh%op(ta3, gs_op_add, event)
289 call device_opcolv(ta1%x_d, ta2%x_d, ta3%x_d, c_xh%Binv_d, gdim, n)
291 call cdtp(wa1%x, ta1%x, c_xh%drdx, c_xh%dsdx, c_xh%dtdx, c_xh)
292 call cdtp(wa2%x, ta2%x, c_xh%drdy, c_xh%dsdy, c_xh%dtdy, c_xh)
293 call cdtp(wa3%x, ta3%x, c_xh%drdz, c_xh%dsdz, c_xh%dtdz, c_xh)
295 call ax%compute(p_res%x, p%x, c_xh, p%msh, p%Xh)
312 call bc_sym_surface%apply_surfvec_dev(wa1%x_d, wa2%x_d, wa3%x_d, ta1%x_d, &
330 call bc_prs_surface%apply_surfvec_dev(ta1%x_d, ta2%x_d, ta3%x_d, &
347 p, f_x, f_y, f_z, c_Xh, msh, Xh, mu, rho, bd, dt, n)
348 class(
ax_t),
intent(in) :: Ax
349 type(
mesh_t),
intent(inout) :: msh
350 type(
space_t),
intent(inout) :: Xh
351 type(
field_t),
intent(inout) :: p, u, v, w
352 type(
field_t),
intent(inout) :: u_res, v_res, w_res
353 type(
field_t),
intent(in) :: f_x, f_y, f_z
354 type(
coef_t),
intent(inout) :: c_Xh
355 type(
field_t),
intent(in) :: mu
356 type(
field_t),
intent(in) :: rho
357 real(kind=
rp),
intent(in) :: bd
358 real(kind=
rp),
intent(in) :: dt
359 integer,
intent(in) :: n
360 integer :: temp_indices(3)
361 type(
field_t),
pointer :: ta1, ta2, ta3
362 real(kind=
rp) :: mu_val, rho_val
365 mu_val = mu%x(1,1,1,1)
366 rho_val = rho%x(1,1,1,1)
372 call ax%compute_vector(u_res%x, v_res%x, w_res%x, &
373 u%x, v%x, w%x, c_xh, msh, xh)
379 call opgrad(ta1%x, ta2%x, ta3%x, p%x, c_xh)
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)
389 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)
Device abstraction, common interface for various accelerators.
subroutine, public device_event_sync(event)
Synchronize an event.
subroutine, public device_stream_wait_event(stream, event, flags)
Synchronize a device stream with an event.
type(c_ptr), bind(C), public glb_cmd_queue
Global command queue.
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, event)
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_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, event)
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)
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.