11 #ifndef _PROBLEMDOMAIN_H_ 12 #define _PROBLEMDOMAIN_H_ 24 #include "NamespaceHeader.H" 87 inline bool ok()
const;
183 const bool* a_isPeriodic);
202 const bool* a_isPeriodic);
213 void define(
const Box& a_domBox);
221 void define(
const Box& a_domBox,
const bool* a_isPeriodic);
228 void define (
const IntVect& small,
238 void define (
const IntVect& small,
240 const bool* a_isPeriodic);
247 void define (
const IntVect& small,
257 void define (
const IntVect& small,
259 const bool* a_isPeriodic);
271 const Box& domainBox()
const;
276 bool isPeriodic(
int a_dir)
const;
282 {
return m_isPeriodic;}
287 bool isPeriodic()
const;
304 int size (
const int& a_idir)
const;
318 bool contains (
const IntVect& p)
const;
332 bool contains (
const Box& b)
const;
348 bool intersects (
const Box& a_box)
const;
359 bool intersectsNotEmpty (
const Box& a_box)
const;
364 bool periodicAdjacent(
const Box& a_box)
const;
369 void insertImages(std::list<Box>& a_list,
const Box& a_box)
const;
375 bool intersects(
const Box& box1,
const Box& box2)
const;
407 void setPeriodic(
int a_dir,
bool a_isPeriodic);
551 Box operator& (
const Box& a_b)
const;
569 int a_refinement_ratio);
586 const IntVect& a_refinement_ratio);
606 int a_refinement_ratio);
623 const IntVect& a_refinement_ratio);
628 m_domainBox.shift(a_shift);
640 friend std::ostream&
operator<< (std::ostream& os,
646 friend std::istream&
operator>> (std::istream& is,
649 void shiftIt(
Box& a_box,
int shiftIndex)
const ;
650 void unshiftIt(
Box& a_box,
int shiftIndex)
const ;
655 void dumpOn (std::ostream& strm)
const;
713 if (!(m_domain == a_domain)) define(a_domain);
799 for (
int dir=0; dir<
SpaceDim; dir++)
801 m_isPeriodic[dir] =
false;
808 : m_domainBox(b.m_domainBox), m_shiftIt(b.m_shiftIt)
810 for (
int dir=0; dir<
SpaceDim; dir++)
822 for (
int dir=0; dir<
SpaceDim; dir++)
840 for (
int dir=0; dir<
SpaceDim; dir++)
857 return !(*
this == a_otherDomain);
865 for (
int dir=0; dir<
SpaceDim; dir++)
1098 for (
int dir = 0; dir <
SpaceDim; dir++)
1100 if (b.
type(dir) != domainBox.
type(dir))
1225 #include "NamespaceFooter.H" Box m_domainBox
Definition: ProblemDomain.H:669
bool contains(const IntVect &p) const
Returns true if argument is contained within this ProblemDomain.
Definition: ProblemDomain.H:999
bool contains_box(const Box &b) const
Equivalent to contains() function.
Definition: ProblemDomain.H:335
IntVect size() const
size functions
Definition: Box.H:1803
#define D_TERM6(a, b, c, d, e, f)
Definition: CHArray.H:40
#define CH_assert(cond)
Definition: CHArray.H:37
Box refine(const Box &b, const IntVect &refinement_ratio)
A class to facilitate interaction with physical boundary conditions.
Definition: ProblemDomain.H:141
ProblemDomain & growLo(int idir, int n_cell=1)
Grow this ProblemDomain on the low side.
Definition: ProblemDomain.H:955
void shift(const IntVect &a_shift)
Definition: ProblemDomain.H:626
friend Box bdryLo(const ProblemDomain &a_pd, int a_dir, int a_len)
Returns a face-centered Box at the low side of a_pd.
const Box & box() const
Definition: ProblemDomain.H:701
IntVect i() const
Equivalent to the () operator.
Definition: ProblemDomain.H:73
IntVect type() const
Definition: Box.H:1789
bool contains(const IntVect &p) const
Definition: Box.H:1871
ProblemDomain & operator=(const ProblemDomain &b)
The assignment operator.
Definition: ProblemDomain.H:862
IntVect size() const
Return the size of the domainBox.
Definition: ProblemDomain.H:992
int isEmpty(const box2d *)
bool m_isPeriodic[SpaceDim]
Definition: ProblemDomain.H:664
IntVect operator()() const
Returns the current shift unit vector.
Definition: ProblemDomain.H:754
ShiftIterator shiftIterator() const
Returns the shiftIterator for this ProblemDomain.
Definition: ProblemDomain.H:971
ProblemDomain m_domain
Definition: ProblemDomain.H:717
const int SpaceDim
Definition: SPACE.H:38
bool ok()
Definition: ProblemDomain.H:696
void incr()
Equivalent to the ++ operator.
Definition: ProblemDomain.H:81
const ProblemDomain & domain() const
Definition: ProblemDomain.H:706
IndexTM< T, N > coarsen(const IndexTM< T, N > &a_p, T a_s)
Definition: IndexTMI.H:430
ShiftIterator()
Basic constructor.
Definition: ProblemDomain.H:731
const IntVect & bigEnd() const
Definition: Box.H:1768
bool operator<(const ProblemDomain &rhs) const
Definition: ProblemDomain.H:631
std::ostream & operator<<(std::ostream &a_os, const IndexTM< T, N > &a_iv)
void begin(const Box &a_box)
Definition: ProblemDomain.H:687
Class to manage box-shifting used to enforce periodic BC's.
Definition: ProblemDomain.H:33
friend Box adjCellLo(const ProblemDomain &a_pd, int a_dir, int a_len)
Returns the cell-centered Box adjacent to the low side of a_pd.
bool isPeriodic() const
Returns true if BC is periodic in any direction.
Definition: ProblemDomain.H:901
void shiftIt(Box &a_box, int shiftIndex) const
Definition: ProblemDomain.H:874
const IntVect & smallEnd() const
{ Accessors}
Definition: Box.H:1754
void computeShifts(const bool *a_isPeriodic)
Recompute shift vectors based on periodic directions.
std::istream & operator>>(std::istream &a_os, IndexTM< T, N > &a_iv)
void begin()
Equivalent to reset()
Definition: ProblemDomain.H:783
bool operator==(const ProblemDomain &a_otherDomain) const
Returns true if the two domain are equivalent.
Definition: ProblemDomain.H:830
bool isEmpty() const
Returns true if this ProblemDomain is empty or undefined.
Definition: ProblemDomain.H:978
unsigned int index() const
which periodic image is this
Definition: ProblemDomain.H:90
ShiftIterator m_shiftIt
Definition: ProblemDomain.H:674
Vector< IntVect > m_shift_vectors
Definition: ProblemDomain.H:115
size_t size() const
Definition: Vector.H:192
int m_counter
Definition: ProblemDomain.H:722
static const IntVect Zero
Definition: IntVect.H:654
void define(const Box &a_domBox)
Construct ProblemDomain with a_domBox as computational domain.
friend Box bdryHi(const ProblemDomain &a_pd, int a_dir, int a_len)
Returns a face-centered Box at the high side of a_pd.
Box adjCellLo(const ProblemDomain &a_pd, int a_dir, int a_len=1)
Returns the cell-centered Box adjacent to the low side of a_pd.
void checkDefine(const ProblemDomain &a_domain)
Definition: ProblemDomain.H:711
bool image(IntVect &p) const
Returns the periodic image of this IntVect inside of the ProblemDomain.
Definition: ProblemDomain.H:1026
A Rectangular Domain on an Integer Lattice.
Definition: Box.H:465
ProblemDomain & growHi(int idir, int n_cell=1)
Grow this ProblemDomain on the high side.
Definition: ProblemDomain.H:963
void unshiftIt(Box &a_box, int shiftIndex) const
Definition: ProblemDomain.H:880
bool ok() const
Is the iterator still within its range of shift vectors?
Definition: ProblemDomain.H:769
ImageIterator(const ProblemDomain &a_domain)
Definition: ProblemDomain.H:680
void operator++()
Increment to the next shift unit vector.
Definition: ProblemDomain.H:762
friend Box adjCellHi(const ProblemDomain &a_pd, int a_dir, int a_len)
Returns the cell-centered Box adjacent to the low side of a_pd.
Handle to a particular group in an HDF file.
Definition: CH_HDF5.H:294
An integer Vector in SpaceDim-dimensional space.
Definition: CHArray.H:42
Box bdryLo(const ProblemDomain &a_pd, int a_dir, int a_len=1)
Returns a face-centered Box at the low side of a_pd.
ProblemDomain()
The default constructor. The constructed domain box is empty.
Definition: ProblemDomain.H:796
ProblemDomain grow(const ProblemDomain &pd, int i)
Definition: ProblemDomain.H:921
ShiftIterator & operator=(const ShiftIterator &a_src)
Assignment operator.
Definition: ProblemDomain.H:745
void reset()
Reset to first shift unit vector.
Definition: ProblemDomain.H:776
Box & shift(int dir, int nzones)
shift functions
Definition: Box.H:2067
bool operator!=(const ProblemDomain &a_otherDomain) const
Returns true if the two domain are not equivalent.
Definition: ProblemDomain.H:855
Box bdryHi(const ProblemDomain &a_pd, int a_dir, int a_len=1)
Returns a face-centered Box at the high side of a_pd.
Box m_box
Definition: ProblemDomain.H:720
Box & grow(int i)
grow functions
Definition: Box.H:2247
const IntVect & operator[](int index) const
Definition: ProblemDomain.H:95
Box & growLo(int idir, int n_cell=1)
Definition: Box.H:2333
ProblemDomain & grow(int i)
Grows (or shrinks) the domain Box by i in all directions.
Definition: ProblemDomain.H:913
Definition: ProblemDomain.H:677
const Box & domainBox() const
Returns the logical computational domain.
Definition: ProblemDomain.H:887
bool isEmpty() const
{ Comparison Functions}
Definition: Box.H:1846
Box m_current
Definition: ProblemDomain.H:721
Box adjCellHi(const ProblemDomain &a_pd, int a_dir, int a_len=1)
Returns the cell-centered Box adjacent to the low side of a_pd.
~ShiftIterator()
Destructor.
void end()
Skip the iterator to the end.
Definition: ProblemDomain.H:790
unsigned int m_index
Definition: ProblemDomain.H:113
Box & growHi(int idir, int n_cell=1)
Definition: Box.H:2364
const bool * isPeriodicVect() const
Returns bool[SpaceDim vector of periodicity info.
Definition: ProblemDomain.H:281