Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members

LevelData< T > Class Template Reference

#include <LevelData.H>

Inheritance diagram for LevelData< T >:

Inheritance graph
[legend]
Collaboration diagram for LevelData< T >:

Collaboration graph
[legend]
List of all members.

Detailed Description

template<class T>
class LevelData< T >

Data over a disjoint union of rectangles.

LevelData is-a BoxLayoutData. It is built from a DisjointBoxLayout instead though, thus making the data in a DisjointBoxLayout uniquely defined for all spatial indices defined by the underlying DisjointBoxLayout. It carries within it an inherent concept of ghost cells (which the user can choose to be empty).

Since LevelData is-a BoxLayoutData, all the methods required of the template class T for BoxLayoutData are also required for LevelData. LevelData does not have any extra requirements.


Public Member Functions

 LevelData ()
 LevelData (const DisjointBoxLayout &dp, int comps, const IntVect &ghost=IntVect::TheZeroVector(), const DataFactory< T > &a_factory=DefaultDataFactory< T >())
virtual ~LevelData ()
virtual void define (const DisjointBoxLayout &dp, int comps, const IntVect &ghost=IntVect::TheZeroVector(), const DataFactory< T > &a_factory=DefaultDataFactory< T >())
virtual void define (const LevelData< T > &da, const DataFactory< T > &a_factory=DefaultDataFactory< T >())
virtual void define (const LevelData< T > &da, const Interval &comps, const DataFactory< T > &a_factory=DefaultDataFactory< T >())
virtual void copyTo (const Interval &srcComps, BoxLayoutData< T > &dest, const Interval &destComps) const
virtual void copyTo (const Interval &srcComps, BoxLayoutData< T > &dest, const Interval &destComps, const Copier &copier) const
virtual void copyTo (const Interval &srcComps, LevelData< T > &dest, const Interval &destComps) const
virtual void copyTo (const Interval &srcComps, LevelData< T > &dest, const Interval &destComps, const Copier &copier, const LDOperator< T > &a_op=LDOperator< T >()) const
virtual void exchange (const Interval &comps)
virtual void exchange (const Interval &comps, const Copier &copier)
const IntVectghostVect () const
const DisjointBoxLayoutgetBoxes () const
const DisjointBoxLayoutdisjointBoxLayout () const
virtual void apply (void(*a_Function)(const Box &box, int comps, T &t))
overidden virtual functions
These functions will invoke error messages when invoked. C++ will ensure that constructors are not called for the base class by a user, but a 'define' function has no such protection, hence the need to prevent such usage. A runtime error is not a perfect solution...(strong construction gets around this *sigh*). classes that derive from LevelData will have to turn it's valid defines into runtime errors also and make it's own defines. Thus taking over the job of the compiler.

virtual void define (const BoxLayout &dp, int comps, const DataFactory< T > &factory)
virtual void define (const BoxLayoutData< T > &da, const DataFactory< T > &factory=DefaultDataFactory< T >())
virtual void define (const BoxLayoutData< T > &da, const Interval &comps, const DataFactory< T > &factory=DefaultDataFactory< T >())
virtual void define (const BoxLayout &deadFunction)
 overridden and throws an error.

Protected Member Functions

void makeItSo (const Interval &a_srcComps, const LevelData< T > &a_src, BoxLayoutData< T > &a_dest, const Interval &a_destComps, const Copier &a_copier, const LDOperator< T > &a_op=LDOperator< T >()) const
void completePendingSends () const
void allocateBuffers (const LevelData< T > &a_src, const Interval &a_srcComps, const BoxLayoutData< T > &a_dest, const Interval &a_destComps, const Copier &a_copier, const LDOperator< T > &a_op) const
void writeSendDataFromMeIntoBuffers (const LevelData< T > &a_src, const Interval &a_srcComps, const LDOperator< T > &a_op) const
void postSendsFromMe () const
void postReceivesToMe () const
void unpackReceivesToMe (BoxLayoutData< T > &a_dest, const Interval &a_destComps, const LDOperator< T > &a_op) const

