92 Ax_stress, coef, gs, artificial_visc, mu, kappa, bcs_vel, time, &
94 type(
field_t),
intent(inout) :: rho_field, m_x, m_y, m_z, e
95 type(
field_t),
intent(in) :: p, u, v, w, artificial_visc, mu, kappa
96 class(
ax_t),
intent(inout) :: Ax, Ax_stress
97 type(
coef_t),
intent(inout) :: coef
98 type(
gs_t),
intent(inout) :: gs
102 real(kind=
rp),
intent(in) :: dt
103 integer :: n, s, i, j, l
104 type(
field_t),
pointer :: k_rho_1, k_rho_2, k_rho_3, k_rho_4, &
105 k_m_x_1, k_m_x_2, k_m_x_3, k_m_x_4, &
106 k_m_y_1, k_m_y_2, k_m_y_3, k_m_y_4, &
107 k_m_z_1, k_m_z_2, k_m_z_3, k_m_z_4, &
108 k_E_1, k_E_2, k_E_3, k_E_4, &
109 temp_rho, temp_m_x, temp_m_y, temp_m_z, temp_E, &
110 temp_p, temp_u, temp_v, temp_w, temp_ruvw
111 integer :: tmp_indices(30)
115 real(kind=
rp),
contiguous,
pointer :: k_rho_ptr(:,:,:,:)
116 real(kind=
rp),
contiguous,
pointer :: k_m_x_ptr(:,:,:,:)
117 real(kind=
rp),
contiguous,
pointer :: k_m_y_ptr(:,:,:,:)
118 real(kind=
rp),
contiguous,
pointer :: k_m_z_ptr(:,:,:,:)
119 real(kind=
rp),
contiguous,
pointer :: k_e_ptr(:,:,:,:)
157 call k_rho%assign(1, k_rho_1)
158 call k_rho%assign(2, k_rho_2)
159 call k_rho%assign(3, k_rho_3)
160 call k_rho%assign(4, k_rho_4)
162 call k_m_x%assign(1, k_m_x_1)
163 call k_m_x%assign(2, k_m_x_2)
164 call k_m_x%assign(3, k_m_x_3)
165 call k_m_x%assign(4, k_m_x_4)
167 call k_m_y%assign(1, k_m_y_1)
168 call k_m_y%assign(2, k_m_y_2)
169 call k_m_y%assign(3, k_m_y_3)
170 call k_m_y%assign(4, k_m_y_4)
172 call k_m_z%assign(1, k_m_z_1)
173 call k_m_z%assign(2, k_m_z_2)
174 call k_m_z%assign(3, k_m_z_3)
175 call k_m_z%assign(4, k_m_z_4)
177 call k_e%assign(1, k_e_1)
178 call k_e%assign(2, k_e_2)
179 call k_e%assign(3, k_e_3)
180 call k_e%assign(4, k_e_4)
195 temp_rho%x(l,1,1,1) = rho_field%x(l,1,1,1)
196 temp_m_x%x(l,1,1,1) = m_x%x(l,1,1,1)
197 temp_m_y%x(l,1,1,1) = m_y%x(l,1,1,1)
198 temp_m_z%x(l,1,1,1) = m_z%x(l,1,1,1)
199 temp_e%x(l,1,1,1) = e%x(l,1,1,1)
208 k_rho_ptr => k_rho%items(j)%ptr%x
209 k_m_x_ptr => k_m_x%items(j)%ptr%x
210 k_m_y_ptr => k_m_y%items(j)%ptr%x
211 k_m_z_ptr => k_m_z%items(j)%ptr%x
212 k_e_ptr => k_e%items(j)%ptr%x
220 temp_rho%x(l,1,1,1) = temp_rho%x(l,1,1,1) + &
221 dt * rk_scheme%coeffs_A(i, j) * k_rho_ptr(l,1,1,1)
222 temp_m_x%x(l,1,1,1) = temp_m_x%x(l,1,1,1) + &
223 dt * rk_scheme%coeffs_A(i, j) * k_m_x_ptr(l,1,1,1)
224 temp_m_y%x(l,1,1,1) = temp_m_y%x(l,1,1,1) + &
225 dt * rk_scheme%coeffs_A(i, j) * k_m_y_ptr(l,1,1,1)
226 temp_m_z%x(l,1,1,1) = temp_m_z%x(l,1,1,1) + &
227 dt * rk_scheme%coeffs_A(i, j) * k_m_z_ptr(l,1,1,1)
228 temp_e%x(l,1,1,1) = temp_e%x(l,1,1,1) + &
229 dt * rk_scheme%coeffs_A(i, j) * k_e_ptr(l,1,1,1)
237 temp_m_x%x, temp_m_y%x, temp_m_z%x, temp_rho%x, n)
239 call bcs_vel%apply_vector(temp_u%x, temp_v%x, temp_w%x, n, time, &
243 temp_m_z%x, temp_p%x, temp_ruvw%x, temp_u%x, temp_v%x, temp_w%x, &
247 k_m_y%items(i)%ptr, k_m_z%items(i)%ptr, &
249 temp_rho, temp_m_x, temp_m_y, temp_m_z, temp_e, &
250 temp_p, temp_u, temp_v, temp_w, ax, &
251 ax_stress, coef, gs, artificial_visc, mu, kappa)
258 k_rho_ptr => k_rho%items(i)%ptr%x
259 k_m_x_ptr => k_m_x%items(i)%ptr%x
260 k_m_y_ptr => k_m_y%items(i)%ptr%x
261 k_m_z_ptr => k_m_z%items(i)%ptr%x
262 k_e_ptr => k_e%items(i)%ptr%x
270 rho_field%x(l,1,1,1) = rho_field%x(l,1,1,1) + &
271 dt * rk_scheme%coeffs_b(i) * k_rho_ptr(l,1,1,1)
272 m_x%x(l,1,1,1) = m_x%x(l,1,1,1) + &
273 dt * rk_scheme%coeffs_b(i) * k_m_x_ptr(l,1,1,1)
274 m_y%x(l,1,1,1) = m_y%x(l,1,1,1) + &
275 dt * rk_scheme%coeffs_b(i) * k_m_y_ptr(l,1,1,1)
276 m_z%x(l,1,1,1) = m_z%x(l,1,1,1) + &
277 dt * rk_scheme%coeffs_b(i) * k_m_z_ptr(l,1,1,1)
278 e%x(l,1,1,1) = e%x(l,1,1,1) + &
279 dt * rk_scheme%coeffs_b(i) * k_e_ptr(l,1,1,1)
314 rho_field, m_x, m_y, m_z, E, p, u, v, w, Ax, &
315 Ax_stress, coef, gs, artificial_visc, mu, kappa)
316 type(
field_t),
intent(inout) :: rhs_rho_field, &
317 rhs_m_x, rhs_m_y, rhs_m_z, rhs_e
318 type(
field_t),
intent(inout) :: rho_field, m_x, m_y, m_z, E
319 type(
field_t),
intent(in) :: p, u, v, w, artificial_visc, mu, kappa
320 class(
ax_t),
intent(inout) :: Ax, Ax_stress
321 type(
coef_t),
intent(inout) :: coef
322 type(
gs_t),
intent(inout) :: gs
324 type(
field_t),
pointer :: f_x, f_y, f_z
325 type(
field_t),
pointer :: visc_rho, visc_m_x, visc_m_y, visc_m_z, visc_E
326 integer :: tmp_indices(8)
346 call div(rhs_rho_field%x, m_x%x, m_y%x, m_z%x, coef)
357 f_x%x(i,1,1,1) = m_x%x(i,1,1,1) * m_x%x(i,1,1,1) / &
358 rho_field%x(i,1,1,1) + p%x(i,1,1,1)
359 f_y%x(i,1,1,1) = m_x%x(i,1,1,1) * m_y%x(i,1,1,1) / &
361 f_z%x(i,1,1,1) = m_x%x(i,1,1,1) * m_z%x(i,1,1,1) / &
365 call div(rhs_m_x%x, f_x%x, f_y%x, f_z%x, coef)
373 f_x%x(i,1,1,1) = m_y%x(i,1,1,1) * m_x%x(i,1,1,1) / &
375 f_y%x(i,1,1,1) = m_y%x(i,1,1,1) * m_y%x(i,1,1,1) / &
376 rho_field%x(i,1,1,1) + p%x(i,1,1,1)
377 f_z%x(i,1,1,1) = m_y%x(i,1,1,1) * m_z%x(i,1,1,1) / &
381 call div(rhs_m_y%x, f_x%x, f_y%x, f_z%x, coef)
389 f_x%x(i,1,1,1) = m_z%x(i,1,1,1) * m_x%x(i,1,1,1) / &
391 f_y%x(i,1,1,1) = m_z%x(i,1,1,1) * m_y%x(i,1,1,1) / &
393 f_z%x(i,1,1,1) = m_z%x(i,1,1,1) * m_z%x(i,1,1,1) / &
394 rho_field%x(i,1,1,1) + p%x(i,1,1,1)
397 call div(rhs_m_z%x, f_x%x, f_y%x, f_z%x, coef)
407 f_x%x(i,1,1,1) = (e%x(i,1,1,1) + p%x(i,1,1,1)) * &
409 f_y%x(i,1,1,1) = (e%x(i,1,1,1) + p%x(i,1,1,1)) * &
411 f_z%x(i,1,1,1) = (e%x(i,1,1,1) + p%x(i,1,1,1)) * &
415 call div(rhs_e%x, f_x%x, f_y%x, f_z%x, coef)
418 call rotate_cyc(rhs_m_x%x, rhs_m_y%x, rhs_m_z%x, 1, coef)
419 call gs%op(rhs_m_x%x, rhs_m_y%x, rhs_m_z%x, n,
gs_op_add)
420 call rotate_cyc(rhs_m_x%x, rhs_m_y%x, rhs_m_z%x, 0, coef)
433 rhs_rho_field%x(i,1,1,1) = rhs_rho_field%x(i,1,1,1) * &
435 rhs_m_x%x(i,1,1,1) = rhs_m_x%x(i,1,1,1) * coef%mult(i,1,1,1)
436 rhs_m_y%x(i,1,1,1) = rhs_m_y%x(i,1,1,1) * coef%mult(i,1,1,1)
437 rhs_m_z%x(i,1,1,1) = rhs_m_z%x(i,1,1,1) * coef%mult(i,1,1,1)
438 rhs_e%x(i,1,1,1) = rhs_e%x(i,1,1,1) * coef%mult(i,1,1,1)
439 coef%h1(i,1,1,1) = artificial_visc%x(i,1,1,1)
448 call ax%compute(visc_rho%x, rho_field%x, coef, p%msh, p%Xh)
449 call ax%compute_vector(visc_m_x%x, visc_m_y%x, visc_m_z%x, &
450 m_x%x, m_y%x, m_z%x, coef, p%msh, p%Xh)
451 call ax%compute(visc_e%x, e%x, coef, p%msh, p%Xh)
455 rho_field, p, u, v, w, mu, kappa, ax, ax_stress, coef)
461 call rotate_cyc(visc_m_x%x, visc_m_y%x, visc_m_z%x, 1, coef)
462 call gs%op(visc_m_x%x, visc_m_y%x, visc_m_z%x, n,
gs_op_add)
463 call rotate_cyc(visc_m_x%x, visc_m_y%x, visc_m_z%x, 0, coef)
475 rhs_rho_field%x(i,1,1,1) = -rhs_rho_field%x(i,1,1,1) - &
476 coef%Binv(i,1,1,1) * visc_rho%x(i,1,1,1)
477 rhs_m_x%x(i,1,1,1) = -rhs_m_x%x(i,1,1,1) - &
478 coef%Binv(i,1,1,1) * visc_m_x%x(i,1,1,1)
479 rhs_m_y%x(i,1,1,1) = -rhs_m_y%x(i,1,1,1) - &
480 coef%Binv(i,1,1,1) * visc_m_y%x(i,1,1,1)
481 rhs_m_z%x(i,1,1,1) = -rhs_m_z%x(i,1,1,1) - &
482 coef%Binv(i,1,1,1) * visc_m_z%x(i,1,1,1)
483 rhs_e%x(i,1,1,1) = -rhs_e%x(i,1,1,1) - &
484 coef%Binv(i,1,1,1) * visc_e%x(i,1,1,1)
485 coef%h1(i,1,1,1) = 1.0_rp
508 rho_field, p, u, v, w, mu, kappa, Ax, Ax_stress, coef)
509 type(
field_t),
intent(inout) :: visc_m_x, visc_m_y, visc_m_z, visc_E
510 type(
field_t),
intent(in) :: rho_field
511 type(
field_t),
intent(in) :: p, u, v, w, mu, kappa
512 class(
ax_t),
intent(inout) :: Ax, Ax_stress
513 type(
coef_t),
intent(inout) :: coef
514 type(
field_t),
pointer :: dudx, dudy, dudz, dvdx, dvdy, dvdz, &
515 dwdx, dwdy, dwdz, tau_xx, tau_xy, tau_xz, tau_yy, tau_yz, &
516 tau_zz, f_x, f_y, f_z, div_flux, dissipation
517 integer :: tmp_indices(20)
519 real(kind=
rp) :: div_u, two_thirds
522 two_thirds = 2.0_rp / 3.0_rp
546 call grad(dudx%x, dudy%x, dudz%x, u%x, coef)
547 call grad(dvdx%x, dvdy%x, dvdz%x, v%x, coef)
548 call grad(dwdx%x, dwdy%x, dwdz%x, w%x, coef)
558 div_u = dudx%x(i,1,1,1) + dvdy%x(i,1,1,1) + dwdz%x(i,1,1,1)
559 div_flux%x(i,1,1,1) = mu%x(i,1,1,1) * div_u
560 coef%h1(i,1,1,1) = mu%x(i,1,1,1)
561 tau_xx%x(i,1,1,1) = mu%x(i,1,1,1) * &
562 (2.0_rp * dudx%x(i,1,1,1) - two_thirds * div_u)
563 tau_yy%x(i,1,1,1) = mu%x(i,1,1,1) * &
564 (2.0_rp * dvdy%x(i,1,1,1) - two_thirds * div_u)
565 tau_zz%x(i,1,1,1) = mu%x(i,1,1,1) * &
566 (2.0_rp * dwdz%x(i,1,1,1) - two_thirds * div_u)
567 tau_xy%x(i,1,1,1) = mu%x(i,1,1,1) * &
568 (dudy%x(i,1,1,1) + dvdx%x(i,1,1,1))
569 tau_xz%x(i,1,1,1) = mu%x(i,1,1,1) * &
570 (dudz%x(i,1,1,1) + dwdx%x(i,1,1,1))
571 tau_yz%x(i,1,1,1) = mu%x(i,1,1,1) * &
572 (dvdz%x(i,1,1,1) + dwdy%x(i,1,1,1))
573 dissipation%x(i,1,1,1) = &
574 tau_xx%x(i,1,1,1) * dudx%x(i,1,1,1) &
575 + tau_xy%x(i,1,1,1) * (dudy%x(i,1,1,1) + dvdx%x(i,1,1,1)) &
576 + tau_xz%x(i,1,1,1) * (dudz%x(i,1,1,1) + dwdx%x(i,1,1,1)) &
577 + tau_yy%x(i,1,1,1) * dvdy%x(i,1,1,1) &
578 + tau_yz%x(i,1,1,1) * (dvdz%x(i,1,1,1) + dwdy%x(i,1,1,1)) &
579 + tau_zz%x(i,1,1,1) * dwdz%x(i,1,1,1)
583 call ax_stress%compute_vector(f_x%x, f_y%x, f_z%x, u%x, v%x, w%x, coef, &
585 call opgrad(dudx%x, dudy%x, dudz%x, div_flux%x, coef)
597 f_x%x(i,1,1,1) = f_x%x(i,1,1,1) &
598 - two_thirds * dudx%x(i,1,1,1)
599 f_y%x(i,1,1,1) = f_y%x(i,1,1,1) &
600 - two_thirds * dudy%x(i,1,1,1)
601 f_z%x(i,1,1,1) = f_z%x(i,1,1,1) &
602 - two_thirds * dudz%x(i,1,1,1)
603 visc_m_x%x(i,1,1,1) = visc_m_x%x(i,1,1,1) + f_x%x(i,1,1,1)
604 visc_m_y%x(i,1,1,1) = visc_m_y%x(i,1,1,1) + f_y%x(i,1,1,1)
605 visc_m_z%x(i,1,1,1) = visc_m_z%x(i,1,1,1) + f_z%x(i,1,1,1)
606 visc_e%x(i,1,1,1) = visc_e%x(i,1,1,1) &
607 + u%x(i,1,1,1) * f_x%x(i,1,1,1) &
608 + v%x(i,1,1,1) * f_y%x(i,1,1,1) &
609 + w%x(i,1,1,1) * f_z%x(i,1,1,1) &
610 - coef%B(i,1,1,1) * dissipation%x(i,1,1,1)
611 div_flux%x(i,1,1,1) = p%x(i,1,1,1) / &
613 coef%h1(i,1,1,1) = kappa%x(i,1,1,1)
617 call ax%compute(dudx%x, div_flux%x, coef, p%msh, p%Xh)
625 visc_e%x(i,1,1,1) = visc_e%x(i,1,1,1) + dudx%x(i,1,1,1)