Function for computing the momentum RHS for diffusion operator without terrain.
67 auto dxinv = dxInv[0], dyinv = dxInv[1], dzinv = dxInv[2];
68 Real dx = dx_arr[0], dy = dx_arr[1], dz = dx_arr[2];
69 Real vol = dx * dy * dz;
71 const bool l_simple =
false;
79 Array4<const EBCellFlag> u_cellflg = (ebfact.
get_u_const_factory())->getMultiEBCellFlagFab()[mfi].const_array();
80 Array4<const Real > u_volfrac = (ebfact.
get_u_const_factory())->getVolFrac().const_array(mfi);
81 Array4<const Real > u_volcent = (ebfact.
get_u_const_factory())->getCentroid().const_array(mfi);
82 Array4<const Real > u_afrac_x = (ebfact.
get_u_const_factory())->getAreaFrac()[0]->const_array(mfi);
83 Array4<const Real > u_afrac_y = (ebfact.
get_u_const_factory())->getAreaFrac()[1]->const_array(mfi);
84 Array4<const Real > u_afrac_z = (ebfact.
get_u_const_factory())->getAreaFrac()[2]->const_array(mfi);
85 Array4<const Real > u_bcent = (ebfact.
get_u_const_factory())->getBndryCent().const_array(mfi);
86 Array4<const Real > u_bnorm = (ebfact.
get_u_const_factory())->getBndryNorm().const_array(mfi);
89 Array4<const EBCellFlag> v_cellflg = (ebfact.
get_v_const_factory())->getMultiEBCellFlagFab()[mfi].const_array();
90 Array4<const Real > v_volfrac = (ebfact.
get_v_const_factory())->getVolFrac().const_array(mfi);
91 Array4<const Real > v_volcent = (ebfact.
get_v_const_factory())->getCentroid().const_array(mfi);
92 Array4<const Real > v_afrac_x = (ebfact.
get_v_const_factory())->getAreaFrac()[0]->const_array(mfi);
93 Array4<const Real > v_afrac_y = (ebfact.
get_v_const_factory())->getAreaFrac()[1]->const_array(mfi);
94 Array4<const Real > v_afrac_z = (ebfact.
get_v_const_factory())->getAreaFrac()[2]->const_array(mfi);
95 Array4<const Real > v_bcent = (ebfact.
get_v_const_factory())->getBndryCent().const_array(mfi);
96 Array4<const Real > v_bnorm = (ebfact.
get_v_const_factory())->getBndryNorm().const_array(mfi);
99 Array4<const EBCellFlag> w_cellflg = (ebfact.
get_w_const_factory())->getMultiEBCellFlagFab()[mfi].const_array();
100 Array4<const Real > w_volfrac = (ebfact.
get_w_const_factory())->getVolFrac().const_array(mfi);
101 Array4<const Real > w_volcent = (ebfact.
get_w_const_factory())->getCentroid().const_array(mfi);
102 Array4<const Real > w_afrac_x = (ebfact.
get_w_const_factory())->getAreaFrac()[0]->const_array(mfi);
103 Array4<const Real > w_afrac_y = (ebfact.
get_w_const_factory())->getAreaFrac()[1]->const_array(mfi);
104 Array4<const Real > w_afrac_z = (ebfact.
get_w_const_factory())->getAreaFrac()[2]->const_array(mfi);
105 Array4<const Real > w_bcent = (ebfact.
get_w_const_factory())->getBndryCent().const_array(mfi);
106 Array4<const Real > w_bnorm = (ebfact.
get_w_const_factory())->getBndryNorm().const_array(mfi);
112 ParallelFor(bxx, bxy, bxz,
113 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
115 if (u_volfrac(i,j,k)>0.) {
118 Real mfsq = mf_ux(i,j,0) * mf_uy(i,j,0);
120 Real diffContrib = ( (
tau11(i , j , k ) * u_afrac_x(i+1,j ,k )
121 -
tau11(i-1, j , k ) * u_afrac_x(i ,j ,k ) ) * dxinv * mfsq
122 + (
tau12(i , j+1, k ) * u_afrac_y(i ,j+1,k )
123 -
tau12(i , j , k ) * u_afrac_y(i ,j ,k ) ) * dyinv * mfsq
124 + (
tau13(i , j , k+1) * u_afrac_z(i ,j ,k+1)
125 -
tau13(i , j , k ) * u_afrac_z(i ,j ,k )) * dzinv );
126 diffContrib /= u_volfrac(i,j,k);
127 rho_u_rhs(i,j,k) -= diffContrib;
129 if (!l_constraint_x && u_cellflg(i,j,k).isSingleValued()) {
131 Real axm = u_afrac_x(i ,j ,k );
132 Real axp = u_afrac_x(i+1,j ,k );
133 Real aym = u_afrac_y(i ,j ,k );
134 Real ayp = u_afrac_y(i ,j+1,k );
135 Real azm = u_afrac_z(i ,j ,k );
136 Real azp = u_afrac_z(i ,j ,k+1);
138 Real adx = (axm-axp) * dy * dz;
139 Real ady = (aym-ayp) * dx * dz;
140 Real adz = (azm-azp) * dx * dy;
142 Real barea = std::sqrt(adx*adx + ady*ady + adz*adz);
146 Real dist_x = u_bcent(i,j,k,0)*dx;
147 Real dist_y = u_bcent(i,j,k,1)*dy;
148 Real dist_z = u_bcent(i,j,k,2)*dz;
153 Real dn = std::sqrt( dist_x * dist_x + dist_y * dist_y + dist_z * dist_z );
155 rho_u_rhs(i,j,k) -= - mu_eff * barea / vol * u_arr(i,j,k) / dn / u_volfrac(i,j,k);
162 const RealVect bcent_eb {u_bcent(i,j,k,0), u_bcent(i,j,k,1), u_bcent(i,j,k,2)};
163 const Real Dirichlet_u {0.};
164 const Real Dirichlet_v {0.};
165 const Real Dirichlet_w {0.};
167 GpuArray<Real,AMREX_SPACEDIM> slopes_u;
168 GpuArray<Real,AMREX_SPACEDIM> slopes_v;
169 GpuArray<Real,AMREX_SPACEDIM> slopes_w;
171 slopes_u =
erf_calc_slopes_eb_Dirichlet (
Vars::xvel,
Vars::xvel, dx, dy, dz, i, j, k, bcent_eb, Dirichlet_u, u_arr, u_volcent, u_cellflg);
172 slopes_v =
erf_calc_slopes_eb_Dirichlet_staggered(
Vars::xvel,
Vars::yvel, dx, dy, dz, i, j, k, bcent_eb, Dirichlet_v, v_arr, v_volcent, v_cellflg);
173 slopes_w =
erf_calc_slopes_eb_Dirichlet_staggered(
Vars::xvel,
Vars::zvel, dx, dy, dz, i, j, k, bcent_eb, Dirichlet_w, w_arr, w_volcent, w_cellflg);
175 Real dudx = slopes_u[0];
176 Real dudy = slopes_u[1];
177 Real dudz = slopes_u[2];
178 Real dvdx = slopes_v[0];
179 Real dvdy = slopes_v[1];
181 Real dwdx = slopes_w[0];
183 Real dwdz = slopes_w[2];
185 Real tau11_eb = - mu_eff * ( dudx - ( dudx + dvdy + dwdz ) / 3. );
186 Real tau12_eb = - mu_eff * 0.5 * (dudy + dvdx);
187 Real tau13_eb = - mu_eff * 0.5 * (dudz + dwdx);
189 rho_u_rhs(i,j,k) -= barea / vol * (u_bnorm(i,j,k,0) * tau11_eb
190 + u_bnorm(i,j,k,1) * tau12_eb
191 + u_bnorm(i,j,k,2) * tau13_eb) / u_volfrac(i,j,k);
197 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
199 if (v_volfrac(i,j,k)>0.) {
202 Real mfsq = mf_vx(i,j,0) * mf_vy(i,j,0);
204 Real diffContrib = ( (
tau12(i+1, j , k ) * v_afrac_x(i+1,j ,k )
205 -
tau12(i , j , k ) * v_afrac_x(i ,j ,k ) ) * dxinv * mfsq
206 + (
tau22(i , j , k ) * v_afrac_y(i ,j+1,k )
207 -
tau22(i , j-1, k ) * v_afrac_y(i ,j ,k ) ) * dyinv * mfsq
208 + (
tau23(i , j , k+1) * v_afrac_z(i ,j ,k+1)
209 -
tau23(i , j , k ) * v_afrac_z(i ,j ,k ) ) * dzinv );
210 diffContrib /= v_volfrac(i,j,k);
211 rho_v_rhs(i,j,k) -= diffContrib;
214 if (!l_constraint_y && v_cellflg(i,j,k).isSingleValued()) {
216 Real axm = v_afrac_x(i ,j ,k );
217 Real axp = v_afrac_x(i+1,j ,k );
218 Real aym = v_afrac_y(i ,j ,k );
219 Real ayp = v_afrac_y(i ,j+1,k );
220 Real azm = v_afrac_z(i ,j ,k );
221 Real azp = v_afrac_z(i ,j ,k+1);
223 Real adx = (axm-axp) * dy * dz;
224 Real ady = (aym-ayp) * dx * dz;
225 Real adz = (azm-azp) * dx * dy;
227 Real barea = std::sqrt(adx*adx + ady*ady + adz*adz);
231 Real dist_x = v_bcent(i,j,k,0)*dx;
232 Real dist_y = v_bcent(i,j,k,1)*dy;
233 Real dist_z = v_bcent(i,j,k,2)*dz;
238 Real dn = std::sqrt( dist_x * dist_x + dist_y * dist_y + dist_z * dist_z );
240 rho_v_rhs(i,j,k) -= - mu_eff * barea / vol * v_arr(i,j,k) / dn / v_volfrac(i,j,k);
244 const RealVect bcent_eb {v_bcent(i,j,k,0), v_bcent(i,j,k,1), v_bcent(i,j,k,2)};
245 const Real Dirichlet_u {0.};
246 const Real Dirichlet_v {0.};
247 const Real Dirichlet_w {0.};
249 GpuArray<Real,AMREX_SPACEDIM> slopes_u;
250 GpuArray<Real,AMREX_SPACEDIM> slopes_v;
251 GpuArray<Real,AMREX_SPACEDIM> slopes_w;
253 slopes_u =
erf_calc_slopes_eb_Dirichlet_staggered(
Vars::yvel,
Vars::xvel, dx, dy, dz, i, j, k, bcent_eb, Dirichlet_u, u_arr, u_volcent, u_cellflg);
254 slopes_v =
erf_calc_slopes_eb_Dirichlet (
Vars::yvel,
Vars::yvel, dx, dy, dz, i, j, k, bcent_eb, Dirichlet_v, v_arr, v_volcent, v_cellflg);
255 slopes_w =
erf_calc_slopes_eb_Dirichlet_staggered(
Vars::yvel,
Vars::zvel, dx, dy, dz, i, j, k, bcent_eb, Dirichlet_w, w_arr, w_volcent, w_cellflg);
257 Real dudx = slopes_u[0];
258 Real dudy = slopes_u[1];
260 Real dvdx = slopes_v[0];
261 Real dvdy = slopes_v[1];
262 Real dvdz = slopes_v[2];
264 Real dwdy = slopes_w[1];
265 Real dwdz = slopes_w[2];
267 Real tau22_eb = - mu_eff * ( dvdy - ( dudx + dvdy + dwdz ) / 3. );
268 Real tau12_eb = - mu_eff * 0.5 * (dudy + dvdx);
269 Real tau23_eb = - mu_eff * 0.5 * (dvdz + dwdy);
271 rho_v_rhs(i,j,k) -= mu_eff * barea / vol * (v_bnorm(i,j,k,0) * tau12_eb
272 + v_bnorm(i,j,k,1) * tau22_eb
273 + v_bnorm(i,j,k,2) * tau23_eb) / v_volfrac(i,j,k);
278 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
280 if (w_volfrac(i,j,k)>0.) {
283 Real mfsq = mf_mx(i,j,0) * mf_my(i,j,0);
285 Real diffContrib = ( (
tau13(i+1, j , k ) * w_afrac_x(i+1,j ,k )
286 -
tau13(i , j , k ) * w_afrac_x(i ,j ,k ) ) * dxinv * mfsq
287 + (
tau23(i , j+1, k ) * w_afrac_y(i ,j+1,k )
288 -
tau23(i , j , k ) * w_afrac_y(i ,j ,k ) ) * dyinv * mfsq
289 + (
tau33(i , j , k ) * w_afrac_z(i ,j ,k+1)
290 -
tau33(i , j , k-1) * w_afrac_z(i ,j ,k ) ) * dzinv );
291 diffContrib /= w_volfrac(i,j,k);
292 rho_w_rhs(i,j,k) -= diffContrib;
295 if (!l_constraint_z && w_cellflg(i,j,k).isSingleValued()) {
297 Real axm = w_afrac_x(i ,j ,k );
298 Real axp = w_afrac_x(i+1,j ,k );
299 Real aym = w_afrac_y(i ,j ,k );
300 Real ayp = w_afrac_y(i ,j+1,k );
301 Real azm = w_afrac_z(i ,j ,k );
302 Real azp = w_afrac_z(i ,j ,k+1);
304 Real adx = (axm-axp) * dy * dz;
305 Real ady = (aym-ayp) * dx * dz;
306 Real adz = (azm-azp) * dx * dy;
308 Real barea = std::sqrt(adx*adx + ady*ady + adz*adz);
312 Real dist_x = w_bcent(i,j,k,0)*dx;
313 Real dist_y = w_bcent(i,j,k,1)*dy;
314 Real dist_z = w_bcent(i,j,k,2)*dz;
319 Real dn = std::sqrt( dist_x * dist_x + dist_y * dist_y + dist_z * dist_z );
321 rho_w_rhs(i,j,k) -= - barea / vol * w_arr(i,j,k) / dn / w_volfrac(i,j,k);
325 const RealVect bcent_eb {w_bcent(i,j,k,0), w_bcent(i,j,k,1), w_bcent(i,j,k,2)};
326 const Real Dirichlet_u {0.};
327 const Real Dirichlet_v {0.};
328 const Real Dirichlet_w {0.};
330 GpuArray<Real,AMREX_SPACEDIM> slopes_u;
331 GpuArray<Real,AMREX_SPACEDIM> slopes_v;
332 GpuArray<Real,AMREX_SPACEDIM> slopes_w;
334 slopes_u =
erf_calc_slopes_eb_Dirichlet_staggered(
Vars::zvel,
Vars::xvel, dx, dy, dz, i, j, k, bcent_eb, Dirichlet_u, u_arr, u_volcent, u_cellflg);
335 slopes_v =
erf_calc_slopes_eb_Dirichlet_staggered(
Vars::zvel,
Vars::yvel, dx, dy, dz, i, j, k, bcent_eb, Dirichlet_v, v_arr, v_volcent, v_cellflg);
336 slopes_w =
erf_calc_slopes_eb_Dirichlet (
Vars::zvel,
Vars::zvel, dx, dy, dz, i, j, k, bcent_eb, Dirichlet_w, w_arr, w_volcent, w_cellflg);
338 Real dudx = slopes_u[0];
340 Real dudz = slopes_u[2];
342 Real dvdy = slopes_v[1];
343 Real dvdz = slopes_v[2];
344 Real dwdx = slopes_w[0];
345 Real dwdy = slopes_w[1];
346 Real dwdz = slopes_w[2];
348 Real tau33_eb = - mu_eff * ( dwdz - ( dudx + dvdy + dwdz ) / 3. );
349 Real tau13_eb = - mu_eff * 0.5 * (dudz + dwdx);
350 Real tau23_eb = - mu_eff * 0.5 * (dvdz + dwdy);
352 rho_w_rhs(i,j,k) -= barea / vol * (w_bnorm(i,j,k,0) * tau13_eb
353 + w_bnorm(i,j,k,1) * tau23_eb
354 + w_bnorm(i,j,k,2) * tau33_eb) / w_volfrac(i,j,k);
@ tau12
Definition: ERF_DataStruct.H:30
@ tau23
Definition: ERF_DataStruct.H:30
@ tau33
Definition: ERF_DataStruct.H:30
@ tau22
Definition: ERF_DataStruct.H:30
@ tau11
Definition: ERF_DataStruct.H:30
@ tau13
Definition: ERF_DataStruct.H:30
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > erf_calc_slopes_eb_Dirichlet_staggered(int igrid_query, int igrid_data, amrex::Real dx, amrex::Real dy, amrex::Real dz, int i, int j, int k, amrex::RealVect const &bcent_eb, amrex::Real const state_eb, amrex::Array4< amrex::Real const > const &state, amrex::Array4< amrex::Real const > const &ccent, amrex::Array4< amrex::EBCellFlag const > const &flag)
Definition: ERF_EBSlopes.H:157
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > erf_calc_slopes_eb_Dirichlet([[maybe_unused]] int igrid_query, [[maybe_unused]] int igrid_data, amrex::Real dx, amrex::Real dy, amrex::Real dz, int i, int j, int k, amrex::RealVect const &bcent_eb, amrex::Real const state_eb, amrex::Array4< amrex::Real const > const &state, amrex::Array4< amrex::Real const > const &ccent, amrex::Array4< amrex::EBCellFlag const > const &flag)
Definition: ERF_EBSlopes.H:20
eb_aux_ const * get_w_const_factory() const noexcept
Definition: ERF_EB.H:56
eb_aux_ const * get_v_const_factory() const noexcept
Definition: ERF_EB.H:55
eb_aux_ const * get_u_const_factory() const noexcept
Definition: ERF_EB.H:54
@ xvel
Definition: ERF_IndexDefines.H:141
@ zvel
Definition: ERF_IndexDefines.H:143
@ yvel
Definition: ERF_IndexDefines.H:142
Definition: ERF_DiffStruct.H:19
amrex::Real rho0_trans
Definition: ERF_DiffStruct.H:91
bool eb_diff_constraint_z
Definition: ERF_DiffStruct.H:99
bool eb_diff_constraint_x
Definition: ERF_DiffStruct.H:97
bool eb_diff_constraint_y
Definition: ERF_DiffStruct.H:98
MolecDiffType molec_diff_type
Definition: ERF_DiffStruct.H:84
amrex::Real dynamic_viscosity
Definition: ERF_DiffStruct.H:96
DiffChoice diffChoice
Definition: ERF_DataStruct.H:766