42 use,
intrinsic :: iso_c_binding, only : c_ptr, c_int
74 rhs_m_y_d, rhs_m_z_d, rhs_E_d, visc_rho_d, visc_m_x_d, &
75 visc_m_y_d, visc_m_z_d, visc_E_d, Binv_d, h1_d, n) &
76 bind(c, name =
'compressible_res_part_visc_hip')
77 use,
intrinsic :: iso_c_binding
79 type(c_ptr),
value :: rhs_rho_d, rhs_m_x_d, rhs_m_y_d, rhs_m_z_d, &
80 rhs_e_d, visc_rho_d, visc_m_x_d, visc_m_y_d, visc_m_z_d, &
81 visc_e_d, binv_d, h1_d
88 m_x, m_y, m_z, rho_field, p, n) &
89 bind(c, name =
'inviscid_res_part_mx_flux_hip')
90 use,
intrinsic :: iso_c_binding
92 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
99 m_x, m_y, m_z, rho_field, p, n) &
100 bind(c, name =
'inviscid_res_part_my_flux_hip')
101 use,
intrinsic :: iso_c_binding
103 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
110 m_x, m_y, m_z, rho_field, p, n) &
111 bind(c, name =
'inviscid_res_part_mz_flux_hip')
112 use,
intrinsic :: iso_c_binding
114 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
121 m_x, m_y, m_z, rho_field, p, E, n) &
122 bind(c, name =
'inviscid_res_part_E_flux_hip')
123 use,
intrinsic :: iso_c_binding
125 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p, E
132 rhs_m_x_d, rhs_m_y_d, rhs_m_z_d, &
133 rhs_E_d, mult_d, n) &
134 bind(c, name =
'compressible_res_part_coef_mult_hip')
135 use,
intrinsic :: iso_c_binding
137 type(c_ptr),
value :: rhs_rho_field_d, rhs_m_x_d, rhs_m_y_d, rhs_m_z_d, &
145 k_rho_i, k_m_x_i, k_m_y_i, &
148 bind(c, name =
'compressible_res_part_rk_sum_hip')
149 use,
intrinsic :: iso_c_binding
152 type(c_ptr),
value :: rho, m_x, m_y, m_z, E, &
153 k_rho_i, k_m_x_i, k_m_y_i, &
155 real(c_rp) :: dt, b_i
162 rhs_m_y_d, rhs_m_z_d, rhs_E_d, visc_rho_d, visc_m_x_d, &
163 visc_m_y_d, visc_m_z_d, visc_E_d, Binv_d, h1_d, n) &
164 bind(c, name =
'compressible_res_part_visc_cuda')
165 use,
intrinsic :: iso_c_binding
167 type(c_ptr),
value :: rhs_rho_d, rhs_m_x_d, rhs_m_y_d, rhs_m_z_d, &
168 rhs_E_d, visc_rho_d, visc_m_x_d, visc_m_y_d, visc_m_z_d, &
169 visc_E_d, Binv_d, h1_d
176 m_x, m_y, m_z, rho_field, p, n) &
177 bind(c, name =
'inviscid_res_part_mx_flux_cuda')
178 use,
intrinsic :: iso_c_binding
180 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
187 m_x, m_y, m_z, rho_field, p, n) &
188 bind(c, name =
'inviscid_res_part_my_flux_cuda')
189 use,
intrinsic :: iso_c_binding
191 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
198 m_x, m_y, m_z, rho_field, p, n) &
199 bind(c, name =
'inviscid_res_part_mz_flux_cuda')
200 use,
intrinsic :: iso_c_binding
202 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
208 subroutine inviscid_res_part_e_flux_cuda(f_x, f_y, f_z, &
209 m_x, m_y, m_z, rho_field, p, E, n) &
210 bind(c, name =
'inviscid_res_part_E_flux_cuda')
211 use,
intrinsic :: iso_c_binding
213 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p, E
215 end subroutine inviscid_res_part_e_flux_cuda
220 rhs_m_x_d, rhs_m_y_d, rhs_m_z_d, &
221 rhs_E_d, mult_d, n) &
222 bind(c, name =
'compressible_res_part_coef_mult_cuda')
223 use,
intrinsic :: iso_c_binding
225 type(c_ptr),
value :: rhs_rho_field_d, rhs_m_x_d, rhs_m_y_d, rhs_m_z_d, &
233 k_rho_i, k_m_x_i, k_m_y_i, &
236 bind(c, name =
'compressible_res_part_rk_sum_cuda')
237 use,
intrinsic :: iso_c_binding
240 type(c_ptr),
value :: rho, m_x, m_y, m_z, E, &
241 k_rho_i, k_m_x_i, k_m_y_i, &
250 rhs_m_y_d, rhs_m_z_d, rhs_E_d, visc_rho_d, visc_m_x_d, &
251 visc_m_y_d, visc_m_z_d, visc_E_d, Binv_d, h1_d, n) &
252 bind(c, name =
'compressible_res_part_visc_opencl')
253 use,
intrinsic :: iso_c_binding
255 type(c_ptr),
value :: rhs_rho_d, rhs_m_x_d, rhs_m_y_d, rhs_m_z_d, &
256 rhs_E_d, visc_rho_d, visc_m_x_d, visc_m_y_d, visc_m_z_d, &
257 visc_E_d, Binv_d, h1_d
264 m_x, m_y, m_z, rho_field, p, n) &
265 bind(c, name =
'inviscid_res_part_mx_flux_opencl')
266 use,
intrinsic :: iso_c_binding
268 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
275 m_x, m_y, m_z, rho_field, p, n) &
276 bind(c, name =
'inviscid_res_part_my_flux_opencl')
277 use,
intrinsic :: iso_c_binding
279 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
286 m_x, m_y, m_z, rho_field, p, n) &
287 bind(c, name =
'inviscid_res_part_mz_flux_opencl')
288 use,
intrinsic :: iso_c_binding
290 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
296 subroutine inviscid_res_part_e_flux_opencl(f_x, f_y, f_z, &
297 m_x, m_y, m_z, rho_field, p, E, n) &
298 bind(c, name =
'inviscid_res_part_E_flux_opencl')
299 use,
intrinsic :: iso_c_binding
301 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p, E
303 end subroutine inviscid_res_part_e_flux_opencl
308 rhs_m_x_d, rhs_m_y_d, rhs_m_z_d, &
309 rhs_E_d, mult_d, n) &
310 bind(c, name =
'compressible_res_part_coef_mult_opencl')
311 use,
intrinsic :: iso_c_binding
313 type(c_ptr),
value :: rhs_rho_field_d, rhs_m_x_d, rhs_m_y_d, rhs_m_z_d, &
321 k_rho_i, k_m_x_i, k_m_y_i, &
324 bind(c, name =
'compressible_res_part_rk_sum_opencl')
325 use,
intrinsic :: iso_c_binding
328 type(c_ptr),
value :: rho, m_x, m_y, m_z, E, &
329 k_rho_i, k_m_x_i, k_m_y_i, &
337 subroutine compressible_res_part_visc_metal(rhs_rho_d, rhs_m_x_d, &
338 rhs_m_y_d, rhs_m_z_d, rhs_E_d, visc_rho_d, visc_m_x_d, &
339 visc_m_y_d, visc_m_z_d, visc_E_d, Binv_d, h1_d, n) &
340 bind(c, name =
'compressible_res_part_visc_metal')
341 use,
intrinsic :: iso_c_binding
343 type(c_ptr),
value :: rhs_rho_d, rhs_m_x_d, rhs_m_y_d, rhs_m_z_d, &
344 rhs_E_d, visc_rho_d, visc_m_x_d, visc_m_y_d, visc_m_z_d, &
345 visc_E_d, Binv_d, h1_d
347 end subroutine compressible_res_part_visc_metal
351 subroutine inviscid_res_part_mx_flux_metal(f_x, f_y, f_z, &
352 m_x, m_y, m_z, rho_field, p, n) &
353 bind(c, name =
'inviscid_res_part_mx_flux_metal')
354 use,
intrinsic :: iso_c_binding
356 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
358 end subroutine inviscid_res_part_mx_flux_metal
362 subroutine inviscid_res_part_my_flux_metal(f_x, f_y, f_z, &
363 m_x, m_y, m_z, rho_field, p, n) &
364 bind(c, name =
'inviscid_res_part_my_flux_metal')
365 use,
intrinsic :: iso_c_binding
367 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
369 end subroutine inviscid_res_part_my_flux_metal
373 subroutine inviscid_res_part_mz_flux_metal(f_x, f_y, f_z, &
374 m_x, m_y, m_z, rho_field, p, n) &
375 bind(c, name =
'inviscid_res_part_mz_flux_metal')
376 use,
intrinsic :: iso_c_binding
378 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
380 end subroutine inviscid_res_part_mz_flux_metal
384 subroutine inviscid_res_part_e_flux_metal(f_x, f_y, f_z, &
385 m_x, m_y, m_z, rho_field, p, E, n) &
386 bind(c, name =
'inviscid_res_part_E_flux_metal')
387 use,
intrinsic :: iso_c_binding
389 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p, E
391 end subroutine inviscid_res_part_e_flux_metal
395 subroutine compressible_res_part_coef_mult_metal(rhs_rho_field_d, &
396 rhs_m_x_d, rhs_m_y_d, rhs_m_z_d, &
397 rhs_E_d, mult_d, n) &
398 bind(c, name =
'compressible_res_part_coef_mult_metal')
399 use,
intrinsic :: iso_c_binding
401 type(c_ptr),
value :: rhs_rho_field_d, rhs_m_x_d, rhs_m_y_d, rhs_m_z_d, &
404 end subroutine compressible_res_part_coef_mult_metal
408 subroutine compressible_res_part_rk_sum_metal(rho, m_x, m_y, m_z, E, &
409 k_rho_i, k_m_x_i, k_m_y_i, &
412 bind(c, name =
'compressible_res_part_rk_sum_metal')
413 use,
intrinsic :: iso_c_binding
416 type(c_ptr),
value :: rho, m_x, m_y, m_z, E, &
417 k_rho_i, k_m_x_i, k_m_y_i, &
421 end subroutine compressible_res_part_rk_sum_metal
427 m_x, m_y, m_z, E, p, u, v, w, Ax, &
428 Ax_stress, coef, gs, artificial_visc, mu, kappa, bcs_vel, time, &
430 type(
field_t),
intent(inout) :: rho_field, m_x, m_y, m_z, E
431 type(
field_t),
intent(in) :: p, u, v, w, artificial_visc, mu, kappa
432 class(
ax_t),
intent(inout) :: Ax, Ax_stress
433 type(
coef_t),
intent(inout) :: coef
434 type(
gs_t),
intent(inout) :: gs
435 type(
bc_list_t),
intent(inout) :: bcs_vel
438 real(kind=
rp),
intent(in) :: dt
439 integer :: n, s, i, j, k
440 real(kind=
rp) :: t, c
441 type(
field_t),
pointer :: k_rho_1, k_rho_2, k_rho_3, k_rho_4, &
442 k_m_x_1, k_m_x_2, k_m_x_3, k_m_x_4, &
443 k_m_y_1, k_m_y_2, k_m_y_3, k_m_y_4, &
444 k_m_z_1, k_m_z_2, k_m_z_3, k_m_z_4, &
445 k_e_1, k_e_2, k_e_3, k_e_4, &
446 temp_rho, temp_m_x, temp_m_y, temp_m_z, temp_e, &
447 temp_p, temp_u, temp_v, temp_w, temp_ruvw
448 integer :: temp_indices(30)
490 call k_rho%assign(1, k_rho_1)
491 call k_rho%assign(2, k_rho_2)
492 call k_rho%assign(3, k_rho_3)
493 call k_rho%assign(4, k_rho_4)
495 call k_m_x%assign(1, k_m_x_1)
496 call k_m_x%assign(2, k_m_x_2)
497 call k_m_x%assign(3, k_m_x_3)
498 call k_m_x%assign(4, k_m_x_4)
500 call k_m_y%assign(1, k_m_y_1)
501 call k_m_y%assign(2, k_m_y_2)
502 call k_m_y%assign(3, k_m_y_3)
503 call k_m_y%assign(4, k_m_y_4)
505 call k_m_z%assign(1, k_m_z_1)
506 call k_m_z%assign(2, k_m_z_2)
507 call k_m_z%assign(3, k_m_z_3)
508 call k_m_z%assign(4, k_m_z_4)
510 call k_e%assign(1, k_e_1)
511 call k_e%assign(2, k_e_2)
512 call k_e%assign(3, k_e_3)
513 call k_e%assign(4, k_e_4)
526 temp_m_y%x_d, temp_m_z%x_d, temp_e%x_d, &
527 k_rho%items(j)%ptr%x_d, k_m_x%items(j)%ptr%x_d, &
528 k_m_y%items(j)%ptr%x_d, &
529 k_m_z%items(j)%ptr%x_d, k_e%items(j)%ptr%x_d, &
530 dt, rk_scheme%coeffs_A(i, j), n)
533 temp_m_y%x_d, temp_m_z%x_d, temp_e%x_d, &
534 k_rho%items(j)%ptr%x_d, k_m_x%items(j)%ptr%x_d, &
535 k_m_y%items(j)%ptr%x_d, &
536 k_m_z%items(j)%ptr%x_d, k_e%items(j)%ptr%x_d, &
537 dt, rk_scheme%coeffs_A(i, j), n)
540 temp_m_y%x_d, temp_m_z%x_d, temp_e%x_d, &
541 k_rho%items(j)%ptr%x_d, k_m_x%items(j)%ptr%x_d, &
542 k_m_y%items(j)%ptr%x_d, &
543 k_m_z%items(j)%ptr%x_d, k_e%items(j)%ptr%x_d, &
544 dt, rk_scheme%coeffs_A(i, j), n)
546 call compressible_res_part_rk_sum_metal(temp_rho%x_d, &
547 temp_m_x%x_d, temp_m_y%x_d, temp_m_z%x_d, temp_e%x_d, &
548 k_rho%items(j)%ptr%x_d, k_m_x%items(j)%ptr%x_d, &
549 k_m_y%items(j)%ptr%x_d, &
550 k_m_z%items(j)%ptr%x_d, k_e%items(j)%ptr%x_d, &
551 dt, rk_scheme%coeffs_A(i, j), n)
557 temp_w%x_d, temp_m_x%x_d, temp_m_y%x_d, temp_m_z%x_d, &
560 call bcs_vel%apply_vector(temp_u%x, temp_v%x, temp_w%x, n, time, &
564 temp_m_y%x_d, temp_m_z%x_d, temp_p%x_d, temp_ruvw%x_d, &
565 temp_u%x_d, temp_v%x_d, temp_w%x_d, temp_e%x_d, &
569 k_m_y%items(i)%ptr, k_m_z%items(i)%ptr, k_e%items(i)%ptr, &
570 temp_rho, temp_m_x, temp_m_y, temp_m_z, temp_e, &
571 temp_p, temp_u, temp_v, temp_w, ax, &
572 ax_stress, coef, gs, artificial_visc, mu, kappa)
579 m_x%x_d, m_y%x_d, m_z%x_d, e%x_d, &
580 k_rho%items(i)%ptr%x_d, k_m_x%items(i)%ptr%x_d, &
581 k_m_y%items(i)%ptr%x_d, &
582 k_m_z%items(i)%ptr%x_d, k_e%items(i)%ptr%x_d, &
583 dt, rk_scheme%coeffs_b(i), n)
586 m_x%x_d, m_y%x_d, m_z%x_d, e%x_d, &
587 k_rho%items(i)%ptr%x_d, k_m_x%items(i)%ptr%x_d, &
588 k_m_y%items(i)%ptr%x_d, &
589 k_m_z%items(i)%ptr%x_d, k_e%items(i)%ptr%x_d, &
590 dt, rk_scheme%coeffs_b(i), n)
593 m_x%x_d, m_y%x_d, m_z%x_d, e%x_d, &
594 k_rho%items(i)%ptr%x_d, k_m_x%items(i)%ptr%x_d, &
595 k_m_y%items(i)%ptr%x_d, &
596 k_m_z%items(i)%ptr%x_d, k_e%items(i)%ptr%x_d, &
597 dt, rk_scheme%coeffs_b(i), n)
599 call compressible_res_part_rk_sum_metal(rho_field%x_d, &
600 m_x%x_d, m_y%x_d, m_z%x_d, e%x_d, &
601 k_rho%items(i)%ptr%x_d, k_m_x%items(i)%ptr%x_d, &
602 k_m_y%items(i)%ptr%x_d, &
603 k_m_z%items(i)%ptr%x_d, k_e%items(i)%ptr%x_d, &
604 dt, rk_scheme%coeffs_b(i), n)
612 rhs_m_z, rhs_E, rho_field, &
613 m_x, m_y, m_z, E, p, u, v, w, Ax, &
614 Ax_stress, coef, gs, artificial_visc, mu, kappa)
615 type(
field_t),
intent(inout) :: rhs_rho_field, rhs_m_x, rhs_m_y, &
617 type(
field_t),
intent(inout) :: rho_field, m_x, m_y, m_z, E
618 type(
field_t),
intent(in) :: p, u, v, w, artificial_visc, mu, kappa
619 class(
ax_t),
intent(inout) :: Ax, Ax_stress
620 type(
coef_t),
intent(inout) :: coef
621 type(
gs_t),
intent(inout) :: gs
623 type(
field_t),
pointer :: temp, f_x, f_y, f_z, &
624 visc_rho, visc_m_x, visc_m_y, visc_m_z, visc_E
625 integer :: temp_indices(8)
633 call div(rhs_rho_field%x_d, m_x%x_d, m_y%x_d, m_z%x_d, coef)
639 m_x%x_d, m_y%x_d, m_z%x_d, rho_field%x_d, p%x_d, n)
642 m_x%x_d, m_y%x_d, m_z%x_d, rho_field%x_d, p%x_d, n)
645 m_x%x_d, m_y%x_d, m_z%x_d, rho_field%x_d, p%x_d, n)
647 call inviscid_res_part_mx_flux_metal(f_x%x_d, f_y%x_d, f_z%x_d, &
648 m_x%x_d, m_y%x_d, m_z%x_d, rho_field%x_d, p%x_d, n)
650 call div(rhs_m_x%x_d, f_x%x_d, f_y%x_d, f_z%x_d, coef)
654 m_x%x_d, m_y%x_d, m_z%x_d, &
655 rho_field%x_d, p%x_d, n)
658 m_x%x_d, m_y%x_d, m_z%x_d, &
659 rho_field%x_d, p%x_d, n)
662 m_x%x_d, m_y%x_d, m_z%x_d, &
663 rho_field%x_d, p%x_d, n)
665 call inviscid_res_part_my_flux_metal(f_x%x_d, f_y%x_d, f_z%x_d, &
666 m_x%x_d, m_y%x_d, m_z%x_d, &
667 rho_field%x_d, p%x_d, n)
669 call div(rhs_m_y%x_d, f_x%x_d, f_y%x_d, f_z%x_d, coef)
673 m_x%x_d, m_y%x_d, m_z%x_d, &
674 rho_field%x_d, p%x_d, n)
677 m_x%x_d, m_y%x_d, m_z%x_d, &
678 rho_field%x_d, p%x_d, n)
681 m_x%x_d, m_y%x_d, m_z%x_d, &
682 rho_field%x_d, p%x_d, n)
684 call inviscid_res_part_mz_flux_metal(f_x%x_d, f_y%x_d, f_z%x_d, &
685 m_x%x_d, m_y%x_d, m_z%x_d, &
686 rho_field%x_d, p%x_d, n)
688 call div(rhs_m_z%x_d, f_x%x_d, f_y%x_d, f_z%x_d, coef)
695 m_x%x_d, m_y%x_d, m_z%x_d, &
696 rho_field%x_d, p%x_d, e%x_d, n)
698 call inviscid_res_part_e_flux_cuda(f_x%x_d, f_y%x_d, f_z%x_d, &
699 m_x%x_d, m_y%x_d, m_z%x_d, &
700 rho_field%x_d, p%x_d, e%x_d, n)
702 call inviscid_res_part_e_flux_opencl(f_x%x_d, f_y%x_d, f_z%x_d, &
703 m_x%x_d, m_y%x_d, m_z%x_d, &
704 rho_field%x_d, p%x_d, e%x_d, n)
706 call inviscid_res_part_e_flux_metal(f_x%x_d, f_y%x_d, f_z%x_d, &
707 m_x%x_d, m_y%x_d, m_z%x_d, &
708 rho_field%x_d, p%x_d, e%x_d, n)
710 call div(rhs_e%x_d, f_x%x_d, f_y%x_d, f_z%x_d, coef)
713 call rotate_cyc(rhs_m_x%x_d, rhs_m_y%x_d, rhs_m_z%x_d, 1, coef)
715 call gs%op(rhs_m_x%x, rhs_m_y%x, rhs_m_z%x, n, gs_op_add,
glb_cmd_event)
716 call rotate_cyc(rhs_m_x%x_d, rhs_m_y%x_d, rhs_m_z%x_d, 0, coef)
722 rhs_m_y%x_d, rhs_m_z%x_d, &
723 rhs_e%x_d, coef%mult_d, n)
726 rhs_m_y%x_d, rhs_m_z%x_d, &
727 rhs_e%x_d, coef%mult_d, n)
730 rhs_m_x%x_d, rhs_m_y%x_d, rhs_m_z%x_d, &
731 rhs_e%x_d, coef%mult_d, n)
733 call compressible_res_part_coef_mult_metal(rhs_rho_field%x_d, rhs_m_x%x_d, &
734 rhs_m_y%x_d, rhs_m_z%x_d, &
735 rhs_e%x_d, coef%mult_d, n)
750 call device_copy(coef%h1_d, artificial_visc%x_d, n)
751 call ax%compute(visc_rho%x, rho_field%x, coef, p%msh, p%Xh)
752 call ax%compute_vector(visc_m_x%x, visc_m_y%x, visc_m_z%x, &
753 m_x%x, m_y%x, m_z%x, coef, p%msh, p%Xh)
754 call ax%compute(visc_e%x, e%x, coef, p%msh, p%Xh)
758 visc_e, rho_field, p, u, v, w, mu, kappa, ax, ax_stress, coef)
764 call rotate_cyc(visc_m_x%x_d, visc_m_y%x_d, visc_m_z%x_d, 1, coef)
766 call gs%op(visc_m_x%x, visc_m_y%x, visc_m_z%x, n, gs_op_add,
glb_cmd_event)
767 call rotate_cyc(visc_m_x%x_d, visc_m_y%x_d, visc_m_z%x_d, 0, coef)
775 rhs_m_y%x_d, rhs_m_z%x_d, rhs_e%x_d, visc_rho%x_d, visc_m_x%x_d, &
776 visc_m_y%x_d, visc_m_z%x_d, visc_e%x_d, coef%Binv_d, coef%h1_d, n)
779 rhs_m_y%x_d, rhs_m_z%x_d, rhs_e%x_d, visc_rho%x_d, visc_m_x%x_d, &
780 visc_m_y%x_d, visc_m_z%x_d, visc_e%x_d, coef%Binv_d, coef%h1_d, n)
783 rhs_m_y%x_d, rhs_m_z%x_d, rhs_e%x_d, visc_rho%x_d, visc_m_x%x_d, &
784 visc_m_y%x_d, visc_m_z%x_d, visc_e%x_d, coef%Binv_d, coef%h1_d, n)
786 call compressible_res_part_visc_metal(rhs_rho_field%x_d, rhs_m_x%x_d, &
787 rhs_m_y%x_d, rhs_m_z%x_d, rhs_e%x_d, visc_rho%x_d, visc_m_x%x_d, &
788 visc_m_y%x_d, visc_m_z%x_d, visc_e%x_d, coef%Binv_d, coef%h1_d, n)
813 visc_E, rho_field, p, u, v, w, mu, kappa, Ax, Ax_stress, coef)
814 type(
field_t),
intent(inout) :: visc_m_x, visc_m_y, visc_m_z, visc_E
815 type(
field_t),
intent(in) :: rho_field
816 type(
field_t),
intent(in) :: p, u, v, w, mu, kappa
817 class(
ax_t),
intent(inout) :: Ax, Ax_stress
818 type(
coef_t),
intent(inout) :: coef
819 type(
field_t),
pointer :: dudx, dudy, dudz, dvdx, dvdy, dvdz, &
820 dwdx, dwdy, dwdz, f_x, f_y, f_z, div_flux, dissipation
821 integer :: temp_indices(14)
843 call grad(dudx%x_d, dudy%x_d, dudz%x_d, u%x_d, coef)
844 call grad(dvdx%x_d, dvdy%x_d, dvdz%x_d, v%x_d, coef)
845 call grad(dwdx%x_d, dwdy%x_d, dwdz%x_d, w%x_d, coef)
848 dissipation%x_d, coef%h1_d, dudx%x_d, dudy%x_d, dudz%x_d, &
849 dvdx%x_d, dvdy%x_d, dvdz%x_d, dwdx%x_d, dwdy%x_d, dwdz%x_d, &
852 call ax_stress%compute_vector(f_x%x, f_y%x, f_z%x, u%x, v%x, w%x, &
854 call opgrad(dudx%x, dudy%x, dudz%x, div_flux%x, coef)
856 visc_m_y%x_d, visc_m_z%x_d, visc_e%x_d, f_x%x_d, f_y%x_d, &
857 f_z%x_d, dudx%x_d, dudy%x_d, dudz%x_d, u%x_d, v%x_d, w%x_d, &
858 coef%B_d, dissipation%x_d, n)
862 call ax%compute(dudx%x, div_flux%x, coef, p%msh, p%Xh)
void compressible_res_part_visc_opencl(void *rhs_rho, void *rhs_m_x, void *rhs_m_y, void *rhs_m_z, void *rhs_E, void *visc_rho, void *visc_m_x, void *visc_m_y, void *visc_m_z, void *visc_E, void *Binv, void *h1, int *n)
void inviscid_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 inviscid_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 compressible_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 compressible_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 inviscid_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 inviscid_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 compressible_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 compressible_res_part_visc_cuda(void *rhs_rho, void *rhs_m_x, void *rhs_m_y, void *rhs_m_z, void *rhs_E, void *visc_rho, void *visc_m_x, void *visc_m_y, void *visc_m_z, void *visc_E, void *Binv, void *h1, int *n)
void compressible_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 inviscid_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)
void inviscid_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)
Compute the divergence of a vector field.
Compute the gradient of a scalar field, multiplied by the mass matrix.
Apply cyclic boundary condition to a vector field.
Defines a Matrix-vector product.
Device implementation of compressible flow operations.
subroutine, public compressible_ops_device_update_uvw(u_d, v_d, w_d, m_x_d, m_y_d, m_z_d, rho_d, n)
Update u,v,w fields.
subroutine, public compressible_ops_device_ns_flux_prepare(div_flux_d, dissipation_d, h1_d, dudx_d, dudy_d, dudz_d, dvdx_d, dvdy_d, dvdz_d, dwdx_d, dwdy_d, dwdz_d, mu_d, n)
Prepare physical Navier-Stokes flux work arrays.
subroutine, public compressible_ops_device_ns_flux_finalize(visc_m_x_d, visc_m_y_d, visc_m_z_d, visc_e_d, f_x_d, f_y_d, f_z_d, opgrad_x_d, opgrad_y_d, opgrad_z_d, u_d, v_d, w_d, b_d, dissipation_d, n)
Finish physical Navier-Stokes flux assembly.
subroutine, public compressible_ops_device_update_mxyz_p_ruvw(m_x_d, m_y_d, m_z_d, p_d, ruvw_d, u_d, v_d, w_d, e_d, rho_d, gamma, n)
Update m_x, m_y, m_z, p, ruvw, fields.
subroutine, public compressible_ops_device_ns_flux_temperature(div_flux_d, h1_d, p_d, rho_d, kappa_d, gamma, n)
Prepare temperature and conductivity coefficient for energy flux.
logical, public compressible_res_device_add_physical_flux
Whether physical Navier-Stokes fluxes are active for the current step. Set by compressible_rhs_set_ph...
subroutine advance_primitive_variables_device(rho_field, m_x, m_y, m_z, e, p, u, v, w, ax, ax_stress, coef, gs, artificial_visc, mu, kappa, bcs_vel, time, rk_scheme, dt)
real(kind=rp), public compressible_res_device_gamma
Module variable to store thermodynamic parameter set by factory.
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, ax_stress, coef, gs, artificial_visc, mu, kappa)
logical, public compressible_res_device_add_physical_stress
Whether physical viscous stress is active for the current step. Set by compressible_rhs_set_physical_...
subroutine add_navier_stokes_flux_device(visc_m_x, visc_m_y, visc_m_z, visc_e, rho_field, p, u, v, w, mu, kappa, ax, ax_stress, coef)
Add the physical Navier-Stokes flux contribution to the viscous residual.
subroutine, public device_add2(a_d, b_d, n, strm)
Vector addition .
subroutine, public device_copy(a_d, b_d, n, strm)
Copy a vector .
Device abstraction, common interface for various accelerators.
subroutine, public device_event_sync(event)
Synchronize an event.
type(c_ptr), bind(C), public glb_cmd_event
Event for the global command queue.
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.
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.
Module with things related to the simulation time.
Base type for a matrix-vector product providing .
A list of allocatable `bc_t`. Follows the standard interface of lists.
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
A struct that contains all info about the time, expand as needed.