42 use,
intrinsic :: iso_c_binding, only : c_ptr, c_int
72 artificial_visc_d, n) &
73 bind(c, name =
'compressible_res_part_visc_hip')
74 use,
intrinsic :: iso_c_binding
77 type(c_ptr),
value :: rhs_field_d, binv_d, field_d, artificial_visc_d
84 m_x, m_y, m_z, rho_field, p, n) &
85 bind(c, name =
'inviscid_res_part_mx_flux_hip')
86 use,
intrinsic :: iso_c_binding
88 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
95 m_x, m_y, m_z, rho_field, p, n) &
96 bind(c, name =
'inviscid_res_part_my_flux_hip')
97 use,
intrinsic :: iso_c_binding
99 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
106 m_x, m_y, m_z, rho_field, p, n) &
107 bind(c, name =
'inviscid_res_part_mz_flux_hip')
108 use,
intrinsic :: iso_c_binding
110 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
117 m_x, m_y, m_z, rho_field, p, E, n) &
118 bind(c, name =
'inviscid_res_part_E_flux_hip')
119 use,
intrinsic :: iso_c_binding
121 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p, E
128 rhs_m_x_d, rhs_m_y_d, rhs_m_z_d, &
129 rhs_E_d, mult_d, n) &
130 bind(c, name =
'compressible_res_part_coef_mult_hip')
131 use,
intrinsic :: iso_c_binding
133 type(c_ptr),
value :: rhs_rho_field_d, rhs_m_x_d, rhs_m_y_d, rhs_m_z_d, &
141 k_rho_i, k_m_x_i, k_m_y_i, &
144 bind(c, name =
'compressible_res_part_rk_sum_hip')
145 use,
intrinsic :: iso_c_binding
148 type(c_ptr),
value :: rho, m_x, m_y, m_z, E, &
149 k_rho_i, k_m_x_i, k_m_y_i, &
151 real(c_rp) :: dt, b_i
158 artificial_visc_d, n) &
159 bind(c, name =
'compressible_res_part_visc_cuda')
160 use,
intrinsic :: iso_c_binding
163 type(c_ptr),
value :: rhs_field_d, Binv_d, field_d, artificial_visc_d
170 m_x, m_y, m_z, rho_field, p, n) &
171 bind(c, name =
'inviscid_res_part_mx_flux_cuda')
172 use,
intrinsic :: iso_c_binding
174 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
181 m_x, m_y, m_z, rho_field, p, n) &
182 bind(c, name =
'inviscid_res_part_my_flux_cuda')
183 use,
intrinsic :: iso_c_binding
185 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
192 m_x, m_y, m_z, rho_field, p, n) &
193 bind(c, name =
'inviscid_res_part_mz_flux_cuda')
194 use,
intrinsic :: iso_c_binding
196 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
202 subroutine inviscid_res_part_e_flux_cuda(f_x, f_y, f_z, &
203 m_x, m_y, m_z, rho_field, p, E, n) &
204 bind(c, name =
'inviscid_res_part_E_flux_cuda')
205 use,
intrinsic :: iso_c_binding
207 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p, E
209 end subroutine inviscid_res_part_e_flux_cuda
214 rhs_m_x_d, rhs_m_y_d, rhs_m_z_d, &
215 rhs_E_d, mult_d, n) &
216 bind(c, name =
'compressible_res_part_coef_mult_cuda')
217 use,
intrinsic :: iso_c_binding
219 type(c_ptr),
value :: rhs_rho_field_d, rhs_m_x_d, rhs_m_y_d, rhs_m_z_d, &
227 k_rho_i, k_m_x_i, k_m_y_i, &
230 bind(c, name =
'compressible_res_part_rk_sum_cuda')
231 use,
intrinsic :: iso_c_binding
234 type(c_ptr),
value :: rho, m_x, m_y, m_z, E, &
235 k_rho_i, k_m_x_i, k_m_y_i, &
244 field_d, artificial_visc_d, n) &
245 bind(c, name =
'compressible_res_part_visc_opencl')
246 use,
intrinsic :: iso_c_binding
249 type(c_ptr),
value :: rhs_field_d, Binv_d, field_d, artificial_visc_d
256 m_x, m_y, m_z, rho_field, p, n) &
257 bind(c, name =
'inviscid_res_part_mx_flux_opencl')
258 use,
intrinsic :: iso_c_binding
260 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
267 m_x, m_y, m_z, rho_field, p, n) &
268 bind(c, name =
'inviscid_res_part_my_flux_opencl')
269 use,
intrinsic :: iso_c_binding
271 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
278 m_x, m_y, m_z, rho_field, p, n) &
279 bind(c, name =
'inviscid_res_part_mz_flux_opencl')
280 use,
intrinsic :: iso_c_binding
282 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
288 subroutine inviscid_res_part_e_flux_opencl(f_x, f_y, f_z, &
289 m_x, m_y, m_z, rho_field, p, E, n) &
290 bind(c, name =
'inviscid_res_part_E_flux_opencl')
291 use,
intrinsic :: iso_c_binding
293 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p, E
295 end subroutine inviscid_res_part_e_flux_opencl
300 rhs_m_x_d, rhs_m_y_d, rhs_m_z_d, &
301 rhs_E_d, mult_d, n) &
302 bind(c, name =
'compressible_res_part_coef_mult_opencl')
303 use,
intrinsic :: iso_c_binding
305 type(c_ptr),
value :: rhs_rho_field_d, rhs_m_x_d, rhs_m_y_d, rhs_m_z_d, &
313 k_rho_i, k_m_x_i, k_m_y_i, &
316 bind(c, name =
'compressible_res_part_rk_sum_opencl')
317 use,
intrinsic :: iso_c_binding
320 type(c_ptr),
value :: rho, m_x, m_y, m_z, E, &
321 k_rho_i, k_m_x_i, k_m_y_i, &
329 subroutine compressible_res_part_visc_metal(rhs_field_d, Binv_d, field_d, &
330 effective_visc_d, n) &
331 bind(c, name =
'compressible_res_part_visc_metal')
332 use,
intrinsic :: iso_c_binding
335 type(c_ptr),
value :: rhs_field_d, Binv_d, field_d, effective_visc_d
337 end subroutine compressible_res_part_visc_metal
341 subroutine inviscid_res_part_mx_flux_metal(f_x, f_y, f_z, &
342 m_x, m_y, m_z, rho_field, p, n) &
343 bind(c, name =
'inviscid_res_part_mx_flux_metal')
344 use,
intrinsic :: iso_c_binding
346 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
348 end subroutine inviscid_res_part_mx_flux_metal
352 subroutine inviscid_res_part_my_flux_metal(f_x, f_y, f_z, &
353 m_x, m_y, m_z, rho_field, p, n) &
354 bind(c, name =
'inviscid_res_part_my_flux_metal')
355 use,
intrinsic :: iso_c_binding
357 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
359 end subroutine inviscid_res_part_my_flux_metal
363 subroutine inviscid_res_part_mz_flux_metal(f_x, f_y, f_z, &
364 m_x, m_y, m_z, rho_field, p, n) &
365 bind(c, name =
'inviscid_res_part_mz_flux_metal')
366 use,
intrinsic :: iso_c_binding
368 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
370 end subroutine inviscid_res_part_mz_flux_metal
374 subroutine inviscid_res_part_e_flux_metal(f_x, f_y, f_z, &
375 m_x, m_y, m_z, rho_field, p, E, n) &
376 bind(c, name =
'inviscid_res_part_E_flux_metal')
377 use,
intrinsic :: iso_c_binding
379 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p, E
381 end subroutine inviscid_res_part_e_flux_metal
385 subroutine compressible_res_part_coef_mult_metal(rhs_rho_field_d, &
386 rhs_m_x_d, rhs_m_y_d, rhs_m_z_d, &
387 rhs_E_d, mult_d, n) &
388 bind(c, name =
'compressible_res_part_coef_mult_metal')
389 use,
intrinsic :: iso_c_binding
391 type(c_ptr),
value :: rhs_rho_field_d, rhs_m_x_d, rhs_m_y_d, rhs_m_z_d, &
394 end subroutine compressible_res_part_coef_mult_metal
398 subroutine compressible_res_part_rk_sum_metal(rho, m_x, m_y, m_z, E, &
399 k_rho_i, k_m_x_i, k_m_y_i, &
402 bind(c, name =
'compressible_res_part_rk_sum_metal')
403 use,
intrinsic :: iso_c_binding
406 type(c_ptr),
value :: rho, m_x, m_y, m_z, E, &
407 k_rho_i, k_m_x_i, k_m_y_i, &
411 end subroutine compressible_res_part_rk_sum_metal
417 m_x, m_y, m_z, E, p, u, v, w, Ax, &
418 Ax_stress, coef, gs, h, artificial_visc, mu, kappa, bcs_vel, time, &
420 type(
field_t),
intent(inout) :: rho_field, m_x, m_y, m_z, E
421 type(
field_t),
intent(in) :: p, u, v, w, h, artificial_visc, mu, kappa
422 class(
ax_t),
intent(inout) :: Ax, Ax_stress
423 type(
coef_t),
intent(inout) :: coef
424 type(
gs_t),
intent(inout) :: gs
425 type(
bc_list_t),
intent(inout) :: bcs_vel
428 real(kind=
rp),
intent(in) :: dt
429 integer :: n, s, i, j, k
430 real(kind=
rp) :: t, c
431 type(
field_t),
pointer :: k_rho_1, k_rho_2, k_rho_3, k_rho_4, &
432 k_m_x_1, k_m_x_2, k_m_x_3, k_m_x_4, &
433 k_m_y_1, k_m_y_2, k_m_y_3, k_m_y_4, &
434 k_m_z_1, k_m_z_2, k_m_z_3, k_m_z_4, &
435 k_e_1, k_e_2, k_e_3, k_e_4, &
436 temp_rho, temp_m_x, temp_m_y, temp_m_z, temp_e, &
437 temp_p, temp_u, temp_v, temp_w, temp_ruvw
438 integer :: temp_indices(30)
480 call k_rho%assign(1, k_rho_1)
481 call k_rho%assign(2, k_rho_2)
482 call k_rho%assign(3, k_rho_3)
483 call k_rho%assign(4, k_rho_4)
485 call k_m_x%assign(1, k_m_x_1)
486 call k_m_x%assign(2, k_m_x_2)
487 call k_m_x%assign(3, k_m_x_3)
488 call k_m_x%assign(4, k_m_x_4)
490 call k_m_y%assign(1, k_m_y_1)
491 call k_m_y%assign(2, k_m_y_2)
492 call k_m_y%assign(3, k_m_y_3)
493 call k_m_y%assign(4, k_m_y_4)
495 call k_m_z%assign(1, k_m_z_1)
496 call k_m_z%assign(2, k_m_z_2)
497 call k_m_z%assign(3, k_m_z_3)
498 call k_m_z%assign(4, k_m_z_4)
500 call k_e%assign(1, k_e_1)
501 call k_e%assign(2, k_e_2)
502 call k_e%assign(3, k_e_3)
503 call k_e%assign(4, k_e_4)
506 any(mu%x .ne. 0.0_rp) .or. any(kappa%x .ne. 0.0_rp)
520 temp_m_y%x_d, temp_m_z%x_d, temp_e%x_d, &
521 k_rho%items(j)%ptr%x_d, k_m_x%items(j)%ptr%x_d, &
522 k_m_y%items(j)%ptr%x_d, &
523 k_m_z%items(j)%ptr%x_d, k_e%items(j)%ptr%x_d, &
524 dt, rk_scheme%coeffs_A(i, j), n)
527 temp_m_y%x_d, temp_m_z%x_d, temp_e%x_d, &
528 k_rho%items(j)%ptr%x_d, k_m_x%items(j)%ptr%x_d, &
529 k_m_y%items(j)%ptr%x_d, &
530 k_m_z%items(j)%ptr%x_d, k_e%items(j)%ptr%x_d, &
531 dt, rk_scheme%coeffs_A(i, j), n)
534 temp_m_y%x_d, temp_m_z%x_d, temp_e%x_d, &
535 k_rho%items(j)%ptr%x_d, k_m_x%items(j)%ptr%x_d, &
536 k_m_y%items(j)%ptr%x_d, &
537 k_m_z%items(j)%ptr%x_d, k_e%items(j)%ptr%x_d, &
538 dt, rk_scheme%coeffs_A(i, j), n)
540 call compressible_res_part_rk_sum_metal(temp_rho%x_d, &
541 temp_m_x%x_d, temp_m_y%x_d, temp_m_z%x_d, temp_e%x_d, &
542 k_rho%items(j)%ptr%x_d, k_m_x%items(j)%ptr%x_d, &
543 k_m_y%items(j)%ptr%x_d, &
544 k_m_z%items(j)%ptr%x_d, k_e%items(j)%ptr%x_d, &
545 dt, rk_scheme%coeffs_A(i, j), n)
551 temp_w%x_d, temp_m_x%x_d, temp_m_y%x_d, temp_m_z%x_d, &
554 call bcs_vel%apply_vector(temp_u%x, temp_v%x, temp_w%x, n, time, &
558 temp_m_y%x_d, temp_m_z%x_d, temp_p%x_d, temp_ruvw%x_d, &
559 temp_u%x_d, temp_v%x_d, temp_w%x_d, temp_e%x_d, &
563 k_m_y%items(i)%ptr, k_m_z%items(i)%ptr, k_e%items(i)%ptr, &
564 temp_rho, temp_m_x, temp_m_y, temp_m_z, temp_e, &
565 temp_p, temp_u, temp_v, temp_w, ax, &
566 ax_stress, coef, gs, h, artificial_visc, mu, kappa)
573 m_x%x_d, m_y%x_d, m_z%x_d, e%x_d, &
574 k_rho%items(i)%ptr%x_d, k_m_x%items(i)%ptr%x_d, &
575 k_m_y%items(i)%ptr%x_d, &
576 k_m_z%items(i)%ptr%x_d, k_e%items(i)%ptr%x_d, &
577 dt, rk_scheme%coeffs_b(i), n)
580 m_x%x_d, m_y%x_d, m_z%x_d, e%x_d, &
581 k_rho%items(i)%ptr%x_d, k_m_x%items(i)%ptr%x_d, &
582 k_m_y%items(i)%ptr%x_d, &
583 k_m_z%items(i)%ptr%x_d, k_e%items(i)%ptr%x_d, &
584 dt, rk_scheme%coeffs_b(i), n)
587 m_x%x_d, m_y%x_d, m_z%x_d, e%x_d, &
588 k_rho%items(i)%ptr%x_d, k_m_x%items(i)%ptr%x_d, &
589 k_m_y%items(i)%ptr%x_d, &
590 k_m_z%items(i)%ptr%x_d, k_e%items(i)%ptr%x_d, &
591 dt, rk_scheme%coeffs_b(i), n)
593 call compressible_res_part_rk_sum_metal(rho_field%x_d, &
594 m_x%x_d, m_y%x_d, m_z%x_d, e%x_d, &
595 k_rho%items(i)%ptr%x_d, k_m_x%items(i)%ptr%x_d, &
596 k_m_y%items(i)%ptr%x_d, &
597 k_m_z%items(i)%ptr%x_d, k_e%items(i)%ptr%x_d, &
598 dt, rk_scheme%coeffs_b(i), n)
606 rhs_m_z, rhs_E, rho_field, &
607 m_x, m_y, m_z, E, p, u, v, w, Ax, &
608 Ax_stress, coef, gs, h, artificial_visc, mu, kappa)
609 type(
field_t),
intent(inout) :: rhs_rho_field, rhs_m_x, rhs_m_y, &
611 type(
field_t),
intent(inout) :: rho_field, m_x, m_y, m_z, E
612 type(
field_t),
intent(in) :: p, u, v, w, h, artificial_visc, mu, kappa
613 class(
ax_t),
intent(inout) :: Ax, Ax_stress
614 type(
coef_t),
intent(inout) :: coef
615 type(
gs_t),
intent(inout) :: gs
617 type(
field_t),
pointer :: temp, f_x, f_y, f_z, &
618 visc_rho, visc_m_x, visc_m_y, visc_m_z, visc_E
619 integer :: temp_indices(8)
627 call div(rhs_rho_field%x, m_x%x, m_y%x, m_z%x, coef)
633 m_x%x_d, m_y%x_d, m_z%x_d, rho_field%x_d, p%x_d, n)
636 m_x%x_d, m_y%x_d, m_z%x_d, rho_field%x_d, p%x_d, n)
639 m_x%x_d, m_y%x_d, m_z%x_d, rho_field%x_d, p%x_d, n)
641 call inviscid_res_part_mx_flux_metal(f_x%x_d, f_y%x_d, f_z%x_d, &
642 m_x%x_d, m_y%x_d, m_z%x_d, rho_field%x_d, p%x_d, n)
644 call div(rhs_m_x%x, f_x%x, f_y%x, f_z%x, coef)
648 m_x%x_d, m_y%x_d, m_z%x_d, &
649 rho_field%x_d, p%x_d, n)
652 m_x%x_d, m_y%x_d, m_z%x_d, &
653 rho_field%x_d, p%x_d, n)
656 m_x%x_d, m_y%x_d, m_z%x_d, &
657 rho_field%x_d, p%x_d, n)
659 call inviscid_res_part_my_flux_metal(f_x%x_d, f_y%x_d, f_z%x_d, &
660 m_x%x_d, m_y%x_d, m_z%x_d, &
661 rho_field%x_d, p%x_d, n)
663 call div(rhs_m_y%x, f_x%x, f_y%x, f_z%x, coef)
667 m_x%x_d, m_y%x_d, m_z%x_d, &
668 rho_field%x_d, p%x_d, n)
671 m_x%x_d, m_y%x_d, m_z%x_d, &
672 rho_field%x_d, p%x_d, n)
675 m_x%x_d, m_y%x_d, m_z%x_d, &
676 rho_field%x_d, p%x_d, n)
678 call inviscid_res_part_mz_flux_metal(f_x%x_d, f_y%x_d, f_z%x_d, &
679 m_x%x_d, m_y%x_d, m_z%x_d, &
680 rho_field%x_d, p%x_d, n)
682 call div(rhs_m_z%x, f_x%x, f_y%x, f_z%x, coef)
689 m_x%x_d, m_y%x_d, m_z%x_d, &
690 rho_field%x_d, p%x_d, e%x_d, n)
692 call inviscid_res_part_e_flux_cuda(f_x%x_d, f_y%x_d, f_z%x_d, &
693 m_x%x_d, m_y%x_d, m_z%x_d, &
694 rho_field%x_d, p%x_d, e%x_d, n)
696 call inviscid_res_part_e_flux_opencl(f_x%x_d, f_y%x_d, f_z%x_d, &
697 m_x%x_d, m_y%x_d, m_z%x_d, &
698 rho_field%x_d, p%x_d, e%x_d, n)
700 call inviscid_res_part_e_flux_metal(f_x%x_d, f_y%x_d, f_z%x_d, &
701 m_x%x_d, m_y%x_d, m_z%x_d, &
702 rho_field%x_d, p%x_d, e%x_d, n)
704 call div(rhs_e%x_d, f_x%x_d, f_y%x_d, f_z%x_d, coef)
706 call gs%op(rhs_rho_field, gs_op_add)
707 call rotate_cyc(rhs_m_x%x_d, rhs_m_y%x_d, rhs_m_z%x_d, 1, coef)
708 call gs%op(rhs_m_x%x, rhs_m_y%x, rhs_m_z%x, n, gs_op_add)
709 call rotate_cyc(rhs_m_x%x_d, rhs_m_y%x_d, rhs_m_z%x_d, 0, coef)
710 call gs%op(rhs_e, gs_op_add)
714 rhs_m_y%x_d, rhs_m_z%x_d, &
715 rhs_e%x_d, coef%mult_d, n)
718 rhs_m_y%x_d, rhs_m_z%x_d, &
719 rhs_e%x_d, coef%mult_d, n)
722 rhs_m_x%x_d, rhs_m_y%x_d, rhs_m_z%x_d, &
723 rhs_e%x_d, coef%mult_d, n)
725 call compressible_res_part_coef_mult_metal(rhs_rho_field%x_d, rhs_m_x%x_d, &
726 rhs_m_y%x_d, rhs_m_z%x_d, &
727 rhs_e%x_d, coef%mult_d, n)
742 call device_copy(coef%h1_d, artificial_visc%x_d, n)
743 call ax%compute(visc_rho%x, rho_field%x, coef, p%msh, p%Xh)
744 call ax%compute_vector(visc_m_x%x, visc_m_y%x, visc_m_z%x, &
745 m_x%x, m_y%x, m_z%x, coef, p%msh, p%Xh)
746 call ax%compute(visc_e%x, e%x, coef, p%msh, p%Xh)
750 visc_e, rho_field, p, u, v, w, mu, kappa, ax, ax_stress, coef)
756 call gs%op(visc_rho, gs_op_add)
757 call rotate_cyc(visc_m_x%x_d, visc_m_y%x_d, visc_m_z%x_d, 1, coef)
758 call gs%op(visc_m_x%x, visc_m_y%x, visc_m_z%x, n, gs_op_add)
759 call rotate_cyc(visc_m_x%x_d, visc_m_y%x_d, visc_m_z%x_d, 0, coef)
760 call gs%op(visc_e, gs_op_add)
771 call device_sub2(rhs_rho_field%x_d, visc_rho%x_d, n)
805 visc_E, rho_field, p, u, v, w, mu, kappa, Ax, Ax_stress, coef)
806 type(
field_t),
intent(inout) :: visc_m_x, visc_m_y, visc_m_z, visc_E
807 type(
field_t),
intent(in) :: rho_field
808 type(
field_t),
intent(in) :: p, u, v, w, mu, kappa
809 class(
ax_t),
intent(inout) :: Ax, Ax_stress
810 type(
coef_t),
intent(inout) :: coef
811 type(
field_t),
pointer :: dudx, dudy, dudz, dvdx, dvdy, dvdz, &
812 dwdx, dwdy, dwdz, f_x, f_y, f_z, div_flux, dissipation
813 integer :: temp_indices(14)
835 call grad(dudx%x, dudy%x, dudz%x, u%x, coef)
836 call grad(dvdx%x, dvdy%x, dvdz%x, v%x, coef)
837 call grad(dwdx%x, dwdy%x, dwdz%x, w%x, coef)
840 dissipation%x_d, coef%h1_d, dudx%x_d, dudy%x_d, dudz%x_d, &
841 dvdx%x_d, dvdy%x_d, dvdz%x_d, dwdx%x_d, dwdy%x_d, dwdz%x_d, &
844 call ax_stress%compute_vector(f_x%x, f_y%x, f_z%x, u%x, v%x, w%x, &
846 call opgrad(dudx%x, dudy%x, dudz%x, div_flux%x, coef)
848 visc_m_y%x_d, visc_m_z%x_d, visc_e%x_d, f_x%x_d, f_y%x_d, &
849 f_z%x_d, dudx%x_d, dudy%x_d, dudz%x_d, u%x_d, v%x_d, w%x_d, &
850 coef%B_d, dissipation%x_d, n)
854 call ax%compute(dudx%x, div_flux%x, coef, p%msh, p%Xh)
void compressible_res_part_visc_opencl(void *rhs_u, void *Binv, void *lap_sol, void *effective_visc, 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_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 compressible_res_part_visc_cuda(void *rhs_u, void *Binv, void *lap_sol, void *effective_visc, 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.
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, h, artificial_visc, mu, kappa)
real(kind=rp), public compressible_res_device_gamma
Module variable to store thermodynamic parameter set by factory.
subroutine advance_primitive_variables_device(rho_field, m_x, m_y, m_z, e, p, u, v, w, ax, ax_stress, coef, gs, h, artificial_visc, mu, kappa, bcs_vel, time, rk_scheme, dt)
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.
logical compressible_res_device_add_physical_stress
Whether physical viscous stress is active for the current step.
logical compressible_res_device_add_physical_flux
Whether physical Navier-Stokes fluxes are active for the current step.
subroutine, public device_add2(a_d, b_d, n, strm)
Vector addition .
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 .
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.