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) ==
Real(0.0)) {
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) - 3.*p_arr(i-2,j,k) + 2.*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] * (3.*p_arr(i+1,j,k) - p_arr(i+2,j,k) - 2.*p_arr(i,j,k));
59 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
61 if (apy(i,j,k) ==
Real(0.0)) {
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) - 3.*p_arr(i,j-2,k) + 2.*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] * (3.*p_arr(i,j+1,k) - p_arr(i,j+2,k) - 2.*p_arr(i,j,k));
72 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
74 if (apz(i,j,k) ==
Real(0.0)) {
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) - 3.*p_arr(i,j,k-2) + 2.*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] * (3.*p_arr(i,j,k+1) - p_arr(i,j,k+2) - 2.*p_arr(i,j,k));
amrex::GpuArray< Real, AMREX_SPACEDIM > dxInv
Definition: ERF_InitCustomPertVels_ParticleTests.H:16
ParallelFor(bx, [=] AMREX_GPU_DEVICE(int i, int j, int k) noexcept { const auto prob_lo=geomdata.ProbLo();const auto dx=geomdata.CellSize();const Real x=(prob_lo[0]+(i+0.5) *dx[0])/mf_m(i, j, 0);const Real z=z_cc(i, j, k);Real L=std::sqrt(std::pow((x - x_c)/x_r, 2)+std::pow((z - z_c)/z_r, 2));if(L<=1.0) { Real dT=T_pert *(std::cos(PI *L)+1.0)/2.0;Real Tbar_hse=p_hse(i, j, k)/(R_d *r_hse(i, j, k));Real theta_perturbed=(Tbar_hse+dT) *std::pow(p_0/p_hse(i, j, k), rdOcp);Real theta_0=(Tbar_hse) *std::pow(p_0/p_hse(i, j, k), rdOcp);if(const_rho) { state_pert(i, j, k, RhoTheta_comp)=r_hse(i, j, k) *(theta_perturbed - theta_0);} else { state_pert(i, j, k, Rho_comp)=getRhoThetagivenP(p_hse(i, j, k))/theta_perturbed - r_hse(i, j, k);} } })
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::Real Real
Definition: ERF_ShocInterface.H:19
AMREX_FORCE_INLINE amrex::IntVect TileNoZ()
Definition: ERF_TileNoZ.H:11