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

A strange but true thing to make copying from one boxlayoutdata to another fast. More...

#include <Copier.H>

Inheritance diagram for Copier:
Inheritance graph
[legend]

Public Member Functions

 Copier ()
 null constructor, copy constructor and operator= can be compiler defined. More...
 
 Copier (const Copier &a_rhs)
 
 Copier (const DisjointBoxLayout &a_level, const BoxLayout &a_dest, bool a_exchange=false, IntVect a_shift=IntVect::Zero)
 
 Copier (const DisjointBoxLayout &a_level, const BoxLayout &a_dest, const ProblemDomain &a_domain, bool a_exchange=false, IntVect a_shift=IntVect::Zero)
 this constructor contains support for periodic BC's More...
 
 Copier (const DisjointBoxLayout &a_level, const BoxLayout &a_dest, const IntVect &a_destGhost, bool a_exchange=false, IntVect a_shift=IntVect::Zero)
 Copier to copy data into the valid and invalid regions of a_dest from a_level. More...
 
 Copier (const DisjointBoxLayout &a_level, const BoxLayout &a_dest, const ProblemDomain &a_domain, const IntVect &a_destGhost, bool a_exchange=false, IntVect a_shift=IntVect::Zero)
 Copier to copy data into the valid and invalid regions of a_dest from a_level with support for periodic BCs. More...
 
virtual ~Copier ()
 
virtual void define (const DisjointBoxLayout &a_level, const BoxLayout &a_dest, bool a_exchange=false, IntVect a_shift=IntVect::Zero)
 
virtual void define (const DisjointBoxLayout &a_level, const BoxLayout &a_dest, const ProblemDomain &a_domain, bool a_exchange=false, IntVect a_shift=IntVect::Zero)
 contains support for periodic BCs More...
 
virtual void define (const DisjointBoxLayout &a_level, const BoxLayout &a_dest, const IntVect &a_destGhost, bool a_exchange=false, IntVect a_shift=IntVect::Zero)
 
virtual void define (const BoxLayout &a_level, const BoxLayout &a_dest, const ProblemDomain &a_domain, const IntVect &a_destGhost, bool a_exchange=false, IntVect a_shift=IntVect::Zero)
 contains support for periodic BCs More...
 
virtual void exchangeDefine (const DisjointBoxLayout &a_grids, const IntVect &a_ghost, bool a_includeSelf=false)
 alternative version of define for exchange copiers that uses new optimized neighborIterator More...
 
void defineFixedBoxSize (const DisjointBoxLayout &a_src, const LMap &a_lmap, const IntVect &a_ghost, const ProblemDomain &a_domain, bool a_includeSelf=false, bool a_reverse=false)
 
void defineFixedBoxSize (const DisjointBoxLayout &a_src, const LMap &a_lmapSrc, const IntVect &a_refRatioSrc, const DisjointBoxLayout &a_dst, const LMap &a_lmapDst, const IntVect &a_refRatioDst, const IntVect &a_ghost, const ProblemDomain &a_domain, bool a_reverse=false)
 
void defineFixedSizeNodesCollect (const DisjointBoxLayout &a_layout, const LMap &a_lmap, const IntVect &a_ghostSrc, const IntVect &a_ghostDst, const ProblemDomain &a_domain)
 
void defineFixedSizeNodesCollect (const DisjointBoxLayout &a_src, const LMap &a_lmapSrc, const IntVect &a_refRatioSrc, const IntVect &a_ghostSrc, const DisjointBoxLayout &a_dst, const LMap &a_lmapDst, const IntVect &a_refRatioDst, const IntVect &a_ghostDst, const ProblemDomain &a_domain)
 
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 all valid cells in a_dest More...
 
void ghostDefine (const DisjointBoxLayout &a_src, const DisjointBoxLayout &a_dest, const ProblemDomain &a_domain, const IntVect &a_srcGhost, const IntVect &a_destGhost)
 performs the computation necessary for moving from ghost+valid cells to all valid+ghost cells in a_dest More...
 
virtual void clear ()
 
Copieroperator= (const Copier &b)
 
