42 use,
intrinsic :: iso_c_binding, only : c_ptr, c_int
59 effective_visc_d, n) &
60 bind(c, name =
'euler_res_part_visc_hip')
61 use,
intrinsic :: iso_c_binding
64 type(c_ptr),
value :: rhs_field_d, Binv_d, field_d, effective_visc_d
71 m_x, m_y, m_z, rho_field, p, n) &
72 bind(c, name =
'euler_res_part_mx_flux_hip')
73 use,
intrinsic :: iso_c_binding
75 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
82 m_x, m_y, m_z, rho_field, p, n) &
83 bind(c, name =
'euler_res_part_my_flux_hip')
84 use,
intrinsic :: iso_c_binding
86 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
93 m_x, m_y, m_z, rho_field, p, n) &
94 bind(c, name =
'euler_res_part_mz_flux_hip')
95 use,
intrinsic :: iso_c_binding
97 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
104 m_x, m_y, m_z, rho_field, p, E, n) &
105 bind(c, name =
'euler_res_part_E_flux_hip')
106 use,
intrinsic :: iso_c_binding
108 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p, E
115 rhs_m_y_d, rhs_m_z_d, &
116 rhs_E_d, mult_d, n) &
117 bind(c, name =
'euler_res_part_coef_mult_hip')
118 use,
intrinsic :: iso_c_binding
120 type(c_ptr),
value :: rhs_rho_field_d, rhs_m_x_d, rhs_m_y_d, rhs_m_z_d, &
128 k_rho_i, k_m_x_i, k_m_y_i, &
131 bind(c, name =
'euler_res_part_rk_sum_hip')
132 use,
intrinsic :: iso_c_binding
135 type(c_ptr),
value :: rho, m_x, m_y, m_z, E, &
136 k_rho_i, k_m_x_i, k_m_y_i, &
138 real(c_rp) :: dt, b_i
145 effective_visc_d, n) &
146 bind(c, name =
'euler_res_part_visc_cuda')
147 use,
intrinsic :: iso_c_binding
150 type(c_ptr),
value :: rhs_field_d, Binv_d, field_d, effective_visc_d
157 m_x, m_y, m_z, rho_field, p, n) &
158 bind(c, name =
'euler_res_part_mx_flux_cuda')
159 use,
intrinsic :: iso_c_binding
161 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
168 m_x, m_y, m_z, rho_field, p, n) &
169 bind(c, name =
'euler_res_part_my_flux_cuda')
170 use,
intrinsic :: iso_c_binding
172 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
179 m_x, m_y, m_z, rho_field, p, n) &
180 bind(c, name =
'euler_res_part_mz_flux_cuda')
181 use,
intrinsic :: iso_c_binding
183 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
189 subroutine euler_res_part_e_flux_cuda(f_x, f_y, f_z, &
190 m_x, m_y, m_z, rho_field, p, E, n) &
191 bind(c, name =
'euler_res_part_E_flux_cuda')
192 use,
intrinsic :: iso_c_binding
194 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p, E
196 end subroutine euler_res_part_e_flux_cuda
201 rhs_m_x_d, rhs_m_y_d, rhs_m_z_d, &
202 rhs_E_d, mult_d, n) &
203 bind(c, name =
'euler_res_part_coef_mult_cuda')
204 use,
intrinsic :: iso_c_binding
206 type(c_ptr),
value :: rhs_rho_field_d, rhs_m_x_d, rhs_m_y_d, rhs_m_z_d, &
214 k_rho_i, k_m_x_i, k_m_y_i, &
217 bind(c, name =
'euler_res_part_rk_sum_cuda')
218 use,
intrinsic :: iso_c_binding
221 type(c_ptr),
value :: rho, m_x, m_y, m_z, E, &
222 k_rho_i, k_m_x_i, k_m_y_i, &
231 effective_visc_d, n) &
232 bind(c, name =
'euler_res_part_visc_opencl')
233 use,
intrinsic :: iso_c_binding
236 type(c_ptr),
value :: rhs_field_d, Binv_d, field_d, effective_visc_d
243 m_x, m_y, m_z, rho_field, p, n) &
244 bind(c, name =
'euler_res_part_mx_flux_opencl')
245 use,
intrinsic :: iso_c_binding
247 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
254 m_x, m_y, m_z, rho_field, p, n) &
255 bind(c, name =
'euler_res_part_my_flux_opencl')
256 use,
intrinsic :: iso_c_binding
258 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
265 m_x, m_y, m_z, rho_field, p, n) &
266 bind(c, name =
'euler_res_part_mz_flux_opencl')
267 use,
intrinsic :: iso_c_binding
269 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
275 subroutine euler_res_part_e_flux_opencl(f_x, f_y, f_z, &
276 m_x, m_y, m_z, rho_field, p, E, n) &
277 bind(c, name =
'euler_res_part_E_flux_opencl')
278 use,
intrinsic :: iso_c_binding
280 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p, E
282 end subroutine euler_res_part_e_flux_opencl
287 rhs_m_x_d, rhs_m_y_d, rhs_m_z_d, &
288 rhs_E_d, mult_d, n) &
289 bind(c, name =
'euler_res_part_coef_mult_opencl')
290 use,
intrinsic :: iso_c_binding
292 type(c_ptr),
value :: rhs_rho_field_d, rhs_m_x_d, rhs_m_y_d, rhs_m_z_d, &
300 k_rho_i, k_m_x_i, k_m_y_i, &
303 bind(c, name =
'euler_res_part_rk_sum_opencl')
304 use,
intrinsic :: iso_c_binding
307 type(c_ptr),
value :: rho, m_x, m_y, m_z, E, &
308 k_rho_i, k_m_x_i, k_m_y_i, &
318 m_x, m_y, m_z, E, p, u, v, w, Ax, &
319 coef, gs, h, effective_visc, rk_scheme, dt)
320 type(
field_t),
intent(inout) :: rho_field, m_x, m_y, m_z, E
321 type(
field_t),
intent(in) :: p, u, v, w, h, effective_visc
322 class(
ax_t),
intent(inout) :: Ax
323 type(
coef_t),
intent(inout) :: coef
324 type(
gs_t),
intent(inout) :: gs
326 real(kind=
rp),
intent(in) :: dt
327 integer :: n, s, i, j, k
328 real(kind=
rp) :: t, c
329 type(
field_t),
pointer :: k_rho_1, k_rho_2, k_rho_3, k_rho_4, &
330 k_m_x_1, k_m_x_2, k_m_x_3, k_m_x_4, &
331 k_m_y_1, k_m_y_2, k_m_y_3, k_m_y_4, &
332 k_m_z_1, k_m_z_2, k_m_z_3, k_m_z_4, &
333 k_e_1, k_e_2, k_e_3, k_e_4, &
334 temp_rho, temp_m_x, temp_m_y, temp_m_z, temp_e
335 integer :: temp_indices(25)
367 call k_rho%assign(1, k_rho_1)
368 call k_rho%assign(2, k_rho_2)
369 call k_rho%assign(3, k_rho_3)
370 call k_rho%assign(4, k_rho_4)
372 call k_m_x%assign(1, k_m_x_1)
373 call k_m_x%assign(2, k_m_x_2)
374 call k_m_x%assign(3, k_m_x_3)
375 call k_m_x%assign(4, k_m_x_4)
377 call k_m_y%assign(1, k_m_y_1)
378 call k_m_y%assign(2, k_m_y_2)
379 call k_m_y%assign(3, k_m_y_3)
380 call k_m_y%assign(4, k_m_y_4)
382 call k_m_z%assign(1, k_m_z_1)
383 call k_m_z%assign(2, k_m_z_2)
384 call k_m_z%assign(3, k_m_z_3)
385 call k_m_z%assign(4, k_m_z_4)
387 call k_e%assign(1, k_e_1)
388 call k_e%assign(2, k_e_2)
389 call k_e%assign(3, k_e_3)
390 call k_e%assign(4, k_e_4)
403 temp_m_z%x_d, temp_e%x_d, &
404 k_rho%items(j)%ptr%x_d, k_m_x%items(j)%ptr%x_d, k_m_y%items(j)%ptr%x_d, &
405 k_m_z%items(j)%ptr%x_d, k_e%items(j)%ptr%x_d, &
406 dt, rk_scheme%coeffs_A(i, j), n)
409 temp_m_z%x_d, temp_e%x_d, &
410 k_rho%items(j)%ptr%x_d, k_m_x%items(j)%ptr%x_d, k_m_y%items(j)%ptr%x_d, &
411 k_m_z%items(j)%ptr%x_d, k_e%items(j)%ptr%x_d, &
412 dt, rk_scheme%coeffs_A(i, j), n)
415 temp_m_z%x_d, temp_e%x_d, &
416 k_rho%items(j)%ptr%x_d, k_m_x%items(j)%ptr%x_d, k_m_y%items(j)%ptr%x_d, &
417 k_m_z%items(j)%ptr%x_d, k_e%items(j)%ptr%x_d, &
418 dt, rk_scheme%coeffs_A(i, j), n)
424 k_m_y%items(i)%ptr, k_m_z%items(i)%ptr, k_e%items(i)%ptr, &
425 temp_rho, temp_m_x, temp_m_y, temp_m_z, temp_e, &
427 coef, gs, h, effective_visc)
434 m_x%x_d, m_y%x_d, m_z%x_d, e%x_d, &
435 k_rho%items(i)%ptr%x_d, k_m_x%items(i)%ptr%x_d, k_m_y%items(i)%ptr%x_d, &
436 k_m_z%items(i)%ptr%x_d, k_e%items(i)%ptr%x_d, &
437 dt, rk_scheme%coeffs_b(i), n)
440 m_x%x_d, m_y%x_d, m_z%x_d, e%x_d, &
441 k_rho%items(i)%ptr%x_d, k_m_x%items(i)%ptr%x_d, k_m_y%items(i)%ptr%x_d, &
442 k_m_z%items(i)%ptr%x_d, k_e%items(i)%ptr%x_d, &
443 dt, rk_scheme%coeffs_b(i), n)
446 m_x%x_d, m_y%x_d, m_z%x_d, e%x_d, &
447 k_rho%items(i)%ptr%x_d, k_m_x%items(i)%ptr%x_d, k_m_y%items(i)%ptr%x_d, &
448 k_m_z%items(i)%ptr%x_d, k_e%items(i)%ptr%x_d, &
449 dt, rk_scheme%coeffs_b(i), n)
457 rhs_m_z, rhs_E, rho_field, &
458 m_x, m_y, m_z, E, p, u, v, w, Ax, &
459 coef, gs, h, effective_visc)
460 type(
field_t),
intent(inout) :: rhs_rho_field, rhs_m_x, rhs_m_y, rhs_m_z, rhs_E
461 type(
field_t),
intent(inout) :: rho_field, m_x, m_y, m_z, E
462 type(
field_t),
intent(in) :: p, u, v, w, h, effective_visc
463 class(
ax_t),
intent(inout) :: Ax
464 type(
coef_t),
intent(inout) :: coef
465 type(
gs_t),
intent(inout) :: gs
467 real(kind=
rp) :: visc_coeff
468 type(
field_t),
pointer :: temp, f_x, f_y, f_z, &
469 visc_rho, visc_m_x, visc_m_y, visc_m_z, visc_e
470 integer :: temp_indices(8)
478 call div(rhs_rho_field%x, m_x%x, m_y%x, m_z%x, coef)
484 m_x%x_d, m_y%x_d, m_z%x_d, rho_field%x_d, p%x_d, n)
487 m_x%x_d, m_y%x_d, m_z%x_d, rho_field%x_d, p%x_d, n)
490 m_x%x_d, m_y%x_d, m_z%x_d, rho_field%x_d, p%x_d, n)
492 call div(rhs_m_x%x, f_x%x, f_y%x, f_z%x, coef)
496 m_x%x_d, m_y%x_d, m_z%x_d, &
497 rho_field%x_d, p%x_d, n)
500 m_x%x_d, m_y%x_d, m_z%x_d, &
501 rho_field%x_d, p%x_d, n)
504 m_x%x_d, m_y%x_d, m_z%x_d, &
505 rho_field%x_d, p%x_d, n)
507 call div(rhs_m_y%x, f_x%x, f_y%x, f_z%x, coef)
511 m_x%x_d, m_y%x_d, m_z%x_d, &
512 rho_field%x_d, p%x_d, n)
515 m_x%x_d, m_y%x_d, m_z%x_d, &
516 rho_field%x_d, p%x_d, n)
519 m_x%x_d, m_y%x_d, m_z%x_d, &
520 rho_field%x_d, p%x_d, n)
522 call div(rhs_m_z%x, f_x%x, f_y%x, f_z%x, coef)
527 m_x%x_d, m_y%x_d, m_z%x_d, &
528 rho_field%x_d, p%x_d, e%x_d, n)
530 call euler_res_part_e_flux_cuda(f_x%x_d, f_y%x_d, f_z%x_d, &
531 m_x%x_d, m_y%x_d, m_z%x_d, &
532 rho_field%x_d, p%x_d, e%x_d, n)
534 call euler_res_part_e_flux_opencl(f_x%x_d, f_y%x_d, f_z%x_d, &
535 m_x%x_d, m_y%x_d, m_z%x_d, &
536 rho_field%x_d, p%x_d, e%x_d, n)
538 call div(rhs_e%x, f_x%x, f_y%x, f_z%x, coef)
540 call gs%op(rhs_rho_field, gs_op_add)
541 call rotate_cyc(rhs_m_x%x, rhs_m_y%x, rhs_m_z%x, 1, coef)
542 call gs%op(rhs_m_x, gs_op_add)
543 call gs%op(rhs_m_y, gs_op_add)
544 call gs%op(rhs_m_z, gs_op_add)
545 call rotate_cyc(rhs_m_x%x, rhs_m_y%x, rhs_m_z%x, 0, coef)
546 call gs%op(rhs_e, gs_op_add)
550 rhs_m_y%x_d, rhs_m_z%x_d, &
551 rhs_e%x_d, coef%mult_d, n)
554 rhs_m_y%x_d, rhs_m_z%x_d, &
555 rhs_e%x_d, coef%mult_d, n)
558 rhs_m_y%x_d, rhs_m_z%x_d, &
559 rhs_e%x_d, coef%mult_d, n)
572 call ax%compute(visc_rho%x, rho_field%x, coef, p%msh, p%Xh)
573 call ax%compute(visc_m_x%x, m_x%x, coef, p%msh, p%Xh)
574 call ax%compute(visc_m_y%x, m_y%x, coef, p%msh, p%Xh)
575 call ax%compute(visc_m_z%x, m_z%x, coef, p%msh, p%Xh)
576 call ax%compute(visc_e%x, e%x, coef, p%msh, p%Xh)
581 call gs%op(visc_rho, gs_op_add)
582 call rotate_cyc(visc_m_x%x, visc_m_y%x, visc_m_z%x, 1, coef)
583 call gs%op(visc_m_x, gs_op_add)
584 call gs%op(visc_m_y, gs_op_add)
585 call gs%op(visc_m_z, gs_op_add)
586 call rotate_cyc(visc_m_x%x, visc_m_y%x, visc_m_z%x, 0, coef)
587 call gs%op(visc_e, gs_op_add)
598 call device_sub2(rhs_rho_field%x_d, visc_rho%x_d, n)
void euler_res_part_coef_mult_opencl(void *rhs_rho, void *rhs_m_x, void *rhs_m_y, void *rhs_m_z, void *rhs_E, void *mult, int *n)
void euler_res_part_visc_opencl(void *rhs_u, void *Binv, void *lap_sol, void *effective_visc, int *n)
void euler_res_part_my_flux_opencl(void *f_x, void *f_y, void *f_z, void *m_x, void *m_y, void *m_z, void *rho_field, void *p, int *n)
void euler_res_part_mx_flux_opencl(void *f_x, void *f_y, void *f_z, void *m_x, void *m_y, void *m_z, void *rho_field, void *p, int *n)
void euler_res_part_mz_flux_opencl(void *f_x, void *f_y, void *f_z, void *m_x, void *m_y, void *m_z, void *rho_field, void *p, int *n)
void euler_res_part_rk_sum_opencl(void *rho, void *m_x, void *m_y, void *m_z, void *E, void *k_rho_i, void *k_m_x_i, void *k_m_y_i, void *k_m_z_i, void *k_E_i, real *dt, real *c, int *n)
void euler_res_part_mx_flux_cuda(void *f_x, void *f_y, void *f_z, void *m_x, void *m_y, void *m_z, void *rho_field, void *p, int *n)
void euler_res_part_my_flux_cuda(void *f_x, void *f_y, void *f_z, void *m_x, void *m_y, void *m_z, void *rho_field, void *p, int *n)
void euler_res_part_visc_cuda(void *rhs_u, void *Binv, void *lap_sol, void *effective_visc, int *n)
void euler_res_part_rk_sum_cuda(void *rho, void *m_x, void *m_y, void *m_z, void *E, void *k_rho_i, void *k_m_x_i, void *k_m_y_i, void *k_m_z_i, void *k_E_i, real *dt, real *c, int *n)
void euler_res_part_coef_mult_cuda(void *rhs_rho, void *rhs_m_x, void *rhs_m_y, void *rhs_m_z, void *rhs_E, void *mult, int *n)
void euler_res_part_mz_flux_cuda(void *f_x, void *f_y, void *f_z, void *m_x, void *m_y, void *m_z, void *rho_field, void *p, int *n)
Defines a Matrix-vector product.
subroutine, public device_rone(a_d, n, strm)
Set all elements to one.
subroutine, public device_cmult(a_d, c, n, strm)
Multiplication by constant c .
subroutine, public device_sub2(a_d, b_d, n, strm)
Vector substraction .
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 evaluate_rhs_device(rhs_rho_field, rhs_m_x, rhs_m_y, rhs_m_z, rhs_e, rho_field, m_x, m_y, m_z, e, p, u, v, w, ax, coef, gs, h, effective_visc)
subroutine advance_primitive_variables_device(rho_field, m_x, m_y, m_z, e, p, u, v, w, ax, coef, gs, h, effective_visc, rk_scheme, dt)
subroutine, public field_cmult(a, c, n)
Multiplication by constant c .
integer, parameter, public c_rp
integer, parameter, public rp
Global precision used in computations.
subroutine, public div(res, ux, uy, uz, coef)
Compute the divergence of a vector field.
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.
Base type for a matrix-vector product providing .
Coefficients defined on a given (mesh, ) tuple. Arrays use indices (i,j,k,e): element e,...
Abstract type to compute rhs.
field_list_t, To be able to group fields together