2#include <AMReX_Arena.H>
3#include <AMReX_InterpFaceReg_3D_C.H>
21 Geometry
const&
fgeom,
22 BoxArray
const&
cba, DistributionMapping
const&
cdm,
23 Geometry
const&
cgeom,
55 Geometry
const&
fgeom,
56 BoxArray
const&
cba, DistributionMapping
const&
cdm,
57 Geometry
const&
cgeom,
91 for (
int i(0);
i <
fba.size(); ++
i) {
159 if (
fba.ixType()[0] == IndexType::NODE) {
161 }
else if (
fba.ixType()[1] == IndexType::NODE) {
163 }
else if (
fba.ixType()[2] == IndexType::NODE) {
183 const Box&
vbx =
mfi.validbox();
203 if (
fba.ixType()[
dir] != IndexType::NODE) {
continue; }
211 const Box&
vbx =
mfi.validbox();
257 MultiFab
const&
crse,
283 Box
const&
fbx =
mfi.validbox();
292 if (
fbx.type(0) == IndexType::NODE)
298 const int ii = amrex::coarsen(
i,
ratio[0]);
300 interp_face_reg(
i,
j,
k,
ratio,
fine_arr,0,
crse_arr,
slope_arr,
ncomp,
per_grown_domain,0);
310 const int ii = amrex::coarsen(
i,
ratio[0]);
319 else if (
fbx.type(1) == IndexType::NODE)
325 const int jj = amrex::coarsen(
j,
ratio[1]);
327 interp_face_reg(
i,
j,
k,
ratio,
fine_arr,0,
crse_arr,
slope_arr,
ncomp,
per_grown_domain,1);
337 const int jj = amrex::coarsen(
j,
ratio[1]);
351 const int kk = amrex::coarsen(
k,
ratio[2]);
353 interp_face_reg(
i,
j,
k,
ratio,
fine_arr,0,
crse_arr,
slope_arr,1,
per_grown_domain,2);
363 const int kk = amrex::coarsen(
k,
ratio[2]);
381 MultiFab
const&
crse,
391 Box
const&
fbx =
mfi.validbox();
405 if (
ratio[dim] > 1) {
constexpr amrex::Real one
mf_h setVal(geomdata.ProbHi(2))
AMREX_ALWAYS_ASSERT(!NSPeriodic||!EWPeriodic)
amrex::InterpBase * m_interp
amrex::DistributionMapping m_fdm
void Define(amrex::BoxArray const &fba, amrex::DistributionMapping const &fdm, amrex::Geometry const &fgeom, amrex::BoxArray const &cba, amrex::DistributionMapping const &cdm, amrex::Geometry const &cgeom, int nghost, int nghost_set, int ncomp, amrex::InterpBase *interp)
Redefine the coarse and fine patch MultiFabs.
void RegisterCoarseData(amrex::Vector< amrex::MultiFab const * > const &crse_data, amrex::Vector< amrex::Real > const &crse_time)
Register the coarse data to be used by the REMORAFillPatcher.
void InterpCell(amrex::MultiFab &fine, amrex::MultiFab const &crse, amrex::Vector< amrex::BCRec > const &bcr, int mask_val)
Interpolate to cell centers.
REMORAFillPatcher(amrex::BoxArray const &fba, amrex::DistributionMapping const &fdm, amrex::Geometry const &fgeom, amrex::BoxArray const &cba, amrex::DistributionMapping const &cdm, amrex::Geometry const &cgeom, int nghost, int nghost_set, int ncomp, amrex::InterpBase *interp)
Fill valid and ghost data with the "state data" at the given time.
amrex::Vector< amrex::Real > m_crse_times
void InterpFace(amrex::MultiFab &fine, amrex::MultiFab const &crse, int mask_val)
Interpolate to cell faces.
std::unique_ptr< amrex::MultiFab > m_cf_crse_data_new
void BuildMask(amrex::BoxArray const &fba, int nghost, int nghost_set)
Generate masking array.
amrex::DistributionMapping m_cdm
std::unique_ptr< amrex::iMultiFab > m_cf_mask
std::unique_ptr< amrex::MultiFab > m_cf_crse_data_old