Apply EB state redistribution to result_tmp and write the redistributed result.
35 AMREX_ASSERT(result.nComp() == state.nComp());
37 Real local_dt =
static_cast<Real>(local_dt_d);
39 result_tmp.FillBoundary(geom.periodicity());
42 #pragma omp parallel if (Gpu::notInLaunchRegion())
44 for (MFIter mfi(state,TilingIfNotGPU()); mfi.isValid(); ++mfi)
46 Box
const& bx = mfi.tilebox();
48 EBCellFlagFab
const& flagfab = ebfact.getMultiEBCellFlagFab()[mfi];
49 Array4<EBCellFlag const>
const& flag = flagfab.const_array();
52 bool is_singlevalued = (flagfab.getType() == FabType::singlevalued);
53 bool is_regular = (flagfab.getType(amrex::grow(bx,4)) == FabType::regular);
54 bool is_covered = (flagfab.getType(bx) == FabType::covered);
56 Array4<Real>
out = result.array(mfi);
57 Array4<Real>
in = result_tmp.array(mfi);
60 if (is_singlevalued && !is_regular && !is_covered)
62 auto const& vfrac = ebfact.getVolFrac().const_array(mfi);
63 auto const& ccc = ebfact.getCentroid().const_array(mfi);
64 auto const& apx = ebfact.getAreaFrac()[0]->const_array(mfi);
65 auto const& apy = ebfact.getAreaFrac()[1]->const_array(mfi);
66 auto const& apz = ebfact.getAreaFrac()[2]->const_array(mfi);
67 auto const& fcx = ebfact.getFaceCent()[0]->const_array(mfi);
68 auto const& fcy = ebfact.getFaceCent()[1]->const_array(mfi);
69 auto const& fcz = ebfact.getFaceCent()[2]->const_array(mfi);
76 bx_cc = bx_cc.convert(IntVect::TheZeroVector());
79 if (igrid ==
IntVars::xmom) bx_cc = bx_cc.setBig(0, bx_cc.bigEnd(0) + 1);
80 if (igrid ==
IntVars::ymom) bx_cc = bx_cc.setBig(1, bx_cc.bigEnd(1) + 1);
81 if (igrid ==
IntVars::zmom) bx_cc = bx_cc.setBig(2, bx_cc.bigEnd(2) + 1);
84 Box domain_grown = geom.Domain();
85 domain_grown.growHi(igrid-1, 1);
86 geom_used =
Geometry(domain_grown, geom.ProbDomain(), geom.Coord(), geom.isPeriodic());
89 Box gbx = bx_cc; gbx.grow(3);
91 FArrayBox scratch_fab(gbx,ncomp);
92 Array4<Real> scratch = scratch_fab.array();
93 Elixir eli_scratch = scratch_fab.elixir();
95 std::string redistribution_type =
"StateRedist";
98 Array4<Real const> state_arr = state.const_array(mfi);
99 ApplyRedistribution( bx_cc, ncomp,
out,
in, state_arr,
101 apx, apy, apz, vfrac,
103 bc, geom_used, local_dt, redistribution_type,
104 false, 2, 0.5_rt, {});
108 ParallelFor(bx, ncomp, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k,
int n) noexcept
110 out(i,j,k,n) =
in(i,j,k,n);
void redistribute_term(int ncomp, const Geometry &geom, MultiFab &result, MultiFab &result_tmp, MultiFab const &state, EBFactType const &ebfact, BCRec const *bc, double local_dt_d, int const igrid)
Apply EB state redistribution to result_tmp and write the redistributed result.
Definition: ERF_EBRedistribute.cpp:21
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);})
amrex::Real Real
Definition: ERF_ShocInterface.H:19
@ ymom
Definition: ERF_IndexDefines.H:196
@ zmom
Definition: ERF_IndexDefines.H:197
@ xmom
Definition: ERF_IndexDefines.H:195
real(c_double), private bc
Definition: ERF_module_mp_morr_two_moment.F90:182