25 subroutine advance_primitive_variables_sx(rho_field, m_x, m_y, m_z, E, p, u, v, w, Ax, &
26 coef, gs, h, c_avisc_low, rk_scheme, dt)
27 type(
field_t),
intent(inout) :: rho_field, m_x, m_y, m_z, E
28 type(
field_t),
intent(in) :: p, u, v, w, h
29 class(
ax_t),
intent(inout) :: Ax
30 type(
coef_t),
intent(inout) :: coef
31 type(
gs_t),
intent(inout) :: gs
32 real(kind=
rp) :: c_avisc_low
34 real(kind=
rp),
intent(in) :: dt
35 integer :: n, s, i, j, k
37 type(
field_t),
pointer :: k_rho_1, k_rho_2, k_rho_3, k_rho_4, &
38 k_m_x_1, k_m_x_2, k_m_x_3, k_m_x_4, &
39 k_m_y_1, k_m_y_2, k_m_y_3, k_m_y_4, &
40 k_m_z_1, k_m_z_2, k_m_z_3, k_m_z_4, &
41 k_e_1, k_e_2, k_e_3, k_e_4, &
42 temp_rho, temp_m_x, temp_m_y, temp_m_z, temp_e
43 integer :: temp_indices(25)
75 call k_rho%assign(1, k_rho_1)
76 call k_rho%assign(2, k_rho_2)
77 call k_rho%assign(3, k_rho_3)
78 call k_rho%assign(4, k_rho_4)
80 call k_m_x%assign(1, k_m_x_1)
81 call k_m_x%assign(2, k_m_x_2)
82 call k_m_x%assign(3, k_m_x_3)
83 call k_m_x%assign(4, k_m_x_4)
85 call k_m_y%assign(1, k_m_y_1)
86 call k_m_y%assign(2, k_m_y_2)
87 call k_m_y%assign(3, k_m_y_3)
88 call k_m_y%assign(4, k_m_y_4)
90 call k_m_z%assign(1, k_m_z_1)
91 call k_m_z%assign(2, k_m_z_2)
92 call k_m_z%assign(3, k_m_z_3)
93 call k_m_z%assign(4, k_m_z_4)
95 call k_e%assign(1, k_e_1)
96 call k_e%assign(2, k_e_2)
97 call k_e%assign(3, k_e_3)
98 call k_e%assign(4, k_e_4)
102 call copy(temp_rho%x, rho_field%x, n)
103 call copy(temp_m_x%x, m_x%x, n)
104 call copy(temp_m_y%x, m_y%x, n)
105 call copy(temp_m_z%x, m_z%x, n)
106 call copy(temp_e%x, e%x, n)
109 do concurrent(k = 1:n)
110 temp_rho%x(k,1,1,1) = temp_rho%x(k,1,1,1) &
111 + dt * rk_scheme%coeffs_A(i, j) * k_rho%items(j)%ptr%x(k,1,1,1)
112 temp_m_x%x(k,1,1,1) = temp_m_x%x(k,1,1,1) &
113 + dt * rk_scheme%coeffs_A(i, j) * k_m_x%items(j)%ptr%x(k,1,1,1)
114 temp_m_y%x(k,1,1,1) = temp_m_y%x(k,1,1,1) &
115 + dt * rk_scheme%coeffs_A(i, j) * k_m_y%items(j)%ptr%x(k,1,1,1)
116 temp_m_z%x(k,1,1,1) = temp_m_z%x(k,1,1,1) &
117 + dt * rk_scheme%coeffs_A(i, j) * k_m_z%items(j)%ptr%x(k,1,1,1)
118 temp_e%x(k,1,1,1) = temp_e%x(k,1,1,1) &
119 + dt * rk_scheme%coeffs_A(i, j) * k_e%items(j)%ptr%x(k,1,1,1)
125 k_m_y%items(i)%ptr, k_m_z%items(i)%ptr, &
127 temp_rho, temp_m_x, temp_m_y, temp_m_z, temp_e, &
129 coef, gs, h, c_avisc_low)
134 do concurrent(k = 1:n)
135 rho_field%x(k,1,1,1) = rho_field%x(k,1,1,1) &
136 + dt * rk_scheme%coeffs_b(i) * k_rho%items(i)%ptr%x(k,1,1,1)
137 m_x%x(k,1,1,1) = m_x%x(k,1,1,1) &
138 + dt * rk_scheme%coeffs_b(i) * k_m_x%items(i)%ptr%x(k,1,1,1)
139 m_y%x(k,1,1,1) = m_y%x(k,1,1,1) &
140 + dt * rk_scheme%coeffs_b(i) * k_m_y%items(i)%ptr%x(k,1,1,1)
141 m_z%x(k,1,1,1) = m_z%x(k,1,1,1) &
142 + dt * rk_scheme%coeffs_b(i) * k_m_z%items(i)%ptr%x(k,1,1,1)
143 e%x(k,1,1,1) = e%x(k,1,1,1) &
144 + dt * rk_scheme%coeffs_b(i) * k_e%items(i)%ptr%x(k,1,1,1)
152 rho_field, m_x, m_y, m_z, E, p, u, v, w, Ax, &
153 coef, gs, h, c_avisc_low)
154 type(
field_t),
intent(inout) :: rhs_rho_field, rhs_m_x, &
155 rhs_m_y, rhs_m_z, rhs_E
156 type(
field_t),
intent(inout) :: rho_field, m_x, m_y, m_z, E
157 type(
field_t),
intent(in) :: p, u, v, w, h
158 class(
ax_t),
intent(inout) :: Ax
159 type(
coef_t),
intent(inout) :: coef
160 type(
gs_t),
intent(inout) :: gs
161 real(kind=
rp) :: c_avisc_low
163 type(
field_t),
pointer :: temp, f_x, f_y, f_z, &
164 visc_rho, visc_m_x, visc_m_y, visc_m_z, visc_E
165 integer :: temp_indices(9)
174 call div(rhs_rho_field%x, m_x%x, m_y%x, m_z%x, coef)
178 do concurrent(i = 1:n)
179 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) &
181 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)
182 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)
184 call div(rhs_m_x%x, f_x%x, f_y%x, f_z%x, coef)
186 do concurrent(i = 1:n)
187 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)
188 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) &
190 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)
192 call div(rhs_m_y%x, f_x%x, f_y%x, f_z%x, coef)
194 do concurrent(i = 1:n)
195 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)
196 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)
197 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) &
200 call div(rhs_m_z%x, f_x%x, f_y%x, f_z%x, coef)
203 do concurrent(i = 1:n)
204 f_x%x(i,1,1,1) = (e%x(i,1,1,1) + p%x(i,1,1,1)) &
206 f_y%x(i,1,1,1) = (e%x(i,1,1,1) + p%x(i,1,1,1)) &
208 f_z%x(i,1,1,1) = (e%x(i,1,1,1) + p%x(i,1,1,1)) &
211 call div(rhs_e%x, f_x%x, f_y%x, f_z%x, coef)
219 do concurrent(i = 1:rhs_e%dof%size())
220 rhs_rho_field%x(i,1,1,1) = rhs_rho_field%x(i,1,1,1) * coef%mult(i,1,1,1)
221 rhs_m_x%x(i,1,1,1) = rhs_m_x%x(i,1,1,1) * coef%mult(i,1,1,1)
222 rhs_m_y%x(i,1,1,1) = rhs_m_y%x(i,1,1,1) * coef%mult(i,1,1,1)
223 rhs_m_z%x(i,1,1,1) = rhs_m_z%x(i,1,1,1) * coef%mult(i,1,1,1)
224 rhs_e%x(i,1,1,1) = rhs_e%x(i,1,1,1) * coef%mult(i,1,1,1)
234 call ax%compute(visc_rho%x, rho_field%x, coef, p%msh, p%Xh)
235 call ax%compute(visc_m_x%x, m_x%x, coef, p%msh, p%Xh)
236 call ax%compute(visc_m_y%x, m_y%x, coef, p%msh, p%Xh)
237 call ax%compute(visc_m_z%x, m_z%x, coef, p%msh, p%Xh)
238 call ax%compute(visc_e%x, e%x, coef, p%msh, p%Xh)
247 do concurrent(i = 1:n)
248 rhs_rho_field%x(i,1,1,1) = -rhs_rho_field%x(i,1,1,1) &
249 - c_avisc_low * h%x(i,1,1,1) * coef%Binv(i,1,1,1) * visc_rho%x(i,1,1,1)
250 rhs_m_x%x(i,1,1,1) = -rhs_m_x%x(i,1,1,1) &
251 - c_avisc_low * h%x(i,1,1,1) * coef%Binv(i,1,1,1) * visc_m_x%x(i,1,1,1)
252 rhs_m_y%x(i,1,1,1) = -rhs_m_y%x(i,1,1,1) &
253 - c_avisc_low * h%x(i,1,1,1) * coef%Binv(i,1,1,1) * visc_m_y%x(i,1,1,1)
254 rhs_m_z%x(i,1,1,1) = -rhs_m_z%x(i,1,1,1) &
255 - c_avisc_low * h%x(i,1,1,1) * coef%Binv(i,1,1,1) * visc_m_z%x(i,1,1,1)
256 rhs_e%x(i,1,1,1) = -rhs_e%x(i,1,1,1) &
257 - c_avisc_low * h%x(i,1,1,1) * coef%Binv(i,1,1,1) * visc_e%x(i,1,1,1)