#include <Copier.H>
class to handle the organization of data from a LevelData to a BoxLayoutData defined over the same index space. The idea behind this object is twofold: A) there is a significant amount of information that can be computed once and reused from one copy to the next for a LevelData and BoxLayoutData that have unchanging BoxLayouts underneath them. In these cases, LevelData::copyTo methods has an optional argument. That way, in cases where the operation is only performed a single time, we do not waste our time building optimizing data, etc. B) when we interface with KeLP, this class maps quite well with the existing KeLP API (class MotionPlan).
pains have been taken to not have this class be templated. Thus it does not actually perform the copying itself (which would require knowledge of the template class type). It provides an iterator interface to MotionItems that specify the required work. LevelData provides the copyTo methods.
Public Member Functions | |
Copier () | |
null constructor, copy constructor and operator= can be compiler defined. | |
Copier (const Copier &a_rhs) | |
Copier (const DisjointBoxLayout &a_level, const BoxLayout &a_dest, bool a_exchange=false) | |
Copier (const DisjointBoxLayout &a_level, const BoxLayout &a_dest, const ProblemDomain &a_domain, bool a_exchange=false) | |
this constructor contains support for periodic BC's | |
Copier (const DisjointBoxLayout &a_level, const BoxLayout &a_dest, const IntVect &a_destGhost, bool a_exchange=false) | |
Copier to copy data into the valid and invalid regions of a_dest from a_level. | |
Copier (const DisjointBoxLayout &a_level, const BoxLayout &a_dest, const ProblemDomain &a_domain, const IntVect &a_destGhost, bool a_exchange=false) | |
Copier to copy data into the valid and invalid regions of a_dest from a_level with support for periodic BCs. | |
virtual | ~Copier () |
virtual void | define (const DisjointBoxLayout &a_level, const BoxLayout &a_dest, bool a_exchange=false) |
virtual void | define (const DisjointBoxLayout &a_level, const BoxLayout &a_dest, const ProblemDomain &a_domain, bool a_exchange=false) |
contains support for periodic BCs | |
virtual void | define (const DisjointBoxLayout &a_level, const BoxLayout &a_dest, const IntVect &a_destGhost, bool a_exchange=false) |
virtual void | define (const BoxLayout &a_level, const BoxLayout &a_dest, const ProblemDomain &a_domain, const IntVect &a_destGhost, bool a_exchange=false) |
contains support for periodic BCs | |
virtual void | exchangeDefine (const DisjointBoxLayout &a_grids, const IntVect &a_ghost) |
alternative version of define for exchange copiers that uses new optimized neighborIterator | |
void | ghostDefine (const DisjointBoxLayout &a_src, const DisjointBoxLayout &a_dest, const ProblemDomain &a_domain, const IntVect &a_srcGhost) |
performs the computation necessary for moving from ghost+valid cells to valid. | |
virtual void | clear () |
Copier & | operator= (const Copier &b) |
void | reverse () |
void | trimEdges (const DisjointBoxLayout &a_exchangedLayout, const IntVect &ghost) |
void | coarsen (int a_refRatio) |
int | print () const |
bool | bufferAllocated () const |
void | setBufferAllocated (bool arg) const |
int | numLocalCellsToCopy () const |
int | numFromCellsToCopy () const |
int | numToCellsToCopy () const |
bool | isDefined () const |
Public Attributes | |
CopierBuffer | m_buffers |
Protected Member Functions | |
void | trimMotion (const DisjointBoxLayout &a_exchangedLayout, const IntVect &a_ghost, const Vector< MotionItem * > &a_oldItems, Vector< MotionItem * > &a_newItems) |
void | sort () |
const ProblemDomain & | getPhysDomain (const DisjointBoxLayout &a_level) const |
Protected Attributes | |
Vector< MotionItem * > | m_localMotionPlan |
Vector< MotionItem * > | m_fromMotionPlan |
Vector< MotionItem * > | m_toMotionPlan |
bool | buffersAllocated |
DisjointBoxLayout | m_originPlan |
BoxLayout | m_dest |
bool | m_isDefined |
Static Protected Attributes | |
static Pool | s_motionItemPool |
Friends | |
class | CopyIterator |
void | dumpmemoryatexit () |
Copier::Copier | ( | ) | [inline] |
null constructor, copy constructor and operator= can be compiler defined.
Copier::Copier | ( | const Copier & | a_rhs | ) |
Copier::Copier | ( | const DisjointBoxLayout & | a_level, | |
const BoxLayout & | a_dest, | |||
bool | a_exchange = false | |||
) |
Copier::Copier | ( | const DisjointBoxLayout & | a_level, | |
const BoxLayout & | a_dest, | |||
const ProblemDomain & | a_domain, | |||
bool | a_exchange = false | |||
) |
this constructor contains support for periodic BC's
Copier::Copier | ( | const DisjointBoxLayout & | a_level, | |
const BoxLayout & | a_dest, | |||
const IntVect & | a_destGhost, | |||
bool | a_exchange = false | |||
) |
Copier to copy data into the valid and invalid regions of a_dest from a_level.
Copier::Copier | ( | const DisjointBoxLayout & | a_level, | |
const BoxLayout & | a_dest, | |||
const ProblemDomain & | a_domain, | |||
const IntVect & | a_destGhost, | |||
bool | a_exchange = false | |||
) |
Copier to copy data into the valid and invalid regions of a_dest from a_level with support for periodic BCs.
virtual Copier::~Copier | ( | ) | [virtual] |
virtual void Copier::define | ( | const DisjointBoxLayout & | a_level, | |
const BoxLayout & | a_dest, | |||
bool | a_exchange = false | |||
) | [virtual] |
Reimplemented in CornerCopier.
Referenced by LevelData< T >::exchange(), and BoxLayoutData< T >::generalCopyTo().
virtual void Copier::define | ( | const DisjointBoxLayout & | a_level, | |
const BoxLayout & | a_dest, | |||
const ProblemDomain & | a_domain, | |||
bool | a_exchange = false | |||
) | [virtual] |
virtual void Copier::define | ( | const DisjointBoxLayout & | a_level, | |
const BoxLayout & | a_dest, | |||
const IntVect & | a_destGhost, | |||
bool | a_exchange = false | |||
) | [virtual] |
Reimplemented in CornerCopier.
virtual void Copier::define | ( | const BoxLayout & | a_level, | |
const BoxLayout & | a_dest, | |||
const ProblemDomain & | a_domain, | |||
const IntVect & | a_destGhost, | |||
bool | a_exchange = false | |||
) | [virtual] |
virtual void Copier::exchangeDefine | ( | const DisjointBoxLayout & | a_grids, | |
const IntVect & | a_ghost | |||
) | [virtual] |
alternative version of define for exchange copiers that uses new optimized neighborIterator
void Copier::ghostDefine | ( | const DisjointBoxLayout & | a_src, | |
const DisjointBoxLayout & | a_dest, | |||
const ProblemDomain & | a_domain, | |||
const IntVect & | a_srcGhost | |||
) |
performs the computation necessary for moving from ghost+valid cells to valid.
instead of copying from the valid of a_src to the valid+ghost of a_dest, this routine defines a Copier that moves data from the ghost+valid region of a_src to the valid region of a_dest. This is used by LevelFluxRegister.
virtual void Copier::clear | ( | ) | [virtual] |
void Copier::reverse | ( | ) |
reverse the communication of this Copier.
Reimplemented in ReductionCopier, and SpreadingCopier.
void Copier::trimEdges | ( | const DisjointBoxLayout & | a_exchangedLayout, | |
const IntVect & | ghost | |||
) |
Under the right algorithmic circumstances, a user might know that they no not need corner cells filled in exchanges, what they really need are just sufficient ghost cells in each CH_SPACEDIM direction for each valid cell. This operation eliminates copy operations that do not contribute to such cells. Under reasonable 3D configurations this can eliminate more than half the copy operations.
void Copier::coarsen | ( | int | a_refRatio | ) |
int Copier::print | ( | ) | const |
Reimplemented in ReductionCopier, and SpreadingCopier.
bool Copier::bufferAllocated | ( | ) | const |
void Copier::setBufferAllocated | ( | bool | arg | ) | const |
int Copier::numLocalCellsToCopy | ( | ) | const |
int Copier::numFromCellsToCopy | ( | ) | const |
int Copier::numToCellsToCopy | ( | ) | const |
bool Copier::isDefined | ( | ) | const [inline] |
void Copier::trimMotion | ( | const DisjointBoxLayout & | a_exchangedLayout, | |
const IntVect & | a_ghost, | |||
const Vector< MotionItem * > & | a_oldItems, | |||
Vector< MotionItem * > & | a_newItems | |||
) | [protected] |
void Copier::sort | ( | ) | [protected] |
const ProblemDomain& Copier::getPhysDomain | ( | const DisjointBoxLayout & | a_level | ) | const [protected] |
friend class CopyIterator [friend] |
Reimplemented in ReductionCopier, and SpreadingCopier.
void dumpmemoryatexit | ( | ) | [friend] |
Reimplemented in ReductionCopier, and SpreadingCopier.
Vector<MotionItem*> Copier::m_localMotionPlan [protected] |
Referenced by CopyIterator::CopyIterator().
Vector<MotionItem*> Copier::m_fromMotionPlan [protected] |
Referenced by CopyIterator::CopyIterator().
Vector<MotionItem*> Copier::m_toMotionPlan [protected] |
Referenced by CopyIterator::CopyIterator().
Pool Copier::s_motionItemPool [static, protected] |
bool Copier::buffersAllocated [mutable, protected] |
DisjointBoxLayout Copier::m_originPlan [protected] |
BoxLayout Copier::m_dest [protected] |
bool Copier::m_isDefined [protected] |
Referenced by isDefined().