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)