Function for computing the advective tendency for the momentum equations when using EB
89 auto dxInv = cellSizeInv[0], dyInv = cellSizeInv[1], dzInv = cellSizeInv[2];
92 Box box2d_u(bxx); box2d_u.setRange(2,0); box2d_u.grow({3,3,0});
93 Box box2d_v(bxy); box2d_v.setRange(2,0); box2d_v.grow({3,3,0});
95 FArrayBox mf_ux_invFAB(box2d_u,1,The_Async_Arena());
96 FArrayBox mf_uy_invFAB(box2d_u,1,The_Async_Arena());
97 FArrayBox mf_vx_invFAB(box2d_v,1,The_Async_Arena());
98 FArrayBox mf_vy_invFAB(box2d_v,1,The_Async_Arena());
99 const Array4<Real>& mf_ux_inv = mf_ux_invFAB.array();
100 const Array4<Real>& mf_uy_inv = mf_uy_invFAB.array();
101 const Array4<Real>& mf_vx_inv = mf_vx_invFAB.array();
102 const Array4<Real>& mf_vy_inv = mf_vy_invFAB.array();
105 [=] AMREX_GPU_DEVICE (
int i,
int j,
int) noexcept
107 mf_ux_inv(i,j,0) =
one / mf_ux(i,j,0);
108 mf_uy_inv(i,j,0) =
one / mf_uy(i,j,0);
110 [=] AMREX_GPU_DEVICE (
int i,
int j,
int) noexcept
112 mf_vx_inv(i,j,0) =
one / mf_vx(i,j,0);
113 mf_vy_inv(i,j,0) =
one / mf_vy(i,j,0);
119 Array4<const Real> u_vfrac = u_factory->getVolFrac().const_array(mfi);
120 Array4<const Real> u_afrac_x{};
121 Array4<const Real> u_afrac_y{};
122 Array4<const Real> u_afrac_z{};
123 Array4<const Real> u_fcx{};
124 Array4<const Real> u_fcy{};
125 Array4<const Real> u_fcz{};
126 FabType u_type = u_factory->getMultiEBCellFlagFab()[mfi].getType(bxx);
128 if (u_type == FabType::singlevalued) {
129 u_afrac_x = u_factory->getAreaFrac()[0]->const_array(mfi);
130 u_afrac_y = u_factory->getAreaFrac()[1]->const_array(mfi);
131 u_afrac_z = u_factory->getAreaFrac()[2]->const_array(mfi);
132 u_fcx = u_factory->getFaceCent()[0]->const_array(mfi);
133 u_fcy = u_factory->getFaceCent()[1]->const_array(mfi);
134 u_fcz = u_factory->getFaceCent()[2]->const_array(mfi);
140 Array4<const Real> v_vfrac = v_factory->getVolFrac().const_array(mfi);
141 Array4<const Real> v_afrac_x{};
142 Array4<const Real> v_afrac_y{};
143 Array4<const Real> v_afrac_z{};
144 Array4<const Real> v_fcx{};
145 Array4<const Real> v_fcy{};
146 Array4<const Real> v_fcz{};
147 FabType v_type = v_factory->getMultiEBCellFlagFab()[mfi].getType();
148 if (v_type == FabType::singlevalued) {
149 v_afrac_x = v_factory->getAreaFrac()[0]->const_array(mfi);
150 v_afrac_y = v_factory->getAreaFrac()[1]->const_array(mfi);
151 v_afrac_z = v_factory->getAreaFrac()[2]->const_array(mfi);
152 v_fcx = v_factory->getFaceCent()[0]->const_array(mfi);
153 v_fcy = v_factory->getFaceCent()[1]->const_array(mfi);
154 v_fcz = v_factory->getFaceCent()[2]->const_array(mfi);
160 Array4<const Real> w_vfrac = w_factory->getVolFrac().const_array(mfi);
161 Array4<const Real> w_afrac_x{};
162 Array4<const Real> w_afrac_y{};
163 Array4<const Real> w_afrac_z{};
164 Array4<const Real> w_fcx{};
165 Array4<const Real> w_fcy{};
166 Array4<const Real> w_fcz{};
167 FabType w_type = w_factory->getMultiEBCellFlagFab()[mfi].getType();
168 if (w_type == FabType::singlevalued) {
169 w_afrac_x = w_factory->getAreaFrac()[0]->const_array(mfi);
170 w_afrac_y = w_factory->getAreaFrac()[1]->const_array(mfi);
171 w_afrac_z = w_factory->getAreaFrac()[2]->const_array(mfi);
172 w_fcx = w_factory->getFaceCent()[0]->const_array(mfi);
173 w_fcy = w_factory->getFaceCent()[1]->const_array(mfi);
174 w_fcz = w_factory->getFaceCent()[2]->const_array(mfi);
181 ParallelFor(bxx_grown[0], bxx_grown[1], bxx_grown[2],
182 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
184 if (u_type != FabType::covered) {
185 Real flux_base =
fourth * (rho_u(i,j,k) * mf_ux_inv(i,j,0) + rho_u(i-1,j,k) * mf_ux_inv(i-1,j,0))
186 * (u(i-1,j,k) + u(i,j,k));
187 if (u_type == FabType::regular) {
188 flx_u_arr[0](i,j,k) = flux_base;
190 flx_u_arr[0](i,j,k) = (u_afrac_x(i,j,k) >
zero) ? u_afrac_x(i,j,k) * flux_base :
zero;
193 flx_u_arr[0](i,j,k) =
zero;
196 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
198 if (u_type != FabType::covered) {
199 Real flux_base =
fourth * (rho_v(i,j,k) * mf_vy_inv(i,j,0) + rho_v(i-1,j,k) * mf_vy_inv(i-1,j,0))
200 * (u(i,j-1,k) + u(i,j,k));
201 if (u_type == FabType::regular) {
202 flx_u_arr[1](i,j,k) = flux_base;
204 flx_u_arr[1](i,j,k) = (u_afrac_y(i,j,k) >
zero) ? u_afrac_y(i,j,k) * flux_base :
zero;
207 flx_u_arr[1](i,j,k) =
zero;
210 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
212 if (u_type != FabType::covered) {
214 if (u_type == FabType::regular) {
215 flx_u_arr[2](i,j,k) = flux_base;
217 flx_u_arr[2](i,j,k) = (u_afrac_z(i,j,k) >
zero) ? u_afrac_z(i,j,k) * flux_base :
zero;
220 flx_u_arr[2](i,j,k) =
zero;
224 ParallelFor(bxy_grown[0], bxy_grown[1], bxy_grown[2],
225 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
227 if (v_type != FabType::covered) {
228 Real flux_base =
fourth * (rho_u(i,j,k) * mf_uy_inv(i,j,0) + rho_u(i,j-1,k) * mf_uy_inv(i,j-1,0))
229 * (v(i-1,j,k) + v(i,j,k));
230 if (v_type == FabType::regular) {
231 flx_v_arr[0](i,j,k) = flux_base;
233 flx_v_arr[0](i,j,k) = (v_afrac_x(i,j,k) >
zero) ? v_afrac_x(i,j,k) * flux_base :
zero;
236 flx_v_arr[0](i,j,k) =
zero;
239 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
241 if (v_type != FabType::covered) {
242 Real flux_base =
fourth * (rho_v(i,j,k) * mf_vy_inv(i,j,0) + rho_v(i,j-1,k) * mf_vy_inv(i,j-1,0))
243 * (v(i,j-1,k) + v(i,j,k));
244 if (v_type == FabType::regular) {
245 flx_v_arr[1](i,j,k) = flux_base;
247 flx_v_arr[1](i,j,k) = (v_afrac_y(i,j,k) >
zero) ? v_afrac_y(i,j,k) * flux_base :
zero;
250 flx_v_arr[1](i,j,k) =
zero;
253 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
255 if (v_type != FabType::covered) {
257 if (v_type == FabType::regular) {
258 flx_v_arr[2](i,j,k) = flux_base;
260 flx_v_arr[2](i,j,k) = (v_afrac_z(i,j,k) >
zero) ? v_afrac_z(i,j,k) * flux_base :
zero;
263 flx_v_arr[2](i,j,k) =
zero;
267 ParallelFor(bxz_grown[0], bxz_grown[1], bxz_grown[2],
268 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
270 if (w_type != FabType::covered) {
271 Real flux_base =
fourth * (rho_u(i,j,k) + rho_u(i,j, k-1)) * mf_ux_inv(i,j,0)
272 * (
w(i-1,j,k) +
w(i,j,k));
273 if (w_type == FabType::regular) {
274 flx_w_arr[0](i,j,k) = flux_base;
276 flx_w_arr[0](i,j,k) = (w_afrac_x(i,j,k) >
zero) ? w_afrac_x(i,j,k) * flux_base :
zero;
279 flx_w_arr[0](i,j,k) =
zero;
282 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
284 if (w_type != FabType::covered) {
285 Real flux_base =
fourth * (rho_v(i,j,k) + rho_v(i,j,k-1)) * mf_vy_inv(i,j,0)
286 * (
w(i,j-1,k) +
w(i,j,k));
287 if (w_type == FabType::regular) {
288 flx_w_arr[1](i,j,k) = flux_base;
290 flx_w_arr[1](i,j,k) = (w_afrac_y(i,j,k) >
zero) ? w_afrac_y(i,j,k) * flux_base :
zero;
293 flx_w_arr[1](i,j,k) =
zero;
296 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
298 if (w_type != FabType::covered) {
299 Real flux_base = (k==hi_z_face+1) ?
omega(i,j,k) *
w(i,j,k) :
301 if (w_type == FabType::regular) {
302 flx_w_arr[2](i,j,k) = flux_base;
304 flx_w_arr[2](i,j,k) = (w_afrac_z(i,j,k) >
zero) ? w_afrac_z(i,j,k) * flux_base :
zero;
307 flx_w_arr[2](i,j,k) =
zero;
315 EBAdvectionSrcForMomVert<CENTERED2>(bxx_grown, bxy_grown, bxz_grown,
316 rho_u, rho_v,
omega, u, v,
w,
317 u_type, v_type, w_type,
318 u_cflag, u_afrac_x, u_afrac_y, u_afrac_z,
319 v_cflag, v_afrac_x, v_afrac_y, v_afrac_z,
320 w_cflag, w_afrac_x, w_afrac_y, w_afrac_z,
321 mf_ux_inv, mf_vx_inv,
322 mf_uy_inv, mf_vy_inv,
323 horiz_upw_frac, vert_upw_frac, vert_adv_type,
324 flx_u_arr, flx_v_arr, flx_w_arr,
325 lo_z_face, hi_z_face);
327 EBAdvectionSrcForMomVert<UPWIND3>( bxx_grown, bxy_grown, bxz_grown,
328 rho_u, rho_v,
omega, u, v,
w,
329 u_type, v_type, w_type,
330 u_cflag, u_afrac_x, u_afrac_y, u_afrac_z,
331 v_cflag, v_afrac_x, v_afrac_y, v_afrac_z,
332 w_cflag, w_afrac_x, w_afrac_y, w_afrac_z,
333 mf_ux_inv, mf_vx_inv,
334 mf_uy_inv, mf_vy_inv,
335 horiz_upw_frac, vert_upw_frac, vert_adv_type,
336 flx_u_arr, flx_v_arr, flx_w_arr,
337 lo_z_face, hi_z_face);
339 EBAdvectionSrcForMomVert<CENTERED4>(bxx_grown, bxy_grown, bxz_grown,
340 rho_u, rho_v,
omega, u, v,
w,
341 u_type, v_type, w_type,
342 u_cflag, u_afrac_x, u_afrac_y, u_afrac_z,
343 v_cflag, v_afrac_x, v_afrac_y, v_afrac_z,
344 w_cflag, w_afrac_x, w_afrac_y, w_afrac_z,
345 mf_ux_inv, mf_vx_inv,
346 mf_uy_inv, mf_vy_inv,
347 horiz_upw_frac, vert_upw_frac, vert_adv_type,
348 flx_u_arr, flx_v_arr, flx_w_arr,
349 lo_z_face, hi_z_face);
351 EBAdvectionSrcForMomVert<UPWIND5>( bxx_grown, bxy_grown, bxz_grown,
352 rho_u, rho_v,
omega, u, v,
w,
353 u_type, v_type, w_type,
354 u_cflag, u_afrac_x, u_afrac_y, u_afrac_z,
355 v_cflag, v_afrac_x, v_afrac_y, v_afrac_z,
356 w_cflag, w_afrac_x, w_afrac_y, w_afrac_z,
357 mf_ux_inv, mf_vx_inv,
358 mf_uy_inv, mf_vy_inv,
359 horiz_upw_frac, vert_upw_frac, vert_adv_type,
360 flx_u_arr, flx_v_arr, flx_w_arr,
361 lo_z_face, hi_z_face);
363 EBAdvectionSrcForMomVert<CENTERED6>(bxx_grown, bxy_grown, bxz_grown,
364 rho_u, rho_v,
omega, u, v,
w,
365 u_type, v_type, w_type,
366 u_cflag, u_afrac_x, u_afrac_y, u_afrac_z,
367 v_cflag, v_afrac_x, v_afrac_y, v_afrac_z,
368 w_cflag, w_afrac_x, w_afrac_y, w_afrac_z,
369 mf_ux_inv, mf_vx_inv,
370 mf_uy_inv, mf_vy_inv,
371 horiz_upw_frac, vert_upw_frac, vert_adv_type,
372 flx_u_arr, flx_v_arr, flx_w_arr,
373 lo_z_face, hi_z_face);
380 if (already_on_centroids) {
383 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
385 if (u_vfrac(i,j,k)>
zero) {
386 Real mfsq = mf_ux(i,j,0) * mf_uy(i,j,0);
388 Real advectionSrc = ( (flx_u_arr[0](i+1, j , k ) - flx_u_arr[0](i, j, k)) *
dxInv * mfsq
389 + (flx_u_arr[1](i , j+1, k ) - flx_u_arr[1](i, j, k)) * dyInv * mfsq
390 + (flx_u_arr[2](i , j , k+1) - flx_u_arr[2](i, j, k)) * dzInv ) / u_vfrac(i,j,k);
391 rho_u_rhs(i, j, k) = -advectionSrc;
393 rho_u_rhs(i, j, k) =
zero;
398 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
400 if (v_vfrac(i,j,k)>
zero) {
401 Real mfsq = mf_vx(i,j,0) * mf_vy(i,j,0);
403 Real advectionSrc = ( (flx_v_arr[0](i+1, j , k ) - flx_v_arr[0](i, j, k)) *
dxInv * mfsq
404 + (flx_v_arr[1](i , j+1, k ) - flx_v_arr[1](i, j, k)) * dyInv * mfsq
405 + (flx_v_arr[2](i , j , k+1) - flx_v_arr[2](i, j, k)) * dzInv ) / v_vfrac(i,j,k);
406 rho_v_rhs(i, j, k) = -advectionSrc;
408 rho_v_rhs(i, j, k) =
zero;
413 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
415 if (w_vfrac(i,j,k)>
zero) {
416 Real mfsq = mf_mx(i,j,0) * mf_my(i,j,0);
418 Real advectionSrc = ( (flx_w_arr[0](i+1, j , k ) - flx_w_arr[0](i, j, k)) *
dxInv * mfsq
419 + (flx_w_arr[1](i , j+1, k ) - flx_w_arr[1](i, j, k)) * dyInv * mfsq
420 + (flx_w_arr[2](i , j , k+1) - flx_w_arr[2](i, j, k)) * dzInv ) / w_vfrac(i,j,k);
421 rho_w_rhs(i, j, k) = -advectionSrc;
423 rho_w_rhs(i, j, k) =
zero;
430 Array4<const int> u_mask = physbnd_mask[
IntVars::xmom].const_array(mfi);
431 Array4<const int> v_mask = physbnd_mask[
IntVars::ymom].const_array(mfi);
432 Array4<const int> w_mask = physbnd_mask[
IntVars::zmom].const_array(mfi);
434 if (u_type == FabType::covered) {
436 ParallelFor(bxx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
437 rho_u_rhs(i, j, k) =
zero;
440 }
else if (u_type == FabType::regular) {
442 ParallelFor(bxx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
443 Real mfsq = mf_ux(i,j,0) * mf_uy(i,j,0);
444 rho_u_rhs(i, j, k) = - ( (flx_u_arr[0](i+1, j , k ) - flx_u_arr[0](i, j, k)) *
dxInv * mfsq
445 + (flx_u_arr[1](i , j+1, k ) - flx_u_arr[1](i, j, k)) * dyInv * mfsq
446 + (flx_u_arr[2](i , j , k+1) - flx_u_arr[2](i, j, k)) * dzInv );
449 }
else if (u_type == FabType::singlevalued) {
451 ParallelFor(bxx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
453 if (u_vfrac(i,j,k)>
zero) {
454 Real mfsq = mf_ux(i,j,0) * mf_uy(i,j,0);
456 if (u_cflag(i,j,k).isCovered()) {
458 rho_u_rhs(i, j, k) =
zero;
460 }
else if (u_cflag(i,j,k).isRegular()) {
462 rho_u_rhs(i, j, k) = - ( (u_afrac_x(i+1, j , k ) * flx_u_arr[0](i+1, j , k ) - u_afrac_x(i, j, k) * flx_u_arr[0](i, j, k)) *
dxInv * mfsq
463 + (u_afrac_y(i , j+1, k ) * flx_u_arr[1](i , j+1, k ) - u_afrac_y(i, j, k) * flx_u_arr[1](i, j, k)) * dyInv * mfsq
464 + (u_afrac_z(i , j , k+1) * flx_u_arr[2](i , j , k+1) - u_afrac_z(i, j, k) * flx_u_arr[2](i, j, k)) * dzInv ) / u_vfrac(i,j,k);
468 Real fxm = flx_u_arr[0](i,j,k);
469 if (u_afrac_x(i,j,k) !=
zero && u_afrac_x(i,j,k) !=
one) {
470 int jj = j +
static_cast<int>(std::copysign(
one, u_fcx(i,j,k,0)));
471 int kk = k +
static_cast<int>(std::copysign(
one, u_fcx(i,j,k,1)));
472 Real fracy = (u_mask(i-1,jj,k) || u_mask(i,jj,k)) ? std::abs(u_fcx(i,j,k,0)) :
zero;
473 Real fracz = (u_mask(i-1,j,kk) || u_mask(i,j,kk)) ? std::abs(u_fcx(i,j,k,1)) :
zero;
474 fxm = (
one-fracy)*(
one-fracz)*fxm
475 + fracy *(
one-fracz)*flx_u_arr[0](i,jj,k )
476 + fracz *(
one-fracy)*flx_u_arr[0](i,j ,kk)
477 + fracy * fracz *flx_u_arr[0](i,jj,kk);
480 Real fxp = flx_u_arr[0](i+1,j,k);
481 if (u_afrac_x(i+1,j,k) !=
zero && u_afrac_x(i+1,j,k) !=
one) {
482 int jj = j +
static_cast<int>(std::copysign(
one,u_fcx(i+1,j,k,0)));
483 int kk = k +
static_cast<int>(std::copysign(
one,u_fcx(i+1,j,k,1)));
484 Real fracy = (u_mask(i,jj,k) || u_mask(i+1,jj,k)) ? std::abs(u_fcx(i+1,j,k,0)) :
zero;
485 Real fracz = (u_mask(i,j,kk) || u_mask(i+1,j,kk)) ? std::abs(u_fcx(i+1,j,k,1)) :
zero;
486 fxp = (
one-fracy)*(
one-fracz)*fxp
487 + fracy *(
one-fracz)*flx_u_arr[0](i+1,jj,k )
488 + fracz *(
one-fracy)*flx_u_arr[0](i+1,j ,kk)
489 + fracy * fracz *flx_u_arr[0](i+1,jj,kk);
492 Real fym = flx_u_arr[1](i,j,k);
493 if (u_afrac_y(i,j,k) !=
zero && u_afrac_y(i,j,k) !=
one) {
494 int ii = i +
static_cast<int>(std::copysign(
one,u_fcy(i,j,k,0)));
495 int kk = k +
static_cast<int>(std::copysign(
one,u_fcy(i,j,k,1)));
496 Real fracx = (u_mask(ii,j-1,k) || u_mask(ii,j,k)) ? std::abs(u_fcy(i,j,k,0)) :
zero;
497 Real fracz = (u_mask(i,j-1,kk) || u_mask(i,j,kk)) ? std::abs(u_fcy(i,j,k,1)) :
zero;
498 fym = (
one-fracx)*(
one-fracz)*fym
499 + fracx *(
one-fracz)*flx_u_arr[1](ii,j,k )
500 + fracz *(
one-fracx)*flx_u_arr[1](i ,j,kk)
501 + fracx * fracz *flx_u_arr[1](ii,j,kk);
504 Real fyp = flx_u_arr[1](i,j+1,k);
505 if (u_afrac_y(i,j+1,k) !=
zero && u_afrac_y(i,j+1,k) !=
one) {
506 int ii = i +
static_cast<int>(std::copysign(
one,u_fcy(i,j+1,k,0)));
507 int kk = k +
static_cast<int>(std::copysign(
one,u_fcy(i,j+1,k,1)));
508 Real fracx = (u_mask(ii,j,k) || u_mask(ii,j+1,k)) ? std::abs(u_fcy(i,j+1,k,0)) :
zero;
509 Real fracz = (u_mask(i,j,kk) || u_mask(i,j+1,kk)) ? std::abs(u_fcy(i,j+1,k,1)) :
zero;
510 fyp = (
one-fracx)*(
one-fracz)*fyp
511 + fracx *(
one-fracz)*flx_u_arr[1](ii,j+1,k )
512 + fracz *(
one-fracx)*flx_u_arr[1](i ,j+1,kk)
513 + fracx * fracz *flx_u_arr[1](ii,j+1,kk);
516 Real fzm = flx_u_arr[2](i,j,k);
517 if (u_afrac_z(i,j,k) !=
zero && u_afrac_z(i,j,k) !=
one) {
518 int ii = i +
static_cast<int>(std::copysign(
one,u_fcz(i,j,k,0)));
519 int jj = j +
static_cast<int>(std::copysign(
one,u_fcz(i,j,k,1)));
520 Real fracx = (u_mask(ii,j,k-1) || u_mask(ii,j,k)) ? std::abs(u_fcz(i,j,k,0)) :
zero;
521 Real fracy = (u_mask(i,jj,k-1) || u_mask(i,jj,k)) ? std::abs(u_fcz(i,j,k,1)) :
zero;
522 fzm = (
one-fracx)*(
one-fracy)*fzm
523 + fracx *(
one-fracy)*flx_u_arr[2](ii,j ,k)
524 + fracy *(
one-fracx)*flx_u_arr[2](i ,jj,k)
525 + fracx * fracy *flx_u_arr[2](ii,jj,k);
528 Real fzp = flx_u_arr[2](i,j,k+1);
529 if (u_afrac_z(i,j,k+1) !=
zero && u_afrac_z(i,j,k+1) !=
one) {
530 int ii = i +
static_cast<int>(std::copysign(
one,u_fcz(i,j,k+1,0)));
531 int jj = j +
static_cast<int>(std::copysign(
one,u_fcz(i,j,k+1,1)));
532 Real fracx = (u_mask(ii,j,k) || u_mask(ii,j,k+1)) ? std::abs(u_fcz(i,j,k+1,0)) :
zero;
533 Real fracy = (u_mask(i,jj,k) || u_mask(i,jj,k+1)) ? std::abs(u_fcz(i,j,k+1,1)) :
zero;
534 fzp = (
one-fracx)*(
one-fracy)*fzp
535 + fracx *(
one-fracy)*flx_u_arr[2](ii,j ,k+1)
536 + fracy *(
one-fracx)*flx_u_arr[2](i ,jj,k+1)
537 + fracx * fracy *flx_u_arr[2](ii,jj,k+1);
540 rho_u_rhs(i, j, k) = - ( (u_afrac_x(i+1, j , k ) * fxp - u_afrac_x(i, j, k) * fxm) *
dxInv * mfsq
541 + (u_afrac_y(i , j+1, k ) * fyp - u_afrac_y(i, j, k) * fym) * dyInv * mfsq
542 + (u_afrac_z(i , j , k+1) * fzp - u_afrac_z(i, j, k) * fzm) * dzInv ) / u_vfrac(i,j,k);
546 rho_u_rhs(i, j, k) =
zero;
551 if (v_type == FabType::covered) {
553 ParallelFor(bxy, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
554 rho_v_rhs(i, j, k) =
zero;
557 }
else if (v_type == FabType::regular) {
559 ParallelFor(bxy, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
560 Real mfsq = mf_vx(i,j,0) * mf_vy(i,j,0);
561 rho_v_rhs(i, j, k) = - ( (flx_v_arr[0](i+1, j , k ) - flx_v_arr[0](i, j, k)) *
dxInv * mfsq
562 + (flx_v_arr[1](i , j+1, k ) - flx_v_arr[1](i, j, k)) * dyInv * mfsq
563 + (flx_v_arr[2](i , j , k+1) - flx_v_arr[2](i, j, k)) * dzInv );
566 }
else if (v_type == FabType::singlevalued) {
568 ParallelFor(bxy, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
570 if (v_vfrac(i,j,k)>
zero) {
571 Real mfsq = mf_vx(i,j,0) * mf_vy(i,j,0);
573 if (v_cflag(i,j,k).isCovered()) {
575 rho_v_rhs(i, j, k) =
zero;
577 }
else if (v_cflag(i,j,k).isRegular()) {
579 rho_v_rhs(i, j, k) = - ( (v_afrac_x(i+1, j , k ) * flx_v_arr[0](i+1, j , k ) - v_afrac_x(i, j, k) * flx_v_arr[0](i, j, k)) *
dxInv * mfsq
580 + (v_afrac_y(i , j+1, k ) * flx_v_arr[1](i , j+1, k ) - v_afrac_y(i, j, k) * flx_v_arr[1](i, j, k)) * dyInv * mfsq
581 + (v_afrac_z(i , j , k+1) * flx_v_arr[2](i , j , k+1) - v_afrac_z(i, j, k) * flx_v_arr[2](i, j, k)) * dzInv ) / v_vfrac(i,j,k);
584 Real fxm = flx_v_arr[0](i,j,k);
585 if (v_afrac_x(i,j,k) !=
zero && v_afrac_x(i,j,k) !=
one) {
586 int jj = j +
static_cast<int>(std::copysign(
one, v_fcx(i,j,k,0)));
587 int kk = k +
static_cast<int>(std::copysign(
one, v_fcx(i,j,k,1)));
588 Real fracy = (v_mask(i-1,jj,k) || v_mask(i,jj,k)) ? std::abs(v_fcx(i,j,k,0)) :
zero;
589 Real fracz = (v_mask(i-1,j,kk) || v_mask(i,j,kk)) ? std::abs(v_fcx(i,j,k,1)) :
zero;
590 fxm = (
one-fracy)*(
one-fracz)*fxm
591 + fracy *(
one-fracz)*flx_v_arr[0](i,jj,k )
592 + fracz *(
one-fracy)*flx_v_arr[0](i,j ,kk)
593 + fracy * fracz *flx_v_arr[0](i,jj,kk);
596 Real fxp = flx_v_arr[0](i+1,j,k);
597 if (v_afrac_x(i+1,j,k) !=
zero && v_afrac_x(i+1,j,k) !=
one) {
598 int jj = j +
static_cast<int>(std::copysign(
one,v_fcx(i+1,j,k,0)));
599 int kk = k +
static_cast<int>(std::copysign(
one,v_fcx(i+1,j,k,1)));
600 Real fracy = (v_mask(i,jj,k) || v_mask(i+1,jj,k)) ? std::abs(v_fcx(i+1,j,k,0)) :
zero;
601 Real fracz = (v_mask(i,j,kk) || v_mask(i+1,j,kk)) ? std::abs(v_fcx(i+1,j,k,1)) :
zero;
602 fxp = (
one-fracy)*(
one-fracz)*fxp
603 + fracy *(
one-fracz)*flx_v_arr[0](i+1,jj,k )
604 + fracz *(
one-fracy)*flx_v_arr[0](i+1,j ,kk)
605 + fracy * fracz *flx_v_arr[0](i+1,jj,kk);
608 Real fym = flx_v_arr[1](i,j,k);
609 if (v_afrac_y(i,j,k) !=
zero && v_afrac_y(i,j,k) !=
one) {
610 int ii = i +
static_cast<int>(std::copysign(
one,v_fcy(i,j,k,0)));
611 int kk = k +
static_cast<int>(std::copysign(
one,v_fcy(i,j,k,1)));
612 Real fracx = (v_mask(ii,j-1,k) || v_mask(ii,j,k)) ? std::abs(v_fcy(i,j,k,0)) :
zero;
613 Real fracz = (v_mask(i,j-1,kk) || v_mask(i,j,kk)) ? std::abs(v_fcy(i,j,k,1)) :
zero;
614 fym = (
one-fracx)*(
one-fracz)*fym
615 + fracx *(
one-fracz)*flx_v_arr[1](ii,j,k )
616 + fracz *(
one-fracx)*flx_v_arr[1](i ,j,kk)
617 + fracx * fracz *flx_v_arr[1](ii,j,kk);
620 Real fyp = flx_v_arr[1](i,j+1,k);
621 if (v_afrac_y(i,j+1,k) !=
zero && v_afrac_y(i,j+1,k) !=
one) {
622 int ii = i +
static_cast<int>(std::copysign(
one,v_fcy(i,j+1,k,0)));
623 int kk = k +
static_cast<int>(std::copysign(
one,v_fcy(i,j+1,k,1)));
624 Real fracx = (v_mask(ii,j,k) || v_mask(ii,j+1,k)) ? std::abs(v_fcy(i,j+1,k,0)) :
zero;
625 Real fracz = (v_mask(i,j,kk) || v_mask(i,j+1,kk)) ? std::abs(v_fcy(i,j+1,k,1)) :
zero;
626 fyp = (
one-fracx)*(
one-fracz)*fyp
627 + fracx *(
one-fracz)*flx_v_arr[1](ii,j+1,k )
628 + fracz *(
one-fracx)*flx_v_arr[1](i ,j+1,kk)
629 + fracx * fracz *flx_v_arr[1](ii,j+1,kk);
632 Real fzm = flx_v_arr[2](i,j,k);
633 if (v_afrac_z(i,j,k) !=
zero && v_afrac_z(i,j,k) !=
one) {
634 int ii = i +
static_cast<int>(std::copysign(
one,v_fcz(i,j,k,0)));
635 int jj = j +
static_cast<int>(std::copysign(
one,v_fcz(i,j,k,1)));
636 Real fracx = (v_mask(ii,j,k-1) || v_mask(ii,j,k)) ? std::abs(v_fcz(i,j,k,0)) :
zero;
637 Real fracy = (v_mask(i,jj,k-1) || v_mask(i,jj,k)) ? std::abs(v_fcz(i,j,k,1)) :
zero;
638 fzm = (
one-fracx)*(
one-fracy)*fzm
639 + fracx *(
one-fracy)*flx_v_arr[2](ii,j ,k)
640 + fracy *(
one-fracx)*flx_v_arr[2](i ,jj,k)
641 + fracx * fracy *flx_v_arr[2](ii,jj,k);
644 Real fzp = flx_v_arr[2](i,j,k+1);
645 if (v_afrac_z(i,j,k+1) !=
zero && v_afrac_z(i,j,k+1) !=
one) {
646 int ii = i +
static_cast<int>(std::copysign(
one,v_fcz(i,j,k+1,0)));
647 int jj = j +
static_cast<int>(std::copysign(
one,v_fcz(i,j,k+1,1)));
648 Real fracx = (v_mask(ii,j,k) || v_mask(ii,j,k+1)) ? std::abs(v_fcz(i,j,k+1,0)) :
zero;
649 Real fracy = (v_mask(i,jj,k) || v_mask(i,jj,k+1)) ? std::abs(v_fcz(i,j,k+1,1)) :
zero;
650 fzp = (
one-fracx)*(
one-fracy)*fzp
651 + fracx *(
one-fracy)*flx_v_arr[2](ii,j ,k+1)
652 + fracy *(
one-fracx)*flx_v_arr[2](i ,jj,k+1)
653 + fracx * fracy *flx_v_arr[2](ii,jj,k+1);
656 rho_v_rhs(i, j, k) = - ( (v_afrac_x(i+1, j , k ) * fxp - v_afrac_x(i, j, k) * fxm) *
dxInv * mfsq
657 + (v_afrac_y(i , j+1, k ) * fyp - v_afrac_y(i, j, k) * fym) * dyInv * mfsq
658 + (v_afrac_z(i , j , k+1) * fzp - v_afrac_z(i, j, k) * fzm) * dzInv ) / v_vfrac(i,j,k);
662 rho_v_rhs(i, j, k) =
zero;
667 if (w_type == FabType::covered) {
669 ParallelFor(bxz, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
670 rho_w_rhs(i, j, k) =
zero;
673 }
else if (w_type == FabType::regular) {
675 ParallelFor(bxz, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
676 Real mfsq = mf_mx(i,j,0) * mf_my(i,j,0);
677 rho_w_rhs(i, j, k) = - ( (flx_w_arr[0](i+1, j , k ) - flx_w_arr[0](i, j, k)) *
dxInv * mfsq
678 + (flx_w_arr[1](i , j+1, k ) - flx_w_arr[1](i, j, k)) * dyInv * mfsq
679 + (flx_w_arr[2](i , j , k+1) - flx_w_arr[2](i, j, k)) * dzInv );
682 }
else if (w_type == FabType::singlevalued) {
684 ParallelFor(bxz, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
685 if (w_vfrac(i,j,k)>
zero) {
686 Real mfsq = mf_mx(i,j,0) * mf_my(i,j,0);
688 if (w_cflag(i,j,k).isCovered())
690 rho_w_rhs(i, j, k) =
zero;
692 else if (w_cflag(i,j,k).isRegular())
694 rho_w_rhs(i, j, k) = - ( (w_afrac_x(i+1, j , k ) * flx_w_arr[0](i+1, j , k ) - w_afrac_x(i, j, k) * flx_w_arr[0](i, j, k)) *
dxInv * mfsq
695 + (w_afrac_y(i , j+1, k ) * flx_w_arr[1](i , j+1, k ) - w_afrac_y(i, j, k) * flx_w_arr[1](i, j, k)) * dyInv * mfsq
696 + (w_afrac_z(i , j , k+1) * flx_w_arr[2](i , j , k+1) - w_afrac_z(i, j, k) * flx_w_arr[2](i, j, k)) * dzInv ) / w_vfrac(i,j,k);
701 Real fxm = flx_w_arr[0](i,j,k);
702 if (w_afrac_x(i,j,k) !=
zero && w_afrac_x(i,j,k) !=
one) {
703 int jj = j +
static_cast<int>(std::copysign(
one, w_fcx(i,j,k,0)));
704 int kk = k +
static_cast<int>(std::copysign(
one, w_fcx(i,j,k,1)));
705 Real fracy = (w_mask(i-1,jj,k) || w_mask(i,jj,k)) ? std::abs(w_fcx(i,j,k,0)) :
zero;
706 Real fracz = (w_mask(i-1,j,kk) || w_mask(i,j,kk)) ? std::abs(w_fcx(i,j,k,1)) :
zero;
707 fxm = (
one-fracy)*(
one-fracz)*fxm
708 + fracy *(
one-fracz)*flx_w_arr[0](i,jj,k )
709 + fracz *(
one-fracy)*flx_w_arr[0](i,j ,kk)
710 + fracy * fracz *flx_w_arr[0](i,jj,kk);
713 Real fxp = flx_w_arr[0](i+1,j,k);
714 if (w_afrac_x(i+1,j,k) !=
zero && w_afrac_x(i+1,j,k) !=
one) {
715 int jj = j +
static_cast<int>(std::copysign(
one,w_fcx(i+1,j,k,0)));
716 int kk = k +
static_cast<int>(std::copysign(
one,w_fcx(i+1,j,k,1)));
717 Real fracy = (w_mask(i,jj,k) || w_mask(i+1,jj,k)) ? std::abs(w_fcx(i+1,j,k,0)) :
zero;
718 Real fracz = (w_mask(i,j,kk) || w_mask(i+1,j,kk)) ? std::abs(w_fcx(i+1,j,k,1)) :
zero;
719 fxp = (
one-fracy)*(
one-fracz)*fxp
720 + fracy *(
one-fracz)*flx_w_arr[0](i+1,jj,k )
721 + fracz *(
one-fracy)*flx_w_arr[0](i+1,j ,kk)
722 + fracy * fracz *flx_w_arr[0](i+1,jj,kk);
725 Real fym = flx_w_arr[1](i,j,k);
726 if (w_afrac_y(i,j,k) !=
zero && w_afrac_y(i,j,k) !=
one) {
727 int ii = i +
static_cast<int>(std::copysign(
one,w_fcy(i,j,k,0)));
728 int kk = k +
static_cast<int>(std::copysign(
one,w_fcy(i,j,k,1)));
729 Real fracx = (w_mask(ii,j-1,k) || w_mask(ii,j,k)) ? std::abs(w_fcy(i,j,k,0)) :
zero;
730 Real fracz = (w_mask(i,j-1,kk) || w_mask(i,j,kk)) ? std::abs(w_fcy(i,j,k,1)) :
zero;
731 fym = (
one-fracx)*(
one-fracz)*fym
732 + fracx *(
one-fracz)*flx_w_arr[1](ii,j,k )
733 + fracz *(
one-fracx)*flx_w_arr[1](i ,j,kk)
734 + fracx * fracz *flx_w_arr[1](ii,j,kk);
737 Real fyp = flx_w_arr[1](i,j+1,k);
738 if (w_afrac_y(i,j+1,k) !=
zero && w_afrac_y(i,j+1,k) !=
one) {
739 int ii = i +
static_cast<int>(std::copysign(
one,w_fcy(i,j+1,k,0)));
740 int kk = k +
static_cast<int>(std::copysign(
one,w_fcy(i,j+1,k,1)));
741 Real fracx = (w_mask(ii,j,k) || w_mask(ii,j+1,k)) ? std::abs(w_fcy(i,j+1,k,0)) :
zero;
742 Real fracz = (w_mask(i,j,kk) || w_mask(i,j+1,kk)) ? std::abs(w_fcy(i,j+1,k,1)) :
zero;
743 fyp = (
one-fracx)*(
one-fracz)*fyp
744 + fracx *(
one-fracz)*flx_w_arr[1](ii,j+1,k )
745 + fracz *(
one-fracx)*flx_w_arr[1](i ,j+1,kk)
746 + fracx * fracz *flx_w_arr[1](ii,j+1,kk);
749 Real fzm = flx_w_arr[2](i,j,k);
750 if (w_afrac_z(i,j,k) !=
zero && w_afrac_z(i,j,k) !=
one) {
751 int ii = i +
static_cast<int>(std::copysign(
one,w_fcz(i,j,k,0)));
752 int jj = j +
static_cast<int>(std::copysign(
one,w_fcz(i,j,k,1)));
753 Real fracx = (w_mask(ii,j,k-1) || w_mask(ii,j,k)) ? std::abs(w_fcz(i,j,k,0)) :
zero;
754 Real fracy = (w_mask(i,jj,k-1) || w_mask(i,jj,k)) ? std::abs(w_fcz(i,j,k,1)) :
zero;
755 fzm = (
one-fracx)*(
one-fracy)*fzm
756 + fracx *(
one-fracy)*flx_w_arr[2](ii,j ,k)
757 + fracy *(
one-fracx)*flx_w_arr[2](i ,jj,k)
758 + fracx * fracy *flx_w_arr[2](ii,jj,k);
761 Real fzp = flx_w_arr[2](i,j,k+1);
762 if (w_afrac_z(i,j,k+1) !=
zero && w_afrac_z(i,j,k+1) !=
one) {
763 int ii = i +
static_cast<int>(std::copysign(
one,w_fcz(i,j,k+1,0)));
764 int jj = j +
static_cast<int>(std::copysign(
one,w_fcz(i,j,k+1,1)));
765 Real fracx = (w_mask(ii,j,k) || w_mask(ii,j,k+1)) ? std::abs(w_fcz(i,j,k+1,0)) :
zero;
766 Real fracy = (w_mask(i,jj,k) || w_mask(i,jj,k+1)) ? std::abs(w_fcz(i,j,k+1,1)) :
zero;
767 fzp = (
one-fracx)*(
one-fracy)*fzp
768 + fracx *(
one-fracy)*flx_w_arr[2](ii,j ,k+1)
769 + fracy *(
one-fracx)*flx_w_arr[2](i ,jj,k+1)
770 + fracx * fracy *flx_w_arr[2](ii,jj,k+1);
773 rho_w_rhs(i, j, k) = - ( (w_afrac_x(i+1, j , k ) * fxp - w_afrac_x(i, j, k) * fxm) *
dxInv * mfsq
774 + (w_afrac_y(i , j+1, k ) * fyp - w_afrac_y(i, j, k) * fym) * dyInv * mfsq
775 + (w_afrac_z(i , j , k+1) * fzp - w_afrac_z(i, j, k) * fzm) * dzInv ) / w_vfrac(i,j,k);
779 rho_w_rhs(i, j, k) = 0;
void AdvectionSrcForMom_EB(const MFIter &mfi, const Box &bxx, const Box &bxy, const Box &bxz, const Vector< Box > &bxx_grown, const Vector< Box > &bxy_grown, const Vector< Box > &bxz_grown, const Array4< Real > &rho_u_rhs, const Array4< Real > &rho_v_rhs, const Array4< Real > &rho_w_rhs, const Array4< const Real > &u, const Array4< const Real > &v, const Array4< const Real > &w, const Array4< const Real > &rho_u, const Array4< const Real > &rho_v, const Array4< const Real > &omega, const GpuArray< Real, AMREX_SPACEDIM > &cellSizeInv, const Array4< const Real > &mf_mx, const Array4< const Real > &mf_ux, const Array4< const Real > &mf_vx, const Array4< const Real > &mf_my, const Array4< const Real > &mf_uy, const Array4< const Real > &mf_vy, const AdvType horiz_adv_type, const AdvType vert_adv_type, const Real horiz_upw_frac, const Real vert_upw_frac, const eb_ &ebfact, GpuArray< Array4< Real >, AMREX_SPACEDIM > &flx_u_arr, GpuArray< Array4< Real >, AMREX_SPACEDIM > &flx_v_arr, GpuArray< Array4< Real >, AMREX_SPACEDIM > &flx_w_arr, const Vector< iMultiFab > &physbnd_mask, const bool already_on_centroids, const int lo_z_face, const int hi_z_face, const Box &)
Definition: ERF_AdvectionSrcForMom_EB.cpp:51
constexpr amrex::Real one
Definition: ERF_Constants.H:9
constexpr amrex::Real fourth
Definition: ERF_Constants.H:14
constexpr amrex::Real zero
Definition: ERF_Constants.H:8
amrex::GpuArray< Real, AMREX_SPACEDIM > dxInv
Definition: ERF_InitCustomPertVels_ParticleTests.H:17
AMREX_ALWAYS_ASSERT(bx.length()[2]==khi+1)
ParallelFor(fab_box, [=] AMREX_GPU_DEVICE(int i, int j, int k) { qrcuten_arr(i, j, k)=Real(0);qscuten_arr(i, j, k)=Real(0);qicuten_arr(i, j, k)=Real(0);})
Real w
Definition: ERF_Plotfile2DInterpolator.cpp:22
amrex::Real Real
Definition: ERF_ShocInterface.H:19
AMREX_ASSERT_WITH_MESSAGE(wbar_cutoff_min > wbar_cutoff_max, "ERROR: wbar_cutoff_min < wbar_cutoff_max")
eb_aux_ const * get_w_const_factory() const noexcept
Return the ERF auxiliary z-face EB factory.
Definition: ERF_EB.H:123
eb_aux_ const * get_v_const_factory() const noexcept
Return the ERF auxiliary y-face EB factory.
Definition: ERF_EB.H:121
eb_aux_ const * get_u_const_factory() const noexcept
Return the ERF auxiliary x-face EB factory.
Definition: ERF_EB.H:119
const amrex::FabArray< amrex::EBCellFlagFab > & getMultiEBCellFlagFab() const
Return the reconstructed EB cell flags.
Definition: ERF_EBAux.cpp:1149
@ ymom
Definition: ERF_IndexDefines.H:196
@ zmom
Definition: ERF_IndexDefines.H:197
@ xmom
Definition: ERF_IndexDefines.H:195
@ omega
Definition: ERF_Morrison.H:54