LevelData< T > Class Template Reference

#include <LevelData.H>

Inheritance diagram for LevelData< T >:

Inheritance graph
[legend]

List of all members.

template<class T>
class LevelData< T >


Public Member Functions

 LevelData ()
 LevelData (const DisjointBoxLayout &dp, int comps, const IntVect &ghost=IntVect::Zero, const DataFactory< T > &a_factory=DefaultDataFactory< T >())
virtual ~LevelData ()
virtual void define (const DisjointBoxLayout &dp, int comps, const IntVect &ghost=IntVect::Zero, 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 localCopyTo (const Interval &srcComps, LevelData< T > &dest, const Interval &destComps) const
 only works if source and dest have the same disjointboxlayout
virtual void localCopyTo (LevelData< T > &dest) const
 assumes source and dest have same interval
virtual void copyTo (BoxLayoutData< T > &dest) const
 Simplest case -- assumes source and dest have same interval.
virtual void copyTo (const Interval &srcComps, BoxLayoutData< T > &dest, const Interval &destComps, const Copier &copier, const LDOperator< T > &a_op=LDOperator< T >()) const
virtual void copyTo (BoxLayoutData< T > &dest, const Copier &copier, const LDOperator< T > &a_op=LDOperator< T >()) const
 Simplest case -- assumes source and dest have same interval.
virtual void copyTo (const Interval &srcComps, LevelData< T > &dest, const Interval &destComps) const
virtual void copyTo (LevelData< T > &dest) const
 Simplest case -- assumes source and dest have same interval.
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 copyTo (LevelData< T > &dest, const Copier &copier, const LDOperator< T > &a_op=LDOperator< T >()) const
 Simplest case -- assumes source and dest have same interval.
virtual void exchange (void)
 Simplest case -- do all components.
virtual void exchange (const Copier &copier)
 Simplest case -- do all components. Accepts a pre-built copier.
virtual void exchange (const Interval &comps)
 Accepts an arbitrary component range.
virtual void exchange (const Interval &comps, const Copier &copier, const LDOperator< T > &a_op=LDOperator< T >())
virtual void exchangeBegin (const Copier &copier)
 asynchronous exchange start. load and fire off messages.
virtual void exchangeEnd ()
 finish asynchronous exchange
virtual void exchangeNoOverlap (const Copier &copier)
const IntVectghostVect () const
const DisjointBoxLayoutgetBoxes () const
const DisjointBoxLayoutdisjointBoxLayout () const
virtual void apply (void(*a_Function)(const Box &, int, T &))
virtual void apply (const ApplyFunctor &)
void degenerate (LevelData< T > &a_to, const SliceSpec &a_ss) const
void degenerateLocalOnly (LevelData< T > &a_to, const SliceSpec &a_ss) const
 version of degenerate which does strictly local copying
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 its valid defines into runtime errors also and make its 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 Attributes

DisjointBoxLayout m_disjointBoxLayout
IntVect m_ghost
Copier m_exchangeCopier

Friends

void aliasLevelData (LevelData< T > &a_alias, LevelData< T > *a_original, const Interval &a_interval)
 Data over a disjoint union of rectangles.

Classes

struct  ApplyFunctor

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::Zero,
const DataFactory< T > &  a_factory = DefaultDataFactory<T>() 
) [inline]

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

References CH_TIME.


Member Function Documentation

template<class T>
void LevelData< T >::define ( const DisjointBoxLayout dp,
int  comps,
const IntVect ghost = IntVect::Zero,
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]

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

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 >::localCopyTo ( const Interval srcComps,
LevelData< T > &  dest,
const Interval destComps 
) const [inline, virtual]

template<class T>
void LevelData< T >::localCopyTo ( LevelData< T > &  dest  )  const [inline, virtual]

assumes source and dest have same interval

References CH_assert, BoxLayoutData< T >::interval(), LevelData< T >::localCopyTo(), and BoxLayoutData< T >::nComp().

template<class T>
void LevelData< T >::copyTo ( BoxLayoutData< T > &  dest  )  const [inline, virtual]

Simplest case -- assumes source and dest have same interval.

References CH_assert, LevelData< T >::copyTo(), BoxLayoutData< T >::interval(), and BoxLayoutData< T >::nComp().

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

FM MOD START ////////////////////////// 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