Protected Attributes

DisjointBoxLayout m_disjointBoxLayout
IntVect m_ghost
Parallel messaging members
void * m_sendbuffer
size_t m_sendcapacity
void * m_recbuffer
size_t m_reccapacity

Friends

void aliasLevelData (LevelData< T > &a_alias, LevelData< T > *a_original, const Interval &a_interval)
 LevelData aliasing function.


Constructor & Destructor Documentation

template<class T>
LevelData< T >::LevelData  )  [inline]
 

template<class T>
LevelData< T >::LevelData const DisjointBoxLayout dp,
int  comps,
const IntVect ghost = IntVect::TheZeroVector(),
const DataFactory< T > &  a_factory = DefaultDataFactory< T >()
[inline]
 

template<class T>
LevelData< T >::~LevelData  )  [inline, virtual]
 


Member Function Documentation

template<class T>
void LevelData< T >::define const DisjointBoxLayout dp,
int  comps,
const IntVect ghost = IntVect::TheZeroVector(),
const DataFactory< T > &  a_factory = DefaultDataFactory< T >()
[inline, virtual]
 

template<class T>
void LevelData< T >::define const LevelData< T > &  da,
const DataFactory< T > &  a_factory = DefaultDataFactory< T >()
[inline, virtual]
 

copy definer. this LevelData thrown away and da's LevelData copied

template<class T>
void LevelData< T >::define const LevelData< T > &  da,
const Interval comps,
const DataFactory< T > &  a_factory = DefaultDataFactory< T >()
[inline, virtual]
 

Copy definer. 'this' LevelData thrown away and da's LevelData copied. This LevelData is now defined for the range [0, comps.size()] and filled with the data in da from [comps.begin(), comps.end()]

template<class T>
void LevelData< T >::copyTo const Interval srcComps,
BoxLayoutData< T > &  dest,
const Interval destComps
const [inline, virtual]
 

template<class T>
void LevelData< T >::copyTo const Interval srcComps,
BoxLayoutData< T > &  dest,
const Interval destComps,
const Copier copier
const [inline, virtual]
 

template<class T>
void LevelData< T >::copyTo const Interval srcComps,
LevelData< T > &  dest,
const Interval destComps
const [inline, virtual]
 

same as copyTo that takes a BoxLayoutData, except that it fills the ghost cells of 'dest' with data from 'this' also.

template<class T>
void LevelData< T >::copyTo const Interval srcComps,
LevelData< T > &  dest,
const Interval destComps,
const Copier copier,
const LDOperator< T > &  a_op = LDOperator< T >()
const [inline, virtual]
 

same as copyTo that takes a BoxLayoutData, except that it fills the ghost cells of 'dest' with data from 'this' also. USer passes in a prebuilt Copier object

template<class T>
void LevelData< T >::exchange const Interval comps  )  [inline, virtual]
 

template<class T>
void LevelData< T >::exchange const Interval comps,
const Copier copier
[inline, virtual]
 

template<class T>
const IntVect& LevelData< T >::ghostVect  )  const [inline]
 

template<class T>
void LevelData< T >::define const BoxLayout dp,
int  comps,
const DataFactory< T > &  factory
[inline, virtual]
 

Reimplemented from BoxLayoutData< T >.

template<class T>
void LevelData< T >::define const BoxLayoutData< T > &  da,
const DataFactory< T > &  factory = DefaultDataFactory< T >()
[inline, virtual]
 

Reimplemented from BoxLayoutData< T >.

template<class T>
void LevelData< T >::define const BoxLayoutData< T > &  da,
const Interval comps,
const DataFactory< T > &  factory = DefaultDataFactory< T >()
[inline, virtual]
 

Define this BoxLayoutData to be the subset of the data in da defined by the Interval comps.

Reimplemented from BoxLayoutData< T >.

template<class T>
void LevelData< T >::define const BoxLayout deadFunction  )  [inline, virtual]
 

