9 #include <AMReX_MultiFabUtil.H>
11 #include <AMReX_ParmParse.H>
12 #include <AMReX_BCUtil.H>
24 , amrex::AmrMesh(&domain, maxLevel, nGridPts, 0 )
26 , layout_mp(static_cast<
AmrLayout_t*>(&bunch_p->getLayout()))
29 , efield_m(maxLevel + 1)
30 , meshScaling_m(
Vector_t(1.0, 1.0, 1.0))
31 , isFirstTagging_m(maxLevel + 1, true)
32 , isPoissonSolved_m(false)
55 AmrDomain_t domain = layout_p->Geom(0).ProbDomain();
70 return std::unique_ptr<AmrBoxLib>(
new AmrBoxLib(domain,
82 *gmsg <<
"* Start regriding:" <<
endl
83 <<
"* Old finest level: "
84 << finest_level <<
endl;
90 int old_finest = finest_level;
92 int lev_top =
std::min(finest_level, max_level - 1);
93 for (
int i = 0; i <= lev_top; ++i) {
95 lev_top =
std::min(finest_level, max_level - 1);
100 *gmsg <<
"* New finest level: "
101 << finest_level << endl
102 <<
"* Finished regriding" <<
endl;
109 std::vector<int>& gridsPerLevel)
const
111 typedef std::vector<int> container_t;
113 gridPtsPerCore.clear();
114 gridsPerLevel.clear();
116 gridsPerLevel.resize(max_level + 1);
118 for (
int lev = 0; lev <= finest_level; ++lev) {
122 const container_t& pmap = this->dmap[lev].ProcessorMap();
125 gridsPerLevel[lev] = pmap.size();
128 for (
unsigned int i = 0; i < ba.size(); ++i) {
129 gridPtsPerCore[pmap[i]] += ba[i].numPts();
137 *gmsg <<
"* Initialization of all levels" <<
endl;
147 if ( !isForbidTransform ) {
152 if ( max_level > 0 ) {
156 if ( !isForbidTransform ) {
162 *gmsg <<
"* Initialization done." <<
endl;
174 for (
unsigned int lev = 0; lev <
efield_m.size(); ++lev) {
181 maxE[i] = (maxE[i] <
max) ? max : maxE[i];
184 minE[i] = (minE[i] >
min) ? min : minE[i];
194 throw OpalException(
"AmrBoxLib::getRho(x, y, z)",
"Not yet Implemented.");
201 throw OpalException(
"AmrBoxLib::computeSelfFields",
"Not yet Implemented.");
207 throw OpalException(
"AmrBoxLib::computeSelfFields(int bin)",
"Not yet Implemented.");
239 int nLevel = finest_level + 1;
240 double invGamma = 1.0 / gamma;
248 for (
int i = 0; i <= finest_level; ++i) {
249 if ( this->
rho_m[i]->contains_nan(
false) )
250 throw OpalException(
"AmrBoxLib::computeSelfFields_cycl(double gamma) ",
251 "NANs at level " + std::to_string(i) +
".");
257 for (
int i = 0; i <= finest_level; ++i)
260 for (
int i = 0; i <= finest_level; ++i) {
261 this->
rho_m[i]->mult(1.0 / l0norm, 0, 1);
271 for (
int i = 0; i <= finest_level; ++i) {
272 phi_m[i]->FillBoundary(geom[i].periodicity());
273 for (
int j = 0; j < AMREX_SPACEDIM; ++j) {
274 efield_m[i][j]->FillBoundary(geom[i].periodicity());
284 this->
phi_m[i]->mult(scalefactor * l0norm, 0, 1);
285 for (
int j = 0; j < AMREX_SPACEDIM; ++j) {
286 this->
efield_m[i][j]->mult(scalefactor * scalefactor * l0norm, 0, 1);
290 for (
int i = 0; i <= finest_level; ++i) {
291 for (
int j = 0; j < AMREX_SPACEDIM; ++j) {
292 if ( this->
efield_m[i][j]->contains_nan(
false) )
293 throw OpalException(
"AmrBoxLib::computeSelfFields_cycl(double gamma) ",
294 "Ef: NANs at level " + std::to_string(i) +
".");
327 for (
int i = 0; i < finest_level; ++i)
328 rr[i] = this->MaxRefRatio(i);
333 for (
int i = 0; i <= finest_level; ++i)
338 nLevel, time, scalefactor);
340 ytWriter.writeBunch(
bunch_mp, time, gamma);
387 for (
int i = 0; i <= finest_level; ++i) {
390 if ( this->
rho_m[i]->contains_nan(
false) )
391 throw OpalException(
"AmrBoxLib::computeSelfFields_cycl(int bin) ",
392 "NANs at level " + std::to_string(i) +
".");
397 for (
int i = 0; i <= finest_level; ++i)
400 for (
int i = 0; i <= finest_level; ++i) {
401 this->
rho_m[i]->mult(1.0 / l0norm, 0, 1);
411 for (
int i = 0; i <= finest_level; ++i) {
413 for (
int j = 0; j < AMREX_SPACEDIM; ++j) {
424 for (
int i = 0; i <= finest_level; ++i) {
425 phi_m[i]->FillBoundary(geom[i].periodicity());
426 for (
int j = 0; j < AMREX_SPACEDIM; ++j) {
427 efield_m[i][j]->FillBoundary(geom[i].periodicity());
438 this->
phi_m[i]->mult(scalefactor * l0norm, 0, 1);
439 for (
int j = 0; j < AMREX_SPACEDIM; ++j) {
440 this->
efield_m[i][j]->mult(scalefactor * scalefactor * l0norm, 0, 1);
444 for (
int i = 0; i <= finest_level; ++i) {
445 for (
int j = 0; j < AMREX_SPACEDIM; ++j) {
446 if ( this->
efield_m[i][j]->contains_nan(
false) )
447 throw OpalException(
"AmrBoxLib::computeSelfFields_cycl(double gamma) ",
448 "Ef: NANs at level " + std::to_string(i) +
".");
475 int nLevel = finest_level + 1;
478 for (
int i = 0; i < finest_level; ++i)
479 rr[i] = this->MaxRefRatio(i);
484 for (
int i = 0; i <= finest_level; ++i)
489 nLevel, time, scalefactor);
491 ytWriter.writeBunch(
bunch_mp, time, gamma);
500 const AmrReal_t* tmp = this->geom[0].CellSize();
503 for (
int i = 0; i < 3; ++i)
516 const Box_t& bx = this->geom[0].Domain();
522 high[1] - low[1] + 1,
523 high[2] - low[2] + 1);
528 return this->max_level;
533 return this->finest_level;
607 SetBoxArray(lev, new_grids);
608 SetDistributionMap(lev, new_dmap);
613 for (
int j = 0; j < AMREX_SPACEDIM; ++j) {
618 rho_m[lev]->setVal(0.0, 0);
619 phi_m[lev]->setVal(0.0, 1);
621 for (
int j = 0; j < AMREX_SPACEDIM; ++j) {
629 layout_mp->SetParticleBoxArray(lev, new_grids);
630 layout_mp->SetParticleDistributionMap(lev, new_dmap);
640 SetBoxArray(lev, new_grids);
641 SetDistributionMap(lev, new_dmap);
647 for (
int j = 0; j < AMREX_SPACEDIM; ++j) {
652 rho_m[lev]->setVal(0.0, 0);
653 phi_m[lev]->setVal(0.0, 1);
654 for (
int j = 0; j < AMREX_SPACEDIM; ++j) {
664 layout_mp->SetParticleBoxArray(lev, new_grids);
665 layout_mp->SetParticleDistributionMap(lev, new_dmap);
672 rho_m[lev].reset(
nullptr);
673 phi_m[lev].reset(
nullptr);
674 for (
int j = 0; j < AMREX_SPACEDIM; ++j) {
678 ClearDistributionMap(lev);
687 *gmsg <<
level2 <<
"* Start tagging of level " << lev <<
endl;
713 *gmsg <<
level2 <<
"* Finished tagging of level " << lev <<
endl;
721 throw OpalException(
"AmrBoxLib::MakeNewLevelFromScratch()",
"Shouldn't be called.");
729 throw OpalException(
"AmrBoxLib::MakeNewLevelFromCoarse()",
"Shouldn't be called.");
737 MakeNewGrids(lbase, time, new_finest, new_grids);
739 BL_ASSERT(new_finest <= finest_level+1);
741 for (
int lev = lbase+1; lev <= new_finest; ++lev)
743 if (lev <= finest_level)
745 if (new_grids[lev] != grids[lev])
761 for (
int lev = new_finest+1; lev <= finest_level; ++lev) {
765 finest_level = new_finest;
781 amrpbase_p->
update(0, finest_level,
true);
786 for (
int lev = finest_level+1; lev <= old_finest; ++lev) {
787 if ( LocalNumPerLevel.getLocalNumAtLevel(lev) != 0 ) {
789 "Still particles on level " + std::to_string(lev) +
"!");
792 layout_mp->ClearParticleDistributionMap(lev);
798 std::string levelnum = std::to_string(LocalNumPerLevel.getLocalNumUpToLevel(finest_level));
800 "Number of particles do not agree: " + localnum +
" != " + levelnum);
813 amrpbase_p->
update(0, lev,
true);
815 for (
int i = lev; i <= finest_level; ++i)
824 for (
int i = lev; i <= finest_level; ++i)
825 rho_m[i]->mult(scalefactor, 0, 1);
827 const int clearval = TagBox_t::CLEAR;
828 const int tagval = TagBox_t::SET;
834 for (
MFIter_t mfi(*
rho_m[lev],
true); mfi.isValid(); ++mfi) {
835 const Box_t& tilebx = mfi.tilebox();
840 const int* tlo = tilebx.loVect();
841 const int* thi = tilebx.hiVect();
843 for (
int i = tlo[0]; i <= thi[0]; ++i) {
844 for (
int j = tlo[1]; j <= thi[1]; ++j) {
845 for (
int k = tlo[2]; k <= thi[2]; ++k) {
847 amrex::IntVect iv(D_DECL(i,j,k));
852 tagfab(iv) = clearval;
869 *gmsg <<
level2 <<
"* Level " << lev <<
": We need to perform "
870 <<
"charge tagging if a new level is created." <<
endl;
877 const int clearval = TagBox_t::CLEAR;
878 const int tagval = TagBox_t::SET;
888 for (
MFIter_t mfi(*
phi_m[lev],
true); mfi.isValid(); ++mfi) {
890 const Box_t& tilebx = mfi.tilebox();
894 const int* tlo = tilebx.loVect();
895 const int* thi = tilebx.hiVect();
897 for (
int i = tlo[0]; i <= thi[0]; ++i) {
898 for (
int j = tlo[1]; j <= thi[1]; ++j) {
899 for (
int k = tlo[2]; k <= thi[2]; ++k) {
901 amrex::IntVect iv(D_DECL(i,j,k));
903 if (
std::abs( fab(iv) ) >= threshold )
906 tagfab(iv) = clearval;
923 *gmsg <<
level2 <<
"* Level " << lev <<
": We need to perform "
924 <<
"charge tagging if a new level is created." <<
endl;
931 const int clearval = TagBox_t::CLEAR;
932 const int tagval = TagBox_t::SET;
935 amrex::Vector<AmrReal_t> threshold(AMREX_SPACEDIM);
937 for (
int i = 0; i < 3; ++i) {
938 threshold[i] =
efield_m[lev][i]->norm0(0,
949 for (
MFIter_t mfi(this->grids[lev], this->dmap[lev],
true); mfi.isValid(); ++mfi) {
951 const Box_t& tilebx = mfi.tilebox();
957 const int* tlo = tilebx.loVect();
958 const int* thi = tilebx.hiVect();
960 for (
int i = tlo[0]; i <= thi[0]; ++i) {
961 for (
int j = tlo[1]; j <= thi[1]; ++j) {
962 for (
int k = tlo[2]; k <= thi[2]; ++k) {
964 if (
std::abs(xfab(iv)) >= threshold[0])
966 else if (
std::abs(yfab(iv)) >= threshold[1])
968 else if (
std::abs(zfab(iv)) >= threshold[2])
971 tagfab(iv) = clearval;
985 amrpbase_p->
update(0, lev,
true);
988 size_t lBegin = LocalNumPerLevel.
begin(lev);
989 size_t lEnd = LocalNumPerLevel.end(lev);
992 for (
size_t i = lBegin; i < lEnd; ++i) {
994 pmax = (
dot(tmp, tmp) >
dot(pmax, pmax) ) ? tmp : pmax;
999 std::map<AmrIntVect_t, bool> cells;
1000 for (
size_t i = lBegin; i < lEnd; ++i) {
1007 const int clearval = TagBox_t::CLEAR;
1008 const int tagval = TagBox_t::SET;
1012 #pragma omp parallel
1015 for (
MFIter_t mfi(*
rho_m[lev],
true); mfi.isValid(); ++mfi) {
1017 const Box_t& tilebx = mfi.tilebox();
1020 const int* tlo = tilebx.loVect();
1021 const int* thi = tilebx.hiVect();
1023 for (
int i = tlo[0]; i <= thi[0]; ++i) {
1024 for (
int j = tlo[1]; j <= thi[1]; ++j) {
1025 for (
int k = tlo[2]; k <= thi[2]; ++k) {
1027 if ( cells.find(iv) != cells.end() )
1028 tagfab(iv) = tagval;
1030 tagfab(iv) = clearval;
1044 amrpbase_p->
update(0, lev,
true);
1047 size_t lBegin = LocalNumPerLevel.
begin(lev);
1048 size_t lEnd = LocalNumPerLevel.end(lev);
1051 std::map<AmrIntVect_t, size_t> cells;
1052 for (
size_t i = lBegin; i < lEnd; ++i) {
1057 const int clearval = TagBox_t::CLEAR;
1058 const int tagval = TagBox_t::SET;
1062 #pragma omp parallel
1065 for (
MFIter_t mfi(*
rho_m[lev],
true); mfi.isValid(); ++mfi) {
1067 const Box_t& tilebx = mfi.tilebox();
1070 const int* tlo = tilebx.loVect();
1071 const int* thi = tilebx.hiVect();
1073 for (
int i = tlo[0]; i <= thi[0]; ++i) {
1074 for (
int j = tlo[1]; j <= thi[1]; ++j) {
1075 for (
int k = tlo[2]; k <= thi[2]; ++k) {
1077 if ( cells.find(iv) != cells.end() && cells[iv] <=
maxNumPart_m )
1078 tagfab(iv) = tagval;
1080 tagfab(iv) = clearval;
1094 amrpbase_p->
update(0, lev,
true);
1097 size_t lBegin = LocalNumPerLevel.
begin(lev);
1098 size_t lEnd = LocalNumPerLevel.end(lev);
1101 std::map<AmrIntVect_t, size_t> cells;
1102 for (
size_t i = lBegin; i < lEnd; ++i) {
1107 const int clearval = TagBox_t::CLEAR;
1108 const int tagval = TagBox_t::SET;
1112 #pragma omp parallel
1115 for (
MFIter_t mfi(*
rho_m[lev],
true); mfi.isValid(); ++mfi) {
1117 const Box_t& tilebx = mfi.tilebox();
1120 const int* tlo = tilebx.loVect();
1121 const int* thi = tilebx.hiVect();
1123 for (
int i = tlo[0]; i <= thi[0]; ++i) {
1124 for (
int j = tlo[1]; j <= thi[1]; ++j) {
1125 for (
int k = tlo[2]; k <= thi[2]; ++k) {
1127 if ( cells.find(iv) != cells.end() &&
1130 tagfab(iv) = tagval;
1132 tagfab(iv) = clearval;
1150 const Box_t bx(low, high);
1152 ba.maxSize( this->maxGridSize(0) );
1155 ba = this->MakeBaseGrids();
1158 dmap.define(ba, amrex::ParallelDescriptor::NProcs());
1172 amrex::ParmParse pAmr(
"amr");
1173 pAmr.add(
"max_grid_size_x", info.
maxgrid[0]);
1174 pAmr.add(
"max_grid_size_y", info.
maxgrid[1]);
1175 pAmr.add(
"max_grid_size_z", info.
maxgrid[2]);
1177 pAmr.add(
"blocking_factor_x", info.
bf[0]);
1178 pAmr.add(
"blocking_factor_y", info.
bf[1]);
1179 pAmr.add(
"blocking_factor_z", info.
bf[2]);
1181 const int nratios_vect = info.
maxlevel * AMREX_SPACEDIM;
1185 for (
int i = 0; i < info.
maxlevel; ++i) {
1186 refratio[i * AMREX_SPACEDIM] = info.
refratio[0];
1187 refratio[i * AMREX_SPACEDIM + 1] = info.
refratio[1];
1188 refratio[i * AMREX_SPACEDIM + 2] = info.
refratio[2];
1191 pAmr.addarr(
"ref_ratio_vect", refratio);
1193 amrex::ParmParse pGeom(
"geometry");
1195 layout_p->Geom(0).isPeriodic(0),
1196 layout_p->Geom(0).isPeriodic(1),
1197 layout_p->Geom(0).isPeriodic(2)
1199 pGeom.addarr(
"is_periodic", isPeriodic);
1411 pAmr.add(
"n_proper", 1);
1414 pAmr.add(
"grid_eff", 0.95);
1421 pAmr.addarr(
"n_error_buf", error_buf);
1424 pAmr.add(
"refine_grid_layout",
true);
1436 amrex::ParmParse pDmap(
"DistributionMapping");
1442 pDmap.add(
"efficiency", 0.9);
1445 pDmap.add(
"sfc_threshold", 0);
1455 pDmap.add(
"node_size", 0);
1464 pDmap.add(
"strategy",
"SFC");
1479 if (AmrGeometry_t::isAllPeriodic())
1482 amrex::Vector<amrex::BCRec> bc(mf.nComp());
1483 for (
int n = 0;
n < mf.nComp(); ++
n)
1485 for (
int idim = 0; idim < AMREX_SPACEDIM; ++idim)
1487 if (AmrGeometry_t::isPeriodic(idim))
1489 bc[
n].setLo(idim, amrex::BCType::int_dir);
1490 bc[
n].setHi(idim, amrex::BCType::int_dir);
1494 bc[
n].setLo(idim, amrex::BCType::foextrap);
1495 bc[
n].setHi(idim, amrex::BCType::foextrap);
1500 amrex::FillDomainBoundary(mf, this->geom[lev], bc);
void RemakeLevel(int lev, AmrReal_t time, const AmrGrid_t &new_grids, const AmrProcMap_t &new_dmap)
amr::AmrIntVect_t AmrIntVect_t
ParticleAttrib< Vector_t > P
void resize(int maxLevel)
void tagForChargeDensity_m(int lev, TagBoxArray_t &tags, AmrReal_t time, int ngrow)
PETE_TUTree< FnAbs, typename T::PETE_Expr_t > abs(const PETE_Expr< T > &l)
static std::unique_ptr< AmrBoxLib > create(const AmrInfo &info, AmrPartBunch *bunch_p)
ParticleAttrib< Vector_t > Ef
ParticleAttrib< Vector_t > Eftmp
std::vector< bool > isFirstTagging_m
const double & getScalingFactor() const
long long getLocalTrackStep() const
size_t minNumPart_m
Tagging value for MIN_NUM_PARTICLES.
AmrScalarFieldContainer_t phi_m
scalar potential on the grid for all levels
T::PETE_Expr_t::PETE_Return_t max(const PETE_Expr< T > &expr, NDIndex< D > &loc)
amr::AmrIntArray_t AmrIntArray_t
The base class for all OPAL exceptions.
ParticleAttrib< double > Q
void doRegrid_m(int lbase, double time)
TaggingCriteria tagging_m
Tagging strategy.
Vektor< int, 3 > getBaseLevelGridPoints() const
void tagForMomenta_m(int lev, TagBoxArray_t &tags, AmrReal_t time, int ngrow)
void tagForMinNumParticles_m(int lev, TagBoxArray_t &tags, AmrReal_t time, int ngrow)
const ParticleLevelCounter_t & getLocalNumPerLevel() const
void MakeNewLevel(int lev, AmrReal_t time, const AmrGrid_t &new_grids, const AmrProcMap_t &new_dmap)
size_t maxNumPart_m
Tagging value for MAX_NUM_PARTICLES.
bool isForbidTransform() const
PoissonSolver * getFieldSolver()
virtual void solve(AmrScalarFieldContainer_t &rho, AmrScalarFieldContainer_t &phi, AmrVectorFieldContainer_t &efield, unsigned short baseLevel, unsigned short finestLevel, bool prevAsGuess=true)
int refratio[3]
Mesh refinement ratio in x-, y- and z-direction.
double dot(const Vector3D &lhs, const Vector3D &rhs)
Vector dot product.
void tagForEfield_m(int lev, TagBoxArray_t &tags, AmrReal_t time, int ngrow)
pbase_t * getAmrParticleBase()
Inform & level2(Inform &inf)
void getGridStatistics(std::map< int, long > &gridPtsPerCore, std::vector< int > &gridsPerLevel) const
int grid[3]
Number of grid points in x-, y- and z-direction.
amr::AmrProcMap_t AmrProcMap_t
ParticleLayout< T, Dim > & getLayout()
AmrBoxLib(const AmrDomain_t &domain, const AmrIntArray_t &nGridPts, int maxLevel, AmrPartBunch *bunch_p)
const int & finestLevel() const
amrex::FArrayBox FArrayBox_t
AmrScalarFieldContainer_t rho_m
charge density on the grid for all levels
amr::AmrField_t AmrField_t
amr::AmrGridContainer_t AmrGridContainer_t
constexpr double c
The velocity of light in m/s.
void MakeNewLevelFromCoarse(int lev, AmrReal_t time, const AmrGrid_t &ba, const AmrProcMap_t &dm)
void updateLorentzFactor(int bin=0)
double scaling_m
Scaling factor for tagging [0, 1].
static void startTimer(TimerRef t)
void scatter(ParticleAttrib< FT > &attrib, AmrScalarFieldContainer_t &f, ParticleAttrib< Vektor< PT, Dim > > &pp, int lbase, int lfine, const ParticleAttrib< int > &pbin, int bin=-1)
const int & maxLevel() const
double getRho(int x, int y, int z)
static void initParmParse_m(const AmrInfo &info, AmrLayout_t *layout_p)
void setForbidTransform(bool forbidTransform)
virtual void ErrorEst(int lev, TagBoxArray_t &tags, AmrReal_t time, int ngrow) override
void clearLevelMask(int lev)
AmrIntVect_t Index(AmrParticleBase< BoxLibLayout< T, Dim > > &p, const unsigned int ip, int level) const
Vektor< double, 3 > Vector_t
VectorPair_t getEExtrema()
size_t getLocalNum() const
void setFinestLevel(int finestLevel)
void buildLevelMask(int lev, const int ncells=1)
amr::AmrDomain_t AmrDomain_t
Tps< T > sqrt(const Tps< T > &x)
Square root.
Vector_t meshScaling_m
in particle rest frame, the longitudinal length enlarged
short getNumBunch() const
void setBaseLevelMeshSpacing(const Vector_t &hr)
void MakeNewLevelFromScratch(int lev, AmrReal_t time, const AmrGrid_t &ba, const AmrProcMap_t &dm)
void tagForMaxNumParticles_m(int lev, TagBoxArray_t &tags, AmrReal_t time, int ngrow)
AmrVectorFieldContainer_t efield_m
vector field on the grid for all levels
const double & domainMapping(bool inverse=false)
IpplTimings::TimerRef amrRegridTimer_m
void define(const AmrGeomContainer_t &geom)
void postRegrid_m(int old_finest)
void fillPhysbc_m(AmrField_t &mf, int lev=0)
static const unsigned Dimension
double getBinGamma(int bin)
Get gamma of one bin.
void computeSelfFields_cycl(double gamma)
ParticleAttrib< int > Bin
amrex::TagBoxArray TagBoxArray_t
int amrYtDumpFreq
The frequency to dump AMR grid data and particles into file.
constexpr double epsilon_0
The permittivity of vacuum in As/Vm.
ParticleAttrib< Vector_t > Bf
std::pair< Vector_t, Vector_t > VectorPair_t
AmrPartBunch * bunch_mp
bunch used for tagging strategies
const Vector_t & getMeshScaling() const
virtual void hasToRegrid()
static void stopTimer(TimerRef t)
int maxlevel
Maximum level for AMR (0: single-level)
double chargedensity_m
Tagging value for CHARGE_DENSITY.
void gather(ParticleAttrib< FT > &attrib, AmrVectorFieldContainer_t &f, ParticleAttrib< Vektor< PT, Dim > > &pp, int lbase, int lfine)
T::PETE_Expr_t::PETE_Return_t min(const PETE_Expr< T > &expr, NDIndex< D > &loc)
void redistributeGrids(int how)
IpplTimings::TimerRef amrSolveTimer_m
timer for selfField calculation (used in concrete AmrObject classes)
void tagForPotentialStrength_m(int lev, TagBoxArray_t &tags, AmrReal_t time, int ngrow)
bool refined_m
Only set to true in AmrObject::initFineLevels()
int bf[3]
Grid blocking factor in x-, y- and z-direction.
Inform & endl(Inform &inf)
void initBaseLevel_m(const AmrIntArray_t &nGridPts)
int maxgrid[3]
Maximum grid size in x-, y- and z-direction.