74 coef, gs, h, effective_visc, rk_scheme, dt)
75 type(
field_t),
intent(inout) :: rho_field, m_x, m_y, m_z, E
76 type(
field_t),
intent(in) :: p, u, v, w, h, effective_visc
77 class(
ax_t),
intent(inout) :: Ax
78 type(
coef_t),
intent(inout) :: coef
79 type(
gs_t),
intent(inout) :: gs
81 real(kind=
rp),
intent(in) :: dt
82 integer :: n, s, i, j, k
83 type(
field_t),
pointer :: k_rho_1, k_rho_2, k_rho_3, k_rho_4, &
84 k_m_x_1, k_m_x_2, k_m_x_3, k_m_x_4, &
85 k_m_y_1, k_m_y_2, k_m_y_3, k_m_y_4, &
86 k_m_z_1, k_m_z_2, k_m_z_3, k_m_z_4, &
87 k_E_1, k_E_2, k_E_3, k_E_4, &
88 temp_rho, temp_m_x, temp_m_y, temp_m_z, temp_E
89 integer :: tmp_indices(25)
93 real(kind=
rp),
contiguous,
pointer :: k_rho_ptr(:,:,:,:)
94 real(kind=
rp),
contiguous,
pointer :: k_m_x_ptr(:,:,:,:)
95 real(kind=
rp),
contiguous,
pointer :: k_m_y_ptr(:,:,:,:)
96 real(kind=
rp),
contiguous,
pointer :: k_m_z_ptr(:,:,:,:)
97 real(kind=
rp),
contiguous,
pointer :: k_e_ptr(:,:,:,:)
129 call k_rho%assign(1, k_rho_1)
130 call k_rho%assign(2, k_rho_2)
131 call k_rho%assign(3, k_rho_3)
132 call k_rho%assign(4, k_rho_4)
134 call k_m_x%assign(1, k_m_x_1)
135 call k_m_x%assign(2, k_m_x_2)
136 call k_m_x%assign(3, k_m_x_3)
137 call k_m_x%assign(4, k_m_x_4)
139 call k_m_y%assign(1, k_m_y_1)
140 call k_m_y%assign(2, k_m_y_2)
141 call k_m_y%assign(3, k_m_y_3)
142 call k_m_y%assign(4, k_m_y_4)
144 call k_m_z%assign(1, k_m_z_1)
145 call k_m_z%assign(2, k_m_z_2)
146 call k_m_z%assign(3, k_m_z_3)
147 call k_m_z%assign(4, k_m_z_4)
149 call k_e%assign(1, k_e_1)
150 call k_e%assign(2, k_e_2)
151 call k_e%assign(3, k_e_3)
152 call k_e%assign(4, k_e_4)
157 do concurrent(k = 1:n)
158 temp_rho%x(k,1,1,1) = rho_field%x(k,1,1,1)
159 temp_m_x%x(k,1,1,1) = m_x%x(k,1,1,1)
160 temp_m_y%x(k,1,1,1) = m_y%x(k,1,1,1)
161 temp_m_z%x(k,1,1,1) = m_z%x(k,1,1,1)
162 temp_e%x(k,1,1,1) = e%x(k,1,1,1)
167 k_rho_ptr => k_rho%items(j)%ptr%x
168 k_m_x_ptr => k_m_x%items(j)%ptr%x
169 k_m_y_ptr => k_m_y%items(j)%ptr%x
170 k_m_z_ptr => k_m_z%items(j)%ptr%x
171 k_e_ptr => k_e%items(j)%ptr%x
172 do concurrent(k = 1:n)
173 temp_rho%x(k,1,1,1) = temp_rho%x(k,1,1,1) &
174 + dt * rk_scheme%coeffs_A(i, j) * k_rho_ptr(k,1,1,1)
175 temp_m_x%x(k,1,1,1) = temp_m_x%x(k,1,1,1) &
176 + dt * rk_scheme%coeffs_A(i, j) * k_m_x_ptr(k,1,1,1)
177 temp_m_y%x(k,1,1,1) = temp_m_y%x(k,1,1,1) &
178 + dt * rk_scheme%coeffs_A(i, j) * k_m_y_ptr(k,1,1,1)
179 temp_m_z%x(k,1,1,1) = temp_m_z%x(k,1,1,1) &
180 + dt * rk_scheme%coeffs_A(i, j) * k_m_z_ptr(k,1,1,1)
181 temp_e%x(k,1,1,1) = temp_e%x(k,1,1,1) &
182 + dt * rk_scheme%coeffs_A(i, j) * k_e_ptr(k,1,1,1)
188 k_m_y%items(i)%ptr, k_m_z%items(i)%ptr, &
190 temp_rho, temp_m_x, temp_m_y, temp_m_z, temp_e, &
192 coef, gs, h, effective_visc)
197 k_rho_ptr => k_rho%items(i)%ptr%x
198 k_m_x_ptr => k_m_x%items(i)%ptr%x
199 k_m_y_ptr => k_m_y%items(i)%ptr%x
200 k_m_z_ptr => k_m_z%items(i)%ptr%x
201 k_e_ptr => k_e%items(i)%ptr%x
202 do concurrent(k = 1:n)
203 rho_field%x(k,1,1,1) = rho_field%x(k,1,1,1) &
204 + dt * rk_scheme%coeffs_b(i) * k_rho_ptr(k,1,1,1)
205 m_x%x(k,1,1,1) = m_x%x(k,1,1,1) &
206 + dt * rk_scheme%coeffs_b(i) * k_m_x_ptr(k,1,1,1)
207 m_y%x(k,1,1,1) = m_y%x(k,1,1,1) &
208 + dt * rk_scheme%coeffs_b(i) * k_m_y_ptr(k,1,1,1)
209 m_z%x(k,1,1,1) = m_z%x(k,1,1,1) &
210 + dt * rk_scheme%coeffs_b(i) * k_m_z_ptr(k,1,1,1)
211 e%x(k,1,1,1) = e%x(k,1,1,1) &
212 + dt * rk_scheme%coeffs_b(i) * k_e_ptr(k,1,1,1)
242 rho_field, m_x, m_y, m_z, E, p, u, v, w, Ax, &
243 coef, gs, h, effective_visc)
244 type(
field_t),
intent(inout) :: rhs_rho_field, &
245 rhs_m_x, rhs_m_y, rhs_m_z, rhs_e
246 type(
field_t),
intent(inout) :: rho_field, m_x, m_y, m_z, E
247 type(
field_t),
intent(in) :: p, u, v, w, h, effective_visc
248 class(
ax_t),
intent(inout) :: Ax
249 type(
coef_t),
intent(inout) :: coef
250 type(
gs_t),
intent(inout) :: gs
252 type(
field_t),
pointer :: f_x, f_y, f_z, &
253 visc_rho, visc_m_x, visc_m_y, visc_m_z, visc_E
254 integer :: tmp_indices(8)
263 call div(rhs_rho_field%x, m_x%x, m_y%x, m_z%x, coef)
268 do concurrent(i = 1:n)
269 f_x%x(i,1,1,1) = m_x%x(i,1,1,1) * m_x%x(i,1,1,1) / &
270 rho_field%x(i, 1, 1, 1) + p%x(i,1,1,1)
271 f_y%x(i,1,1,1) = m_x%x(i,1,1,1) * m_y%x(i,1,1,1) / &
272 rho_field%x(i, 1, 1, 1)
273 f_z%x(i,1,1,1) = m_x%x(i,1,1,1) * m_z%x(i,1,1,1) / &
274 rho_field%x(i, 1, 1, 1)
276 call div(rhs_m_x%x, f_x%x, f_y%x, f_z%x, coef)
278 do concurrent(i = 1:n)
279 f_x%x(i,1,1,1) = m_y%x(i,1,1,1) * m_x%x(i,1,1,1) / &
280 rho_field%x(i, 1, 1, 1)
281 f_y%x(i,1,1,1) = m_y%x(i,1,1,1) * m_y%x(i,1,1,1) / &
282 rho_field%x(i, 1, 1, 1) + p%x(i,1,1,1)
283 f_z%x(i,1,1,1) = m_y%x(i,1,1,1) * m_z%x(i,1,1,1) / &
284 rho_field%x(i, 1, 1, 1)
286 call div(rhs_m_y%x, f_x%x, f_y%x, f_z%x, coef)
288 do concurrent(i = 1:n)
289 f_x%x(i,1,1,1) = m_z%x(i,1,1,1) * m_x%x(i,1,1,1) / &
290 rho_field%x(i, 1, 1, 1)
291 f_y%x(i,1,1,1) = m_z%x(i,1,1,1) * m_y%x(i,1,1,1) / &
292 rho_field%x(i, 1, 1, 1)
293 f_z%x(i,1,1,1) = m_z%x(i,1,1,1) * m_z%x(i,1,1,1) / &
294 rho_field%x(i, 1, 1, 1) + p%x(i,1,1,1)
296 call div(rhs_m_z%x, f_x%x, f_y%x, f_z%x, coef)
300 do concurrent(i = 1:n)
301 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)
302 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)
303 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)
305 call div(rhs_e%x, f_x%x, f_y%x, f_z%x, coef)
309 call rotate_cyc(rhs_m_x%x, rhs_m_y%x, rhs_m_z%x, 1, coef)
313 call rotate_cyc(rhs_m_x%x, rhs_m_y%x, rhs_m_z%x, 0, coef)
315 do concurrent(i = 1:rhs_e%dof%size())
316 rhs_rho_field%x(i,1,1,1) = rhs_rho_field%x(i,1,1,1) * coef%mult(i,1,1,1)
317 rhs_m_x%x(i,1,1,1) = rhs_m_x%x(i,1,1,1) * coef%mult(i,1,1,1)
318 rhs_m_y%x(i,1,1,1) = rhs_m_y%x(i,1,1,1) * coef%mult(i,1,1,1)
319 rhs_m_z%x(i,1,1,1) = rhs_m_z%x(i,1,1,1) * coef%mult(i,1,1,1)
320 rhs_e%x(i,1,1,1) = rhs_e%x(i,1,1,1) * coef%mult(i,1,1,1)
330 do concurrent(i = 1:n)
331 coef%h1(i,1,1,1) = effective_visc%x(i,1,1,1)
335 call ax%compute(visc_rho%x, rho_field%x, coef, p%msh, p%Xh)
336 call ax%compute(visc_m_x%x, m_x%x, coef, p%msh, p%Xh)
337 call ax%compute(visc_m_y%x, m_y%x, coef, p%msh, p%Xh)
338 call ax%compute(visc_m_z%x, m_z%x, coef, p%msh, p%Xh)
339 call ax%compute(visc_e%x, e%x, coef, p%msh, p%Xh)
342 do concurrent(i = 1:n)
343 coef%h1(i,1,1,1) = 1.0_rp
348 call rotate_cyc(visc_m_x%x, visc_m_y%x, visc_m_z%x, 1, coef)
352 call rotate_cyc(visc_m_x%x, visc_m_y%x, visc_m_z%x, 0, coef)
357 do concurrent(i = 1:n)
358 rhs_rho_field%x(i,1,1,1) = -rhs_rho_field%x(i,1,1,1) &
359 - coef%Binv(i,1,1,1) * visc_rho%x(i,1,1,1)
360 rhs_m_x%x(i,1,1,1) = -rhs_m_x%x(i,1,1,1) &
361 - coef%Binv(i,1,1,1) * visc_m_x%x(i,1,1,1)
362 rhs_m_y%x(i,1,1,1) = -rhs_m_y%x(i,1,1,1) &
363 - coef%Binv(i,1,1,1) * visc_m_y%x(i,1,1,1)
364 rhs_m_z%x(i,1,1,1) = -rhs_m_z%x(i,1,1,1) &
365 - coef%Binv(i,1,1,1) * visc_m_z%x(i,1,1,1)
366 rhs_e%x(i,1,1,1) = -rhs_e%x(i,1,1,1) &
367 - coef%Binv(i,1,1,1) * visc_e%x(i,1,1,1)