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);
128 rho_u_rhs(i,j,k) -= diffContrib;
130 if (!l_constraint_x && u_cellflg(i,j,k).isSingleValued()) {
132 Real axm = u_afrac_x(i ,j ,k );
133 Real axp = u_afrac_x(i+1,j ,k );
134 Real aym = u_afrac_y(i ,j ,k );
135 Real ayp = u_afrac_y(i ,j+1,k );
136 Real azm = u_afrac_z(i ,j ,k );
137 Real azp = u_afrac_z(i ,j ,k+1);
139 Real adx = (axm-axp) * dy * dz;
140 Real ady = (aym-ayp) * dx * dz;
141 Real adz = (azm-azp) * dx * dy;
143 Real barea = std::sqrt(adx*adx + ady*ady + adz*adz);
149 Real dist_x = u_bcent(i,j,k,0)*dx;
150 Real dist_y = u_bcent(i,j,k,1)*dy;
151 Real dist_z = u_bcent(i,j,k,2)*dz;
156 Real dn = std::sqrt( dist_x * dist_x + dist_y * dist_y + dist_z * dist_z );
158 dudn = -u_arr(i,j,k) / dn;
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];
180 Real dwdx = slopes_w[0];
181 Real dwdz = slopes_w[2];
183 Real tau11_eb = ( dudx - ( dudx + dvdy + dwdz ) / 3. );
184 Real tau12_eb = 0.5 * (dudy + dvdx);
185 Real tau13_eb = 0.5 * (dudz + dwdx);
187 dudn = -(u_bnorm(i,j,k,0) * tau11_eb + u_bnorm(i,j,k,1) * tau12_eb + u_bnorm(i,j,k,2) * tau13_eb);
190 rho_u_rhs(i,j,k) -= mu_eff * barea * dudn / (vol * u_volfrac(i,j,k));
195 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
197 if (v_volfrac(i,j,k)>0.) {
200 Real mfsq = mf_vx(i,j,0) * mf_vy(i,j,0);
202 Real diffContrib = ( (
tau12(i+1, j , k ) * v_afrac_x(i+1,j ,k )
203 -
tau12(i , j , k ) * v_afrac_x(i ,j ,k ) ) * dxinv * mfsq
204 + (
tau22(i , j , k ) * v_afrac_y(i ,j+1,k )
205 -
tau22(i , j-1, k ) * v_afrac_y(i ,j ,k ) ) * dyinv * mfsq
206 + (
tau23(i , j , k+1) * v_afrac_z(i ,j ,k+1)
207 -
tau23(i , j , k ) * v_afrac_z(i ,j ,k ) ) * dzinv );
208 diffContrib /= v_volfrac(i,j,k);
210 rho_v_rhs(i,j,k) -= diffContrib;
213 if (!l_constraint_y && v_cellflg(i,j,k).isSingleValued()) {
215 Real axm = v_afrac_x(i ,j ,k );
216 Real axp = v_afrac_x(i+1,j ,k );
217 Real aym = v_afrac_y(i ,j ,k );
218 Real ayp = v_afrac_y(i ,j+1,k );
219 Real azm = v_afrac_z(i ,j ,k );
220 Real azp = v_afrac_z(i ,j ,k+1);
222 Real adx = (axm-axp) * dy * dz;
223 Real ady = (aym-ayp) * dx * dz;
224 Real adz = (azm-azp) * dx * dy;
226 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 dvdn = -v_arr(i,j,k) / dn;
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];
259 Real dvdx = slopes_v[0];
260 Real dvdy = slopes_v[1];
261 Real dvdz = slopes_v[2];
262 Real dwdy = slopes_w[1];
263 Real dwdz = slopes_w[2];
265 Real tau22_eb = ( dvdy - ( dudx + dvdy + dwdz ) / 3. );
266 Real tau12_eb = 0.5 * (dudy + dvdx);
267 Real tau23_eb = 0.5 * (dvdz + dwdy);
269 dvdn = -(v_bnorm(i,j,k,0) * tau12_eb + v_bnorm(i,j,k,1) * tau22_eb + v_bnorm(i,j,k,2) * tau23_eb);
272 rho_v_rhs(i,j,k) -= mu_eff * barea * dvdn / (vol * v_volfrac(i,j,k));
276 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
278 if (w_volfrac(i,j,k)>0.) {
281 Real mfsq = mf_mx(i,j,0) * mf_my(i,j,0);
283 Real diffContrib = ( (
tau13(i+1, j , k ) * w_afrac_x(i+1,j ,k )
284 -
tau13(i , j , k ) * w_afrac_x(i ,j ,k ) ) * dxinv * mfsq
285 + (
tau23(i , j+1, k ) * w_afrac_y(i ,j+1,k )
286 -
tau23(i , j , k ) * w_afrac_y(i ,j ,k ) ) * dyinv * mfsq
287 + (
tau33(i , j , k ) * w_afrac_z(i ,j ,k+1)
288 -
tau33(i , j , k-1) * w_afrac_z(i ,j ,k ) ) * dzinv );
289 diffContrib /= w_volfrac(i,j,k);
290 rho_w_rhs(i,j,k) -= diffContrib;
293 if (!l_constraint_z && w_cellflg(i,j,k).isSingleValued()) {
295 Real axm = w_afrac_x(i ,j ,k );
296 Real axp = w_afrac_x(i+1,j ,k );
297 Real aym = w_afrac_y(i ,j ,k );
298 Real ayp = w_afrac_y(i ,j+1,k );
299 Real azm = w_afrac_z(i ,j ,k );
300 Real azp = w_afrac_z(i ,j ,k+1);
302 Real adx = (axm-axp) * dy * dz;
303 Real ady = (aym-ayp) * dx * dz;
304 Real adz = (azm-azp) * dx * dy;
306 Real barea = std::sqrt(adx*adx + ady*ady + adz*adz);
311 Real dist_x = w_bcent(i,j,k,0)*dx;
312 Real dist_y = w_bcent(i,j,k,1)*dy;
313 Real dist_z = w_bcent(i,j,k,2)*dz;
318 Real dn = std::sqrt( dist_x * dist_x + dist_y * dist_y + dist_z * dist_z );
320 dwdn = -w_arr(i,j,k) / dn;
324 const RealVect bcent_eb {w_bcent(i,j,k,0), w_bcent(i,j,k,1), w_bcent(i,j,k,2)};
325 const Real Dirichlet_u {0.};
326 const Real Dirichlet_v {0.};
327 const Real Dirichlet_w {0.};
329 GpuArray<Real,AMREX_SPACEDIM> slopes_u;
330 GpuArray<Real,AMREX_SPACEDIM> slopes_v;
331 GpuArray<Real,AMREX_SPACEDIM> slopes_w;
333 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);
334 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);
335 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);
337 Real dudx = slopes_u[0];
339 Real dudz = slopes_u[2];
341 Real dvdy = slopes_v[1];
342 Real dvdz = slopes_v[2];
343 Real dwdx = slopes_w[0];
344 Real dwdy = slopes_w[1];
345 Real dwdz = slopes_w[2];
347 Real tau33_eb = ( dwdz - ( dudx + dvdy + dwdz ) / 3. );
348 Real tau13_eb = 0.5 * (dudz + dwdx);
349 Real tau23_eb = 0.5 * (dvdz + dwdy);
351 dwdn = -(w_bnorm(i,j,k,0) * tau13_eb + w_bnorm(i,j,k,1) * tau23_eb + w_bnorm(i,j,k,2) * tau33_eb);
354 rho_w_rhs(i,j,k) -= mu_eff * barea * dwdn / (vol * w_volfrac(i,j,k));
@ tau12
Definition: ERF_DataStruct.H:31
@ tau23
Definition: ERF_DataStruct.H:31
@ tau33
Definition: ERF_DataStruct.H:31
@ tau22
Definition: ERF_DataStruct.H:31
@ tau11
Definition: ERF_DataStruct.H:31
@ tau13
Definition: ERF_DataStruct.H:31
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
amrex::Real Real
Definition: ERF_ShocInterface.H:19
eb_aux_ const * get_w_const_factory() const noexcept
Definition: ERF_EB.H:58
eb_aux_ const * get_v_const_factory() const noexcept
Definition: ERF_EB.H:57
eb_aux_ const * get_u_const_factory() const noexcept
Definition: ERF_EB.H:56
@ 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:992