3#include <AMReX_Config.H>
53 "Have you forgot to call EB2::build? It's required even if the geometry is all regular.");
88 int required_coarsening_level,
int max_coarsening_level,
89 int ngrow,
bool build_coarse_level_by_coarsening,
90 bool extend_domain_face,
int num_coarsen_opt);
94 bool extend_domain_face,
int num_coarsen_opt);
106 return m_geom.back().Domain();
111 void setShift (
int direction,
int ncells)
override;
115 using F =
typename G::FunctionType;
120 bool m_build_coarse_level_by_coarsening;
121 bool m_extend_domain_face;
122 int m_num_coarsen_opt;
168 int required_coarsening_level,
int max_coarsening_level,
169 int ngrow = 4,
bool build_coarse_level_by_coarsening =
true,
175 (gshop, geom, required_coarsening_level, max_coarsening_level,
176 ngrow, build_coarse_level_by_coarsening,extend_domain_face,
199 std::sort(geom.begin(), geom.end(), [] (
Geometry const& a,
Geometry const& b) { return a.Domain().numPts() > b.Domain().numPts(); });
201 (gshop, geom, ngrow, extend_domain_face, num_coarsen_opt));
226 int required_coarsening_level,
227 int max_coarsening_level,
229 bool build_coarse_level_by_coarsening =
true,
232 bool support_mvmc =
false);
241 int required_coarsening_level,
242 int max_coarsening_level,
244 bool build_coarse_level_by_coarsening =
true,
262 int required_coarsening_level,
263 int max_coarsening_level,
265 bool build_coarse_level_by_coarsening =
true,
#define BL_PROFILE(a)
Definition AMReX_BLProfiler.H:551
#define AMREX_ALWAYS_ASSERT_WITH_MESSAGE(EX, MSG)
Definition AMReX_BLassert.H:49
#define AMREX_EXPORT
Definition AMReX_Extension.H:196
Problem-domain geometry: maps between index space and physical space.
Definition AMReX_EB2.H:84
typename G::FunctionType F
Definition AMReX_EB2.H:115
const Box & coarsestDomain() const final
Definition AMReX_EB2.H:105
const Level & getLevel(const Geometry &geom) const final
Definition AMReX_EB2_IndexSpaceI.H:101
~IndexSpaceImp() override=default
void addFineLevels(int num_new_fine_levels) final
Definition AMReX_EB2_IndexSpaceI.H:123
IndexSpaceImp(IndexSpaceImp< G > const &)=delete
void addRegularCoarseLevels(int num_new_coarse_levels) final
Definition AMReX_EB2_IndexSpaceI.H:152
const Geometry & getGeometry(const Box &dom) const final
Definition AMReX_EB2_IndexSpaceI.H:112
IndexSpaceImp(IndexSpaceImp< G > &&)=delete
void operator=(IndexSpaceImp< G > const &)=delete
void setShift(int direction, int ncells) override
Definition AMReX_EB2_IndexSpaceI.H:200
void buildAllFCData() override
Build face-centered EB data for all three face directions.
Definition AMReX_EB2_IndexSpaceI.H:211
Definition AMReX_EB2.H:28
virtual const Geometry & getGeometry(const Box &domain) const =0
virtual const Level & getLevel(const Geometry &geom) const =0
IndexSpace() noexcept=default
virtual void addFineLevels(int num_new_fine_levels)=0
static void pop() noexcept
Definition AMReX_EB2.H:49
static void push(IndexSpace *ispace)
Definition AMReX_EB2.cpp:64
virtual void buildAllFCData()
Build face-centered EB data for all three face directions.
Definition AMReX_EB2.H:70
static bool empty() noexcept
Definition AMReX_EB2.H:56
virtual void addRegularCoarseLevels(int num_new_coarse_levels)=0
static Vector< std::unique_ptr< IndexSpace > > m_instance
Definition AMReX_EB2.H:73
static int size() noexcept
Definition AMReX_EB2.H:57
virtual ~IndexSpace()=default
virtual const Box & coarsestDomain() const =0
static void clear() noexcept
Definition AMReX_EB2.H:50
virtual void setShift(int, int)
Definition AMReX_EB2.H:65
static IndexSpace & top()
Definition AMReX_EB2.H:51
static void erase(IndexSpace *ispace)
Definition AMReX_EB2.cpp:83
Definition AMReX_EB2_Level.H:42
Rectangular problem domain geometry.
Definition AMReX_Geometry.H:85
This class is a thin wrapper around std::vector. Unlike vector, Vector::operator[] provides bound che...
Definition AMReX_Vector.H:29
Definition AMReX_FabArrayBase.H:38
int NumCoarsenOpt()
Definition AMReX_EB2.cpp:58
void addRegularCoarseLevels(int num_new_coarse_levels)
Add num_new_coarse_levels regular levels below the current coarsest level.
Definition AMReX_EB2.cpp:264
bool ExtendDomainFace()
Definition AMReX_EB2.cpp:53
int maxCoarseningLevel(const Geometry &geom)
Return the maximum coarsening level supported for given geom.
Definition AMReX_EB2.cpp:298
void Initialize()
Initialize EB2’s global state (call before constructing geometries by amrex::Initialize).
Definition AMReX_EB2.cpp:35
void BuildMultiValuedMultiCut(const Geometry &geom, int required_coarsening_level, int max_coarsening_level, int ngrow, bool build_coarse_level_by_coarsening, bool a_extend_domain_face, int a_num_coarsen_opt)
Build EB geometry dedicated to multi-valued multi-cut support.
Definition AMReX_EB2.cpp:314
void addFineLevels(int num_new_fine_levels)
Add num_new_fine_levels to the EB hierarchy.
Definition AMReX_EB2.cpp:255
const IndexSpace * TopIndexSpace() noexcept
Return the top IndexSpace if one has been built (nullptr otherwise).
Definition AMReX_EB2.H:79
void Build(const Geometry &geom, int required_coarsening_level, int max_coarsening_level, int ngrow, bool build_coarse_level_by_coarsening, bool a_extend_domain_face, int a_num_coarsen_opt, bool support_mvmc)
Build EB geometry using the runtime-configured EB2 geometry type.
Definition AMReX_EB2.cpp:101
const IndexSpace * TopIndexSpaceIfPresent() noexcept
Return the top IndexSpace if one has been built (nullptr otherwise).
Definition AMReX_EB2.cpp:93
void BuildFC()
Build face-centered EB data for all three face directions.
Definition AMReX_EB2.cpp:325
void BuildFromChkptFile(std::string const &fname, const Geometry &geom, int required_coarsening_level, int max_coarsening_level, int ngrow, bool build_coarse_level_by_coarsening, bool a_extend_domain_face)
Rebuild an IndexSpace from a checkpoint file.
Definition AMReX_EB2.cpp:273
void Finalize()
Tear down EB2 global resources (called automatically at shutdown).
Definition AMReX_EB2.cpp:45
void Abort(const std::string &msg)
Print a fatal-error message to stderr and abort execution.
Definition AMReX.cpp:242