3 #ifndef DUNE_ALUGRID_LBDATAHANDLE_HH 4 #define DUNE_ALUGRID_LBDATAHANDLE_HH 13 template<
class Gr
id,
class DataHandleImpl,
class Data >
16 typedef typename Grid :: Traits :: HierarchicIterator HierarchicIterator;
37 DataHandle &dataHandle_;
42 dataHandle_( dataHandle )
45 void inlineData ( ObjectStream &stream,
const Element &element )
const 47 inlineElementData( stream, element );
49 const int maxLevel = grid_.
maxLevel();
50 const HierarchicIterator end = element.hend( maxLevel );
51 for( HierarchicIterator it = element.hbegin( maxLevel ); it != end; ++it )
52 inlineElementData( stream, *it );
55 void xtractData ( ObjectStream &stream,
const Element &element,
size_t newElements )
57 xtractElementData( stream, element );
59 const int maxLevel = grid_.
maxLevel();
60 const HierarchicIterator end = element.hend( maxLevel );
61 for( HierarchicIterator it = element.hbegin( maxLevel ); it != end; ++it )
62 xtractElementData( stream, *it );
69 void inlineElementData ( ObjectStream &stream,
const Element &element )
const 72 if( dataHandle_.
contains( dimension, 0 ) )
74 inlineEntityData<0>( stream, element );
78 inlineCodimData< 1 >( stream, element );
79 inlineCodimData< 2 >( stream, element );
80 inlineCodimData< 3 >( stream, element );
83 void xtractElementData ( ObjectStream &stream,
const Element &element )
86 if( dataHandle_.
contains( dimension, 0 ) )
88 xtractEntityData<0>( stream, element );
92 xtractCodimData< 1 >( stream, element );
93 xtractCodimData< 2 >( stream, element );
94 xtractCodimData< 3 >( stream, element );
98 void inlineCodimData ( ObjectStream &stream,
const Element &element )
const 102 if( dataHandle_.
contains( dimension, codim ) )
104 const int numSubEntities = element.template count< codim >();
105 for(
int i = 0; i < numSubEntities; ++i )
107 const EntityPointer pEntity = element.template subEntity< codim >( i );
108 inlineEntityData< codim >( stream, *pEntity );
113 template<
int codim >
114 void xtractCodimData ( ObjectStream &stream,
const Element &element )
118 if( dataHandle_.
contains( dimension, codim ) )
120 const int numSubEntities = element.template count< codim >();
121 for(
int i = 0; i < numSubEntities; ++i )
123 const EntityPointer pEntity = element.template subEntity< codim >( i );
124 xtractEntityData< codim >( stream, *pEntity );
129 template<
int codim >
130 void inlineEntityData ( ObjectStream &stream,
133 const size_t size = dataHandle_.
size( entity );
134 stream.write( size );
135 dataHandle_.
gather( stream, entity );
138 template<
int codim >
139 void xtractEntityData ( ObjectStream &stream,
144 dataHandle_.
scatter( stream, entity, size );
size_t size(const EntityType &e) const
how many objects of type DataType have to be sent for a given entity
Definition: datahandleif.hh:110
Wrapper class for entities.
Definition: common/entity.hh:61
void inlineData(ObjectStream &stream, const Element &element) const
Definition: lbdatahandle.hh:45
Definition: lbdatahandle.hh:14
Wrapper class for pointers to entities.
Definition: common/entitypointer.hh:112
ALUGridLoadBalanceDataHandle(const Grid &grid, DataHandle &dataHandle)
Definition: lbdatahandle.hh:40
int maxLevel() const
Return maximum level defined in this grid. Levels are numbered 0 ... maxLevel with 0 the coarsest lev...
Definition: common/grid.hh:561
CommDataHandleIF describes the features of a data handle for communication in parallel runs using the...
Definition: datahandleif.hh:72
Describes the parallel communication interface class for MessageBuffers and DataHandles.
void gather(MessageBufferImp &buff, const EntityType &e) const
pack data from user to message buffer
Definition: datahandleif.hh:121
Grid::ObjectStreamType ObjectStream
Definition: lbdatahandle.hh:19
CommDataHandleIF< DataHandleImpl, Data > DataHandle
Definition: lbdatahandle.hh:21
bool contains(int dim, int codim) const
returns true if data for given valid codim should be communicated
Definition: datahandleif.hh:88
Grid::Traits::template Codim< codim >::Entity Entity
Definition: lbdatahandle.hh:28
void scatter(MessageBufferImp &buff, const EntityType &e, size_t n)
unpack data from message buffer to user.
Definition: datahandleif.hh:133
static const int dimension
Definition: lbdatahandle.hh:23
Codim< 0 >::Entity Element
Definition: lbdatahandle.hh:33
Grid abstract base classThis class is the base class for all grid implementations. Although no virtual functions are used we call it abstract since its methods do not contain an implementation but forward to the methods of the derived class via the Barton-Nackman trick.
Definition: common/grid.hh:388
Include standard header files.
Definition: agrid.hh:59
void compress()
Definition: lbdatahandle.hh:65
void xtractData(ObjectStream &stream, const Element &element, size_t newElements)
Definition: lbdatahandle.hh:55
The dimension of the grid.
Definition: common/grid.hh:402
Definition: lbdatahandle.hh:26
Grid::Traits::template Codim< codim >::EntityPointer EntityPointer
Definition: lbdatahandle.hh:30