4 #include <AMReX_Config.H>
15 #include <unordered_map>
28 [[nodiscard]] BoxArray
intersect (
const BoxArray& ba,
const Box& b,
int ng = 0);
33 [[nodiscard]] BoxArray
intersect (
const BoxArray& lhs,
const BoxArray& rhs);
36 [[nodiscard]] BoxList
intersect (
const BoxArray& ba,
const BoxList& bl);
39 [[nodiscard]] BoxArray
convert (
const BoxArray& ba,
const IntVect& typ);
41 [[nodiscard]] BoxArray
coarsen (
const BoxArray& ba,
int ratio);
42 [[nodiscard]] BoxArray
coarsen (
const BoxArray& ba,
const IntVect& ratio);
44 [[nodiscard]] BoxArray
refine (
const BoxArray& ba,
int ratio);
45 [[nodiscard]] BoxArray
refine (
const BoxArray& ba,
const IntVect& ratio);
48 [[nodiscard]] BoxList
GetBndryCells (
const BoxArray& ba,
int ngrow);
51 void readBoxArray (BoxArray& ba, std::istream& s,
bool b =
false);
54 [[nodiscard]]
bool match (
const BoxArray& x,
const BoxArray& y);
63 explicit BARef (std::istream& is);
74 void define (std::istream& is,
int& ndims);
77 #ifdef AMREX_MEM_PROFILING
78 void updateMemoryUsage_box (
int s);
79 void updateMemoryUsage_hash (
int s);
85 #pragma omp atomic read
100 using HashType = std::unordered_map< IntVect, std::vector<int>, IntVect::shift_hasher > ;
122 [[nodiscard]]
static constexpr
Box coarsen (
Box const& a_box) {
return a_box; }
133 [[nodiscard]]
static Box coarsen (
Box const& a_box) noexcept {
return a_box; }
177 int a_in_rad,
int a_out_rad,
int a_extent_rad)
200 m_hishft[d] = nodal[d] + a_in_rad - 1;
241 return a.m_face ==
b.m_face && a.m_typ ==
b.m_typ && a.m_crse_ratio ==
b.m_crse_ratio
242 && a.m_loshft ==
b.m_loshft && a.m_hishft ==
b.m_hishft
243 && a.m_doilo ==
b.m_doilo && a.m_doihi ==
b.m_doihi;
285 m_op(
f,t,in_rad,out_rad,extent_rad) {}
383 [[nodiscard]]
bool is_null () const noexcept {
451 if (typ.cellCentered()) {
461 if (typ.cellCentered()) {
471 if (typ.cellCentered()) {
483 if (typ.cellCentered()) {
503 return a.index_type() ==
b.index_type()
504 && a.coarsen_ratio() ==
b.coarsen_ratio();
506 return a.m_op.m_bndryReg ==
b.m_op.m_bndryReg;
577 [[nodiscard]] Long
size () const noexcept {
return m_ref->m_abox.size(); }
580 [[nodiscard]] Long
capacity () const noexcept {
return static_cast<Long
>(
m_ref->m_abox.capacity()); }
583 [[nodiscard]]
bool empty () const noexcept {
return m_ref->m_abox.empty(); }
586 [[nodiscard]] Long
numPts() const noexcept;
589 [[nodiscard]]
double d_numPts () const noexcept;
599 std::ostream&
writeOn (std::ostream&) const;
602 [[nodiscard]]
bool operator== (const
BoxArray& rhs) const noexcept;
605 [[nodiscard]]
bool operator!= (const
BoxArray& rhs) const noexcept;
607 [[nodiscard]]
bool operator== (const
Vector<
Box>& bv) const noexcept;
608 [[nodiscard]]
bool operator!= (const
Vector<
Box>& bv) const noexcept;
633 [[nodiscard]]
bool coarsenable (
int refinement_ratio,
int min_width=1) const;
634 [[nodiscard]]
bool coarsenable (const
IntVect& refinement_ratio,
int min_width=1) const;
696 void set (
int i, const
Box& ibox);
699 [[nodiscard]]
Box operator[] (
int index) const noexcept {
718 [[nodiscard]]
bool ok ()
const;
734 bool contains (
const Box& b,
bool assume_disjoint_ba =
false,
774 std::vector< std::pair<int,Box> >
intersections (
const Box& bx,
bool first_only,
int ng)
const;
780 void intersections (
const Box& bx, std::vector< std::pair<int,Box> >& isects)
const;
783 void intersections (
const Box& bx, std::vector< std::pair<int,Box> >& isects,
784 bool first_only,
int ng)
const;
786 void intersections (
const Box& bx, std::vector< std::pair<int,Box> >& isects,
787 bool first_only,
const IntVect& ng)
const;
853 std::ostream& operator<< (std::ostream& os, const
BoxArray& ba);
855 std::ostream& operator<< (std::ostream& os, const
BoxArray::
RefID&
id);
int idir
Definition: AMReX_HypreMLABecLap.cpp:1093
Definition: AMReX_AmrMesh.H:62
A collection of Boxes stored in an Array.
Definition: AMReX_BoxArray.H:530
IndexType ixType() const noexcept
Return index type of this BoxArray.
Definition: AMReX_BoxArray.H:817
Box operator[](int index) const noexcept
Return element index of this BoxArray.
Definition: AMReX_BoxArray.H:699
Long capacity() const noexcept
Return the number of boxes that can be held in the current allocated storage.
Definition: AMReX_BoxArray.H:580
RefID getRefID() const noexcept
Return a unique ID of the reference.
Definition: AMReX_BoxArray.H:814
bool intersects(const Box &b, int ng=0) const
True if the Box intersects with this BoxArray(+ghostcells). The Box must have the same IndexType as t...
Definition: AMReX_BoxArray.cpp:1159
BoxArray & grow(int n)
Grow each Box in the BoxArray by the specified amount.
Definition: AMReX_BoxArray.cpp:696
static void Finalize()
Definition: AMReX_BoxArray.cpp:272
BoxArray() noexcept
Definition: AMReX_BoxArray.cpp:277
std::vector< std::pair< int, Box > > intersections(const Box &bx) const
Return intersections of Box and BoxArray.
Definition: AMReX_BoxArray.cpp:1176
std::ostream & writeOn(std::ostream &) const
Output this BoxArray to a checkpoint file.
Definition: AMReX_BoxArray.cpp:472
bool contains(const IntVect &v) const
True if the IntVect is within any of the Boxes in this BoxArray.
Definition: AMReX_BoxArray.cpp:967
static void Initialize()
Definition: AMReX_BoxArray.cpp:261
BATransformer m_bat
Definition: AMReX_BoxArray.H:846
BoxList const & simplified_list() const
Definition: AMReX_BoxArray.cpp:1601
BoxList boxList() const
Create a BoxList from this BoxArray.
Definition: AMReX_BoxArray.cpp:939
BoxArray simplified() const
Definition: AMReX_BoxArray.cpp:1612
IntVect crseRatio() const noexcept
Return crse ratio of this BoxArray.
Definition: AMReX_BoxArray.H:820
int readFrom(std::istream &is)
Initialize the BoxArray from the supplied istream. It is an error if the BoxArray has already been in...
Definition: AMReX_BoxArray.cpp:458
IntVect getDoiLo() const noexcept
Definition: AMReX_BoxArray.cpp:1512
void define(const Box &bx)
Initialize the BoxArray from a single box. It is an error if the BoxArray has already been initialize...
Definition: AMReX_BoxArray.cpp:342
Long numPts() const noexcept
Returns the total number of cells contained in all boxes in the BoxArray.
Definition: AMReX_BoxArray.cpp:384
std::shared_ptr< BoxList > m_simplified_list
Definition: AMReX_BoxArray.H:849
BARef::HashType & getHashMap() const
Definition: AMReX_BoxArray.cpp:1524
IntVect getDoiHi() const noexcept
Definition: AMReX_BoxArray.cpp:1518
void clear_hash_bin() const
Clear out the internal hash table used by intersections.
Definition: AMReX_BoxArray.cpp:1403
Box minimalBox() const
Return smallest Box that contains all Boxes in this BoxArray.
Definition: AMReX_BoxArray.cpp:1057
BoxArray & minmaxSize(const IntVect &min_size, const IntVect &max_size)
Definition: AMReX_BoxArray.cpp:567
BoxArray & refine(int refinement_ratio)
Refine each Box in the BoxArray to the specified ratio.
Definition: AMReX_BoxArray.cpp:583
BoxArray & operator=(BoxArray const &rhs)=default
bool coarsenable(int refinement_ratio, int min_width=1) const
Coarsen each Box in the BoxArray to the specified ratio.
Definition: AMReX_BoxArray.cpp:605
BoxArray & growLo(int idir, int n_cell)
Grow each Box in the BoxArray on the low end by n_cell cells in the idir direction.
Definition: AMReX_BoxArray.cpp:742
void resize(Long len)
Resize the BoxArray. See Vector<T>::resize() for the gory details.
Definition: AMReX_BoxArray.cpp:377
BoxArray & enclosedCells()
Apply Box::enclosedCells() to each Box in the BoxArray.
Definition: AMReX_BoxArray.cpp:789
Box getCellCenteredBox(int index) const noexcept
Return cell-centered box at element index of this BoxArray.
Definition: AMReX_BoxArray.H:710
double d_numPts() const noexcept
Returns the total number of cells (in double type) contained in all boxes in the BoxArray.
Definition: AMReX_BoxArray.cpp:421
BATransformer const & transformer() const
Definition: AMReX_BoxArray.cpp:1618
static bool initialized
Definition: AMReX_BoxArray.H:824
static bool SameRefs(const BoxArray &lhs, const BoxArray &rhs)
whether two BoxArrays share the same data
Definition: AMReX_BoxArray.H:800
BoxArray & growHi(int idir, int n_cell)
Grow each Box in the BoxArray on the high end by n_cell cells in the idir direction.
Definition: AMReX_BoxArray.cpp:758
BoxList complementIn(const Box &b) const
Return box - boxarray.
Definition: AMReX_BoxArray.cpp:1304
void type_update()
Update BoxArray index type according the box type, and then convert boxes to cell-centered.
Definition: AMReX_BoxArray.cpp:1498
std::shared_ptr< BARef > m_ref
The data – a reference-counted pointer to a Ref.
Definition: AMReX_BoxArray.H:848
void removeOverlap(bool simplify=true)
Change the BoxArray to one with no overlap and then simplify it (see the simplify function in BoxList...
Definition: AMReX_BoxArray.cpp:1419
BoxArray & coarsen(int refinement_ratio)
Coarsen each Box in the BoxArray to the specified ratio.
Definition: AMReX_BoxArray.cpp:662
BoxArray & shift(int dir, int nzones)
Apply Box::shift(int,int) to each Box in the BoxArray.
Definition: AMReX_BoxArray.cpp:837
BoxArray & surroundingNodes()
Apply surroundingNodes(Box) to each Box in BoxArray. See the documentation of Box for details.
Definition: AMReX_BoxArray.cpp:774
BoxArray(BoxArray &&rhs) noexcept=default
Long size() const noexcept
Return the number of boxes in the BoxArray.
Definition: AMReX_BoxArray.H:577
Box get(int index) const noexcept
Return element index of this BoxArray.
Definition: AMReX_BoxArray.H:707
~BoxArray() noexcept=default
bool CellEqual(const BoxArray &rhs) const noexcept
Are the BoxArrays equal after conversion to cell-centered.
Definition: AMReX_BoxArray.cpp:536
void set(int i, const Box &ibox)
Set element i in this BoxArray to Box ibox.
Definition: AMReX_BoxArray.cpp:868
BoxArray & growcoarsen(int n, const IntVect &iv)
Grow and then coarsen each Box in the BoxArray.
Definition: AMReX_BoxArray.cpp:675
BoxArray & convert(IndexType typ)
Apply Box::convert(IndexType) to each Box in the BoxArray.
Definition: AMReX_BoxArray.cpp:803
bool ok() const
Return true if Box is valid and they all have the same IndexType. Is true by default if the BoxArray ...
Definition: AMReX_BoxArray.cpp:884
void uniqify()
Make ourselves unique.
Definition: AMReX_BoxArray.cpp:1578
BoxArray(const BoxArray &rhs)=default
bool empty() const noexcept
Return whether the BoxArray is empty.
Definition: AMReX_BoxArray.H:583
bool isDisjoint() const
Return true if set of intersecting Boxes in BoxArray is null.
Definition: AMReX_BoxArray.cpp:910
BoxArray & maxSize(int block_size)
Forces each Box in BoxArray to have sides <= block_size.
Definition: AMReX_BoxArray.cpp:543
void clear()
Remove all Boxes from the BoxArray.
Definition: AMReX_BoxArray.cpp:369
A class for managing a List of Boxes that share a common IndexType. This class implements operations ...
Definition: AMReX_BoxList.H:52
Base class for FabArray.
Definition: AMReX_FabArrayBase.H:41
AMREX_GPU_HOST_DEVICE constexpr AMREX_FORCE_INLINE CellIndex ixType(int dir) const noexcept
Returns the CellIndex in direction dir.
Definition: AMReX_IndexType.H:116
AMREX_GPU_HOST_DEVICE static constexpr AMREX_FORCE_INLINE IntVectND< dim > TheUnitVector() noexcept
This static member function returns a reference to a constant IntVectND object, all of whose dim argu...
Definition: AMReX_IntVect.H:682
AMREX_GPU_HOST_DEVICE static constexpr AMREX_FORCE_INLINE IntVectND< dim > TheZeroVector() noexcept
This static member function returns a reference to a constant IntVectND object, all of whose dim argu...
Definition: AMReX_IntVect.H:672
Definition: AMReX_MFIter.H:57
Encapsulation of the Orientation of the Faces of a Box.
Definition: AMReX_Orientation.H:29
AMREX_GPU_HOST_DEVICE int coordDir() const noexcept
Returns the coordinate direction.
Definition: AMReX_Orientation.H:83
AMREX_GPU_HOST_DEVICE bool isLow() const noexcept
Returns true if Orientation is low.
Definition: AMReX_Orientation.H:89
This provides length of period for periodic domains. 0 means it is not periodic in that direction....
Definition: AMReX_Periodicity.H:17
This class is a thin wrapper around std::vector. Unlike vector, Vector::operator[] provides bound che...
Definition: AMReX_Vector.H:27
AMREX_EXPORT int max_grid_size
Definition: AMReX_EB2.cpp:23
AMREX_GPU_HOST_DEVICE Long size(T const &b) noexcept
integer version
Definition: AMReX_GpuRange.H:26
static int f(amrex::Real t, N_Vector y_data, N_Vector y_rhs, void *user_data)
Definition: AMReX_SundialsIntegrator.H:44
Definition: AMReX_Amr.cpp:49
BoxND< AMREX_SPACEDIM > Box
Definition: AMReX_BaseFwd.H:27
BoxArray intersect(const BoxArray &ba, const Box &b, int ng)
Make a BoxArray from the intersection of Box b and BoxArray(+ghostcells).
Definition: AMReX_BoxArray.cpp:1664
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE BoxND< dim > convert(const BoxND< dim > &b, const IntVectND< dim > &typ) noexcept
Returns a BoxND with different type.
Definition: AMReX_Box.H:1435
BoxList GetBndryCells(const BoxArray &ba, int ngrow)
Find the ghost cells of a given BoxArray.
Definition: AMReX_BoxArray.cpp:1789
IntVectND< AMREX_SPACEDIM > IntVect
Definition: AMReX_BaseFwd.H:30
bool match(const BoxArray &x, const BoxArray &y)
Note that two BoxArrays that match are not necessarily equal.
Definition: AMReX_BoxArray.cpp:1877
BoxArray complementIn(const Box &b, const BoxArray &ba)
Make a BoxArray from the complement of BoxArray ba in Box b.
Definition: AMReX_BoxArray.cpp:1657
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE BoxND< dim > refine(const BoxND< dim > &b, int ref_ratio) noexcept
Definition: AMReX_Box.H:1342
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE BoxND< dim > coarsen(const BoxND< dim > &b, int ref_ratio) noexcept
Coarsen BoxND by given (positive) refinement ratio. NOTE: if type(dir) = CELL centered: lo <- lo/rati...
Definition: AMReX_Box.H:1304
IndexTypeND< AMREX_SPACEDIM > IndexType
Definition: AMReX_BaseFwd.H:33
void readBoxArray(BoxArray &ba, std::istream &is, bool bReadSpecial)
Read a BoxArray from a stream. If b is true, read in a special way.
Definition: AMReX_BoxArray.cpp:1847
BoxArray boxComplement(const Box &b1in, const Box &b2)
Make a BoxArray from the the complement of b2 in b1in.
Definition: AMReX_BoxArray.cpp:1650
Definition: AMReX_BoxArray.H:57
static Long total_box_bytes_hwm
Definition: AMReX_BoxArray.H:110
~BARef()
Definition: AMReX_BoxArray.cpp:85
BARef & operator=(const BARef &rhs)=delete
static int numboxarrays
Definition: AMReX_BoxArray.H:107
static Long total_hash_bytes
Definition: AMReX_BoxArray.H:111
BARef(BARef &&rhs)=delete
IntVect crsn
Definition: AMReX_BoxArray.H:98
std::unordered_map< IntVect, std::vector< int >, IntVect::shift_hasher > HashType
Definition: AMReX_BoxArray.H:100
static Long total_hash_bytes_hwm
Definition: AMReX_BoxArray.H:112
void resize(Long n)
Definition: AMReX_BoxArray.cpp:180
static bool initialized
Definition: AMReX_BoxArray.H:116
HashType hash
Definition: AMReX_BoxArray.H:103
BARef()
Definition: AMReX_BoxArray.cpp:35
Box bbox
Box hash stuff.
Definition: AMReX_BoxArray.H:96
static int numboxarrays_hwm
Definition: AMReX_BoxArray.H:108
bool has_hashmap
Definition: AMReX_BoxArray.H:105
Vector< Box > m_abox
The data.
Definition: AMReX_BoxArray.H:93
static Long total_box_bytes
Definition: AMReX_BoxArray.H:109
static void Initialize()
Definition: AMReX_BoxArray.cpp:231
static void Finalize()
Definition: AMReX_BoxArray.cpp:255
void define(const Box &bx)
Definition: AMReX_BoxArray.cpp:143
bool HasHashMap() const
Definition: AMReX_BoxArray.H:82
Definition: AMReX_BoxArray.H:175
IndexType index_type() const noexcept
Definition: AMReX_BoxArray.H:237
Box operator()(const Box &a_bx) const noexcept
Definition: AMReX_BoxArray.H:218
BATbndryReg(Orientation a_face, IndexType a_typ, int a_in_rad, int a_out_rad, int a_extent_rad)
Definition: AMReX_BoxArray.H:176
friend bool operator==(BATbndryReg const &a, BATbndryReg const &b) noexcept
Definition: AMReX_BoxArray.H:240
IntVect doiHi() const noexcept
Definition: AMReX_BoxArray.H:235
IntVect coarsen_ratio() const noexcept
Definition: AMReX_BoxArray.H:238
IntVect doiLo() const noexcept
Definition: AMReX_BoxArray.H:234
Orientation m_face
Definition: AMReX_BoxArray.H:246
IntVect m_loshft
Definition: AMReX_BoxArray.H:249
IndexType m_typ
Definition: AMReX_BoxArray.H:247
Box coarsen(Box const &a_box) const noexcept
Definition: AMReX_BoxArray.H:232
IntVect m_doihi
Definition: AMReX_BoxArray.H:252
IntVect m_hishft
Definition: AMReX_BoxArray.H:250
IntVect m_doilo
Definition: AMReX_BoxArray.H:251
IntVect m_crse_ratio
Definition: AMReX_BoxArray.H:248
Definition: AMReX_BoxArray.H:142
BATcoarsenRatio(IntVect const &a_crse_ratio)
Definition: AMReX_BoxArray.H:143
static constexpr IntVect doiHi()
Definition: AMReX_BoxArray.H:147
Box coarsen(Box const &a_box) const noexcept
Definition: AMReX_BoxArray.H:145
static constexpr IndexType index_type()
Definition: AMReX_BoxArray.H:148
static constexpr IntVect doiLo()
Definition: AMReX_BoxArray.H:146
IntVect m_crse_ratio
Definition: AMReX_BoxArray.H:150
Box operator()(const Box &bx) const noexcept
Definition: AMReX_BoxArray.H:144
IntVect coarsen_ratio() const noexcept
Definition: AMReX_BoxArray.H:149
Definition: AMReX_BoxArray.H:154
BATindexType_coarsenRatio(IndexType a_typ, IntVect const &a_crse_ratio)
Definition: AMReX_BoxArray.H:155
static constexpr IntVect doiLo()
Definition: AMReX_BoxArray.H:164
IntVect doiHi() const noexcept
Definition: AMReX_BoxArray.H:165
Box operator()(const Box &bx) const noexcept
Definition: AMReX_BoxArray.H:158
IntVect m_crse_ratio
Definition: AMReX_BoxArray.H:171
IntVect coarsen_ratio() const noexcept
Definition: AMReX_BoxArray.H:168
IndexType index_type() const noexcept
Definition: AMReX_BoxArray.H:167
Box coarsen(Box const &a_box) const noexcept
Definition: AMReX_BoxArray.H:162
IndexType m_typ
Definition: AMReX_BoxArray.H:170
Definition: AMReX_BoxArray.H:130
IntVect doiHi() const noexcept
Definition: AMReX_BoxArray.H:135
Box operator()(const Box &bx) const noexcept
Definition: AMReX_BoxArray.H:132
IndexType index_type() const noexcept
Definition: AMReX_BoxArray.H:136
static Box coarsen(Box const &a_box) noexcept
Definition: AMReX_BoxArray.H:133
BATindexType(IndexType a_typ)
Definition: AMReX_BoxArray.H:131
IndexType m_typ
Definition: AMReX_BoxArray.H:138
static constexpr IntVect coarsen_ratio()
Definition: AMReX_BoxArray.H:137
static constexpr IntVect doiLo()
Definition: AMReX_BoxArray.H:134
Definition: AMReX_BoxArray.H:120
static constexpr Box coarsen(Box const &a_box)
Definition: AMReX_BoxArray.H:122
static constexpr IndexType index_type()
Definition: AMReX_BoxArray.H:125
static constexpr IntVect doiHi()
Definition: AMReX_BoxArray.H:124
Box operator()(const Box &bx) const noexcept
Definition: AMReX_BoxArray.H:121
static constexpr IntVect coarsen_ratio()
Definition: AMReX_BoxArray.H:126
static constexpr IntVect doiLo()
Definition: AMReX_BoxArray.H:123
Definition: AMReX_BoxArray.H:802
friend std::ostream & operator<<(std::ostream &os, const RefID &id)
Definition: AMReX_BoxArray.cpp:1891
bool operator<(const RefID &rhs) const noexcept
Definition: AMReX_BoxArray.H:805
bool operator!=(const RefID &rhs) const noexcept
Definition: AMReX_BoxArray.H:807
bool operator==(const RefID &rhs) const noexcept
Definition: AMReX_BoxArray.H:806
BARef * data
Definition: AMReX_BoxArray.H:810