3#ifndef DUNE_GEOGRID_DATAHANDLE_HH
4#define DUNE_GEOGRID_DATAHANDLE_HH
10#include <dune/grid/geometrygrid/capabilities.hh>
11#include <dune/grid/geometrygrid/entity.hh>
22 template<
class Gr
id,
class WrappedHandle >
24 :
public CommDataHandleIF< CommDataHandle< Grid, WrappedHandle >, typename WrappedHandle::DataType >
26 typedef typename std::remove_const< Grid >::type::Traits Traits;
29 CommDataHandle (
const Grid &grid, WrappedHandle &handle )
31 wrappedHandle_( handle )
34 bool contains (
int dim,
int codim )
const
36 const bool contains = wrappedHandle_.contains( dim, codim );
38 assertHostEntity( dim, codim );
42 bool fixedSize (
int dim,
int codim )
const
44 return wrappedHandle_.fixedSize( dim, codim );
47 template<
class HostEntity >
48 size_t size (
const HostEntity &hostEntity )
const
50 typedef typename Grid::Traits::template Codim< HostEntity::codimension >::Entity Entity;
51 typedef typename Grid::Traits::template Codim< HostEntity::codimension >::EntityImpl EntityImpl;
52 Entity entity( EntityImpl( grid_, hostEntity ) );
53 return wrappedHandle_.size( entity );
56 template<
class MessageBuffer,
class HostEntity >
57 void gather ( MessageBuffer &buffer,
const HostEntity &hostEntity )
const
59 typedef typename Grid::Traits::template Codim< HostEntity::codimension >::Entity Entity;
60 typedef typename Grid::Traits::template Codim< HostEntity::codimension >::EntityImpl EntityImpl;
61 Entity entity( EntityImpl( grid_, hostEntity ) );
62 wrappedHandle_.gather( buffer, entity );
65 template<
class MessageBuffer,
class HostEntity >
66 void scatter ( MessageBuffer &buffer,
const HostEntity &hostEntity,
size_t size )
68 typedef typename Grid::Traits::template Codim< HostEntity::codimension >::Entity Entity;
69 typedef typename Grid::Traits::template Codim< HostEntity::codimension >::EntityImpl EntityImpl;
70 Entity entity( EntityImpl( grid_, hostEntity ) );
71 wrappedHandle_.scatter( buffer, entity, size );
75 static void assertHostEntity (
int dim,
int codim )
77 if( !Capabilities::CodimCache< Grid >::hasHostEntity( codim ) )
78 DUNE_THROW( NotImplemented,
"Host grid has no entities for codimension " << codim <<
"." );
82 WrappedHandle &wrappedHandle_;
void scatter(MessageBufferImp &buff, const EntityType &e, size_t n)
unpack data from message buffer to user.
Definition: datahandleif.hh:167
size_t size(const EntityType &e) const
how many objects of type DataType have to be sent for a given entity
Definition: datahandleif.hh:142
void gather(MessageBufferImp &buff, const EntityType &e) const
pack data from user to message buffer
Definition: datahandleif.hh:153
Different resources needed by all grid implementations.
Describes the parallel communication interface class for MessageBuffers and DataHandles.
#define DUNE_THROW(E, m)
Definition: exceptions.hh:216
Dune namespace.
Definition: alignedallocator.hh:10
Traits for type conversions and type information.
std::size_t fixedSize
The number of data items per index if it is fixed, 0 otherwise.
Definition: variablesizecommunicator.hh:245