15 use,
intrinsic :: iso_c_binding, only : c_ptr, c_int
39 wa1_d, wa2_d, wa3_d, s11_d, s22_d, s33_d, &
40 s12_d, s13_d, s23_d, f_u_d, f_v_d, f_w_d, &
41 B_d, h1_d, rho_d, n) &
42 bind(c, name =
'pnpn_prs_stress_res_part1_hip')
43 use,
intrinsic :: iso_c_binding
46 type(c_ptr),
value :: ta1_d, ta2_d, ta3_d
47 type(c_ptr),
value :: wa1_d, wa2_d, wa3_d
48 type(c_ptr),
value :: s11_d, s22_d, s33_d, s12_d, s13_d, s23_d
49 type(c_ptr),
value :: f_u_d, f_v_d, f_w_d
50 type(c_ptr),
value :: B_d, h1_d, rho_d
57 bind(c, name =
'pnpn_prs_res_part2_hip')
58 use,
intrinsic :: iso_c_binding
60 type(c_ptr),
value :: p_res_d, wa1_d, wa2_d, wa3_d
67 wa1_d, wa2_d, wa3_d, dtbd, n) &
68 bind(c, name =
'pnpn_prs_stress_res_part3_hip')
69 use,
intrinsic :: iso_c_binding
72 type(c_ptr),
value :: p_res_d, ta1_d, ta2_d, ta3_d
73 type(c_ptr),
value :: wa1_d, wa2_d, wa3_d
81 ta1_d, ta2_d, ta3_d, f_u_d, f_v_d, f_w_d, n) &
82 bind(c, name =
'pnpn_vel_res_update_hip')
83 use,
intrinsic :: iso_c_binding
85 type(c_ptr),
value :: u_res_d, v_res_d, w_res_d
86 type(c_ptr),
value :: ta1_d, ta2_d, ta3_d
87 type(c_ptr),
value :: f_u_d, f_v_d, f_w_d
94 wa1_d, wa2_d, wa3_d, s11_d, s22_d, s33_d, &
95 s12_d, s13_d, s23_d, f_u_d, f_v_d, f_w_d, &
96 B_d, h1_d, rho_d, n) &
97 bind(c, name =
'pnpn_prs_stress_res_part1_cuda')
98 use,
intrinsic :: iso_c_binding
101 type(c_ptr),
value :: ta1_d, ta2_d, ta3_d
102 type(c_ptr),
value :: wa1_d, wa2_d, wa3_d
103 type(c_ptr),
value :: s11_d, s22_d, s33_d, s12_d, s13_d, s23_d
104 type(c_ptr),
value :: f_u_d, f_v_d, f_w_d
105 type(c_ptr),
value :: B_d, h1_d, rho_d
112 bind(c, name =
'pnpn_prs_res_part2_cuda')
113 use,
intrinsic :: iso_c_binding
115 type(c_ptr),
value :: p_res_d, wa1_d, wa2_d, wa3_d
122 wa1_d, wa2_d, wa3_d, dtbd, n) &
123 bind(c, name =
'pnpn_prs_stress_res_part3_cuda')
124 use,
intrinsic :: iso_c_binding
127 type(c_ptr),
value :: p_res_d, ta1_d, ta2_d, ta3_d
128 type(c_ptr),
value :: wa1_d, wa2_d, wa3_d
136 ta1_d, ta2_d, ta3_d, f_u_d, f_v_d, f_w_d, n) &
137 bind(c, name =
'pnpn_vel_res_update_cuda')
138 use,
intrinsic :: iso_c_binding
140 type(c_ptr),
value :: u_res_d, v_res_d, w_res_d
141 type(c_ptr),
value :: ta1_d, ta2_d, ta3_d
142 type(c_ptr),
value :: f_u_d, f_v_d, f_w_d
149 wa1_d, wa2_d, wa3_d, s11_d, s22_d, s33_d, &
150 s12_d, s13_d, s23_d, f_u_d, f_v_d, f_w_d, &
151 B_d, h1_d, rho_d, n) &
152 bind(c, name =
'pnpn_prs_stress_res_part1_opencl')
153 use,
intrinsic :: iso_c_binding
156 type(c_ptr),
value :: ta1_d, ta2_d, ta3_d
157 type(c_ptr),
value :: wa1_d, wa2_d, wa3_d
158 type(c_ptr),
value :: s11_d, s22_d, s33_d, s12_d, s13_d, s23_d
159 type(c_ptr),
value :: f_u_d, f_v_d, f_w_d
160 type(c_ptr),
value :: B_d, h1_d, rho_d
167 bind(c, name =
'pnpn_prs_res_part2_opencl')
168 use,
intrinsic :: iso_c_binding
170 type(c_ptr),
value :: p_res_d, wa1_d, wa2_d, wa3_d
177 wa1_d, wa2_d, wa3_d, dtbd, n) &
178 bind(c, name =
'pnpn_prs_stress_res_part3_opencl')
179 use,
intrinsic :: iso_c_binding
182 type(c_ptr),
value :: p_res_d, ta1_d, ta2_d, ta3_d
183 type(c_ptr),
value :: wa1_d, wa2_d, wa3_d
192 ta1_d, ta2_d, ta3_d, f_u_d, f_v_d, f_w_d, n) &
193 bind(c, name =
'pnpn_vel_res_update_opencl')
194 use,
intrinsic :: iso_c_binding
196 type(c_ptr),
value :: u_res_d, v_res_d, w_res_d
197 type(c_ptr),
value :: ta1_d, ta2_d, ta3_d
198 type(c_ptr),
value :: f_u_d, f_v_d, f_w_d
207 w_e, f_x, f_y, f_z, c_Xh, gs_Xh, bc_prs_surface, bc_sym_surface, Ax, bd,&
209 type(
field_t),
intent(inout) :: p, u, v, w
210 type(
field_t),
intent(in) :: u_e, v_e, w_e
211 type(
field_t),
intent(inout) :: p_res
212 type(
field_t),
intent(in) :: f_x, f_y, f_z
213 type(
coef_t),
intent(inout) :: c_Xh
214 type(
gs_t),
intent(inout) :: gs_Xh
217 class(
ax_t),
intent(inout) :: Ax
218 real(kind=
rp),
intent(in) :: bd
219 real(kind=
rp),
intent(in) :: dt
220 type(
field_t),
intent(in) :: mu
221 type(
field_t),
intent(in) :: rho
222 type(c_ptr),
intent(inout) :: event
223 real(kind=
rp) :: dtbd
224 integer :: n, nelv, lxyz, gdim
227 type(
field_t),
pointer :: ta1, ta2, ta3, wa1, wa2, wa3, work1, work2
228 type(
field_t),
pointer :: s11, s22, s33, s12, s13, s23
229 integer :: temp_indices(14)
260 call curl(ta1, ta2, ta3, u_e, v_e, w_e, work1, work2, c_xh, event)
261 call curl(wa1, wa2, wa3, ta1, ta2, ta3, work1, work2, c_xh, event)
269 call strain_rate(s11%x, s22%x, s33%x, s12%x, s13%x, s23%x, &
275 call dudxyz(ta1%x, mu%x, c_xh%drdx, c_xh%dsdx, c_xh%dtdx, c_xh)
276 call dudxyz(ta2%x, mu%x, c_xh%drdy, c_xh%dsdy, c_xh%dtdy, c_xh)
277 call dudxyz(ta3%x, mu%x, c_xh%drdz, c_xh%dsdz, c_xh%dtdz, c_xh)
281 wa1%x_d, wa2%x_d, wa3%x_d, &
282 s11%x_d, s22%x_d, s33%x_d, s12%x_d, s13%x_d, s23%x_d, &
283 f_x%x_d, f_y%x_d, f_z%x_d, &
284 c_xh%B_d, c_xh%h1_d, rho%x_d, n)
287 wa1%x_d, wa2%x_d, wa3%x_d, &
288 s11%x_d, s22%x_d, s33%x_d, s12%x_d, s13%x_d, s23%x_d, &
289 f_x%x_d, f_y%x_d, f_z%x_d, &
290 c_xh%B_d, c_xh%h1_d, rho%x_d, n)
293 wa1%x_d, wa2%x_d, wa3%x_d, &
294 s11%x_d, s22%x_d, s33%x_d, s12%x_d, s13%x_d, s23%x_d, &
295 f_x%x_d, f_y%x_d, f_z%x_d, &
296 c_xh%B_d, c_xh%h1_d, rho%x_d, n)
300 call gs_xh%op(ta1, gs_op_add)
301 call gs_xh%op(ta2, gs_op_add)
302 call gs_xh%op(ta3, gs_op_add)
305 call device_opcolv(ta1%x_d, ta2%x_d, ta3%x_d, c_xh%Binv_d, gdim, n)
308 call cdtp(wa1%x, ta1%x, c_xh%drdx, c_xh%dsdx, c_xh%dtdx, c_xh)
309 call cdtp(wa2%x, ta2%x, c_xh%drdy, c_xh%dsdy, c_xh%dtdy, c_xh)
310 call cdtp(wa3%x, ta3%x, c_xh%drdz, c_xh%dsdz, c_xh%dtdz, c_xh)
313 call ax%compute(p_res%x, p%x, c_xh, p%msh, p%Xh)
330 call bc_sym_surface%apply_surfvec_dev(wa1%x_d, wa2%x_d, wa3%x_d, &
331 ta1%x_d , ta2%x_d, ta3%x_d)
338 call bc_prs_surface%apply_surfvec_dev(ta1%x_d, ta2%x_d, ta3%x_d, &
343 wa1%x_d, wa2%x_d, wa3%x_d, dtbd, n)
346 wa1%x_d, wa2%x_d, wa3%x_d, dtbd, n)
349 wa1%x_d, wa2%x_d, wa3%x_d, dtbd, n)
357 w_res, p, f_x, f_y, f_z, c_Xh, msh, Xh, mu, rho, bd, dt, n)
358 class(
ax_t),
intent(in) :: Ax
359 type(
mesh_t),
intent(inout) :: msh
360 type(
space_t),
intent(inout) :: Xh
361 type(
field_t),
intent(inout) :: p, u, v, w
362 type(
field_t),
intent(inout) :: u_res, v_res, w_res
363 type(
field_t),
intent(in) :: f_x, f_y, f_z
364 type(
coef_t),
intent(inout) :: c_Xh
365 type(
field_t),
intent(in) :: mu
366 type(
field_t),
intent(in) :: rho
367 real(kind=
rp),
intent(in) :: bd
368 real(kind=
rp),
intent(in) :: dt
369 real(kind=
rp) :: bddt
370 integer :: temp_indices(3)
371 type(
field_t),
pointer :: ta1, ta2, ta3
372 integer,
intent(in) :: n
384 call ax%compute_vector(u_res%x, v_res%x, w_res%x, u%x, v%x, w%x, c_xh,&
392 call opgrad(ta1%x, ta2%x, ta3%x, p%x, c_xh)
397 ta1%x_d, ta2%x_d, ta3%x_d, f_x%x_d, f_y%x_d, f_z%x_d, n)
400 ta1%x_d, ta2%x_d, ta3%x_d, f_x%x_d, f_y%x_d, f_z%x_d, n)
403 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_invcol1(a_d, n, strm)
Invert a vector .
subroutine, public device_rzero(a_d, n, strm)
Zero a real vector.
subroutine, public device_cmult(a_d, c, n, strm)
Multiplication by constant c .
subroutine, public device_copy(a_d, b_d, n, strm)
Copy a vector .
subroutine, public device_col2(a_d, b_d, n, strm)
Vector multiplication .
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, event)
subroutine, public strain_rate(s11, s22, s33, s12, s13, s23, u, v, w, coef)
Compute the strain rate tensor, i.e 0.5 * du_i/dx_j + du_j/dx_i.
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, public dudxyz(du, u, dr, ds, dt, coef)
Compute derivative of a scalar field along a single direction.
Residuals in the Pn-Pn formulation (device version)
subroutine pnpn_vel_res_stress_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_stress_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)
Defines Pressure and velocity residuals in the Pn-Pn formulation.
Defines a registry for storing and requesting temporary objects This can be used when you have a func...
type(scratch_registry_t), target, public neko_scratch_registry
Global scratch registry.
Defines a function space.
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_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_stress_res_part1_opencl(void *ta1, void *ta2, void *ta3, void *wa1, void *wa2, void *wa3, void *s11, void *s22, void *s33, void *s12, void *s13, void *s23, void *f_u, void *f_v, void *f_w, void *B, void *h1, void *rho, int *n)
void pnpn_prs_stress_res_part3_opencl(void *p_res, void *ta1, void *ta2, void *ta3, void *wa1, void *wa2, void *wa3, real *dtbd, int *n)
void pnpn_prs_stress_res_part1_cuda(void *ta1, void *ta2, void *ta3, void *wa1, void *wa2, void *wa3, void *s11, void *s22, void *s33, void *s12, void *s13, void *s23, void *f_u, void *f_v, void *f_w, void *B, void *h1, void *rho, int *n)
void pnpn_prs_stress_res_part3_cuda(void *p_res, void *ta1, void *ta2, void *ta3, void *wa1, void *wa2, void *wa3, real *dtbd, 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.
Device implementation of the pressure residual for the PnPn fluid with full viscous stress formulatio...
Device implementation of the velocity residual for the PnPn fluid with full viscous stress formulatio...
Abstract type to compute pressure residual.
Abstract type to compute velocity residual.
The function space for the SEM solution fields.