Chombo + EB + MF
3.2
|
A class to facilitate interaction with physical boundary conditions. More...
#include <ProblemDomain.H>
Public Member Functions | |
ProblemDomain () | |
The default constructor. The constructed domain box is empty. More... | |
ProblemDomain (const Box &a_domBox) | |
Construct ProblemDomain with a_domBox as computational domain. More... | |
ProblemDomain (const Box &a_domBox, const bool *a_isPeriodic) | |
Construct ProblemDomain with a_domBox as computational domain. More... | |
ProblemDomain (const IntVect &small, const IntVect &big) | |
Construct a ProblemDomain. More... | |
ProblemDomain (const IntVect &small, const IntVect &big, const bool *a_isPeriodic) | |
Construct a ProblemDomain. More... | |
ProblemDomain (const IntVect &small, const int *vec_len) | |
Construct ProblemDomain with specified lengths. More... | |
ProblemDomain (const IntVect &small, const int *vec_len, const bool *a_isPeriodic) | |
Construct ProblemDomain with specified lengths. More... | |
ProblemDomain (const ProblemDomain &a_src) | |
The copy constructor. More... | |
void | define (const Box &a_domBox) |
Construct ProblemDomain with a_domBox as computational domain. More... | |
void | define (const Box &a_domBox, const bool *a_isPeriodic) |
Construct ProblemDomain with a_domBox as computational domain. More... | |
void | define (const IntVect &small, const IntVect &big) |
Construct a ProblemDomain. More... | |
void | define (const IntVect &small, const IntVect &big, const bool *a_isPeriodic) |
Construct a ProblemDomain. More... | |
void | define (const IntVect &small, const int *vec_len) |
Construct ProblemDomain with specified lengths. More... | |
void | define (const IntVect &small, const int *vec_len, const bool *a_isPeriodic) |
Construct ProblemDomain with specified lengths. More... | |
void | define (const ProblemDomain &a_src) |
The copy constructor. More... | |
const Box & | domainBox () const |
Returns the logical computational domain. More... | |
bool | isPeriodic (int a_dir) const |
Returns true if BC is periodic in direction a_dir. More... | |
const bool * | isPeriodicVect () const |
Returns bool[SpaceDim vector of periodicity info. More... | |
bool | isPeriodic () const |
Returns true if BC is periodic in any direction. More... | |
ShiftIterator | shiftIterator () const |
Returns the shiftIterator for this ProblemDomain. More... | |
bool | isEmpty () const |
Returns true if this ProblemDomain is empty or undefined. More... | |
int | size (const int &a_idir) const |
Return the size of the domainBox in the specified coordinate direction. More... | |
IntVect | size () const |
Return the size of the domainBox. More... | |
bool | contains (const IntVect &p) const |
Returns true if argument is contained within this ProblemDomain. More... | |
bool | image (IntVect &p) const |
Returns the periodic image of this IntVect inside of the ProblemDomain. More... | |
bool | contains (const Box &b) const |
Returns true if argument is contained within this ProblemDomain. More... | |
bool | contains_box (const Box &b) const |
Equivalent to contains() function. More... | |
bool | intersects (const Box &a_box) const |
Returns true if this ProblemDomain and the argument intersect. More... | |
bool | intersectsNotEmpty (const Box &a_box) const |
Returns true if this ProblemDomain and the argument intersect. More... | |
bool | periodicAdjacent (const Box &a_box) const |
Returns true if this argument is adjacent to a periodic boundary. More... | |
void | insertImages (std::list< Box > &a_list, const Box &a_box) const |
bool | intersects (const Box &box1, const Box &box2) const |
Returns true if box1 and box2 or any of their periodic images intersect. More... | |
bool | operator== (const ProblemDomain &a_otherDomain) const |
Returns true if the two domain are equivalent. More... | |
bool | operator!= (const ProblemDomain &a_otherDomain) const |
Returns true if the two domain are not equivalent. More... | |
ProblemDomain & | operator= (const ProblemDomain &b) |
The assignment operator. More... | |
void | setPeriodic (int a_dir, bool a_isPeriodic) |
Sets whether BC is periodic in direction a_dir (true == periodic) More... | |
ProblemDomain & | grow (int i) |
Grows (or shrinks) the domain Box by i in all directions. More... | |
ProblemDomain & | grow (const IntVect &v) |
Grow this ProblemDomain. More... | |
ProblemDomain & | grow (int idir, int n_cell) |
Grow this ProblemDomain. More... | |
ProblemDomain & | growLo (int idir, int n_cell=1) |
Grow this ProblemDomain on the low side. More... | |
ProblemDomain & | growHi (int idir, int n_cell=1) |
Grow this ProblemDomain on the high side. More... | |
Box | operator & (const Box &a_b) const |
Returns the Box intersection of this ProblemDomain and a_b. More... | |
ProblemDomain & | refine (int a_refinement_ratio) |
Refine this problem domain. More... | |
ProblemDomain & | refine (const IntVect &a_refinement_ratio) |
Refine this ProblemDomain. More... | |
ProblemDomain & | coarsen (int a_refinement_ratio) |
Coarsen this ProblemDomain. More... | |
ProblemDomain & | coarsen (const IntVect &refinement_ratio) |
Coarsen this ProblemDomain. More... | |
void | shift (const IntVect &a_shift) |
bool | operator< (const ProblemDomain &rhs) const |
void | shiftIt (Box &a_box, int shiftIndex) const |
void | unshiftIt (Box &a_box, int shiftIndex) const |
void | dumpOn (std::ostream &strm) const |
Gives more detail than printOn. More... | |
Protected Attributes | |
bool | m_isPeriodic [SpaceDim] |
Box | m_domainBox |
ShiftIterator | m_shiftIt |
Friends | |
class | HDF5Handle |
void | operator&= (Box &a_box, const ProblemDomain &a_probdomain) |
Modifies a_box to be the intersection of a_box and a_probdomain. More... | |
Box | operator& (const Box &a_box, const ProblemDomain &a_probdomain) |
Returns a Box which is the interesection of a_box and a_probdomain. More... | |
ProblemDomain | grow (const ProblemDomain &pd, int i) |
Returns a ProblemDomain with a domainBox grown by the given amount. More... | |
ProblemDomain | grow (const ProblemDomain &pd, const IntVect &v) |
Returns a grown version of pd. More... | |
Box | bdryLo (const ProblemDomain &a_pd, int a_dir, int a_len) |
Returns a face-centered Box at the low side of a_pd. More... | |
Box | bdryHi (const ProblemDomain &a_pd, int a_dir, int a_len) |
Returns a face-centered Box at the high side of a_pd. More... | |
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. More... | |
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. More... | |
ProblemDomain | refine (const ProblemDomain &a_probdomain, int a_refinement_ratio) |
Return a ProblemDomain which is a refinement of a_probdomain. More... | |
ProblemDomain | refine (const ProblemDomain &a_probdomain, const IntVect &a_refinement_ratio) |
Refinement function. More... | |
ProblemDomain | coarsen (const ProblemDomain &a_probdomain, int a_refinement_ratio) |
Coarsening function. More... | |
ProblemDomain | coarsen (const ProblemDomain &a_probdomain, const IntVect &a_refinement_ratio) |
Coarsening function. More... | |
std::ostream & | operator<< (std::ostream &os, const ProblemDomain &bx) |
Write an ASCII representation to the ostream. More... | |
std::istream & | operator>> (std::istream &is, ProblemDomain &bx) |
Read from istream. More... | |
A class to facilitate interaction with physical boundary conditions.
ProblemDomain is a class which facilitates the application of physical boundary conditions, both periodic and non-periodic. This class contains much of the functionality of the Box class, since logically the computational domain is generally a Box.
Intersection with a ProblemDomain object will result in only removing regions which are outside the physical domain in non-periodic directions. Regions outside the logical computational domain in periodic directions will be treated as ghost cells which can be filled with an exchange() function or through suitable interpolation from a coarser domain.
Since ProblemDomain will contain a Box, it is a dimension dependent class, so SpaceDim must be defined as either 1, 2, or 3 when compiling.
Note that this implementation of ProblemDomain is inherently cell-centered.
|
inline |
The default constructor. The constructed domain box is empty.
References SpaceDim.
ProblemDomain::ProblemDomain | ( | const Box & | a_domBox | ) |
Construct ProblemDomain with a_domBox as computational domain.
This constructor defaults to non-periodic domain
ProblemDomain::ProblemDomain | ( | const Box & | a_domBox, |
const bool * | a_isPeriodic | ||
) |
Construct ProblemDomain with a_domBox as computational domain.
a_isPeriodic is a SpaceDim array of bools; if true, the physical boundary condition is periodic in the coordinate direction. False means a non-periodic BC.
Construct a ProblemDomain.
It is an error if small is greater than big. Defaults to non-periodic domain.
ProblemDomain::ProblemDomain | ( | const IntVect & | small, |
const IntVect & | big, | ||
const bool * | a_isPeriodic | ||
) |
Construct a ProblemDomain.
It is an error if small is greater than big. a_isPeriodic is a SpaceDim array of bools; if true, the physical boundary condition is periodic in the coordinate direction. False means a non-periodic BC.
ProblemDomain::ProblemDomain | ( | const IntVect & | small, |
const int * | vec_len | ||
) |
Construct ProblemDomain with specified lengths.
It is an error if the lengths are negative. Defaults to non-periodic domain.
ProblemDomain::ProblemDomain | ( | const IntVect & | small, |
const int * | vec_len, | ||
const bool * | a_isPeriodic | ||
) |
Construct ProblemDomain with specified lengths.
It is an error if the lengths are negative. a_isPeriodic is a SpaceDim array of bools; if true, the physical boundary condition is periodic in the coordinate direction. False means a non-periodic BC.
|
inline |
The copy constructor.
References m_isPeriodic, and SpaceDim.
void ProblemDomain::define | ( | const Box & | a_domBox | ) |
Construct ProblemDomain with a_domBox as computational domain.
This constructor defaults to non-periodic domain
Referenced by BlockBaseRegister< FArrayBox >::define().
void ProblemDomain::define | ( | const Box & | a_domBox, |
const bool * | a_isPeriodic | ||
) |
Construct ProblemDomain with a_domBox as computational domain.
a_isPeriodic is a SpaceDim array of bools; if true, the physical boundary condition is periodic in the coordinate direction. False means a non-periodic BC.
Construct a ProblemDomain.
It is an error if small is greater than big. Defaults to non-periodic domain.
void ProblemDomain::define | ( | const IntVect & | small, |
const IntVect & | big, | ||
const bool * | a_isPeriodic | ||
) |
Construct a ProblemDomain.
It is an error if small is greater than big. a_isPeriodic is a SpaceDim array of bools; if true, the physical boundary condition is periodic in the coordinate direction. False means a non-periodic BC.
void ProblemDomain::define | ( | const IntVect & | small, |
const int * | vec_len | ||
) |
Construct ProblemDomain with specified lengths.
It is an error if the lengths are negative. Defaults to non-periodic domain.
void ProblemDomain::define | ( | const IntVect & | small, |
const int * | vec_len, | ||
const bool * | a_isPeriodic | ||
) |
Construct ProblemDomain with specified lengths.
It is an error if the lengths are negative. a_isPeriodic is a SpaceDim array of bools; if true, the physical boundary condition is periodic in the coordinate direction. False means a non-periodic BC.
|
inline |
The copy constructor.
References m_domainBox, m_isPeriodic, m_shiftIt, and SpaceDim.
|
inline |
Returns the logical computational domain.
References m_domainBox.
Referenced by contains(), BaseEBFaceFAB< Real >::copy(), BaseIFFAB< FaceStencil >::define(), BaseEBFaceFAB< Real >::define(), MultiGrid< T >::define(), XPointBlockCoordSys::domainSmallEnd(), ParticleData< P >::enforcePeriodic(), ParticleData< P >::fillGhosts(), ViscousTensorOp::getFlux(), NWOViscousTensorOp::getFlux(), XPointBlockCoordSys::lowerMappedCoordinate(), FASMultiGrid< T >::oneCycle(), and XPointBlockCoordSys::upperMappedCoordinate().
|
inline |
Returns true if BC is periodic in direction a_dir.
References m_isPeriodic.
Referenced by BaseEBCellFAB< Real >::copy(), BaseIFFAB< FaceStencil >::define(), and ParticleData< P >::enforcePeriodic().
|
inline |
Returns bool[SpaceDim vector of periodicity info.
References isEmpty().
|
inline |
Returns true if BC is periodic in any direction.
References D_TERM6, and m_isPeriodic.
|
inline |
Returns the shiftIterator for this ProblemDomain.
The shiftIterator is defined based on the periodicity of this ProblemDomain.
References m_shiftIt.
|
inline |
Returns true if this ProblemDomain is empty or undefined.
References Box::isEmpty(), and m_domainBox.
Referenced by contains().
|
inline |
Return the size of the domainBox in the specified coordinate direction.
References m_domainBox, and Box::size().
|
inline |
Return the size of the domainBox.
References m_domainBox, and Box::size().
|
inline |
Returns true if argument is contained within this ProblemDomain.
An empty ProblemDomain does not contain and is not contained by any ProblemDomain, including itself. Note also that in a periodic Direction, any index is valid, since the domain is infinite in that direction.
References Box::bigEnd(), D_TERM6, isEmpty(), m_domainBox, m_isPeriodic, and Box::smallEnd().
Referenced by image().
|
inline |
Returns the periodic image of this IntVect inside of the ProblemDomain.
Return true if the domain contains this IntVect, returning the image in 'p', otherwise returns false
References Box::bigEnd(), contains(), Box::contains(), D_TERM6, m_domainBox, m_isPeriodic, Box::size(), and Box::smallEnd().
|
inline |
Returns true if argument is contained within this ProblemDomain.
An empty ProblemDomain does not contain any Box. An entirely periodic domain contains any Box.
References adjCellHi, adjCellLo, bdryHi, bdryLo, Box::bigEnd(), D_TERM6, domainBox(), Box::enclosedCells(), isEmpty(), m_domainBox, m_isPeriodic, IndexType::NODE, Box::smallEnd(), SpaceDim, Box::surroundingNodes(), and Box::type().
|
inline |
Equivalent to contains() function.
References adjCellHi(), adjCellLo(), bdryHi(), bdryLo(), coarsen(), grow(), ShiftIterator::i(), ShiftIterator::operator=(), and refine().
bool ProblemDomain::intersects | ( | const Box & | a_box | ) | const |
Returns true if this ProblemDomain and the argument intersect.
It is an error if a_box is not cell-centered. An empty ProblemDomain does not intersect any Box. This will do nothing in periodic directions (since a periodic domain is infinite in the periodic direction. If periodic in all dimensions, this will always return true.
bool ProblemDomain::intersectsNotEmpty | ( | const Box & | a_box | ) | const |
Returns true if this ProblemDomain and the argument intersect.
It is an error if a_box is not cell-centered. This routine does not perform the check to see if *this or b are empty Boxes. It is the callers responsibility to ensure that this never happens. If you are unsure, the use the .intersects(..) routine. In periodic directions, will always return true.
bool ProblemDomain::periodicAdjacent | ( | const Box & | a_box | ) | const |
Returns true if this argument is adjacent to a periodic boundary.
Returns true if box1 and box2 or any of their periodic images intersect.
(useful for checking disjointness)
|
inline |
Returns true if the two domain are equivalent.
References m_domainBox, m_isPeriodic, and SpaceDim.
|
inline |
Returns true if the two domain are not equivalent.
|
inline |
The assignment operator.
References m_domainBox, m_isPeriodic, m_shiftIt, and SpaceDim.
void ProblemDomain::setPeriodic | ( | int | a_dir, |
bool | a_isPeriodic | ||
) |
Sets whether BC is periodic in direction a_dir (true == periodic)
|
inline |
Grows (or shrinks) the domain Box by i in all directions.
References Box::grow(), and m_domainBox.
Referenced by grow().
|
inline |
Grow this ProblemDomain.
Modifies this ProblemDomain by growing the domainBox in each direction by the specified amount
References Box::grow(), and m_domainBox.
|
inline |
Grow this ProblemDomain.
Modifies this ProblemDomain by growing it on the low and high end by n_cell cells in direction idir.
References Box::grow(), and m_domainBox.
|
inline |
Grow this ProblemDomain on the low side.
Modifies this ProblemDomain by growing it on the low end by n_cell cells in direction idir.
References Box::growLo(), and m_domainBox.
|
inline |
Grow this ProblemDomain on the high side.
Modifies this ProblemDomain by growing it on the high end by n_Cell cells in direction idir
References Box::growHi(), and m_domainBox.
Returns the Box intersection of this ProblemDomain and a_b.
The intersection of the Empty ProblemDomain and any Box is the Empty Box. This operator does nothing in periodic directions (since a periodic domain is an infinite domain).
ProblemDomain& ProblemDomain::refine | ( | int | a_refinement_ratio | ) |
Refine this problem domain.
Modifies this ProblemDomain by refining it by given (positive) refinement ratio. The Empty ProblemDomain is not modified by this function.
Referenced by AMRFASMultiGrid< T >::define(), AMRMultiGrid< LevelData< MFCellFAB > >::define(), and AMRFASMultiGrid< T >::init().
ProblemDomain& ProblemDomain::refine | ( | const IntVect & | a_refinement_ratio | ) |
Refine this ProblemDomain.
Modifies this ProblemDomain by refining it by given (positive) refinement ratio. The Empty ProblemDomain is not modified by this function.
ProblemDomain& ProblemDomain::coarsen | ( | int | a_refinement_ratio | ) |
Coarsen this ProblemDomain.
Modifies this ProblemDomain by coarsening it by given (positive) refinement ratio. The Empty ProblemDomain is not modified by this function.
ProblemDomain& ProblemDomain::coarsen | ( | const IntVect & | refinement_ratio | ) |
Coarsen this ProblemDomain.
Modifies this ProblemDomain by coarsening by given (positive) refinement ratio. The Empty ProblemDomain is not modified by this function.
|
inline |
|
inline |
References m_domainBox, operator<<(), and operator>>().
|
inline |
References m_domainBox, m_shiftIt, Box::shift(), and Box::size().
|
inline |
References m_domainBox, m_shiftIt, Box::shift(), and Box::size().
void ProblemDomain::dumpOn | ( | std::ostream & | strm | ) | const |
Gives more detail than printOn.
Useful for exiting due to an error.
|
friend |
|
friend |
Modifies a_box to be the intersection of a_box and a_probdomain.
|
friend |
Returns a Box which is the interesection of a_box and a_probdomain.
|
friend |
Returns a ProblemDomain with a domainBox grown by the given amount.
|
friend |
Returns a grown version of pd.
Returns a ProblemDomain that is the argument ProblemDomain with a DomainBox grown by the given amount.
|
friend |
Returns a face-centered Box at the low side of a_pd.
Returns the edge-centered Box (in direction a_dir) defining the low side of the argument ProblemDomain. The output Box will have the given length in the given direction. Directions are zero-based. It is an error if not 0 <= dir < SpaceDim. The neighbor of an Empty ProblemDomain is an Empty Box of the appropriate type. If a_dir is a periodic direction, will return an empty Box.
Referenced by contains().
|
friend |
Returns a face-centered Box at the high side of a_pd.
Returns the edge-centered Box (in direction a_dir) defining the high side of the argument ProblemDomain. The return Box will have the given length in the given direction. Directions are zero-based. It is an error if not 0 <= dir < SpaceDim. The neighbor of an Empty ProblemDomain is an Empty Box of the appropriate type. If a_dir is a periodic direction, will return an empty Box.
Referenced by contains().
|
friend |
Returns the cell-centered Box adjacent to the low side of a_pd.
Returns the cell centered Box of the given length adjacent to the argument ProblemDomain on the low end along the given coordinate direction. The return Box is identical to the argument ProblemDomain in the other directions. The return ProblemDomain and the argument ProblemDomain have an empty intersection.
NOTES:
Directions are zero-based. It is an error if not 0 <= dir < SpaceDim. The neighbor of an Empty ProblemDomain is an Empty Box of the appropriate type. If a_dir is a periodic direction, will return an empty Box as well.
Referenced by contains().
|
friend |
Returns the cell-centered Box adjacent to the low side of a_pd.
Returns the cell centered Box of the given length adjacent to the argument ProblemDomain on the high end along the given coordinate direction. The return Box is identical to the argument ProblemDomain in the other directions. The return Box and the argument ProblemDomain have an empty intersection.
NOTES:
Directions are zero-based. It is an error if not 0 <= dir < SpaceDim. The neighbor of an Empty ProblemDomain is an Empty Box of the appropriate type. If a_dir is a periodic direction, will return an empty Box.
Referenced by contains().
|
friend |
Return a ProblemDomain which is a refinement of a_probdomain.
Returns a ProblemDomain that is the argument ProblemDomain refined by given (positive) refinement ratio. The Empty ProblemDomain is not modified by this function.
|
friend |
Refinement function.
Returns a ProblemDomain that is the argument ProblemDomain refined by given (positive) refinement ratio. The Empty ProblemDomain is not modified by this function.
|
friend |
Coarsening function.
Returns a ProblemDomain that is the argument ProblemDomain coarsened by given (positive) refinement ratio. The Empty ProblemDomain is not modified by this function.
|
friend |
Coarsening function.
Returns a ProblemDomain that is the argument ProblemDomain coarsened by given (positive) refinement ratio. The Empty ProblemDomain is not modified by this function.
|
friend |
Write an ASCII representation to the ostream.
|
friend |
Read from istream.
|
protected |
Periodicity info
Referenced by contains(), define(), image(), isPeriodic(), operator=(), operator==(), and ProblemDomain().
|
protected |
Domain index extents
Referenced by contains(), define(), domainBox(), grow(), growHi(), growLo(), image(), isEmpty(), operator<(), operator=(), operator==(), shiftIt(), size(), and unshiftIt().
|
protected |
Shift iterator for this ProblemDomain
Referenced by define(), operator=(), shiftIt(), shiftIterator(), and unshiftIt().