91 Ax_stress, coef, gs, h, artificial_visc, mu, kappa, bcs_vel, time, &
93 type(
field_t),
intent(inout) :: rho_field, m_x, m_y, m_z, e
94 type(
field_t),
intent(in) :: p, u, v, w, h, artificial_visc, mu, kappa
95 class(
ax_t),
intent(inout) :: Ax, Ax_stress
96 type(
coef_t),
intent(inout) :: coef
97 type(
gs_t),
intent(inout) :: gs
101 real(kind=
rp),
intent(in) :: dt
102 integer :: n, s, i, j, l
103 type(
field_t),
pointer :: k_rho_1, k_rho_2, k_rho_3, k_rho_4, &
104 k_m_x_1, k_m_x_2, k_m_x_3, k_m_x_4, &
105 k_m_y_1, k_m_y_2, k_m_y_3, k_m_y_4, &
106 k_m_z_1, k_m_z_2, k_m_z_3, k_m_z_4, &
107 k_E_1, k_E_2, k_E_3, k_E_4, &
108 temp_rho, temp_m_x, temp_m_y, temp_m_z, temp_E, &
109 temp_p, temp_u, temp_v, temp_w, temp_ruvw
110 integer :: tmp_indices(30)
114 real(kind=
rp),
contiguous,
pointer :: k_rho_ptr(:,:,:,:)
115 real(kind=
rp),
contiguous,
pointer :: k_m_x_ptr(:,:,:,:)
116 real(kind=
rp),
contiguous,
pointer :: k_m_y_ptr(:,:,:,:)
117 real(kind=
rp),
contiguous,
pointer :: k_m_z_ptr(:,:,:,:)
118 real(kind=
rp),
contiguous,
pointer :: k_e_ptr(:,:,:,:)
156 call k_rho%assign(1, k_rho_1)
157 call k_rho%assign(2, k_rho_2)
158 call k_rho%assign(3, k_rho_3)
159 call k_rho%assign(4, k_rho_4)
161 call k_m_x%assign(1, k_m_x_1)
162 call k_m_x%assign(2, k_m_x_2)
163 call k_m_x%assign(3, k_m_x_3)
164 call k_m_x%assign(4, k_m_x_4)
166 call k_m_y%assign(1, k_m_y_1)
167 call k_m_y%assign(2, k_m_y_2)
168 call k_m_y%assign(3, k_m_y_3)
169 call k_m_y%assign(4, k_m_y_4)
171 call k_m_z%assign(1, k_m_z_1)
172 call k_m_z%assign(2, k_m_z_2)
173 call k_m_z%assign(3, k_m_z_3)
174 call k_m_z%assign(4, k_m_z_4)
176 call k_e%assign(1, k_e_1)
177 call k_e%assign(2, k_e_2)
178 call k_e%assign(3, k_e_3)
179 call k_e%assign(4, k_e_4)
182 any(mu%x .ne. 0.0_rp) .or. any(kappa%x .ne. 0.0_rp)
198 temp_rho%x(l,1,1,1) = rho_field%x(l,1,1,1)
199 temp_m_x%x(l,1,1,1) = m_x%x(l,1,1,1)
200 temp_m_y%x(l,1,1,1) = m_y%x(l,1,1,1)
201 temp_m_z%x(l,1,1,1) = m_z%x(l,1,1,1)
202 temp_e%x(l,1,1,1) = e%x(l,1,1,1)
211 k_rho_ptr => k_rho%items(j)%ptr%x
212 k_m_x_ptr => k_m_x%items(j)%ptr%x
213 k_m_y_ptr => k_m_y%items(j)%ptr%x
214 k_m_z_ptr => k_m_z%items(j)%ptr%x
215 k_e_ptr => k_e%items(j)%ptr%x
223 temp_rho%x(l,1,1,1) = temp_rho%x(l,1,1,1) + &
224 dt * rk_scheme%coeffs_A(i, j) * k_rho_ptr(l,1,1,1)
225 temp_m_x%x(l,1,1,1) = temp_m_x%x(l,1,1,1) + &
226 dt * rk_scheme%coeffs_A(i, j) * k_m_x_ptr(l,1,1,1)
227 temp_m_y%x(l,1,1,1) = temp_m_y%x(l,1,1,1) + &
228 dt * rk_scheme%coeffs_A(i, j) * k_m_y_ptr(l,1,1,1)
229 temp_m_z%x(l,1,1,1) = temp_m_z%x(l,1,1,1) + &
230 dt * rk_scheme%coeffs_A(i, j) * k_m_z_ptr(l,1,1,1)
231 temp_e%x(l,1,1,1) = temp_e%x(l,1,1,1) + &
232 dt * rk_scheme%coeffs_A(i, j) * k_e_ptr(l,1,1,1)
240 temp_m_x%x, temp_m_y%x, temp_m_z%x, temp_rho%x, n)
242 call bcs_vel%apply_vector(temp_u%x, temp_v%x, temp_w%x, n, time, &
246 temp_m_z%x, temp_p%x, temp_ruvw%x, temp_u%x, temp_v%x, temp_w%x, &
250 k_m_y%items(i)%ptr, k_m_z%items(i)%ptr, &
252 temp_rho, temp_m_x, temp_m_y, temp_m_z, temp_e, &
253 temp_p, temp_u, temp_v, temp_w, ax, &
254 ax_stress, coef, gs, h, artificial_visc, mu, kappa)
261 k_rho_ptr => k_rho%items(i)%ptr%x
262 k_m_x_ptr => k_m_x%items(i)%ptr%x
263 k_m_y_ptr => k_m_y%items(i)%ptr%x
264 k_m_z_ptr => k_m_z%items(i)%ptr%x
265 k_e_ptr => k_e%items(i)%ptr%x
273 rho_field%x(l,1,1,1) = rho_field%x(l,1,1,1) + &
274 dt * rk_scheme%coeffs_b(i) * k_rho_ptr(l,1,1,1)
275 m_x%x(l,1,1,1) = m_x%x(l,1,1,1) + &
276 dt * rk_scheme%coeffs_b(i) * k_m_x_ptr(l,1,1,1)
277 m_y%x(l,1,1,1) = m_y%x(l,1,1,1) + &
278 dt * rk_scheme%coeffs_b(i) * k_m_y_ptr(l,1,1,1)
279 m_z%x(l,1,1,1) = m_z%x(l,1,1,1) + &
280 dt * rk_scheme%coeffs_b(i) * k_m_z_ptr(l,1,1,1)
281 e%x(l,1,1,1) = e%x(l,1,1,1) + &
282 dt * rk_scheme%coeffs_b(i) * k_e_ptr(l,1,1,1)
318 rho_field, m_x, m_y, m_z, E, p, u, v, w, Ax, &
319 Ax_stress, coef, gs, h, artificial_visc, mu, kappa)
320 type(
field_t),
intent(inout) :: rhs_rho_field, &
321 rhs_m_x, rhs_m_y, rhs_m_z, rhs_e
322 type(
field_t),
intent(inout) :: rho_field, m_x, m_y, m_z, E
323 type(
field_t),
intent(in) :: p, u, v, w, h, artificial_visc, mu, kappa
324 class(
ax_t),
intent(inout) :: Ax, Ax_stress
325 type(
coef_t),
intent(inout) :: coef
326 type(
gs_t),
intent(inout) :: gs
328 type(
field_t),
pointer :: f_x, f_y, f_z
329 type(
field_t),
pointer :: visc_rho, visc_m_x, visc_m_y, visc_m_z, visc_E
330 integer :: tmp_indices(8)
350 call div(rhs_rho_field%x, m_x%x, m_y%x, m_z%x, coef)
361 f_x%x(i,1,1,1) = m_x%x(i,1,1,1) * m_x%x(i,1,1,1) / &
362 rho_field%x(i,1,1,1) + p%x(i,1,1,1)
363 f_y%x(i,1,1,1) = m_x%x(i,1,1,1) * m_y%x(i,1,1,1) / &
365 f_z%x(i,1,1,1) = m_x%x(i,1,1,1) * m_z%x(i,1,1,1) / &
369 call div(rhs_m_x%x, f_x%x, f_y%x, f_z%x, coef)
377 f_x%x(i,1,1,1) = m_y%x(i,1,1,1) * m_x%x(i,1,1,1) / &
379 f_y%x(i,1,1,1) = m_y%x(i,1,1,1) * m_y%x(i,1,1,1) / &
380 rho_field%x(i,1,1,1) + p%x(i,1,1,1)
381 f_z%x(i,1,1,1) = m_y%x(i,1,1,1) * m_z%x(i,1,1,1) / &
385 call div(rhs_m_y%x, f_x%x, f_y%x, f_z%x, coef)
393 f_x%x(i,1,1,1) = m_z%x(i,1,1,1) * m_x%x(i,1,1,1) / &
395 f_y%x(i,1,1,1) = m_z%x(i,1,1,1) * m_y%x(i,1,1,1) / &
397 f_z%x(i,1,1,1) = m_z%x(i,1,1,1) * m_z%x(i,1,1,1) / &
398 rho_field%x(i,1,1,1) + p%x(i,1,1,1)
401 call div(rhs_m_z%x, f_x%x, f_y%x, f_z%x, coef)
411 f_x%x(i,1,1,1) = (e%x(i,1,1,1) + p%x(i,1,1,1)) * &
413 f_y%x(i,1,1,1) = (e%x(i,1,1,1) + p%x(i,1,1,1)) * &
415 f_z%x(i,1,1,1) = (e%x(i,1,1,1) + p%x(i,1,1,1)) * &
419 call div(rhs_e%x, f_x%x, f_y%x, f_z%x, coef)
422 call rotate_cyc(rhs_m_x%x, rhs_m_y%x, rhs_m_z%x, 1, coef)
423 call gs%op(rhs_m_x%x, rhs_m_y%x, rhs_m_z%x, n,
gs_op_add)
424 call rotate_cyc(rhs_m_x%x, rhs_m_y%x, rhs_m_z%x, 0, coef)
437 rhs_rho_field%x(i,1,1,1) = rhs_rho_field%x(i,1,1,1) * &
439 rhs_m_x%x(i,1,1,1) = rhs_m_x%x(i,1,1,1) * coef%mult(i,1,1,1)
440 rhs_m_y%x(i,1,1,1) = rhs_m_y%x(i,1,1,1) * coef%mult(i,1,1,1)
441 rhs_m_z%x(i,1,1,1) = rhs_m_z%x(i,1,1,1) * coef%mult(i,1,1,1)
442 rhs_e%x(i,1,1,1) = rhs_e%x(i,1,1,1) * coef%mult(i,1,1,1)
443 coef%h1(i,1,1,1) = artificial_visc%x(i,1,1,1)
452 call ax%compute(visc_rho%x, rho_field%x, coef, p%msh, p%Xh)
453 call ax%compute_vector(visc_m_x%x, visc_m_y%x, visc_m_z%x, &
454 m_x%x, m_y%x, m_z%x, coef, p%msh, p%Xh)
455 call ax%compute(visc_e%x, e%x, coef, p%msh, p%Xh)
459 rho_field, p, u, v, w, mu, kappa, ax, ax_stress, coef)
465 call rotate_cyc(visc_m_x%x, visc_m_y%x, visc_m_z%x, 1, coef)
466 call gs%op(visc_m_x%x, visc_m_y%x, visc_m_z%x, n,
gs_op_add)
467 call rotate_cyc(visc_m_x%x, visc_m_y%x, visc_m_z%x, 0, coef)
479 rhs_rho_field%x(i,1,1,1) = -rhs_rho_field%x(i,1,1,1) - &
480 coef%Binv(i,1,1,1) * visc_rho%x(i,1,1,1)
481 rhs_m_x%x(i,1,1,1) = -rhs_m_x%x(i,1,1,1) - &
482 coef%Binv(i,1,1,1) * visc_m_x%x(i,1,1,1)
483 rhs_m_y%x(i,1,1,1) = -rhs_m_y%x(i,1,1,1) - &
484 coef%Binv(i,1,1,1) * visc_m_y%x(i,1,1,1)
485 rhs_m_z%x(i,1,1,1) = -rhs_m_z%x(i,1,1,1) - &
486 coef%Binv(i,1,1,1) * visc_m_z%x(i,1,1,1)
487 rhs_e%x(i,1,1,1) = -rhs_e%x(i,1,1,1) - &
488 coef%Binv(i,1,1,1) * visc_e%x(i,1,1,1)
489 coef%h1(i,1,1,1) = 1.0_rp
512 rho_field, p, u, v, w, mu, kappa, Ax, Ax_stress, coef)
513 type(
field_t),
intent(inout) :: visc_m_x, visc_m_y, visc_m_z, visc_E
514 type(
field_t),
intent(in) :: rho_field
515 type(
field_t),
intent(in) :: p, u, v, w, mu, kappa
516 class(
ax_t),
intent(inout) :: Ax, Ax_stress
517 type(
coef_t),
intent(inout) :: coef
518 type(
field_t),
pointer :: dudx, dudy, dudz, dvdx, dvdy, dvdz, &
519 dwdx, dwdy, dwdz, tau_xx, tau_xy, tau_xz, tau_yy, tau_yz, &
520 tau_zz, f_x, f_y, f_z, div_flux, dissipation
521 integer :: tmp_indices(20)
523 real(kind=
rp) :: div_u, two_thirds
526 two_thirds = 2.0_rp / 3.0_rp
550 call grad(dudx%x, dudy%x, dudz%x, u%x, coef)
551 call grad(dvdx%x, dvdy%x, dvdz%x, v%x, coef)
552 call grad(dwdx%x, dwdy%x, dwdz%x, w%x, coef)
562 div_u = dudx%x(i,1,1,1) + dvdy%x(i,1,1,1) + dwdz%x(i,1,1,1)
563 div_flux%x(i,1,1,1) = mu%x(i,1,1,1) * div_u
564 coef%h1(i,1,1,1) = mu%x(i,1,1,1)
565 tau_xx%x(i,1,1,1) = mu%x(i,1,1,1) * &
566 (2.0_rp * dudx%x(i,1,1,1) - two_thirds * div_u)
567 tau_yy%x(i,1,1,1) = mu%x(i,1,1,1) * &
568 (2.0_rp * dvdy%x(i,1,1,1) - two_thirds * div_u)
569 tau_zz%x(i,1,1,1) = mu%x(i,1,1,1) * &
570 (2.0_rp * dwdz%x(i,1,1,1) - two_thirds * div_u)
571 tau_xy%x(i,1,1,1) = mu%x(i,1,1,1) * &
572 (dudy%x(i,1,1,1) + dvdx%x(i,1,1,1))
573 tau_xz%x(i,1,1,1) = mu%x(i,1,1,1) * &
574 (dudz%x(i,1,1,1) + dwdx%x(i,1,1,1))
575 tau_yz%x(i,1,1,1) = mu%x(i,1,1,1) * &
576 (dvdz%x(i,1,1,1) + dwdy%x(i,1,1,1))
577 dissipation%x(i,1,1,1) = &
578 tau_xx%x(i,1,1,1) * dudx%x(i,1,1,1) &
579 + tau_xy%x(i,1,1,1) * (dudy%x(i,1,1,1) + dvdx%x(i,1,1,1)) &
580 + tau_xz%x(i,1,1,1) * (dudz%x(i,1,1,1) + dwdx%x(i,1,1,1)) &
581 + tau_yy%x(i,1,1,1) * dvdy%x(i,1,1,1) &
582 + tau_yz%x(i,1,1,1) * (dvdz%x(i,1,1,1) + dwdy%x(i,1,1,1)) &
583 + tau_zz%x(i,1,1,1) * dwdz%x(i,1,1,1)
587 call ax_stress%compute_vector(f_x%x, f_y%x, f_z%x, u%x, v%x, w%x, coef, &
589 call opgrad(dudx%x, dudy%x, dudz%x, div_flux%x, coef)
601 f_x%x(i,1,1,1) = f_x%x(i,1,1,1) &
602 - two_thirds * dudx%x(i,1,1,1)
603 f_y%x(i,1,1,1) = f_y%x(i,1,1,1) &
604 - two_thirds * dudy%x(i,1,1,1)
605 f_z%x(i,1,1,1) = f_z%x(i,1,1,1) &
606 - two_thirds * dudz%x(i,1,1,1)
607 visc_m_x%x(i,1,1,1) = visc_m_x%x(i,1,1,1) + f_x%x(i,1,1,1)
608 visc_m_y%x(i,1,1,1) = visc_m_y%x(i,1,1,1) + f_y%x(i,1,1,1)
609 visc_m_z%x(i,1,1,1) = visc_m_z%x(i,1,1,1) + f_z%x(i,1,1,1)
610 visc_e%x(i,1,1,1) = visc_e%x(i,1,1,1) &
611 + u%x(i,1,1,1) * f_x%x(i,1,1,1) &
612 + v%x(i,1,1,1) * f_y%x(i,1,1,1) &
613 + w%x(i,1,1,1) * f_z%x(i,1,1,1) &
614 - coef%B(i,1,1,1) * dissipation%x(i,1,1,1)
615 div_flux%x(i,1,1,1) = p%x(i,1,1,1) / &
617 coef%h1(i,1,1,1) = kappa%x(i,1,1,1)
621 call ax%compute(dudx%x, div_flux%x, coef, p%msh, p%Xh)
629 visc_e%x(i,1,1,1) = visc_e%x(i,1,1,1) + dudx%x(i,1,1,1)