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, work3
228 type(
field_t),
pointer :: s11, s22, s33, s12, s13, s23
229 integer :: temp_indices(15)
261 call curl(ta1, ta2, ta3, u_e, v_e, w_e, work1, work2, c_xh, event)
262 call curl(wa1, wa2, wa3, ta1, ta2, ta3, work1, work2, c_xh, event)
270 call strain_rate(s11%x, s22%x, s33%x, s12%x, s13%x, s23%x, &
276 call dudxyz(ta1%x, mu%x, c_xh%drdx, c_xh%dsdx, c_xh%dtdx, c_xh)
277 call dudxyz(ta2%x, mu%x, c_xh%drdy, c_xh%dsdy, c_xh%dtdy, c_xh)
278 call dudxyz(ta3%x, mu%x, c_xh%drdz, c_xh%dsdz, c_xh%dtdz, c_xh)
282 wa1%x_d, wa2%x_d, wa3%x_d, &
283 s11%x_d, s22%x_d, s33%x_d, s12%x_d, s13%x_d, s23%x_d, &
284 f_x%x_d, f_y%x_d, f_z%x_d, &
285 c_xh%B_d, c_xh%h1_d, rho%x_d, n)
288 wa1%x_d, wa2%x_d, wa3%x_d, &
289 s11%x_d, s22%x_d, s33%x_d, s12%x_d, s13%x_d, s23%x_d, &
290 f_x%x_d, f_y%x_d, f_z%x_d, &
291 c_xh%B_d, c_xh%h1_d, rho%x_d, n)
294 wa1%x_d, wa2%x_d, wa3%x_d, &
295 s11%x_d, s22%x_d, s33%x_d, s12%x_d, s13%x_d, s23%x_d, &
296 f_x%x_d, f_y%x_d, f_z%x_d, &
297 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)
304 call device_opcolv(ta1%x_d, ta2%x_d, ta3%x_d, c_xh%Binv_d, gdim, n)
307 call cdtp(wa1%x, ta1%x, c_xh%drdx, c_xh%dsdx, c_xh%dtdx, c_xh)
308 call cdtp(wa2%x, ta2%x, c_xh%drdy, c_xh%dsdy, c_xh%dtdy, c_xh)
309 call cdtp(wa3%x, ta3%x, c_xh%drdz, c_xh%dsdz, c_xh%dtdz, c_xh)
312 call ax%compute(p_res%x, p%x, c_xh, p%msh, p%Xh)
329 call bc_sym_surface%apply_surfvec_dev(wa1%x_d, wa2%x_d, wa3%x_d, &
330 ta1%x_d , ta2%x_d, ta3%x_d)
337 call bc_prs_surface%apply_surfvec_dev(ta1%x_d, ta2%x_d, ta3%x_d, &
342 wa1%x_d, wa2%x_d, wa3%x_d, dtbd, n)
345 wa1%x_d, wa2%x_d, wa3%x_d, dtbd, n)
348 wa1%x_d, wa2%x_d, wa3%x_d, dtbd, n)
356 w_res, p, f_x, f_y, f_z, c_Xh, msh, Xh, mu, rho, bd, dt, n)
357 class(
ax_t),
intent(in) :: Ax
358 type(
mesh_t),
intent(inout) :: msh
359 type(
space_t),
intent(inout) :: Xh
360 type(
field_t),
intent(inout) :: p, u, v, w
361 type(
field_t),
intent(inout) :: u_res, v_res, w_res
362 type(
field_t),
intent(in) :: f_x, f_y, f_z
363 type(
coef_t),
intent(inout) :: c_Xh
364 type(
field_t),
intent(in) :: mu
365 type(
field_t),
intent(in) :: rho
366 real(kind=
rp),
intent(in) :: bd
367 real(kind=
rp),
intent(in) :: dt
368 real(kind=
rp) :: bddt
369 integer :: temp_indices(3)
370 type(
field_t),
pointer :: ta1, ta2, ta3
371 integer,
intent(in) :: n
383 call ax%compute_vector(u_res%x, v_res%x, w_res%x, u%x, v%x, w%x, c_xh,&
391 call opgrad(ta1%x, ta2%x, ta3%x, p%x, c_xh)
396 ta1%x_d, ta2%x_d, ta3%x_d, f_x%x_d, f_y%x_d, f_z%x_d, n)
399 ta1%x_d, ta2%x_d, ta3%x_d, f_x%x_d, f_y%x_d, f_z%x_d, n)
402 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 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_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.