Chombo + EB + MF  3.2
Public Member Functions | Protected Member Functions | Protected Attributes | Friends | List of all members
DisjointBoxLayout Class Reference

A BoxLayout that has a concept of disjointedness. More...

#include <DisjointBoxLayout.H>

Inheritance diagram for DisjointBoxLayout:
Inheritance graph
[legend]

Public Member Functions

const ProblemDomainphysDomain () const
 
virtual void closeNoSort ()
 
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)
 
 DisjointBoxLayout (const LayoutData< Box > &a_newLayout)
 
virtual ~DisjointBoxLayout ()
 
unsigned long long int numPointsThisProc () const
 
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)
 
virtual void define (const BoxLayout &a_layout)
 
virtual 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
 
- Public Member Functions inherited from BoxLayout
Vector< BoxboxArray () const
 
Vector< int > procIDs () const
 
unsigned int indexI (const LayoutIndex &) const
 
const Vector< Entry > * rawPtr () const
 
 BoxLayout ()
 
 BoxLayout (const Vector< Box > &a_boxes, const Vector< int > &a_procIDs)
 
 BoxLayout (const LayoutData< Box > &a_newLayout)
 
void transform (BaseTransform &a_transform)
 
virtual ~BoxLayout ()
 
BoxLayoutoperator= (const BoxLayout &a_rhs)
 
virtual void define (const LayoutData< Box > &a_newLayout)
 
Box operator[] (const LayoutIndex &it) const
 
Box operator[] (const LayoutIterator &it) const
 
Box operator[] (const DataIterator &it) const
 
Box get (const LayoutIndex &it) const
 
Box get (const DataIterator &it) const
 
Box get (const LayoutIterator &it) const
 
unsigned int procID (const LayoutIndex &a_index) const
 
bool sameBoxes (const BoxLayout &a_layout) const
 Checks whether this layout has the same boxes in the same order as a_layout. More...
 
int numBoxes (const int procID) const
 Returns the number of boxes assigned to a given procID. More...
 
long long numCells () const
 Return number of cells in all boxes of entire box layout. More...
 
unsigned int size () const
 Returns the total number of boxes in the BoxLayout. More...
 
unsigned int index (const LayoutIndex &index) const
 
unsigned int lindex (const DataIndex &index) const
 
bool ptrEqual (const BoxLayout &rhs) const
 
bool operator== (const BoxLayout &rhs) const
 check to see if BoxLayouts are equivalent More...
 
bool operator< (const BoxLayout &rhs) const
 
int refCount () const
 
bool eq (const BoxLayout &rhs) const
 
bool isClosed () const
 
bool isSorted () const
 
bool check (const LayoutIndex &index) const
 
bool compatible (const BoxLayout &a_rhs) const
 
DataIterator dataIterator () const
 Parallel iterator. More...
 
TimedDataIterator timedDataIterator () const
 
LayoutIterator layoutIterator () const
 Iterator that processes through ALL the boxes in a BoxLayout. More...
 
void print () const
 
void p () const
 
bool coarsenable (int refRatio) const
 
bool coarsenable (IntVect refRatio) const
 
void growSide (int idir, int length, Side::LoHiSide a_sd)
 
void surroundingNodes ()
 
void convertOldToNew (const IntVect &a_permutation, const IntVect &a_sign, const IntVect &a_translation)
 
void convertNewToOld (const IntVect &a_permutation, const IntVect &a_sign, const IntVect &a_translation)
 
void enclosedCells ()
 
void coarsen (int a_ref)
 
void refine (int a_ref)
 
void grow (int a_growth)
 
void grow (IntVect a_growth)
 
void grow (int a_dir, int a_growth)
 
void shift (const IntVect &a_iv)
 
void shiftHalf (const IntVect &a_iv)
 
void adjCellSide (int a_dir, int a_len, Side::LoHiSide a_sd)
 
void operator &= (const Box &a_box)
 
void operator &= (const ProblemDomain &a_domain)
 
void setProcID (const LayoutIndex &a_index, unsigned int a_procID)
 
void sort ()
 

Protected Member Functions

void computeNeighbors ()
 
virtual void closeN (RefCountedPtr< Vector< Vector< std::pair< int, LayoutIndex > > > > neighbors)
 
virtual void closeNO ()
 
- Protected Member Functions inherited from BoxLayout
void buildDataIndex ()
 
void checkDefine (const Vector< Box > &a_boxes, const Vector< int > &procIDs)
 

Protected Attributes

ProblemDomain m_physDomain
 
RefCountedPtr< Vector< Vector< std::pair< int, LayoutIndex > > > > m_neighbors
 
- Protected Attributes inherited from BoxLayout
RefCountedPtr< Vector< Entry > > m_boxes
 
RefCountedPtr< int > m_layout
 
