4#include <AMReX_Config.H>
18#include <unordered_map>
54 [[nodiscard]] BoxArray
intersect (
const BoxArray& ba,
const Box& b,
int ng = 0);
66 [[nodiscard]] BoxArray
intersect (
const BoxArray& lhs,
const BoxArray& rhs);
69 [[nodiscard]] BoxList
intersect (
const BoxArray& ba,
const BoxList& bl);
90 [[nodiscard]] BoxArray
convert (
const BoxArray& ba,
const IntVect& typ);
101 [[nodiscard]] BoxArray
coarsen (
const BoxArray& ba,
int ratio);
111 [[nodiscard]] BoxArray
coarsen (
const BoxArray& ba,
const IntVect& ratio);
122 [[nodiscard]] BoxArray
refine (
const BoxArray& ba,
int ratio);
132 [[nodiscard]] BoxArray
refine (
const BoxArray& ba,
const IntVect& ratio);
146 [[nodiscard]] BoxList
GetBndryCells (
const BoxArray& ba,
int ngrow);
155 void readBoxArray (BoxArray& ba, std::istream& s,
bool b =
false);
167 [[nodiscard]]
bool match (
const BoxArray&
x,
const BoxArray&
y);
184 [[nodiscard]] BoxArray
decompose (
Box const& domain,
int nboxes,
185 Array<bool,AMREX_SPACEDIM>
const& decomp
187 bool no_overlap =
false);
193 explicit BARef (
size_t size);
194 explicit BARef (
const Box& b);
195 explicit BARef (
const BoxList& bl);
196 explicit BARef (BoxList&& bl)
noexcept;
197 explicit BARef (std::istream& is);
198 BARef (
const BARef& rhs);
199 BARef (BARef&& rhs) =
delete;
200 BARef& operator= (
const BARef& rhs) =
delete;
201 BARef& operator= (BARef&& rhs) =
delete;
205 void define (
const Box& bx);
206 void define (
const BoxList& bl);
207 void define (BoxList&& bl)
noexcept;
208 void define (std::istream& is,
int& ndims);
210 void resize (Long n);
211#ifdef AMREX_MEM_PROFILING
212 void updateMemoryUsage_box (
int s);
213 void updateMemoryUsage_hash (
int s);
216 [[nodiscard]]
bool HasHashMap () const noexcept {
217 return has_hashmap.load(std::memory_order_acquire);
229 using HashType = std::unordered_map< IntVect, std::vector<int>, IntVect::shift_hasher > ;
232 mutable HashType hash;
234 mutable std::atomic<bool> has_hashmap =
false;
236 static int numboxarrays;
237 static int numboxarrays_hwm;
238 static Long total_box_bytes;
239 static Long total_box_bytes_hwm;
240 static Long total_hash_bytes;
241 static Long total_hash_bytes_hwm;
245 static bool initialized;
252 [[nodiscard]]
Box operator() (
const Box& bx)
const noexcept {
return bx; }
253 [[nodiscard]]
static constexpr Box coarsen (Box
const& a_box) {
return a_box; }
254 [[nodiscard]]
static constexpr IntVect doiLo () {
return IntVect::TheZeroVector(); }
255 [[nodiscard]]
static constexpr IntVect doiHi () {
return IntVect::TheZeroVector(); }
257 [[nodiscard]]
static constexpr IntVect coarsen_ratio () {
return IntVect::TheUnitVector(); }
264 explicit BATindexType (IndexType a_typ) : m_typ(a_typ) {}
265 [[nodiscard]]
Box operator() (
const Box& bx)
const noexcept {
return amrex::convert(bx,m_typ); }
266 [[nodiscard]]
static Box coarsen (Box
const& a_box)
noexcept {
return a_box; }
267 [[nodiscard]]
static constexpr IntVect doiLo () {
return IntVect::TheZeroVector(); }
268 [[nodiscard]]
IntVect doiHi () const noexcept {
return m_typ.ixType(); }
269 [[nodiscard]]
IndexType index_type () const noexcept {
return m_typ; }
270 [[nodiscard]]
static constexpr IntVect coarsen_ratio () {
return IntVect::TheUnitVector(); }
276struct BATcoarsenRatio
278 explicit BATcoarsenRatio (IntVect
const& a_crse_ratio) : m_crse_ratio(a_crse_ratio) {}
279 [[nodiscard]]
Box operator() (
const Box& bx)
const noexcept {
return amrex::coarsen(bx,m_crse_ratio); }
281 [[nodiscard]]
static constexpr IntVect doiLo () {
return IntVect::TheZeroVector(); }
282 [[nodiscard]]
static constexpr IntVect doiHi () {
return IntVect::TheZeroVector(); }
284 [[nodiscard]]
IntVect coarsen_ratio () const noexcept {
return m_crse_ratio; }
290struct BATindexType_coarsenRatio
292 BATindexType_coarsenRatio (IndexType a_typ, IntVect
const& a_crse_ratio)
293 : m_typ(a_typ), m_crse_ratio(a_crse_ratio) {}
295 [[nodiscard]]
Box operator() (
const Box& bx)
const noexcept {
301 [[nodiscard]]
static constexpr IntVect doiLo () {
return IntVect::TheZeroVector(); }
302 [[nodiscard]]
IntVect doiHi () const noexcept {
return m_typ.ixType(); }
304 [[nodiscard]]
IndexType index_type () const noexcept {
return m_typ; }
305 [[nodiscard]]
IntVect coarsen_ratio () const noexcept {
return m_crse_ratio; }
315 BATbndryReg (Orientation a_face, IndexType a_typ,
316 int a_in_rad,
int a_out_rad,
int a_extent_rad)
317 : m_face(a_face), m_typ(a_typ), m_crse_ratio(1)
319 m_loshft =
IntVect(-a_extent_rad);
320 m_hishft =
IntVect( a_extent_rad);
321 IntVect nodal = a_typ.ixType();
323 const int d = a_face.coordDir();
326 if (m_face.isLow()) {
337 if (m_face.isLow()) {
338 m_loshft[d] = nodal[d] - a_out_rad;
339 m_hishft[d] = nodal[d] + a_in_rad - 1;
341 m_loshft[d] = 1 - a_in_rad;
342 m_hishft[d] = a_out_rad;
344 m_doilo =
IntVect(a_extent_rad);
345 m_doihi =
IntVect(a_extent_rad);
347 if (m_face.isLow()) {
348 m_doilo[d] = a_out_rad;
352 m_doihi[d] = a_out_rad;
357 [[nodiscard]]
Box operator() (
const Box& a_bx)
const noexcept {
360 const int d = m_face.coordDir();
361 if (m_face.isLow()) {
368 return Box(lo,hi,m_typ);
373 [[nodiscard]]
IntVect doiLo () const noexcept {
return m_doilo; }
374 [[nodiscard]]
IntVect doiHi () const noexcept {
return m_doihi; }
376 [[nodiscard]]
IndexType index_type () const noexcept {
return m_typ; }
377 [[nodiscard]]
IntVect coarsen_ratio () const noexcept {
return m_crse_ratio; }
379 friend bool operator== (BATbndryReg
const& a, BATbndryReg
const& b)
noexcept {
380 return a.m_face == b.m_face && a.m_typ == b.m_typ && a.m_crse_ratio == b.m_crse_ratio
381 && a.m_loshft == b.m_loshft && a.m_hishft == b.m_hishft
382 && a.m_doilo == b.m_doilo && a.m_doihi == b.m_doihi;
398 enum struct BATType : std::int8_t { null, indexType, coarsenRatio, indexType_coarsenRatio, bndryReg};
403 BATOp (IndexType t) noexcept
405 BATOp (IntVect
const& r) noexcept
406 : m_coarsenRatio(r) {}
407 BATOp (IndexType t, IntVect
const& r) noexcept
408 : m_indexType_coarsenRatio(t,r) {}
409 BATOp (Orientation f, IndexType t,
int in_rad,
int out_rad,
int extent_rad) noexcept
410 : m_bndryReg(f,t,in_rad,out_rad,extent_rad) {}
412 BATindexType m_indexType;
413 BATcoarsenRatio m_coarsenRatio;
414 BATindexType_coarsenRatio m_indexType_coarsenRatio;
415 BATbndryReg m_bndryReg;
418 BATransformer () =
default;
420 BATransformer (IndexType t)
421 : m_bat_type(t.cellCentered() ? BATType::null : BATType::indexType),
422 m_op (t.cellCentered() ? BATOp() : BATOp(t)) {}
424 BATransformer (Orientation f, IndexType t,
int in_rad,
int out_rad,
int extent_rad)
425 : m_bat_type(BATType::bndryReg),
426 m_op(f,t,in_rad,out_rad,extent_rad) {}
428 [[nodiscard]]
Box operator() (Box
const& ab)
const noexcept {
432 return m_op.m_null(ab);
433 case BATType::indexType:
434 return m_op.m_indexType(ab);
435 case BATType::coarsenRatio:
436 return m_op.m_coarsenRatio(ab);
437 case BATType::indexType_coarsenRatio:
438 return m_op.m_indexType_coarsenRatio(ab);
440 return m_op.m_bndryReg(ab);
444 [[nodiscard]]
Box coarsen (Box
const& a_box)
const noexcept {
448 return amrex::BATnull::coarsen(a_box);
449 case BATType::indexType:
450 return amrex::BATindexType::coarsen(a_box);
451 case BATType::coarsenRatio:
452 return m_op.m_coarsenRatio.coarsen(a_box);
453 case BATType::indexType_coarsenRatio:
454 return m_op.m_indexType_coarsenRatio.coarsen(a_box);
456 return m_op.m_bndryReg.coarsen(a_box);
460 [[nodiscard]]
IntVect doiLo () const noexcept {
464 return amrex::BATnull::doiLo();
465 case BATType::indexType:
466 return amrex::BATindexType::doiLo();
467 case BATType::coarsenRatio:
468 return amrex::BATcoarsenRatio::doiLo();
469 case BATType::indexType_coarsenRatio:
470 return amrex::BATindexType_coarsenRatio::doiLo();
472 return m_op.m_bndryReg.doiLo();
476 [[nodiscard]]
IntVect doiHi () const noexcept {
480 return amrex::BATnull::doiHi();
481 case BATType::indexType:
482 return m_op.m_indexType.doiHi();
483 case BATType::coarsenRatio:
484 return amrex::BATcoarsenRatio::doiHi();
485 case BATType::indexType_coarsenRatio:
486 return m_op.m_indexType_coarsenRatio.doiHi();
488 return m_op.m_bndryReg.doiHi();
492 [[nodiscard]]
IndexType index_type () const noexcept {
496 return amrex::BATnull::index_type();
497 case BATType::indexType:
498 return m_op.m_indexType.index_type();
499 case BATType::coarsenRatio:
500 return amrex::BATcoarsenRatio::index_type();
501 case BATType::indexType_coarsenRatio:
502 return m_op.m_indexType_coarsenRatio.index_type();
504 return m_op.m_bndryReg.index_type();
508 [[nodiscard]]
IntVect coarsen_ratio () const noexcept {
512 return amrex::BATnull::coarsen_ratio();
513 case BATType::indexType:
514 return amrex::BATindexType::coarsen_ratio();
515 case BATType::coarsenRatio:
516 return m_op.m_coarsenRatio.coarsen_ratio();
517 case BATType::indexType_coarsenRatio:
518 return m_op.m_indexType_coarsenRatio.coarsen_ratio();
520 return m_op.m_bndryReg.coarsen_ratio();
524 [[nodiscard]]
bool is_null () const noexcept {
525 return m_bat_type == BATType::null;
528 [[nodiscard]]
bool is_simple () const noexcept {
529 return m_bat_type != BATType::bndryReg;
532 void set_coarsen_ratio (IntVect
const& a_ratio)
noexcept {
537 if (a_ratio == IntVect::TheUnitVector()) {
540 m_bat_type = BATType::coarsenRatio;
541 m_op.m_coarsenRatio.m_crse_ratio = a_ratio;
545 case BATType::indexType:
547 if (a_ratio == IntVect::TheUnitVector()) {
550 m_bat_type = BATType::indexType_coarsenRatio;
551 auto t = m_op.m_indexType.m_typ;
552 m_op.m_indexType_coarsenRatio.m_typ = t;
553 m_op.m_indexType_coarsenRatio.m_crse_ratio = a_ratio;
557 case BATType::coarsenRatio:
559 if (a_ratio == IntVect::TheUnitVector()) {
560 m_bat_type = BATType::null;
563 m_op.m_coarsenRatio.m_crse_ratio = a_ratio;
567 case BATType::indexType_coarsenRatio:
569 if (a_ratio == IntVect::TheUnitVector()) {
570 m_bat_type = BATType::indexType;
571 auto t = m_op.m_indexType_coarsenRatio.m_typ;
572 m_op.m_indexType.m_typ = t;
575 m_op.m_indexType_coarsenRatio.m_crse_ratio = a_ratio;
581 m_op.m_bndryReg.m_crse_ratio = a_ratio;
587 void set_index_type (IndexType typ)
noexcept {
592 if (typ.cellCentered()) {
595 m_bat_type = BATType::indexType;
596 m_op.m_indexType.m_typ = typ;
600 case BATType::indexType:
602 if (typ.cellCentered()) {
603 m_bat_type = BATType::null;
606 m_op.m_indexType.m_typ = typ;
610 case BATType::coarsenRatio:
612 if (typ.cellCentered()) {
615 m_bat_type = BATType::indexType_coarsenRatio;
616 auto r = m_op.m_coarsenRatio.m_crse_ratio;
617 m_op.m_indexType_coarsenRatio.m_typ = typ;
618 m_op.m_indexType_coarsenRatio.m_crse_ratio = r;
622 case BATType::indexType_coarsenRatio:
624 if (typ.cellCentered()) {
625 m_bat_type = BATType::coarsenRatio;
626 auto r = m_op.m_indexType_coarsenRatio.m_crse_ratio;
627 m_op.m_coarsenRatio.m_crse_ratio = r;
630 m_op.m_indexType_coarsenRatio.m_typ = typ;
636 m_op.m_bndryReg.m_typ = typ;
642 friend bool operator== (BATransformer
const& a, BATransformer
const& b)
noexcept {
643 if (a.m_bat_type != BATType::bndryReg && b.m_bat_type != BATType::bndryReg) {
644 return a.index_type() == b.index_type()
645 && a.coarsen_ratio() == b.coarsen_ratio();
646 }
else if (a.m_bat_type == BATType::bndryReg && b.m_bat_type == BATType::bndryReg) {
647 return a.m_op.m_bndryReg == b.m_op.m_bndryReg;
653 BATType m_bat_type{BATType::null};
753 [[nodiscard]]
Long size () const noexcept {
return m_ref->m_abox.size(); }
756 [[nodiscard]]
Long capacity () const noexcept {
return static_cast<Long>(m_ref->m_abox.capacity()); }
759 [[nodiscard]]
bool empty () const noexcept {
return m_ref->m_abox.empty(); }
765 [[nodiscard]]
double d_numPts () const noexcept;
779 std::ostream&
writeOn (std::ostream&) const;
782 [[nodiscard]]
bool operator== (const
BoxArray& rhs) const noexcept;
785 [[nodiscard]]
bool operator!= (const
BoxArray& rhs) const noexcept;
787 [[nodiscard]]
bool operator== (const
Vector<
Box>& bv) const noexcept;
788 [[nodiscard]]
bool operator!= (const
Vector<
Box>& bv) const noexcept;
868 [[nodiscard]]
bool coarsenable (
int refinement_ratio,
int min_width=1) const;
881 [[nodiscard]]
bool coarsenable (const
IntVect& refinement_ratio,
int min_width=1) const;
1069 void set (
int i, const
Box& ibox);
1072 [[nodiscard]]
Box operator[] (
int index) const noexcept {
1073 return m_bat(m_ref->m_abox[index]);
1084 return m_bat.coarsen(m_ref->m_abox[index]);
1093 [[nodiscard]]
bool ok ()
const;
1117 bool contains (
const Box& b,
bool assume_disjoint_ba =
false,
1183 std::vector< std::pair<int,Box> >
intersections (
const Box& bx,
bool first_only,
int ng)
const;
1199 void intersections (
const Box& bx, std::vector< std::pair<int,Box> >& isects)
const;
1208 void intersections (
const Box& bx, std::vector< std::pair<int,Box> >& isects,
1209 bool first_only,
int ng)
const;
1218 void intersections (
const Box& bx, std::vector< std::pair<int,Box> >& isects,
1219 bool first_only,
const IntVect& ng)
const;
1239 explicit
RefID (BARef* data_) noexcept : data(data_) {}
1240 bool operator< (
const RefID& rhs)
const noexcept {
return std::less<>()(data,rhs.data); }
1245 BARef* data{
nullptr};
1270 [[nodiscard]] BATransformer
const&
transformer ()
const;
1273 [[nodiscard]] std::weak_ptr<BARef>
getWeakRef ()
const;
1275 [[nodiscard]] std::shared_ptr<BARef>
const&
getSharedRef ()
const;
1284 void type_update ();
1286 [[nodiscard]] BARef::HashType& getHashMap ()
const;
1288 [[nodiscard]]
IntVect getDoiLo () const noexcept;
1289 [[nodiscard]]
IntVect getDoiHi () const noexcept;
1291 BATransformer m_bat;
1293 std::shared_ptr<BARef> m_ref;
1294 mutable std::shared_ptr<
BoxList> m_simplified_list;
1298std::ostream& operator<< (std::ostream& os, const
BoxArray& ba);
1300std::ostream& operator<< (std::ostream& os, const
BoxArray::
RefID&
id);
Fixed-size array types for use on GPU and CPU.
A list of Boxes sharing a common IndexType.
int idir
Definition AMReX_HypreMLABecLap.cpp:1133
#define AMREX_D_DECL(a, b, c)
Definition AMReX_SPACE.H:171
Definition AMReX_AmrMesh.H:69
Reference-counted collection of Boxes.
Definition AMReX_BoxArray.H:676
IndexType ixType() const noexcept
Return index type of this BoxArray.
Definition AMReX_BoxArray.H:1252
Box operator[](int index) const noexcept
Return element index of this BoxArray.
Definition AMReX_BoxArray.H:1072
Long capacity() const noexcept
Return the number of boxes that can be held in the current allocated storage.
Definition AMReX_BoxArray.H:756
RefID getRefID() const noexcept
Return a unique ID of the reference.
Definition AMReX_BoxArray.H:1249
bool intersects(const Box &b, int ng=0) const
True if b intersects this BoxArray(+ng).
Definition AMReX_BoxArray.cpp:1169
BoxArray & grow(int n)
Grow each Box by n cells in every direction.
Definition AMReX_BoxArray.cpp:706
static void Finalize()
Definition AMReX_BoxArray.cpp:282
BoxArray() noexcept
Construct an empty BoxArray.
Definition AMReX_BoxArray.cpp:287
std::vector< std::pair< int, Box > > intersections(const Box &bx) const
Return all intersections of bx with this BoxArray.
Definition AMReX_BoxArray.cpp:1186
std::ostream & writeOn(std::ostream &) const
Output this BoxArray to a checkpoint file.
Definition AMReX_BoxArray.cpp:482
bool contains(const IntVect &v) const
Return true if the cell v is within any box in the array.
Definition AMReX_BoxArray.cpp:977
static void Initialize()
Definition AMReX_BoxArray.cpp:271
BoxList const & simplified_list() const
Return (and cache) a simplified BoxList representation; regular AMR grids only.
Definition AMReX_BoxArray.cpp:1636
BoxList boxList() const
Create a BoxList from this BoxArray.
Definition AMReX_BoxArray.cpp:949
BoxArray simplified() const
Return a simplified BoxArray; regular AMR grids only.
Definition AMReX_BoxArray.cpp:1647
IntVect crseRatio() const noexcept
Return crse ratio of this BoxArray.
Definition AMReX_BoxArray.H:1255
int readFrom(std::istream &is)
Initialize the BoxArray from the supplied istream.
Definition AMReX_BoxArray.cpp:468
void define(const Box &bx)
Initialize the BoxArray from a single box.
Definition AMReX_BoxArray.cpp:352
Long numPts() const noexcept
Returns the total number of cells contained in all boxes in the BoxArray.
Definition AMReX_BoxArray.cpp:394
void clear_hash_bin() const
Clear out the internal hash table used by intersections.
Definition AMReX_BoxArray.cpp:1440
Box minimalBox() const
Return smallest Box that contains all Boxes in this BoxArray.
Definition AMReX_BoxArray.cpp:1067
BoxArray & minmaxSize(const IntVect &min_size, const IntVect &max_size)
Constrain Box sizes between min_size and max_size.
Definition AMReX_BoxArray.cpp:577
BoxArray & refine(int refinement_ratio)
Refine each Box in the BoxArray by refinement_ratio.
Definition AMReX_BoxArray.cpp:593
std::weak_ptr< BARef > getWeakRef() const
Return a weak pointer to the shared Box storage.
Definition AMReX_BoxArray.cpp:1659
bool coarsenable(int refinement_ratio, int min_width=1) const
Check whether every Box is coarsenable by refinement_ratio.
Definition AMReX_BoxArray.cpp:615
BoxArray & growLo(int idir, int n_cell)
Grow each Box on the lower side of dimension idir.
Definition AMReX_BoxArray.cpp:752
void resize(Long len)
Resize the BoxArray. See Vector<T>::resize() for the gory details.
Definition AMReX_BoxArray.cpp:387
BoxArray & enclosedCells()
Convert the BoxArray to cell-centered type in all directions.
Definition AMReX_BoxArray.cpp:799
std::shared_ptr< BARef > const & getSharedRef() const
Return the shared pointer to the Box storage.
Definition AMReX_BoxArray.cpp:1665
Box getCellCenteredBox(int index) const noexcept
Return cell-centered box at element index of this BoxArray.
Definition AMReX_BoxArray.H:1083
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:431
BATransformer const & transformer() const
Return the transformer describing index-type/coarsening metadata.
Definition AMReX_BoxArray.cpp:1653
static bool initialized
Definition AMReX_BoxArray.H:1259
static bool SameRefs(const BoxArray &lhs, const BoxArray &rhs)
whether two BoxArrays share the same data
Definition AMReX_BoxArray.H:1235
BoxArray & growHi(int idir, int n_cell)
Grow each Box on the upper side of dimension idir.
Definition AMReX_BoxArray.cpp:768
BoxList complementIn(const Box &b) const
Return box - boxarray.
Definition AMReX_BoxArray.cpp:1314
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:1456
BoxArray & coarsen(int refinement_ratio)
Coarsen each Box in the BoxArray by refinement_ratio.
Definition AMReX_BoxArray.cpp:672
BoxArray & shift(int dir, int nzones)
Shift each Box in the BoxArray by nzones cells in direction dir.
Definition AMReX_BoxArray.cpp:847
BoxArray & surroundingNodes()
Convert the BoxArray to nodal type in all directions.
Definition AMReX_BoxArray.cpp:784
BoxArray(BoxArray &&rhs) noexcept=default
Long size() const noexcept
Return the number of boxes in the BoxArray.
Definition AMReX_BoxArray.H:753
Box get(int index) const noexcept
Return element index of this BoxArray.
Definition AMReX_BoxArray.H:1080
~BoxArray() noexcept=default
bool CellEqual(const BoxArray &rhs) const noexcept
Are the BoxArrays equal after conversion to cell-centered.
Definition AMReX_BoxArray.cpp:546
void set(int i, const Box &ibox)
Set element i to ibox if no coarsening transformer is active.
Definition AMReX_BoxArray.cpp:878
BoxArray & growcoarsen(int n, const IntVect &iv)
Expand boxes by n cells in every direction, then coarsen by iv.
Definition AMReX_BoxArray.cpp:685
BoxArray & convert(IndexType typ)
Set the IndexType of the BoxArray.
Definition AMReX_BoxArray.cpp:813
bool ok() const
Return true if the BoxArray is empty or every Box reports ok().
Definition AMReX_BoxArray.cpp:894
BoxArray & operator=(BoxArray const &rhs)=default
void uniqify()
Make ourselves unique.
Definition AMReX_BoxArray.cpp:1613
BoxArray(const BoxArray &rhs)=default
bool empty() const noexcept
Return whether the BoxArray is empty.
Definition AMReX_BoxArray.H:759
bool isDisjoint() const
Return true if set of intersecting Boxes in BoxArray is null.
Definition AMReX_BoxArray.cpp:920
BoxArray & maxSize(int block_size)
Split any Box whose side length exceeds block_size.
Definition AMReX_BoxArray.cpp:553
void clear()
Remove all Boxes from the BoxArray.
Definition AMReX_BoxArray.cpp:379
A list of Boxes sharing a common IndexType.
Definition AMReX_BoxList.H:109
Base class for FabArray.
Definition AMReX_FabArrayBase.H:42
Iterator for looping ever tiles and boxes of amrex::FabArray based containers.
Definition AMReX_MFIter.H:88
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:29
amrex_long Long
Definition AMReX_INT.H:30
__host__ __device__ BoxND< dim > convert(const BoxND< dim > &b, const IntVectND< dim > &typ) noexcept
Return a copy of b converted to the nodal flags typ.
Definition AMReX_Box.H:1630
__host__ __device__ BoxND< dim > coarsen(const BoxND< dim > &b, int ref_ratio) noexcept
Return a copy of b coarsened by the isotropic ratio ref_ratio.
Definition AMReX_Box.H:1469
__host__ __device__ BoxND< dim > refine(const BoxND< dim > &b, int ref_ratio) noexcept
Return a copy of b refined by the isotropic ratio ref_ratio.
Definition AMReX_Box.H:1510
Definition AMReX_Amr.cpp:50
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:1717
AMReX * Initialize(MPI_Comm mpi_comm, std::ostream &a_osout=std::cout, std::ostream &a_oserr=std::cerr, ErrorHandler a_errhandler=nullptr, int a_device_id=-1)
Initialize AMReX using an existing MPI communicator.
Definition AMReX.cpp:343
BoxND< 3 > Box
Box is an alias for amrex::BoxND instantiated with AMREX_SPACEDIM.
Definition AMReX_BaseFwd.H:35
BoxList GetBndryCells(const BoxArray &ba, int ngrow)
Find the boundary/ghost region around a BoxArray.
Definition AMReX_BoxArray.cpp:1842
IndexTypeND< 3 > IndexType
IndexType is an alias for amrex::IndexTypeND instantiated with AMREX_SPACEDIM.
Definition AMReX_BaseFwd.H:41
void Finalize(AMReX *pamrex)
Finalize AMReX state associated with the supplied instance pointer.
Definition AMReX.cpp:824
BoxArray decompose(Box const &domain, int nboxes, Array< bool, 3 > const &decomp, bool no_overlap)
Decompose domain box into BoxArray.
Definition AMReX_BoxArray.cpp:1943
bool match(const BoxArray &x, const BoxArray &y)
Return true if two BoxArrays cover the same index space.
Definition AMReX_BoxArray.cpp:1930
BoxArray complementIn(const Box &b, const BoxArray &ba)
Make a BoxArray from the complement of ba within the Box b.
Definition AMReX_BoxArray.cpp:1710
IntVectND< 3 > IntVect
IntVect is an alias for amrex::IntVectND instantiated with AMREX_SPACEDIM.
Definition AMReX_BaseFwd.H:38
void readBoxArray(BoxArray &ba, std::istream &is, bool bReadSpecial)
Read a BoxArray from a stream.
Definition AMReX_BoxArray.cpp:1900
BATransformer BndryBATransformer
Definition AMReX_BoxArray.H:659
BoxArray boxComplement(const Box &b1in, const Box &b2)
Make a BoxArray from the complement of b2 in b1in.
Definition AMReX_BoxArray.cpp:1703
Definition AMReX_BoxArray.H:1237
friend std::ostream & operator<<(std::ostream &os, const RefID &id)
Definition AMReX_BoxArray.cpp:2126
bool operator<(const RefID &rhs) const noexcept
Definition AMReX_BoxArray.H:1240
bool operator!=(const RefID &rhs) const noexcept
Definition AMReX_BoxArray.H:1242
bool operator==(const RefID &rhs) const noexcept
Definition AMReX_BoxArray.H:1241