void reverse ()
 
void trimEdges (const DisjointBoxLayout &a_exchangedLayout, const IntVect &ghost)
 
void coarsen (int a_refRatio)
 
bool operator== (const Copier &rhs) const
 
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
 
std::vector< IndexTM< int, 2 > > m_range
 

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 ProblemDomaingetPhysDomain (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 ()
 

Detailed Description

A strange but true thing to make copying from one boxlayoutdata to another fast.

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.

Constructor & Destructor Documentation

◆ Copier() [1/6]

Copier::Copier ( )
inline

null constructor, copy constructor and operator= can be compiler defined.

References coarsen(), MotionItem::operator==(), MotionItem::reverse(), and IntVect::Zero.

◆ Copier() [2/6]

Copier::Copier ( const Copier a_rhs)

◆ Copier() [3/6]

Copier::Copier ( const DisjointBoxLayout a_level,
const BoxLayout a_dest,
bool  a_exchange = false,
IntVect  a_shift = IntVect::Zero 
)

◆ Copier() [4/6]

Copier::Copier ( const DisjointBoxLayout a_level,
const BoxLayout a_dest,
const ProblemDomain a_domain,
bool  a_exchange = false,
IntVect  a_shift = IntVect::Zero 
)

this constructor contains support for periodic BC's

◆ Copier() [5/6]

Copier::Copier ( const DisjointBoxLayout a_level,
const BoxLayout a_dest,
const IntVect a_destGhost,
bool  a_exchange = false,
IntVect  a_shift = IntVect::Zero 
)

Copier to copy data into the valid and invalid regions of a_dest from a_level.

◆ Copier() [6/6]

Copier::Copier ( const DisjointBoxLayout a_level,
const BoxLayout a_dest,
const ProblemDomain a_domain,
const IntVect a_destGhost,
bool  a_exchange = false,
IntVect  a_shift = IntVect::Zero 
)

Copier to copy data into the valid and invalid regions of a_dest from a_level with support for periodic BCs.

◆ ~Copier()

virtual Copier::~Copier ( )
virtual

Member Function Documentation

◆ define() [1/4]

virtual void Copier::define ( const DisjointBoxLayout a_level,
const BoxLayout a_dest,
bool  a_exchange = false,
IntVect  a_shift = IntVect::Zero 
)
virtual

◆ define() [2/4]

virtual void Copier::define ( const DisjointBoxLayout a_level,
const BoxLayout a_dest,
const ProblemDomain a_domain,
bool  a_exchange = false,
IntVect  a_shift = IntVect::Zero 
)
virtual

contains support for periodic BCs

◆ define() [3/4]

virtual void Copier::define ( const DisjointBoxLayout a_level,
const BoxLayout a_dest,
const IntVect a_destGhost,
bool  a_exchange = false,
IntVect  a_shift = IntVect::Zero 
)
virtual

◆ define() [4/4]

virtual void Copier::define ( const BoxLayout a_level,
const BoxLayout a_dest,
const ProblemDomain a_domain,
const IntVect a_destGhost,
bool  a_exchange = false,
IntVect  a_shift = IntVect::Zero 
)
virtual

contains support for periodic BCs

◆ exchangeDefine()

virtual void Copier::exchangeDefine ( const DisjointBoxLayout a_grids,
const IntVect a_ghost,
bool  a_includeSelf = false 
)
virtual

alternative version of define for exchange copiers that uses new optimized neighborIterator

◆ defineFixedBoxSize() [1/2]

void Copier::defineFixedBoxSize ( const DisjointBoxLayout a_src,
const LMap a_lmap,
const IntVect a_ghost,
const ProblemDomain a_domain,
bool  a_includeSelf = false,
bool  a_reverse = false 
)

◆ defineFixedBoxSize() [2/2]

void Copier::defineFixedBoxSize ( const DisjointBoxLayout a_src,
const LMap a_lmapSrc,
const IntVect a_refRatioSrc,
const DisjointBoxLayout a_dst,
const LMap a_lmapDst,
const IntVect a_refRatioDst,
const IntVect a_ghost,
const ProblemDomain a_domain,
bool  a_reverse = false 
)

◆ defineFixedSizeNodesCollect() [1/2]

void Copier::defineFixedSizeNodesCollect ( const DisjointBoxLayout a_layout,
const LMap a_lmap,
const IntVect a_ghostSrc,
const IntVect a_ghostDst,
const ProblemDomain a_domain 
)

◆ defineFixedSizeNodesCollect() [2/2]

void Copier::defineFixedSizeNodesCollect ( const DisjointBoxLayout a_src,
const LMap a_lmapSrc,
const IntVect a_refRatioSrc,
const IntVect a_ghostSrc,
const DisjointBoxLayout a_dst,
const LMap a_lmapDst,
const IntVect a_refRatioDst,
const IntVect a_ghostDst,
const ProblemDomain a_domain 
)

◆ ghostDefine() [1/2]

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 all valid cells in a_dest

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 a_dest. This is used by LevelFluxRegister.

Referenced by BlockBaseRegister< FArrayBox >::copyToSrcRegister().

◆ ghostDefine() [2/2]

void Copier::ghostDefine ( const DisjointBoxLayout a_src,
const DisjointBoxLayout a_dest,
const ProblemDomain a_domain,
const IntVect a_srcGhost,
const IntVect a_destGhost 
)

performs the computation necessary for moving from ghost+valid cells to all valid+ghost cells in a_dest

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 valid+ghost a_dest. This is used by BlockBaseRegister. Note that this does not handle periodic matchings here. That is handled by different code in the MappedMultiBlock libraries. Sending in a null-constructed ProblemDomain just results in a computation that ignores domain boundaries.

◆ clear()

virtual void Copier::clear ( )
virtual

◆ operator=()

Copier& Copier::operator= ( const Copier b)

The assignment operator.

◆ reverse()

void Copier::reverse ( )

reverse the communication of this Copier.

◆ trimEdges()

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.

◆ coarsen()

void Copier::coarsen ( int  a_refRatio)

◆ operator==()

bool Copier::operator== ( const Copier rhs) const

◆ print()

int Copier::print ( ) const

◆ bufferAllocated()

bool Copier::bufferAllocated ( ) const

◆ setBufferAllocated()

void Copier::setBufferAllocated ( bool  arg) const

◆ numLocalCellsToCopy()

int Copier::numLocalCellsToCopy ( ) const

◆ numFromCellsToCopy()

int Copier::numFromCellsToCopy ( ) const

◆ numToCellsToCopy()

int Copier::numToCellsToCopy ( ) const

◆ isDefined()

bool Copier::isDefined ( ) const
inline

◆ trimMotion()

void Copier::trimMotion ( const DisjointBoxLayout a_exchangedLayout,
const IntVect a_ghost,
const Vector< MotionItem *> &  a_oldItems,
Vector< MotionItem *> &  a_newItems 
)
protected

◆ sort()

void Copier::sort ( )
protected

◆ getPhysDomain()

const ProblemDomain& Copier::getPhysDomain ( const DisjointBoxLayout a_level) const
protected

Friends And Related Function Documentation

◆ CopyIterator

friend class CopyIterator
friend

◆ dumpmemoryatexit

void dumpmemoryatexit ( )
friend

Member Data Documentation

◆ m_buffers

CopierBuffer Copier::m_buffers

◆ m_range

std::vector<IndexTM<int,2> > Copier::m_range

◆ m_localMotionPlan

Vector<MotionItem*> Copier::m_localMotionPlan
protected

◆ m_fromMotionPlan

Vector<MotionItem*> Copier::m_fromMotionPlan
protected

◆ m_toMotionPlan

Vector<MotionItem*> Copier::m_toMotionPlan
protected

◆ s_motionItemPool

Pool Copier::s_motionItemPool
staticprotected

◆ buffersAllocated

bool Copier::buffersAllocated
mutableprotected

◆ m_originPlan

DisjointBoxLayout Copier::m_originPlan
protected

◆ m_dest

BoxLayout Copier::m_dest
protected

◆ m_isDefined

bool Copier::m_isDefined
protected

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