RefCountedPtr< bool > m_closed
 
RefCountedPtr< bool > m_sorted
 
RefCountedPtr< DataIteratorm_dataIterator
 
RefCountedPtr< Vector< LayoutIndex > > m_indicies
 

Friends

class Copier
 
class NeighborIterator
 
Neighbor functions
void adjCellLo (DisjointBoxLayout &a_output, const DisjointBoxLayout &a_input, int a_dir, int a_len)
 
void adjCellHi (DisjointBoxLayout &a_output, const DisjointBoxLayout &a_input, int a_dir, int a_len)
 
- Friends inherited from BoxLayout

Modification functions

void coarsen (DisjointBoxLayout &output, const DisjointBoxLayout &input, int refinement)
 
void coarsen (DisjointBoxLayout &output, const DisjointBoxLayout &input, IntVect refinement)
 generalized coarsen which allows for anisotropic coarsening More...
 
void refine (DisjointBoxLayout &output, const DisjointBoxLayout &input, int refinement)
 
void refine (DisjointBoxLayout &output, const DisjointBoxLayout &input, IntVect 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, bool a_maintainProcAssign=false) const
 

Detailed Description

A BoxLayout that has a concept of disjointedness.

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.

Constructor & Destructor Documentation

◆ DisjointBoxLayout() [1/4]

DisjointBoxLayout::DisjointBoxLayout ( )

Construct BoxLayout with no boxes.

◆ DisjointBoxLayout() [2/4]

DisjointBoxLayout::DisjointBoxLayout ( const Vector< Box > &  a_boxes,
const Vector< int > &  a_procIDs 
)

Construct from a Vector of Boxes and optionally a Vector of processor assignments. If the processor assignment Vector is present, it must be either zero-length or the same length as the Box Vector. On exit, the DisjointBoxLayout will be closed.

◆ DisjointBoxLayout() [3/4]

DisjointBoxLayout::DisjointBoxLayout ( const Vector< Box > &  a_boxes,
const Vector< int > &  a_procIDs,
const ProblemDomain a_physDomain 
)

Construct from a Vector of Boxes and optionally a Vector of processor assignments. If the processor assignment Vector is present, it must be either zero-length or the same length as the Box Vector. On exit, the DisjointBoxLayout will be closed.

◆ DisjointBoxLayout() [4/4]

DisjointBoxLayout::DisjointBoxLayout ( const LayoutData< Box > &  a_newLayout)

Construct from a LayoutData<Box>. On exit, the BoxLayout will be closed.

◆ ~DisjointBoxLayout()

virtual DisjointBoxLayout::~DisjointBoxLayout ( )
inlinevirtual

Ref-counted destruction. Once the last reference to the implementation of this class is destroyed, the data members are cleaned up.

References define(), defineAndLoadBalance(), and numPointsThisProc().

Member Function Documentation

◆ numPointsThisProc()

unsigned long long int DisjointBoxLayout::numPointsThisProc ( ) const

Referenced by ~DisjointBoxLayout().

◆ define() [1/4]

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 BlockBaseRegister< FArrayBox >::createDstBoxLayout(), BlockBaseRegister< FArrayBox >::createExchangeBoxLayout(), BlockBaseRegister< FArrayBox >::createSrcBoxLayout(), define_pd(), readLevel(), and ~DisjointBoxLayout().

◆ defineAndLoadBalance() [1/2]

void DisjointBoxLayout::defineAndLoadBalance ( const Vector< Box > &  a_boxes,
Vector< int > *  a_procIDs 
)

Like the define() that takes the same two arguments, except this one also initializes a_procIDs if it's not NULL. In that case, the passed-in a_procIDs should point to a Vector of size 0.

Referenced by ~DisjointBoxLayout().

◆ defineAndLoadBalance() [2/2]

void DisjointBoxLayout::defineAndLoadBalance ( const Vector< Box > &  a_boxes,
Vector< int > *  a_procIDs,
const ProblemDomain a_physDomain 
)

Like the define() that takes the same two arguments, except this one also initializes a_procIDs if it's not NULL. In that case, the passed-in a_procIDs should point to a Vector of size 0.

◆ define() [2/4]

virtual void DisjointBoxLayout::define ( const BoxLayout a_layout)
virtual

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.

◆ define() [3/4]

virtual void DisjointBoxLayout::define ( const BoxLayout a_layout,
const ProblemDomain a_physDomain 
)
virtual

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. If BoxLayout has been closed, and is sorted, the neighbour iterator is rebuilt (now with knowledge of the problem domain).

◆ define() [4/4]

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.

◆ define_pd()

virtual void DisjointBoxLayout::define_pd ( const Vector< Box > &  a_boxes,
const Vector< int > &  a_procIDs,
const ProblemDomain a_physDomain 
)
inlinevirtual

