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)