32       f_y, f_z, c_Xh, gs_Xh, bc_prs_surface, bc_sym_surface, Ax, bd, dt, mu, &
 
   34    type(
field_t), 
intent(inout) :: p, u, v, w
 
   35    type(
field_t), 
intent(in) :: u_e, v_e, w_e
 
   36    type(
field_t), 
intent(inout) :: p_res
 
   37    type(
field_t), 
intent(in) :: f_x, f_y, f_z
 
   38    type(
coef_t), 
intent(inout) :: c_Xh
 
   39    type(
gs_t), 
intent(inout) :: gs_Xh
 
   42    class(
ax_t), 
intent(inout) :: Ax
 
   43    real(kind=
rp), 
intent(in) :: bd
 
   44    real(kind=
rp), 
intent(in) :: dt
 
   46    type(
field_t), 
intent(in) :: rho
 
   47    type(c_ptr), 
intent(inout) :: event
 
   48    real(kind=
rp) :: dtbd, rho_val, mu_val
 
   51    type(
field_t), 
pointer :: ta1, ta2, ta3, wa1, wa2, wa3, work1, work2
 
   52    integer :: temp_indices(8)
 
   66    rho_val = rho%x(1,1,1,1)
 
   67    mu_val = mu%x(1,1,1,1)
 
   69       c_xh%h1(i,1,1,1) = 1.0_rp / rho_val
 
   70       c_xh%h2(i,1,1,1) = 0.0_rp
 
   74    call curl(ta1, ta2, ta3, u_e, v_e, w_e, work1, work2, c_xh)
 
   75    call curl(wa1, wa2, wa3, ta1, ta2, ta3, work1, work2, c_xh)
 
   78    do concurrent(i = 1:n)
 
   79       ta1%x(i,1,1,1) = f_x%x(i,1,1,1) / rho_val &
 
   80            - ((wa1%x(i,1,1,1) * (mu_val / rho_val)) * c_xh%B(i,1,1,1))
 
   81       ta2%x(i,1,1,1) = f_y%x(i,1,1,1) / rho_val &
 
   82            - ((wa2%x(i,1,1,1) * (mu_val / rho_val)) * c_xh%B(i,1,1,1))
 
   83       ta3%x(i,1,1,1) = f_z%x(i,1,1,1) / rho_val &
 
   84            - ((wa3%x(i,1,1,1) * (mu_val / rho_val)) * c_xh%B(i,1,1,1))
 
   87    call gs_xh%op(ta1, gs_op_add)
 
   88    call gs_xh%op(ta2, gs_op_add)
 
   89    call gs_xh%op(ta3, gs_op_add)
 
   91    do concurrent(i = 1:n)
 
   92       ta1%x(i,1,1,1) = ta1%x(i,1,1,1) * c_xh%Binv(i,1,1,1)
 
   93       ta2%x(i,1,1,1) = ta2%x(i,1,1,1) * c_xh%Binv(i,1,1,1)
 
   94       ta3%x(i,1,1,1) = ta3%x(i,1,1,1) * c_xh%Binv(i,1,1,1)
 
   97    call cdtp(wa1%x, ta1%x, c_xh%drdx, c_xh%dsdx, c_xh%dtdx, c_xh)
 
   98    call cdtp(wa2%x, ta2%x, c_xh%drdy, c_xh%dsdy, c_xh%dtdy, c_xh)
 
   99    call cdtp(wa3%x, ta3%x, c_xh%drdz, c_xh%dsdz, c_xh%dtdz, c_xh)
 
  101    call ax%compute(p_res%x, p%x, c_xh, p%msh, p%Xh)
 
  103    do concurrent(i = 1:n)
 
  104       p_res%x(i,1,1,1) = (-p_res%x(i,1,1,1)) &
 
  105            + wa1%x(i,1,1,1) + wa2%x(i,1,1,1) + wa3%x(i,1,1,1)
 
  111    do concurrent(i = 1:n)
 
  112       wa1%x(i,1,1,1) = 0.0_rp
 
  113       wa2%x(i,1,1,1) = 0.0_rp
 
  114       wa3%x(i,1,1,1) = 0.0_rp
 
  117    call bc_sym_surface%apply_surfvec(wa1%x, wa2%x, wa3%x, ta1%x, ta2%x, ta3%x,&
 
  121    do concurrent(i = 1:n)
 
  122       ta1%x(i,1,1,1) = 0.0_rp
 
  123       ta2%x(i,1,1,1) = 0.0_rp
 
  124       ta3%x(i,1,1,1) = 0.0_rp
 
  127    call bc_prs_surface%apply_surfvec(ta1%x, ta2%x, ta3%x, u%x, v%x, w%x, n)
 
  129    do concurrent(i = 1:n)
 
  130       p_res%x(i,1,1,1) = p_res%x(i,1,1,1) &
 
  131            - (dtbd * (ta1%x(i,1,1,1) + ta2%x(i,1,1,1) + ta3%x(i,1,1,1)))&
 
  132            - (wa1%x(i,1,1,1) + wa2%x(i,1,1,1) + wa3%x(i,1,1,1))
 
 
  140       p, f_x, f_y, f_z, c_Xh, msh, Xh, mu, rho, bd, dt, n)
 
  141    class(
ax_t), 
intent(in) :: Ax
 
  142    type(
mesh_t), 
intent(inout) :: msh
 
  143    type(
space_t), 
intent(inout) :: Xh
 
  144    type(
field_t), 
intent(inout) :: p, u, v, w
 
  145    type(
field_t), 
intent(inout) :: u_res, v_res, w_res
 
  146    type(
field_t), 
intent(in) :: f_x, f_y, f_z
 
  147    type(
coef_t), 
intent(inout) :: c_Xh
 
  148    type(
field_t), 
intent(in) :: mu
 
  149    type(
field_t), 
intent(in) :: rho
 
  150    real(kind=
rp), 
intent(in) :: bd
 
  151    real(kind=
rp), 
intent(in) :: dt
 
  152    real(kind=
rp) :: rho_val, mu_val
 
  153    integer :: temp_indices(3)
 
  154    type(
field_t), 
pointer :: ta1, ta2, ta3
 
  155    integer, 
intent(in) :: n
 
  159    rho_val = rho%x(1,1,1,1)
 
  160    mu_val = mu%x(1,1,1,1)
 
  162    do concurrent(i = 1:n)
 
  163       c_xh%h1(i,1,1,1) = mu_val
 
  164       c_xh%h2(i,1,1,1) = rho_val * bd / dt
 
  168    call ax%compute(u_res%x, u%x, c_xh, msh, xh)
 
  169    call ax%compute(v_res%x, v%x, c_xh, msh, xh)
 
  170    call ax%compute(w_res%x, w%x, c_xh, msh, xh)
 
  175    call opgrad(ta1%x, ta2%x, ta3%x, p%x, c_xh)
 
  177    do concurrent(i = 1:n)
 
  178       u_res%x(i,1,1,1) = (-u_res%x(i,1,1,1)) - ta1%x(i,1,1,1) + f_x%x(i,1,1,1)
 
  179       v_res%x(i,1,1,1) = (-v_res%x(i,1,1,1)) - ta2%x(i,1,1,1) + f_y%x(i,1,1,1)
 
  180       w_res%x(i,1,1,1) = (-w_res%x(i,1,1,1)) - ta3%x(i,1,1,1) + f_z%x(i,1,1,1)