References CH_TIME, and BoxLayoutData< T >::makeItSo().

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

Simplest case -- assumes source and dest have same interval.

References CH_assert, LevelData< T >::copyTo(), BoxLayoutData< T >::interval(), and BoxLayoutData< T >::nComp().

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

template<class T>
void LevelData< T >::copyTo ( LevelData< T > &  dest  )  const [inline, virtual]

Simplest case -- assumes source and dest have same interval.

References CH_assert, LevelData< T >::copyTo(), BoxLayoutData< T >::interval(), and BoxLayoutData< T >::nComp().

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

References CH_TIME, and BoxLayoutData< T >::makeItSo().

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

Simplest case -- assumes source and dest have same interval.

References CH_assert, LevelData< T >::copyTo(), BoxLayoutData< T >::interval(), and BoxLayoutData< T >::nComp().

template<class T>
void LevelData< T >::exchange ( void   )  [inline, virtual]

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

Simplest case -- do all components. Accepts a pre-built copier.

References LevelData< T >::exchange(), and BoxLayoutData< T >::interval().

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,
const LDOperator< T > &  a_op = LDOperator<T>() 
) [inline, virtual]

The most general case -- can accept an arbitrary component range, a pre-built Copier object, and an arbitrary accumulation operator.

References CH_TIME, and BoxLayoutData< T >::makeItSo().

template<class T>
void LevelData< T >::exchangeBegin ( const Copier copier  )  [inline, virtual]

asynchronous exchange start. load and fire off messages.

References CH_TIME, BoxLayoutData< T >::interval(), BoxLayoutData< T >::makeItSoBegin(), and BoxLayoutData< T >::makeItSoLocalCopy().

template<class T>
void LevelData< T >::exchangeEnd (  )  [inline, virtual]

finish asynchronous exchange

References CH_TIME, BoxLayoutData< T >::interval(), and BoxLayoutData< T >::makeItSoEnd().

template<class T>
void LevelData< T >::exchangeNoOverlap ( 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 >.

References MayDay::Error().

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

Reimplemented from BoxLayoutData< T >.

References MayDay::Error().

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 >.

References MayDay::Error().

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

overridden and throws an error.

Reimplemented from BoxLayoutData< T >.

References MayDay::Error().

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

Referenced by LevelData< T >::copyTo().

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

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

User writes a function with the signature:

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

They can then hand this off to LayoutData::apply, which invokes this function for every T. The argument "box" is the Box (as known to the DisjointBoxLayout here) associated with that T and the argument "n_comps" is the number of components in this LevelData.

Your function must not be inline.

For example:

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

  data.apply(val::set1);

template<class T>
void LevelData< T >::apply ( const ApplyFunctor f  )  [inline, virtual]

Like the other apply(), but here the argument is an instance of a class derived from LevelData::ApplyFunctor, and which implements ApplyFunctor's pure virtual void operator()(const Box& box, int n_comps, T& t) const.

Going with an instance of such a class is more convenient if you want the thing you pass to apply() to have state.

For example:

      class MyFunctor : public LevelData<FArrayBox>::ApplyFunctor
      {
      public:
        MyFunctor( Real x ) : m_x(x)
        {
          ...
        }
        virtual void operator()(const Box& box, int n_comps, FArrayBox& fab) const
        {
          fab.setVal( m_x, box, 0, n_comps );
        }
      private:
        const Real m_x;
      }

      LevelData<FArrayBox> data(layout, 3, IntVect::Unit);
      data.apply( MyFunctor(3.14, 0) );

References LayoutData< T >::dataIterator(), BoxLayout::get(), BoxLayoutData< T >::m_comps, LevelData< T >::m_disjointBoxLayout, LayoutData< T >::m_vector, and DataIterator::size().

template<class T>
void LevelData< T >::degenerate ( LevelData< T > &  a_to,
const SliceSpec a_ss 
) const [inline]

template<class T>
void LevelData< T >::degenerateLocalOnly ( LevelData< T > &  a_to,
const SliceSpec a_ss 
) const [inline]


Friends And Related Function Documentation

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

Data over a disjoint union of rectangles.

LevelData aliasing function.

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.

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>
Copier LevelData< T >::m_exchangeCopier [protected]


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

Generated on Fri Apr 5 04:25:09 2019 for Chombo + EB by  doxygen 1.5.5