14 BL_PROFILE(
"ERF::FillZeroAreaFaceFluxes()");
16 const GpuArray<Real, AMREX_SPACEDIM>
dxInv = geom.InvCellSizeArray();
18 for (MFIter mfi(phi,
TileNoZ()); mfi.isValid(); ++mfi)
20 const Box& tbx = mfi.tilebox();
21 const Box&
xbx = mfi.nodaltilebox(0);
22 const Box&
ybx = mfi.nodaltilebox(1);
23 const Box&
zbx = mfi.nodaltilebox(2);
26 EBCellFlagFab
const& cflag_fab = (ebfact.getMultiEBCellFlagFab())[mfi];
27 Array4<const EBCellFlag> cflag = cflag_fab.const_array();
29 if (cflag_fab.getType(tbx) == FabType::singlevalued)
31 Array4<const Real> apx = ebfact.getAreaFrac()[0]->const_array(mfi);
32 Array4<const Real> apy = ebfact.getAreaFrac()[1]->const_array(mfi);
33 Array4<const Real> apz = ebfact.getAreaFrac()[2]->const_array(mfi);
35 Array4<const EBCellFlag> u_cflag = ebfact_u.getMultiEBCellFlagFab()[mfi].const_array();
36 Array4<const EBCellFlag> v_cflag = ebfact_v.getMultiEBCellFlagFab()[mfi].const_array();
37 Array4<const EBCellFlag> w_cflag = ebfact_w.getMultiEBCellFlagFab()[mfi].const_array();
39 Array4<Real const>
const& p_arr = phi.const_array(mfi);
40 Array4<Real>
const& fx = fluxes[0].array(mfi);
41 Array4<Real>
const& fy = fluxes[1].array(mfi);
42 Array4<Real>
const& fz = fluxes[2].array(mfi);
46 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
48 if (apx(i,j,k) ==
zero) {
49 if (!u_cflag(i,j,k).isCovered()) {
50 if (cflag(i,j,k).isCovered() && !cflag(i-1,j,k).isCovered()) {
51 fx(i,j,k) =
dxInv[0] * (p_arr(i-3,j,k) -
three*p_arr(i-2,j,k) +
two*p_arr(i-1,j,k));
52 }
else if (cflag(i-1,j,k).isCovered() && !cflag(i,j,k).isCovered()) {
53 fx(i,j,k) =
dxInv[0] * (
three*p_arr(i+1,j,k) - p_arr(i+2,j,k) -
two*p_arr(i,j,k));
59 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
61 if (apy(i,j,k) ==
zero) {
62 if (!v_cflag(i,j,k).isCovered()) {
63 if (cflag(i,j,k).isCovered() && !cflag(i,j-1,k).isCovered()) {
64 fy(i,j,k) =
dxInv[1] * (p_arr(i,j-3,k) -
three*p_arr(i,j-2,k) +
two*p_arr(i,j-1,k));
65 }
else if (cflag(i,j-1,k).isCovered() && !cflag(i,j,k).isCovered()) {
66 fy(i,j,k) =
dxInv[1] * (
three*p_arr(i,j+1,k) - p_arr(i,j+2,k) -
two*p_arr(i,j,k));
72 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
74 if (apz(i,j,k) ==
zero) {
75 if (!w_cflag(i,j,k).isCovered()) {
76 if (cflag(i,j,k).isCovered() && !cflag(i,j,k-1).isCovered()) {
77 fz(i,j,k) =
dxInv[2] * (p_arr(i,j,k-3) -
three*p_arr(i,j,k-2) +
two*p_arr(i,j,k-1));
78 }
else if (cflag(i,j,k-1).isCovered() && !cflag(i,j,k).isCovered()) {
79 fz(i,j,k) =
dxInv[2] * (
three*p_arr(i,j,k+1) - p_arr(i,j,k+2) -
two*p_arr(i,j,k));
constexpr amrex::Real three
Definition: ERF_Constants.H:9
constexpr amrex::Real two
Definition: ERF_Constants.H:8
constexpr amrex::Real zero
Definition: ERF_Constants.H:6
amrex::GpuArray< Real, AMREX_SPACEDIM > dxInv
Definition: ERF_InitCustomPertVels_ParticleTests.H:17
ParallelFor(bx, [=] AMREX_GPU_DEVICE(int i, int j, int k) noexcept { const Real *dx=geomdata.CellSize();const Real x=(i+0.5) *dx[0];const Real y=(j+0.5) *dx[1];const Real Omg=erf_vortex_Gaussian(x, y, xc, yc, R, beta, sigma);const Real deltaT=-(gamma - 1.0)/(2.0 *sigma *sigma) *Omg *Omg;const Real rho_norm=std::pow(1.0+deltaT, inv_gm1);const Real T=(1.0+deltaT) *T_inf;const Real p=std::pow(rho_norm, Gamma)/Gamma *rho_0 *a_inf *a_inf;const Real rho_theta=rho_0 *rho_norm *(T *std::pow(p_0/p, rdOcp));state_pert(i, j, k, RhoTheta_comp)=rho_theta - getRhoThetagivenP(p_hse(i, j, k));const Real r2d_xy=std::sqrt((x-xc) *(x-xc)+(y-yc) *(y-yc));state_pert(i, j, k, RhoScalar_comp)=0.25 *(1.0+std::cos(PI *std::min(r2d_xy, R)/R));})
const Box zbx
Definition: ERF_SetupDiff.H:9
const Box xbx
Definition: ERF_SetupDiff.H:7
const Box ybx
Definition: ERF_SetupDiff.H:8
AMREX_FORCE_INLINE amrex::IntVect TileNoZ()
Definition: ERF_TileNoZ.H:11