overridden and throws an error.

Reimplemented from BoxLayoutData< T >.

template<class T>
const DisjointBoxLayout& LevelData< T >::getBoxes  )  const [inline]
 

template<class T>
const DisjointBoxLayout& LevelData< T >::disjointBoxLayout  )  const [inline]
 

template<class T>
void LevelData< T >::apply void(*  a_Function)(const Box &box, int comps, T &t)  )  [inline, virtual]
 

User writes a function with the signature:

     void myfunction(const Box& box, int comps, T& t){ your code here;}

They can then hand this off to LayoutData::apply. This class then cycles through all the T objects and invokes this function. Function must not be inline. (I'm still trying to figure out a nice way to send in non-static member functions).

for example:

  LevelData<FArrayBox> data(layout, 3, IntVect::Unit);
  struct val{
  static void set1(const Box& box, int comps, const FArrayBox& f)
  {
    f.setVal(box, box.smallEnd(0));
  }

  data.apply(val::set1);

Reimplemented from BoxLayoutData< T >.

template<class T>
void LevelData< T >::makeItSo const Interval a_srcComps,
const LevelData< T > &  a_src,
BoxLayoutData< T > &  a_dest,
const Interval a_destComps,
const Copier a_copier,
const LDOperator< T > &  a_op = LDOperator< T >()
const [inline, protected]
 

template<class T>
void LevelData< T >::completePendingSends  )  const [inline, protected]
 

template<class T>
void LevelData< T >::allocateBuffers const LevelData< T > &  a_src,
const Interval a_srcComps,
const BoxLayoutData< T > &  a_dest,
const Interval a_destComps,
const Copier a_copier,
const LDOperator< T > &  a_op
const [inline, protected]
 

template<class T>
void LevelData< T >::writeSendDataFromMeIntoBuffers const LevelData< T > &  a_src,
const Interval a_srcComps,
const LDOperator< T > &  a_op
const [inline, protected]
 

template<class T>
void LevelData< T >::postSendsFromMe  )  const [inline, protected]
 

template<class T>
void LevelData< T >::postReceivesToMe  )  const [inline, protected]
 

template<class T>
void LevelData< T >::unpackReceivesToMe BoxLayoutData< T > &  a_dest,
const Interval a_destComps,
const LDOperator< T > &  a_op
const [inline, protected]
 


Friends And Related Function Documentation

template<class T>
void aliasLevelData LevelData< T > &  a_alias,
LevelData< T > *  a_original,
const Interval a_interval
[friend]
 

LevelData aliasing function.

Parameters:
a_alias aliased LevelData<T> object. original data in a_alias is destroyed and new aliasing role assumed.
a_original pointer to LevelData<T> that will be aliased.
a_interval range of components of each T in a_original that will be created in the a_alias argument.
LevelData<FArrayBox> original(dbl, 4, 2*IntVect::Unit);
Interval             subcomps(2, 3);
LevelData<FArrayBox> alias;
aliasLevelData<FArrayBox>(alias, &original, subcomps);
// component 0 of every FArrayBox in alias references the same data as
// component 2 in original

The template class T must have an 'alias' constructor

class A
 {
public:
  A(const Interval& subcomps, A& original);// alias constructor
  ...
 };


Member Data Documentation

template<class T>
DisjointBoxLayout LevelData< T >::m_disjointBoxLayout [protected]
 

template<class T>
IntVect LevelData< T >::m_ghost [protected]
 

template<class T>
void* LevelData< T >::m_sendbuffer [mutable, protected]
 

template<class T>
size_t LevelData< T >::m_sendcapacity [mutable, protected]
 

template<class T>
void* LevelData< T >::m_recbuffer [mutable, protected]
 

template<class T>
size_t LevelData< T >::m_reccapacity [mutable, protected]
 


The documentation for this class was generated from the following files:
Generated on Thu May 12 18:21:13 2005 for Chombo by doxygen 1.3.8