76 coef, gs, h, c_avisc_low, rk_scheme, dt)
77 type(
field_t),
intent(inout) :: rho_field, m_x, m_y, m_z, E
78 type(
field_t),
intent(in) :: p, u, v, w, h
79 class(
ax_t),
intent(inout) :: Ax
80 type(
coef_t),
intent(inout) :: coef
81 type(
gs_t),
intent(inout) :: gs
82 real(kind=
rp) :: c_avisc_low
84 real(kind=
rp),
intent(in) :: dt
85 integer :: n, s, i, j, k
87 type(
field_t),
pointer :: k_rho_1, k_rho_2, k_rho_3, k_rho_4, &
88 k_m_x_1, k_m_x_2, k_m_x_3, k_m_x_4, &
89 k_m_y_1, k_m_y_2, k_m_y_3, k_m_y_4, &
90 k_m_z_1, k_m_z_2, k_m_z_3, k_m_z_4, &
91 k_e_1, k_e_2, k_e_3, k_e_4, &
92 temp_rho, temp_m_x, temp_m_y, temp_m_z, temp_e
93 integer :: tmp_indices(25)
126 call k_rho%assign(1, k_rho_1)
127 call k_rho%assign(2, k_rho_2)
128 call k_rho%assign(3, k_rho_3)
129 call k_rho%assign(4, k_rho_4)
131 call k_m_x%assign(1, k_m_x_1)
132 call k_m_x%assign(2, k_m_x_2)
133 call k_m_x%assign(3, k_m_x_3)
134 call k_m_x%assign(4, k_m_x_4)
136 call k_m_y%assign(1, k_m_y_1)
137 call k_m_y%assign(2, k_m_y_2)
138 call k_m_y%assign(3, k_m_y_3)
139 call k_m_y%assign(4, k_m_y_4)
141 call k_m_z%assign(1, k_m_z_1)
142 call k_m_z%assign(2, k_m_z_2)
143 call k_m_z%assign(3, k_m_z_3)
144 call k_m_z%assign(4, k_m_z_4)
146 call k_e%assign(1, k_e_1)
147 call k_e%assign(2, k_e_2)
148 call k_e%assign(3, k_e_3)
149 call k_e%assign(4, k_e_4)
154 call copy(temp_rho%x, rho_field%x, n)
155 call copy(temp_m_x%x, m_x%x, n)
156 call copy(temp_m_y%x, m_y%x, n)
157 call copy(temp_m_z%x, m_z%x, n)
158 call copy(temp_e%x, e%x, n)
162 do concurrent(k = 1:n)
163 temp_rho%x(k,1,1,1) = temp_rho%x(k,1,1,1) &
164 + dt * rk_scheme%coeffs_A(i, j) * k_rho%items(j)%ptr%x(k,1,1,1)
165 temp_m_x%x(k,1,1,1) = temp_m_x%x(k,1,1,1) &
166 + dt * rk_scheme%coeffs_A(i, j) * k_m_x%items(j)%ptr%x(k,1,1,1)
167 temp_m_y%x(k,1,1,1) = temp_m_y%x(k,1,1,1) &
168 + dt * rk_scheme%coeffs_A(i, j) * k_m_y%items(j)%ptr%x(k,1,1,1)
169 temp_m_z%x(k,1,1,1) = temp_m_z%x(k,1,1,1) &
170 + dt * rk_scheme%coeffs_A(i, j) * k_m_z%items(j)%ptr%x(k,1,1,1)
171 temp_e%x(k,1,1,1) = temp_e%x(k,1,1,1) &
172 + dt * rk_scheme%coeffs_A(i, j) * k_e%items(j)%ptr%x(k,1,1,1)
178 k_m_y%items(i)%ptr, k_m_z%items(i)%ptr, &
180 temp_rho, temp_m_x, temp_m_y, temp_m_z, temp_e, &
182 coef, gs, h, c_avisc_low)
187 do concurrent(k = 1:n)
188 rho_field%x(k,1,1,1) = rho_field%x(k,1,1,1) &
189 + dt * rk_scheme%coeffs_b(i) * k_rho%items(i)%ptr%x(k,1,1,1)
190 m_x%x(k,1,1,1) = m_x%x(k,1,1,1) &
191 + dt * rk_scheme%coeffs_b(i) * k_m_x%items(i)%ptr%x(k,1,1,1)
192 m_y%x(k,1,1,1) = m_y%x(k,1,1,1) &
193 + dt * rk_scheme%coeffs_b(i) * k_m_y%items(i)%ptr%x(k,1,1,1)
194 m_z%x(k,1,1,1) = m_z%x(k,1,1,1) &
195 + dt * rk_scheme%coeffs_b(i) * k_m_z%items(i)%ptr%x(k,1,1,1)
196 e%x(k,1,1,1) = e%x(k,1,1,1) &
197 + dt * rk_scheme%coeffs_b(i) * k_e%items(i)%ptr%x(k,1,1,1)
227 rho_field, m_x, m_y, m_z, E, p, u, v, w, Ax, &
228 coef, gs, h, c_avisc_low)
229 type(
field_t),
intent(inout) :: rhs_rho_field, &
230 rhs_m_x, rhs_m_y, rhs_m_z, rhs_E
231 type(
field_t),
intent(inout) :: rho_field, m_x, m_y, m_z, E
232 type(
field_t),
intent(in) :: p, u, v, w, h
233 class(
ax_t),
intent(inout) :: Ax
234 type(
coef_t),
intent(inout) :: coef
235 type(
gs_t),
intent(inout) :: gs
236 real(kind=
rp) :: c_avisc_low
238 type(
field_t),
pointer :: f_x, f_y, f_z, &
239 visc_rho, visc_m_x, visc_m_y, visc_m_z, visc_E
240 integer :: tmp_indices(8)
249 call div(rhs_rho_field%x, m_x%x, m_y%x, m_z%x, coef)
254 do concurrent(i = 1:n)
255 f_x%x(i,1,1,1) = m_x%x(i,1,1,1) * m_x%x(i,1,1,1) / rho_field%x(i, 1, 1, 1) &
257 f_y%x(i,1,1,1) = m_x%x(i,1,1,1) * m_y%x(i,1,1,1) / rho_field%x(i, 1, 1, 1)
258 f_z%x(i,1,1,1) = m_x%x(i,1,1,1) * m_z%x(i,1,1,1) / rho_field%x(i, 1, 1, 1)
260 call div(rhs_m_x%x, f_x%x, f_y%x, f_z%x, coef)
262 do concurrent(i = 1:n)
263 f_x%x(i,1,1,1) = m_y%x(i,1,1,1) * m_x%x(i,1,1,1) / rho_field%x(i, 1, 1, 1)
264 f_y%x(i,1,1,1) = m_y%x(i,1,1,1) * m_y%x(i,1,1,1) / rho_field%x(i, 1, 1, 1) &
266 f_z%x(i,1,1,1) = m_y%x(i,1,1,1) * m_z%x(i,1,1,1) / rho_field%x(i, 1, 1, 1)
268 call div(rhs_m_y%x, f_x%x, f_y%x, f_z%x, coef)
270 do concurrent(i = 1:n)
271 f_x%x(i,1,1,1) = m_z%x(i,1,1,1) * m_x%x(i,1,1,1) / rho_field%x(i, 1, 1, 1)
272 f_y%x(i,1,1,1) = m_z%x(i,1,1,1) * m_y%x(i,1,1,1) / rho_field%x(i, 1, 1, 1)
273 f_z%x(i,1,1,1) = m_z%x(i,1,1,1) * m_z%x(i,1,1,1) / rho_field%x(i, 1, 1, 1) &
276 call div(rhs_m_z%x, f_x%x, f_y%x, f_z%x, coef)
280 do concurrent(i = 1:n)
281 f_x%x(i,1,1,1) = (e%x(i,1,1,1) + p%x(i,1,1,1)) * u%x(i,1,1,1)
282 f_y%x(i,1,1,1) = (e%x(i,1,1,1) + p%x(i,1,1,1)) * v%x(i,1,1,1)
283 f_z%x(i,1,1,1) = (e%x(i,1,1,1) + p%x(i,1,1,1)) * w%x(i,1,1,1)
285 call div(rhs_e%x, f_x%x, f_y%x, f_z%x, coef)
289 call rotate_cyc(rhs_m_x%x, rhs_m_y%x, rhs_m_z%x, 1, coef)
293 call rotate_cyc(rhs_m_x%x, rhs_m_y%x, rhs_m_z%x, 0, coef)
295 do concurrent(i = 1:rhs_e%dof%size())
296 rhs_rho_field%x(i,1,1,1) = rhs_rho_field%x(i,1,1,1) * coef%mult(i,1,1,1)
297 rhs_m_x%x(i,1,1,1) = rhs_m_x%x(i,1,1,1) * coef%mult(i,1,1,1)
298 rhs_m_y%x(i,1,1,1) = rhs_m_y%x(i,1,1,1) * coef%mult(i,1,1,1)
299 rhs_m_z%x(i,1,1,1) = rhs_m_z%x(i,1,1,1) * coef%mult(i,1,1,1)
300 rhs_e%x(i,1,1,1) = rhs_e%x(i,1,1,1) * coef%mult(i,1,1,1)
310 call ax%compute(visc_rho%x, rho_field%x, coef, p%msh, p%Xh)
311 call ax%compute(visc_m_x%x, m_x%x, coef, p%msh, p%Xh)
312 call ax%compute(visc_m_y%x, m_y%x, coef, p%msh, p%Xh)
313 call ax%compute(visc_m_z%x, m_z%x, coef, p%msh, p%Xh)
314 call ax%compute(visc_e%x, e%x, coef, p%msh, p%Xh)
318 call rotate_cyc(visc_m_x%x, visc_m_y%x, visc_m_z%x, 1, coef)
322 call rotate_cyc(visc_m_x%x, visc_m_y%x, visc_m_z%x, 0, coef)
327 do concurrent(i = 1:n)
328 rhs_rho_field%x(i,1,1,1) = -rhs_rho_field%x(i,1,1,1) &
329 - c_avisc_low * h%x(i,1,1,1) * coef%Binv(i,1,1,1) * visc_rho%x(i,1,1,1)
330 rhs_m_x%x(i,1,1,1) = -rhs_m_x%x(i,1,1,1) &
331 - c_avisc_low * h%x(i,1,1,1) * coef%Binv(i,1,1,1) * visc_m_x%x(i,1,1,1)
332 rhs_m_y%x(i,1,1,1) = -rhs_m_y%x(i,1,1,1) &
333 - c_avisc_low * h%x(i,1,1,1) * coef%Binv(i,1,1,1) * visc_m_y%x(i,1,1,1)
334 rhs_m_z%x(i,1,1,1) = -rhs_m_z%x(i,1,1,1) &
335 - c_avisc_low * h%x(i,1,1,1) * coef%Binv(i,1,1,1) * visc_m_z%x(i,1,1,1)
336 rhs_e%x(i,1,1,1) = -rhs_e%x(i,1,1,1) &
337 - c_avisc_low * h%x(i,1,1,1) * coef%Binv(i,1,1,1) * visc_e%x(i,1,1,1)