3#include <AMReX_Config.H>
53 "Have you forgot to call EB2::build? It's required even if the geometry is all regular.");
85 int required_coarsening_level,
int max_coarsening_level,
86 int ngrow,
bool build_coarse_level_by_coarsening,
87 bool extend_domain_face,
int num_coarsen_opt);
91 bool extend_domain_face,
int num_coarsen_opt);
103 return m_geom.back().Domain();
108 void setShift (
int direction,
int ncells)
override;
110 using F =
typename G::FunctionType;
115 bool m_build_coarse_level_by_coarsening;
116 bool m_extend_domain_face;
117 int m_num_coarsen_opt;
163 int required_coarsening_level,
int max_coarsening_level,
164 int ngrow = 4,
bool build_coarse_level_by_coarsening =
true,
170 (gshop, geom, required_coarsening_level, max_coarsening_level,
171 ngrow, build_coarse_level_by_coarsening,extend_domain_face,
194 std::sort(geom.begin(), geom.end(), [] (
Geometry const& a,
Geometry const& b) { return a.Domain().numPts() > b.Domain().numPts(); });
196 (gshop, geom, ngrow, extend_domain_face, num_coarsen_opt));
221 int required_coarsening_level,
222 int max_coarsening_level,
224 bool build_coarse_level_by_coarsening =
true,
227 bool support_mvmc =
false);
236 int required_coarsening_level,
237 int max_coarsening_level,
239 bool build_coarse_level_by_coarsening =
true,
257 int required_coarsening_level,
258 int max_coarsening_level,
260 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:191
Definition AMReX_EB2.H:81
typename G::FunctionType F
Definition AMReX_EB2.H:110
const Box & coarsestDomain() const final
Definition AMReX_EB2.H:102
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
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
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:70
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:74
This class is a thin wrapper around std::vector. Unlike vector, Vector::operator[] provides bound che...
Definition AMReX_Vector.H:28
Definition AMReX_FabArrayBase.H:33
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:76
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 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 out message to cerr and exit via abort().
Definition AMReX.cpp:240