B7Y552HZXBV2PD22T7ZXGFJKUYU23A7XDWV4XZK46SGQKX7U45PQC
BAQQ7LB2OIGZRJTXWQHNOQD7GZU5VBDSBUE6TNUYMZM7HDMWV3ZAC
4B36MBHKEUSFI2TUH67YRHFSCMZNI7RXMY6VZN74OLNYAQT55NEAC
7ZADVX7EO4SLIPEVVF3DECABHSS4JAYTQ3LFK2KIIIRSCCAIOSOAC
Q4BI3KHPY7G275UHURXZ23GQTMCI7OQAVQOFK7XR62KFH7SFHRQQC
EJWFGXTWIBKJ62LO6QM62LM7MGTYEHOCZDKA3UVR5UYWQZ2O54DQC
EDCG66UHCEDCQV3XMBGFL3CLW3TRQ25C4YWA53TD5LC5EK6K2GYQC
WMCMZILMWKIKL6K5ROISXT23A6XTZQGSBQ3IAWMDOJMK2JERGJKQC
UZOSQIXOP7ARW3JJET3VDRQKNTN6FTSAD66YAIXZHIQWIJEOQVLQC
GKKJ75HX2ERLVBZVE2CUB6T3J2SUT7R3UKEKTEYNOG43ZKX6X5MQC
BVR7DVINVPQG7PA6Z7QYVYNQ43YZL7XCC6AOMSMWMGAAB2Q43STAC
722HZ7UFINNE3YKSYKP2NHZ5XEG5QQLQHSKC7PREJZR3EX6RDYUAC
M5R6KQLXLGYSVKHVAX5AJKD6NYE6IM5Z6WVTR3BTKPJDNNKF3ARAC
VMCDMDXKME66ESRMB3PYSUZZH2XG2GIQMEOEKRH33WGCEBPXTWUQC
KG47IF4CPCUT3BHS34WDRHTH5HYMBTY4OSTB3X7APR2E5ZJ32IYQC
TVBD244E7Q7WV44CRBTFST535NUP3JAZH6OLL4IKDR3OWEXSU7HAC
U77PE56ICORZNQW33NXGSEMW7GDHCSSZ4EXB6OHBJSHEG6WHYSSQC
ZARZZPSISIOCXZOWNJQMMQSQPXFSZLDDIDAFY35X2GV37RBB7WUAC
2DKSL6DKZAIYQUJGDULORCKU5K4Z5Z3W4RIKQYDSLKMCNQNDZFBAC
JN2TPHENEBIY2OE5FRCQ2E6QCL6FPVHJHUCP4UODD6DITRVV2LIQC
BPRNUTY7MHK7LK4EY5MY5OFFG3ABOL7LWXD574L35M74YSQPULFAC
MSBBCXVGD3GRLE5KAI6BKAFRV7SQUWI2SNN43AJAUD3ISRCEXY6QC
BJDGFYBMECTJG7BHLNHLSCUCBVYHAY6OGY37FIJP6JDGNDXQNQVAC
NUOLOGCKMF5UOBGBYEOX4O7NQ5AEVVLCH6KRBQRJQXIRDNJ2C2ZQC
5XGIB7XMEZNBLA5ZLQTXRTC3AZ5CTRGMXWBPVMWXG4DPHKWDF4ZAC
FEMASUBNU32NSG4DNXZX54CGCA57PVRGYO46L3A6F2EJ4BCSJ3SAC
GQVQJCNQNO2KD7ZMC7RESCUAMUAP7OED6CTA6SYLZKQGXKXZ6T3QC
PU3YB5FX7NK65435O3H3AHCTUDHFRW7IOARLJJ4NBFG3GTIYVLCQC
33IC3UHCEPZLGS5ACS2JXHGT6CRU5LXU6PM6RDHCERPOIELVRVXQC
YIQN7NJTGEVKW7JZHL6CTH6EPCIXCNBYNURIGXPYZAOUX3VAJQMAC
24A4OZBZBQ6QXIQ3EOOCQIBTOWRA32TMSQ4CCL3LKIJVJPKZFHVQC
BVO33OXTG3QDBJ5YLBBVMUDHZGVFE777UOGZKVAHQK6MSDVR5RRAC
XU5HOJREK4XY4NBCJINLZPKQNKSYOLUDTWR47REFSNQKDOSNDXLQC
KCIWCVZOHG44WBOLKI2XK33WPHPRI5FWCETF4AOGTPZISKCW3CLQC
QNV4LD7UGYSSNYDXGJC6SRP6Y3USUVDQLEERBMBWRC7LILWREB7AC
5IAXY3XZJTRMMVT2OVIJ6OXQJI6OJPTPCHHA4IVLVMHANCCC5NKAC
QN2UTSQP4IMCMVXZNR24J22N24ASGXF6EWXQ2P3VWVQERUPFAFDQC
DHFIRBK6SZI7R5QBVGMX2M5ADXIVQWNLCVBE6MKVPGHZ4USEC3VQC
XQFT6DACFOMNNXDYUZRGRCMEPWF34KW5PRZ7RVMVJHYCS76JIZSAC
IK2JHY4Z47WMJWXFYMKNXWFBBOMACMJWP737SUCRYHSEOY7HD6AQC
J3SP5HQRWGMM6EM4ZIWPNUIY5HYFRJA4SH2X4OWGESSK7AWA3RNQC
IVHURSHY4636OGIF3PNDO5CWOVRLJ75M4LP65J6I2E6KAM4QKF4AC
VAF66DTVLDWNG7N2PEQYEH4OH5SPSMFBXKPR2PU67IIM6CVPCJ7AC
TOBGHRPKEPSXDN56WGSZNWOMCBVJ4KUSLWYWI56MC2RR3MM3KLZAC
WASO7G5FJXRXWNH2U2FLUNEKU6VE63OI3HUYP64BVD4LMD6KE7OQC
UZAKARMGORRQG733ZUPJOEGL5FG243I32NCC2SRSFDCZKUQ5A52QC
TUDUMVD5MTJJJGVYVOCALOOKOUYNB7LOFJRCYCZDVGN536JAO2OQC
RCLGQ2LZMFVPBPTU2G55DJ6HZPOGGTPZRZCY54VGP6YLHANJ2LAQC
N42E473LAYAM5NC4UXPM6WD37FLCUM26JCCKCARQEMXM7V6GWYNQC
OJZWEAJRLOA5FZAC6FMGBQ6XFQFDNO55IRWLFWDAYWM54MUIU5LAC
2MTD37PDBF7KZKC6LXG2IVDYMMUMNNS557WMFVSCZM3SAKOGDC5QC
6D6MZBKTLXUK4ZCIFUPNV7XT64XSFFG4CL6HN6ONK5ONM6MR64AAC
JHHVFKSN2L3YMG4JKXUDS6EBBYCDUDO56LNAZMG4QYS2FFPZF3SQC
T3ARO5SWCVNUDSQHQYD3QLIJ3JLSFFNOWXPC2VTDOERWSFOFV47QC
DGEGTDYVGRHEGNFDHCCVTD6AVLRJ2XHDXQPWR5MMR62V5NU2XGIQC
DQZRKU4B6C3WWWXFMBBSVKYD5AXDGUMHHPACVWKERGKB5WLHZGYAC
FS7Q6TUHBK5WSRDC3TM6KV2BPGWATRBLDHFGEJ72BR3FRDEOC3WAC
I4P6OKQG6OD3JX2KV23QLKMG7DSNYMTYUZCIOKNPTHOFHOFLMSNAC
PQB3EKQ6MBCXPTW4HB7SGMSTOTYMB3EFZX2573OFCQI6PSOEKCSQC
M4Z75FVGV5XY2N3JHOSZZZ33VORN3WASHPP6X4IY43YNEIPFOC3QC
T35FSMI7CA2CFZSRLTCZQBT2KDSEPDZD5UAPNNGR4YYAJ67LT4PAC
2D74GU7KGIN5GTSMCY7752YYQN62T5UY2FIKMWKYVMGKS2CDAJKAC
3HPNY5XHNPWR6RVX4LYEVDFJQWSB2CMS7J6XPAKATQ2UPFTXD33QC
BSMJ4V7GV3EOGY4KCSTOJQUOFE2OOCIKQETE4WC2WRNLWBQIBW3QC
GECUITHDXKCWB7HBCM7EA5Q56JDDWUVUWHMW2K6OM7UW36DFAZ3QC
67UXOK4QSZFAPVZXU2MJMD7I2232JCK4QDMIOMVMEQNQUGN7632AC
USPPNUMNL5HU5WEOIWJMIFAX6TBZERVAV67XJUJQ6KSNLG55JAGQC
2DD222JSYRPHTXKSRXLSOMSCQPZUORNFLLO2P3GMIDELAAMD5MEQC
2XYZZL42IEZHGDJA6NDKGSQKGJP24LOTLFJ6RNHOKWHHSUYIHGKQC
UUGQGVC4WEKN64WAP7F5QPS2UHGQB5ZLMFRIYNWKMIEBDO3QRX4AC
CactusAmrCore::CactusAmrCore(const RealBox *rb, int max_level_in,
const Vector<int> &n_cell_in, int coord,
Vector<IntVect> ref_ratios, const int *is_per)
: AmrCore(rb, max_level_in, n_cell_in, coord, ref_ratios, is_per) {
CactusAmrCore::CactusAmrCore(const amrex::RealBox *rb, int max_level_in,
const amrex::Vector<int> &n_cell_in, int coord,
amrex::Vector<amrex::IntVect> ref_ratios,
const int *is_per)
: amrex::AmrCore(rb, max_level_in, n_cell_in, coord, ref_ratios, is_per) {
CactusAmrCore::CactusAmrCore(const RealBox &rb, int max_level_in,
const Vector<int> &n_cell_in, int coord,
Vector<IntVect> const &ref_ratios,
Array<int, AMREX_SPACEDIM> const &is_per)
: AmrCore(rb, max_level_in, n_cell_in, coord, ref_ratios, is_per) {
CactusAmrCore::CactusAmrCore(const amrex::RealBox &rb, int max_level_in,
const amrex::Vector<int> &n_cell_in, int coord,
amrex::Vector<amrex::IntVect> const &ref_ratios,
amrex::Array<int, AMREX_SPACEDIM> const &is_per)
: amrex::AmrCore(rb, max_level_in, n_cell_in, coord, ref_ratios, is_per) {
grid.loop_idx(where_t::boundary, groupdata.indextype,
[&](const Loop::PointDesc &p) {
tags_array4(grid.cactus_offset.x + p.i,
grid.cactus_offset.y + p.j,
grid.cactus_offset.z + p.k) = TagBox::CLEAR;
});
grid.loop_idx(
where_t::boundary, groupdata.indextype,
[&](const Loop::PointDesc &p) {
tags_array4(grid.cactus_offset.x + p.i, grid.cactus_offset.y + p.j,
grid.cactus_offset.z + p.k) = amrex::TagBox::CLEAR;
});
leveldata.fab = make_unique<FabArrayBase>(ba, dm, 1, ghost_size);
assert(ba.ixType() ==
IndexType(IndexType::CELL, IndexType::CELL, IndexType::CELL));
leveldata.fab = make_unique<amrex::FabArrayBase>(ba, dm, 1, ghost_size);
assert(ba.ixType() == amrex::IndexType(amrex::IndexType::CELL,
amrex::IndexType::CELL,
amrex::IndexType::CELL));
const BoxArray &gba = convert(
ba,
IndexType(groupdata.indextype[0] ? IndexType::CELL : IndexType::NODE,
groupdata.indextype[1] ? IndexType::CELL : IndexType::NODE,
groupdata.indextype[2] ? IndexType::CELL : IndexType::NODE));
const amrex::BoxArray &gba = convert(
ba, amrex::IndexType(groupdata.indextype[0] ? amrex::IndexType::CELL
: amrex::IndexType::NODE,
groupdata.indextype[1] ? amrex::IndexType::CELL
: amrex::IndexType::NODE,
groupdata.indextype[2] ? amrex::IndexType::CELL
: amrex::IndexType::NODE));
void apply_physbcs(const Box &, const FArrayBox &, int, int, const Geometry &,
CCTK_REAL, const Vector<BCRec> &, int, int) { // do nothing
void apply_physbcs(const amrex::Box &, const amrex::FArrayBox &, int, int,
const amrex::Geometry &, CCTK_REAL,
const amrex::Vector<amrex::BCRec> &, int,
int) { // do nothing
bcs.at(vi) = BCRec(makebc(vi, 0, 0), makebc(vi, 1, 0), makebc(vi, 2, 0),
makebc(vi, 0, 1), makebc(vi, 1, 1), makebc(vi, 2, 1));
const auto apply_physbc{[](const Box &, const FArrayBox &, int, int,
const Geometry &, CCTK_REAL, const Vector<BCRec> &,
int, int) {}};
bcs.at(vi) =
amrex::BCRec(makebc(vi, 0, 0), makebc(vi, 1, 0), makebc(vi, 2, 0),
makebc(vi, 0, 1), makebc(vi, 1, 1), makebc(vi, 2, 1));
const auto apply_physbc{[](const amrex::Box &, const amrex::FArrayBox &, int,
int, const amrex::Geometry &, CCTK_REAL,
const amrex::Vector<amrex::BCRec> &, int, int) {}};
void CactusAmrCore::MakeNewLevelFromScratch(int level, Real time,
const BoxArray &ba,
const DistributionMapping &dm) {
void CactusAmrCore::MakeNewLevelFromScratch(
int level, amrex::Real time, const amrex::BoxArray &ba,
const amrex::DistributionMapping &dm) {
void CactusAmrCore::MakeNewLevelFromCoarse(const int level, const Real time,
const BoxArray &ba,
const DistributionMapping &dm) {
void CactusAmrCore::MakeNewLevelFromCoarse(
const int level, const amrex::Real time, const amrex::BoxArray &ba,
const amrex::DistributionMapping &dm) {
void CactusAmrCore::RemakeLevel(const int level, const Real time,
const BoxArray &ba,
const DistributionMapping &dm) {
void CactusAmrCore::RemakeLevel(const int level, const amrex::Real time,
const amrex::BoxArray &ba,
const amrex::DistributionMapping &dm) {
leveldata.fab = make_unique<FabArrayBase>(ba, dm, 1, ghost_size);
assert(ba.ixType() ==
IndexType(IndexType::CELL, IndexType::CELL, IndexType::CELL));
leveldata.fab = make_unique<amrex::FabArrayBase>(ba, dm, 1, ghost_size);
assert(ba.ixType() == amrex::IndexType(amrex::IndexType::CELL,
amrex::IndexType::CELL,
amrex::IndexType::CELL));
const BoxArray &gba = convert(
ba,
IndexType(groupdata.indextype[0] ? IndexType::CELL : IndexType::NODE,
groupdata.indextype[1] ? IndexType::CELL : IndexType::NODE,
groupdata.indextype[2] ? IndexType::CELL : IndexType::NODE));
const amrex::BoxArray &gba = convert(
ba, amrex::IndexType(groupdata.indextype[0] ? amrex::IndexType::CELL
: amrex::IndexType::NODE,
groupdata.indextype[1] ? amrex::IndexType::CELL
: amrex::IndexType::NODE,
groupdata.indextype[2] ? amrex::IndexType::CELL
: amrex::IndexType::NODE));
// CCTK_VINFO("BoxArray level %d:", level);
// cout << ghext->amrcore->boxArray(level) << "\n";
// CCTK_VINFO("amrex::Boxamrex::Array level %d:", level);
// cout << ghext->amrcore->boxamrex::Array(level) << "\n";
CactusAmrCore(const RealBox *rb, int max_level_in,
const Vector<int> &n_cell_in, int coord = -1,
Vector<IntVect> ref_ratios = Vector<IntVect>(),
CactusAmrCore(const amrex::RealBox *rb, int max_level_in,
const amrex::Vector<int> &n_cell_in, int coord = -1,
amrex::Vector<amrex::IntVect> ref_ratios =
amrex::Vector<amrex::IntVect>(),
CactusAmrCore(const RealBox &rb, int max_level_in,
const Vector<int> &n_cell_in, int coord,
Vector<IntVect> const &ref_ratios,
Array<int, AMREX_SPACEDIM> const &is_per);
CactusAmrCore(const AmrCore &rhs) = delete;
CactusAmrCore &operator=(const AmrCore &rhs) = delete;
CactusAmrCore(const amrex::RealBox &rb, int max_level_in,
const amrex::Vector<int> &n_cell_in, int coord,
amrex::Vector<amrex::IntVect> const &ref_ratios,
amrex::Array<int, AMREX_SPACEDIM> const &is_per);
CactusAmrCore(const amrex::AmrCore &rhs) = delete;
CactusAmrCore &operator=(const amrex::AmrCore &rhs) = delete;
virtual void MakeNewLevelFromScratch(int level, Real time, const BoxArray &ba,
const DistributionMapping &dm) override;
virtual void MakeNewLevelFromCoarse(int level, Real time, const BoxArray &ba,
const DistributionMapping &dm) override;
virtual void RemakeLevel(int level, Real time, const BoxArray &ba,
const DistributionMapping &dm) override;
virtual void
MakeNewLevelFromScratch(int level, amrex::Real time,
const amrex::BoxArray &ba,
const amrex::DistributionMapping &dm) override;
virtual void
MakeNewLevelFromCoarse(int level, amrex::Real time, const amrex::BoxArray &ba,
const amrex::DistributionMapping &dm) override;
virtual void RemakeLevel(int level, amrex::Real time,
const amrex::BoxArray &ba,
const amrex::DistributionMapping &dm) override;
// each MultiFab has numvars components
vector<unique_ptr<MultiFab> > mfab; // [time level]
// each amrex::MultiFab has numvars components
vector<unique_ptr<amrex::MultiFab> > mfab; // [time level]
typedef void apply_physbcs_t(const Box &, const FArrayBox &, int, int,
const Geometry &, CCTK_REAL, const Vector<BCRec> &,
int, int);
typedef PhysBCFunct<apply_physbcs_t *> CarpetXPhysBCFunct;
tuple<CarpetXPhysBCFunct, Vector<BCRec> >
typedef void apply_physbcs_t(const amrex::Box &, const amrex::FArrayBox &, int,
int, const amrex::Geometry &, CCTK_REAL,
const amrex::Vector<amrex::BCRec> &, int, int);
typedef amrex::PhysBCFunct<apply_physbcs_t *> CarpetXPhysBCFunct;
tuple<CarpetXPhysBCFunct, amrex::Vector<amrex::BCRec> >
const int nprocs = ParallelDescriptor::NProcs();
const MPI_Comm comm = ParallelDescriptor::Communicator();
const int nprocs = amrex::ParallelDescriptor::NProcs();
const MPI_Comm comm = amrex::ParallelDescriptor::Communicator();
Vector<const MultiFab *> mfabs(ghext->leveldata.size());
Vector<Geometry> geoms(ghext->leveldata.size());
Vector<int> iters(ghext->leveldata.size());
Vector<IntVect> reffacts(ghext->leveldata.size());
amrex::Vector<const amrex::MultiFab *> mfabs(ghext->leveldata.size());
amrex::Vector<amrex::Geometry> geoms(ghext->leveldata.size());
amrex::Vector<int> iters(ghext->leveldata.size());
amrex::Vector<amrex::IntVect> reffacts(ghext->leveldata.size());
MultiFab &mfab = *groupdata.mfab[tl];
const IndexType &indextype = mfab.ixType();
const IntVect &ngrow = mfab.nGrowVect();
const DistributionMapping &dm = mfab.DistributionMap();
amrex::MultiFab &mfab = *groupdata.mfab[tl];
const amrex::IndexType &indextype = mfab.ixType();
const amrex::IntVect &ngrow = mfab.nGrowVect();
const amrex::DistributionMapping &dm = mfab.DistributionMap();
const MultiFab &mfab = *groupdata.mfab[tl];
const IndexType &indextype = mfab.ixType();
const IntVect &ngrow = mfab.nGrowVect();
const DistributionMapping &dm = mfab.DistributionMap();
const amrex::MultiFab &mfab = *groupdata.mfab[tl];
const amrex::IndexType &indextype = mfab.ixType();
const amrex::IntVect &ngrow = mfab.nGrowVect();
const amrex::DistributionMapping &dm = mfab.DistributionMap();
const MultiFab &mfab0 = *groupdata0.mfab[tl];
const IndexType &indextype = mfab0.ixType();
const IntVect &ngrow = mfab0.nGrowVect();
const amrex::MultiFab &mfab0 = *groupdata0.mfab[tl];
const amrex::IndexType &indextype = mfab0.ixType();
const amrex::IntVect &ngrow = mfab0.nGrowVect();
// const MultiFab &mfab = *groupdata.mfab[tl];
// const Geometry &geom = ghext->amrcore->Geom(leveldata.level);
// const double *const x0 = geom.ProbLo();
// const double *const dx = geom.CellSize();
// const int nfabs = mfab.size();
// for (int c = 0; c < nfabs; ++c) {
// const Box &fabbox = mfab.fabbox(c); // exterior
// const amrex::MultiFab &mfab = *groupdata.mfab[tl];
// const amrex::Geometry &geom =
// ghext->amrcore->Geom(leveldata.level); const double *const x0 =
// geom.ProbLo(); const double *const dx = geom.CellSize(); const int
// nfabs = mfab.size(); for (int c = 0; c < nfabs; ++c) {
// const amrex::Box &fabbox = mfab.fabbox(c); // exterior
Vector<Geometry> geoms(ghext->leveldata.size());
Vector<BoxArray> grids(ghext->leveldata.size());
Vector<DistributionMapping> dmaps(ghext->leveldata.size());
amrex::Vector<amrex::Geometry> geoms(ghext->leveldata.size());
amrex::Vector<amrex::BoxArray> grids(ghext->leveldata.size());
amrex::Vector<amrex::DistributionMapping> dmaps(ghext->leveldata.size());
{LinOpBCType::Periodic, LinOpBCType::Periodic, LinOpBCType::Periodic},
{LinOpBCType::Periodic, LinOpBCType::Periodic, LinOpBCType::Periodic});
{amrex::LinOpBCType::Periodic, amrex::LinOpBCType::Periodic,
amrex::LinOpBCType::Periodic},
{amrex::LinOpBCType::Periodic, amrex::LinOpBCType::Periodic,
amrex::LinOpBCType::Periodic});
Vector<MultiFab *> ress(ghext->leveldata.size());
Vector<MultiFab *> sols(ghext->leveldata.size());
Vector<const MultiFab *> rhss(ghext->leveldata.size());
amrex::Vector<amrex::MultiFab *> ress(ghext->leveldata.size());
amrex::Vector<amrex::MultiFab *> sols(ghext->leveldata.size());
amrex::Vector<const amrex::MultiFab *> rhss(ghext->leveldata.size());
void interp3d(const T *restrict const crseptr, const Box &restrict crsebox,
T *restrict const fineptr, const Box &restrict finebox,
const Box &restrict targetbox) {
void interp3d(const T *restrict const crseptr,
const amrex::Box &restrict crsebox, T *restrict const fineptr,
const amrex::Box &restrict finebox,
const amrex::Box &restrict targetbox) {
const IntVect fineind(targetbox.loVect());
IntVect crseind = fineind;
crseind.getVect()[D] = coarsen(fineind.getVect()[D], 2) - required_ghosts;
const amrex::IntVect fineind(targetbox.loVect());
amrex::IntVect crseind = fineind;
crseind.getVect()[D] =
amrex::coarsen(fineind.getVect()[D], 2) - required_ghosts;
const IntVect fineind(targetbox.hiVect());
IntVect crseind = fineind;
crseind.getVect()[D] = coarsen(fineind.getVect()[D], 2) + required_ghosts;
const amrex::IntVect fineind(targetbox.hiVect());
amrex::IntVect crseind = fineind;
crseind.getVect()[D] =
amrex::coarsen(fineind.getVect()[D], 2) + required_ghosts;
assert(finebox.index(IntVect(1, 0, 0)) - fined0 == finedi);
const ptrdiff_t finedj = finebox.index(IntVect(0, 1, 0)) - fined0;
const ptrdiff_t finedk = finebox.index(IntVect(0, 0, 1)) - fined0;
assert(finebox.index(amrex::IntVect(1, 0, 0)) - fined0 == finedi);
const ptrdiff_t finedj = finebox.index(amrex::IntVect(0, 1, 0)) - fined0;
const ptrdiff_t finedk = finebox.index(amrex::IntVect(0, 0, 1)) - fined0;
assert(crsebox.index(IntVect(1, 0, 0)) - crsed0 == crsedi);
const ptrdiff_t crsedj = crsebox.index(IntVect(0, 1, 0)) - crsed0;
const ptrdiff_t crsedk = crsebox.index(IntVect(0, 0, 1)) - crsed0;
assert(crsebox.index(amrex::IntVect(1, 0, 0)) - crsed0 == crsedi);
const ptrdiff_t crsedj = crsebox.index(amrex::IntVect(0, 1, 0)) - crsed0;
const ptrdiff_t crsedk = crsebox.index(amrex::IntVect(0, 0, 1)) - crsed0;
Box prolongate_3d_rf2<CENTI, CENTJ, CENTK, CONSI, CONSJ, CONSK, ORDERI, ORDERJ,
ORDERK>::CoarseBox(const Box &fine, int ratio) {
return CoarseBox(fine, IntVect(ratio));
amrex::Box prolongate_3d_rf2<CENTI, CENTJ, CENTK, CONSI, CONSJ, CONSK, ORDERI,
ORDERJ, ORDERK>::CoarseBox(const amrex::Box &fine,
int ratio) {
return CoarseBox(fine, amrex::IntVect(ratio));
Box prolongate_3d_rf2<CENTI, CENTJ, CENTK, CONSI, CONSJ, CONSK, ORDERI, ORDERJ,
ORDERK>::CoarseBox(const Box &fine,
const IntVect &ratio) {
amrex::Box
prolongate_3d_rf2<CENTI, CENTJ, CENTK, CONSI, CONSJ, CONSK, ORDERI, ORDERJ,
ORDERK>::CoarseBox(const amrex::Box &fine,
const amrex::IntVect &ratio) {
ORDERK>::interp(const FArrayBox &crse, int crse_comp,
FArrayBox &fine, int fine_comp,
int ncomp, const Box &fine_region,
const IntVect &ratio,
const Geometry &crse_geom,
const Geometry &fine_geom,
Vector<BCRec> const &bcr,
ORDERK>::interp(const amrex::FArrayBox &crse,
int crse_comp, amrex::FArrayBox &fine,
int fine_comp, int ncomp,
const amrex::Box &fine_region,
const amrex::IntVect &ratio,
const amrex::Geometry &crse_geom,
const amrex::Geometry &fine_geom,
amrex::Vector<amrex::BCRec> const &bcr,
const BCRec bcrec(BCType::int_dir, BCType::int_dir, BCType::int_dir,
BCType::int_dir, BCType::int_dir, BCType::int_dir);
const amrex::BCRec bcrec(amrex::BCType::int_dir, amrex::BCType::int_dir,
amrex::BCType::int_dir, amrex::BCType::int_dir,
amrex::BCType::int_dir, amrex::BCType::int_dir);
virtual Box CoarseBox(const Box &fine, int ratio) override;
virtual Box CoarseBox(const Box &fine, const IntVect &ratio) override;
virtual amrex::Box CoarseBox(const amrex::Box &fine, int ratio) override;
virtual amrex::Box CoarseBox(const amrex::Box &fine,
const amrex::IntVect &ratio) override;
virtual void interp(const FArrayBox &crse, int crse_comp, FArrayBox &fine,
int fine_comp, int ncomp, const Box &fine_region,
const IntVect &ratio, const Geometry &crse_geom,
const Geometry &fine_geom, Vector<BCRec> const &bcr,
int actual_comp, int actual_state,
RunOn gpu_or_cpu) override;
virtual void interp(const amrex::FArrayBox &crse, int crse_comp,
amrex::FArrayBox &fine, int fine_comp, int ncomp,
const amrex::Box &fine_region,
const amrex::IntVect &ratio,
const amrex::Geometry &crse_geom,
const amrex::Geometry &fine_geom,
amrex::Vector<amrex::BCRec> const &bcr, int actual_comp,
int actual_state, amrex::RunOn gpu_or_cpu) override;
reduction<T, dim> reduce_array(const Array4<const T> &restrict vars,
const int n, const array<int, dim> &imin,
const array<int, dim> &imax,
const Array4<const int> *restrict const finemask,
const vect<T, dim> &x0, const vect<T, dim> &dx) {
reduction<T, dim>
reduce_array(const amrex::Array4<const T> &restrict vars, const int n,
const array<int, dim> &imin, const array<int, dim> &imax,
const amrex::Array4<const int> *restrict const finemask,
const vect<T, dim> &x0, const vect<T, dim> &dx) {
for (MFIter mfi(mfab, mfitinfo); mfi.isValid(); ++mfi) {
const Box &bx = mfi.tilebox(); // current region (without ghosts)
for (amrex::MFIter mfi(mfab, mfitinfo); mfi.isValid(); ++mfi) {
const amrex::Box &bx = mfi.tilebox(); // current region (without ghosts)
const Box &fbx = mfp.fabbox(); // allocated array
const Box &vbx = mfp.validbox(); // interior region (without ghosts)
const Box &gbx = mfp.growntilebox(); // current region (with ghosts)
const Box &domain = ghext->amrcore->Geom(leveldata.level).Domain();
const amrex::Box &fbx = mfp.fabbox(); // allocated array
const amrex::Box &vbx = mfp.validbox(); // interior region (without ghosts)
const amrex::Box &gbx = mfp.growntilebox(); // current region (with ghosts)
const amrex::Box &domain = ghext->amrcore->Geom(leveldata.level).Domain();
// Note: The MFIter uses global variables and OpenMP barriers
for (MFIter mfi(*leveldata.fab, mfitinfo); mfi.isValid(); ++mfi) {
// Note: The amrex::MFIter uses global variables and OpenMP barriers
for (amrex::MFIter mfi(*leveldata.fab, mfitinfo); mfi.isValid(); ++mfi) {
constexpr Box fabbox() const noexcept { return m_fabbox; }
constexpr Box growntilebox() const noexcept { return m_growntilebox; }
constexpr Box validbox() const noexcept { return m_validbox; }
constexpr IntVect nGrowVect() const noexcept { return m_nGrowVect; }
constexpr amrex::Box fabbox() const noexcept { return m_fabbox; }
constexpr amrex::Box growntilebox() const noexcept { return m_growntilebox; }
constexpr amrex::Box validbox() const noexcept { return m_validbox; }
constexpr amrex::IntVect nGrowVect() const noexcept { return m_nGrowVect; }