#include <DisjointBoxLayout.H>
DisjointBoxLayout is-a BoxLayout that has a concept of disjointedness of the boxes. DisjointBoxLayout is only different from BoxLayout in that it has a method isDisjoint(). DisjointBoxLayouts also have a ProblemDomain member to ensure disjointness in the case of periodic boundary conditions, among other things.
Modification functions | |
void | coarsen (DisjointBoxLayout &output, const DisjointBoxLayout &input, int refinement) |
void | refine (DisjointBoxLayout &output, const DisjointBoxLayout &input, int refinement) |
virtual void | close () |
void | setDomain (const ProblemDomain &a_domain) |
virtual void | deepCopy (const DisjointBoxLayout &a_source) |
virtual void | deepCopy (const BoxLayout &a_source) |
virtual void | deepCopy (const BoxLayout &a_source, const ProblemDomain &a_physDomain) |
void | degenerate (DisjointBoxLayout &a_to, const SliceSpec &a_ss) const |
Public Member Functions | |
const ProblemDomain & | physDomain () const |
Constructors, destructors, defines | |
DisjointBoxLayout () | |
DisjointBoxLayout (const Vector< Box > &a_boxes, const Vector< int > &a_procIDs) | |
DisjointBoxLayout (const Vector< Box > &a_boxes, const Vector< int > &a_procIDs, const ProblemDomain &a_physDomain) | |
virtual | ~DisjointBoxLayout () |
virtual void | define (const Vector< Box > &a_boxes, const Vector< int > &a_procIDs) |
void | defineAndLoadBalance (const Vector< Box > &a_boxes, Vector< int > *a_procIDs) |
void | defineAndLoadBalance (const Vector< Box > &a_boxes, Vector< int > *a_procIDs, const ProblemDomain &a_physDomain) |
void | define (const BoxLayout &a_layout) |
void | define (const BoxLayout &a_layout, const ProblemDomain &a_physDomain) |
virtual void | define (const Vector< Box > &a_boxes, const Vector< int > &a_procIDs, const ProblemDomain &a_physDomain) |
virtual void | define_pd (const Vector< Box > &a_boxes, const Vector< int > &a_procIDs, const ProblemDomain &a_physDomain) |
Checks | |
bool | isDisjoint () const |
bool | checkPeriodic (const ProblemDomain &a_domain) const |
bool | checkDomains (const DisjointBoxLayout &a_dbl) const |
Protected Member Functions | |
void | computeNeighbors () |
virtual void | closeN (RefCountedPtr< Vector< Vector< std::pair< int, unsigned int > > > > neighbors) |
virtual void | closeNO () |
Protected Attributes | |
ProblemDomain | m_physDomain |
RefCountedPtr< Vector< Vector < std::pair< int, unsigned int > > > > | m_neighbors |
Friends | |
class | Copier |
class | NeighborIterator |
Neighbor functions | |
void | adjCellLo (DisjointBoxLayout &a_output, const DisjointBoxLayout &a_input, int a_dir, int a_len=1) |
void | adjCellHi (DisjointBoxLayout &a_output, const DisjointBoxLayout &a_input, int a_dir, int a_len=1) |
DisjointBoxLayout::DisjointBoxLayout | ( | ) |
Construct BoxLayout with no boxes.
DisjointBoxLayout::DisjointBoxLayout | ( | const Vector< Box > & | a_boxes, | |
const Vector< int > & | a_procIDs, | |||
const ProblemDomain & | a_physDomain | |||
) |
virtual DisjointBoxLayout::~DisjointBoxLayout | ( | ) | [inline, virtual] |
Ref-counted destruction. Once the last reference to the implementation of this class is destroyed, the data members are cleaned up.
virtual void DisjointBoxLayout::define | ( | const Vector< Box > & | a_boxes, | |
const Vector< int > & | a_procIDs | |||
) | [virtual] |
Define this DisjointBoxLayout from a Vector of Boxes. This is a wrapper for a call to BoxLayout::define, required because DisjointBoxLayout::define is overloaded and the compiler will not look into the base class for name resolution.
Reimplemented from BoxLayout.
Referenced by define_pd().
void DisjointBoxLayout::defineAndLoadBalance | ( | const Vector< Box > & | a_boxes, | |
Vector< int > * | a_procIDs, | |||
const ProblemDomain & | a_physDomain | |||
) |
void DisjointBoxLayout::define | ( | const BoxLayout & | a_layout | ) |
Shallow define. Only way to promote a BoxLayout. If BoxLayout has been closed, then this method checks isDisjoint and throws an error if not disjoint. If a_layout is disjoint, then this object becomes a closed DisjointBoxLayout object.
void DisjointBoxLayout::define | ( | const BoxLayout & | a_layout, | |
const ProblemDomain & | a_physDomain | |||
) |
Shallow define. Only way to promote a BoxLayout. If BoxLayout has been closed, then this method checks isDisjoint and throws an error if not disjoint. If a_layout is disjoint, then this object becomes a closed DisjointBoxLayout object.
virtual void DisjointBoxLayout::define | ( | const Vector< Box > & | a_boxes, | |
const Vector< int > & | a_procIDs, | |||
const ProblemDomain & | a_physDomain | |||
) | [virtual] |
Define this DisjointBoxLayout from a Vector of Boxes. This is a wrapper for a call to BoxLayout::define, required because DisjointBoxLayout::define is overloaded and the compiler will not look into the base class for name resolution.
virtual void DisjointBoxLayout::define_pd | ( | const Vector< Box > & | a_boxes, | |
const Vector< int > & | a_procIDs, | |||
const ProblemDomain & | a_physDomain | |||
) | [inline, virtual] |
Define this DisjointBoxLayout from a Vector of Boxes. Same as define.
References define().
bool DisjointBoxLayout::isDisjoint | ( | ) | const |
Returns true
if this object contains a disjoint union of Boxes.
The Disjoint testing algorithm assumes that the boxes are CELL-Centered boxes. We can expand the algorithm when someone needs it. bvs
bool DisjointBoxLayout::checkPeriodic | ( | const ProblemDomain & | a_domain | ) | const |
Checks to see that problem domains are compatible. To be compatible:
There are no checks in non-periodic directions, since DisjointBoxLayouts don't care about physical domains except in the periodic case.
bool DisjointBoxLayout::checkDomains | ( | const DisjointBoxLayout & | a_dbl | ) | const |
Performs problem domain check when we don't have direct access to a problemDomain.
Returns true
if this and a_dbl have compatible ProblemDomains.
virtual void DisjointBoxLayout::close | ( | ) | [virtual] |
Mark this DisjointBoxLayout as complete and unchangeable.
Reimplemented from BoxLayout.
void DisjointBoxLayout::setDomain | ( | const ProblemDomain & | a_domain | ) | [inline] |
Set ProblemDomain. Useful when using addBox() and trying to use closeNoSort()
References MayDay::Error(), BoxLayout::m_closed, and m_physDomain.
virtual void DisjointBoxLayout::deepCopy | ( | const DisjointBoxLayout & | a_source | ) | [virtual] |
Create new open DisjointBoxLayout with copied data.
Doesn't check for disjointness, since a_source is already guaranteed to be disjoint. Also copies problem domain info.
virtual void DisjointBoxLayout::deepCopy | ( | const BoxLayout & | a_source | ) | [virtual] |
Create new open DisjointBoxLayout with copied data.
Checks that the source BoxLayout isDisjoint, throws an error if it is not. Otherwise, same as BoxLayout::deepCopy.
Reimplemented from BoxLayout.
virtual void DisjointBoxLayout::deepCopy | ( | const BoxLayout & | a_source, | |
const ProblemDomain & | a_physDomain | |||
) | [virtual] |
Create new open DisjointBoxLayout with copied data.
Checks that the source BoxLayout isDisjoint, throws an error if it is not. Otherwise, same as BoxLayout::deepCopy.
void DisjointBoxLayout::degenerate | ( | DisjointBoxLayout & | a_to, | |
const SliceSpec & | a_ss | |||
) | const |
Makes a_to a one-cell-thick version of *this -- sliced at a_ss.position along the a_ss.direction'th axis. If a_ss.position is outside the range of *this, that's a fatal error.
Referenced by LevelData< T >::degenerate().
const ProblemDomain& DisjointBoxLayout::physDomain | ( | ) | const |
Referenced by MergeSolver< T >::solve().
void DisjointBoxLayout::computeNeighbors | ( | ) | [protected] |
virtual void DisjointBoxLayout::closeN | ( | RefCountedPtr< Vector< Vector< std::pair< int, unsigned int > > > > | neighbors | ) | [protected, virtual] |
virtual void DisjointBoxLayout::closeNO | ( | ) | [protected, virtual] |
friend class Copier [friend] |
friend class NeighborIterator [friend] |
void coarsen | ( | DisjointBoxLayout & | output, | |
const DisjointBoxLayout & | input, | |||
int | refinement | |||
) | [friend] |
Coarsen a DisjointBoxLayout:
output is first deepCopy'ed from input, then coarsen(refinement) is called on each box of output.
output returns from this function closed.
LayoutIterators and DataIterators from input and output can be used interchangeably.
void refine | ( | DisjointBoxLayout & | output, | |
const DisjointBoxLayout & | input, | |||
int | refinement | |||
) | [friend] |
Refine a DisjointBoxLayout:
output is first deepCopy'ed from input, then refine(refinement) is called on each box of output.
output returns from this function closed.
LayoutIterators and DataIterators from input and output can be used interchangeably.
void adjCellLo | ( | DisjointBoxLayout & | a_output, | |
const DisjointBoxLayout & | a_input, | |||
int | a_dir, | |||
int | a_len = 1 | |||
) | [friend] |
Returns the set of boxes which you get from calling Box::adjCellLo on each box in input. Output must be open, is closed upon exit from this function. A negative length results in the set of boxes of width a_len on the low side of, but _inside_ the original boxes.
void adjCellHi | ( | DisjointBoxLayout & | a_output, | |
const DisjointBoxLayout & | a_input, | |||
int | a_dir, | |||
int | a_len = 1 | |||
) | [friend] |
Returns the set of boxes which result from calling Box::adjCellHi on each box in input. Output must be open, will be closed upon exiting this function. A negative length results in the set of boxes of width a_len on the low side of, but _inside_ the original boxes.
ProblemDomain DisjointBoxLayout::m_physDomain [protected] |
Referenced by setDomain().
RefCountedPtr<Vector<Vector<std::pair<int, unsigned int> > > > DisjointBoxLayout::m_neighbors [protected] |