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
100 typedef typename Codim< codim > :: EntityPointer EntityPointer;
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 )
116 typedef typename Codim< codim > :: EntityPointer EntityPointer;
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,
131 const typename Codim< codim > :: Entity &entity )
const
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,
140 const typename Codim< codim > :: Entity &entity )
144 dataHandle_.
scatter( stream, entity, size );
void xtractData(ObjectStream &stream, const Element &element, size_t newElements)
Definition: lbdatahandle.hh:55
Grid::Traits::template Codim< codim >::EntityPointer EntityPointer
Definition: lbdatahandle.hh:30
void inlineData(ObjectStream &stream, const Element &element) const
Definition: lbdatahandle.hh:45
Definition: lbdatahandle.hh:26
void scatter(MessageBufferImp &buff, const EntityType &e, size_t n)
unpack data from message buffer to user.
Definition: datahandleif.hh:133
void gather(MessageBufferImp &buff, const EntityType &e) const
pack data from user to message buffer
Definition: datahandleif.hh:121
Wrapper class for entities.
Definition: common/entity.hh:61
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< 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
static const int dimension
Definition: lbdatahandle.hh:23
Codim< 0 >::Entity Element
Definition: lbdatahandle.hh:33
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
ALUGridLoadBalanceDataHandle(const Grid &grid, DataHandle &dataHandle)
Definition: lbdatahandle.hh:40
Describes the parallel communication interface class for MessageBuffers and DataHandles.
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
Grid::ObjectStreamType ObjectStream
Definition: lbdatahandle.hh:19
Grid::Traits::template Codim< codim >::Entity Entity
Definition: lbdatahandle.hh:28
CommDataHandleIF describes the features of a data handle for communication in parallel runs using the...
Definition: datahandleif.hh:72
The dimension of the grid.
Definition: common/grid.hh:402
Definition: lbdatahandle.hh:14
Include standard header files.
Definition: agrid.hh:59
void compress()
Definition: lbdatahandle.hh:65