Define this DisjointBoxLayout from a Vector of Boxes. Same as define.

References checkDomains(), checkPeriodic(), close(), define(), and isDisjoint().

◆ isDisjoint()

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

Referenced by define_pd().

◆ checkPeriodic()

bool DisjointBoxLayout::checkPeriodic ( const ProblemDomain a_domain) const

Checks to see that problem domains are compatible. To be compatible:

  • a_domain and the ProblemDomain in this DisjointBoxLayout must have the same periodicity.
  • The ProblemDomains must be periodic in the same dimensions.
  • In all periodic directions, the period must be the same.

There are no checks in non-periodic directions, since DisjointBoxLayouts don't care about physical domains except in the periodic case.

Referenced by define_pd().

◆ checkDomains()

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.

Referenced by define_pd().

◆ close()

virtual void DisjointBoxLayout::close ( )
virtual

◆ setDomain()

void DisjointBoxLayout::setDomain ( const ProblemDomain a_domain)
inline

Set ProblemDomain. Useful when using addBox() and trying to use closeNoSort()

References adjCellHi, adjCellLo, closeNoSort(), coarsen, deepCopy(), degenerate(), m_physDomain, physDomain(), and refine.

◆ deepCopy() [1/3]

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.

Referenced by setDomain().

◆ deepCopy() [2/3]

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.

◆ deepCopy() [3/3]

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.

◆ degenerate()

void DisjointBoxLayout::degenerate ( DisjointBoxLayout a_to,
const SliceSpec a_ss,
bool  a_maintainProcAssign = false 
) 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. If a_maintainProcAssign = true, maintain processor assignments in the process (even if it breaks load balancing)

Referenced by LevelData< BaseFab< int > >::degenerate(), LevelData< BaseFab< int > >::degenerateLocalOnly(), and setDomain().

◆ physDomain()

const ProblemDomain& DisjointBoxLayout::physDomain ( ) const

◆ closeNoSort()

virtual void DisjointBoxLayout::closeNoSort ( )
virtual

Reimplemented from BoxLayout.

Referenced by setDomain().

◆ computeNeighbors()

void DisjointBoxLayout::computeNeighbors ( )
protected

◆ closeN()

virtual void DisjointBoxLayout::closeN ( RefCountedPtr< Vector< Vector< std::pair< int, LayoutIndex > > > >  neighbors)
protectedvirtual

◆ closeNO()

virtual void DisjointBoxLayout::closeNO ( )
protectedvirtual

Friends And Related Function Documentation

◆ Copier

friend class Copier
friend

◆ NeighborIterator

friend class NeighborIterator
friend

◆ coarsen [1/2]

void coarsen ( DisjointBoxLayout output,
const DisjointBoxLayout input,
int  refinement 
)
friend

Coarsen a DisjointBoxLayout:

  • output must be open
  • input must be closed
  • refinement must be a positive non-zero integer
  • output and input do not share an implementation.

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.

Referenced by coarsen_dbl(), and setDomain().

◆ coarsen [2/2]

void coarsen ( DisjointBoxLayout output,
const DisjointBoxLayout input,
IntVect  refinement 
)
friend

generalized coarsen which allows for anisotropic coarsening

◆ refine [1/2]

void refine ( DisjointBoxLayout output,
const DisjointBoxLayout input,
int  refinement 
)
friend

Refine a DisjointBoxLayout:

  • output must be open
  • input must be closed
  • refinement must be a positive non-zero integer
  • output and input do not share an implementation.

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.

Referenced by refine_dbl(), and setDomain().

◆ refine [2/2]

void refine ( DisjointBoxLayout output,
const DisjointBoxLayout input,
IntVect  refinement 
)
friend

Refine a DisjointBoxLayout anisotropically:

  • output must be open
  • input must be closed
  • refinement must be a an IntVect with positive non-zero integer components
  • output and input do not share an implementation.

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.

◆ adjCellLo

void adjCellLo ( DisjointBoxLayout a_output,
const DisjointBoxLayout a_input,
int  a_dir,
int  a_len 
)
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.

Referenced by adjCellLo_dbl(), refine_dbl(), and setDomain().

◆ adjCellHi

void adjCellHi ( DisjointBoxLayout a_output,
const DisjointBoxLayout a_input,
int  a_dir,
int  a_len 
)
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.

Referenced by adjCellHi_dbl(), refine_dbl(), and setDomain().

Member Data Documentation

◆ m_physDomain

ProblemDomain DisjointBoxLayout::m_physDomain
protected

Referenced by setDomain().

◆ m_neighbors

RefCountedPtr<Vector<Vector<std::pair<int, LayoutIndex> > > > DisjointBoxLayout::m_neighbors
protected

The documentation for this class was generated from the following file: