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>
19 template<
int codim,
class Gr
id >
22 typedef typename remove_const< Grid >::type::Traits Traits;
24 typedef typename Traits::template Codim< codim >::Entity Entity;
25 typedef GeoGrid::Entity< codim, Traits::dimension, const Grid > EntityImpl;
26 typedef typename EntityImpl::HostEntity HostEntity;
31 static void apply ( EntityImpl &entityImpl,
const HostEntity &hostEntity )
33 entityImpl.initialize( hostEntity );
40 static void apply ( EntityImpl &entityImpl,
const HostEntity &hostEntity )
42 DUNE_THROW( NotImplemented,
"Host grid has no entities for codimension " << codim <<
"." );
46 static const bool hasHostEntity = Capabilities::hasHostEntity< Grid, codim >::v;
47 typedef typename conditional< hasHostEntity, InitReal< true >, InitFake< false > >::type Init;
50 EntityProxy (
const Grid &grid,
const HostEntity &hostEntity )
51 : entity_( EntityImpl( grid ) )
53 Init::apply( Grid::getRealImplementation( entity_ ), hostEntity );
56 const Entity &operator* ()
const
70 template<
class Gr
id,
class WrappedHandle >
72 :
public CommDataHandleIF< CommDataHandle< Grid, WrappedHandle >, typename WrappedHandle::DataType >
74 typedef typename remove_const< Grid >::type::Traits Traits;
77 CommDataHandle (
const Grid &grid, WrappedHandle &handle )
79 wrappedHandle_( handle )
82 bool contains (
int dim,
int codim )
const
84 const bool contains = wrappedHandle_.contains( dim, codim );
86 assertHostEntity( dim, codim );
90 bool fixedsize (
int dim,
int codim )
const
92 return wrappedHandle_.fixedsize( dim, codim );
95 template<
class HostEntity >
96 size_t size (
const HostEntity &hostEntity )
const
98 EntityProxy< HostEntity::codimension, Grid > proxy( grid_, hostEntity );
99 return wrappedHandle_.size( *proxy );
102 template<
class MessageBuffer,
class HostEntity >
103 void gather ( MessageBuffer &buffer,
const HostEntity &hostEntity )
const
105 EntityProxy< HostEntity::codimension, Grid > proxy( grid_, hostEntity );
106 wrappedHandle_.gather( buffer, *proxy );
109 template<
class MessageBuffer,
class HostEntity >
110 void scatter ( MessageBuffer &buffer,
const HostEntity &hostEntity,
size_t size )
112 EntityProxy< HostEntity::codimension, Grid > proxy( grid_, hostEntity );
113 wrappedHandle_.scatter( buffer, *proxy, size );
117 static void assertHostEntity (
int dim,
int codim )
119 if( !Capabilities::CodimCache< Grid >::hasHostEntity( codim ) )
123 static void noEntity (
int codim )
125 DUNE_THROW( NotImplemented,
"Host grid has no entities for codimension " << codim <<
"." );
129 WrappedHandle &wrappedHandle_;
void scatter(MessageBufferImp &buff, const EntityType &e, size_t n)
unpack data from message buffer to user.
Definition: datahandleif.hh:135
size_t size(const EntityType &e) const
how many objects of type DataType have to be sent for a given entity
Definition: datahandleif.hh:112
void gather(MessageBufferImp &buff, const EntityType &e) const
pack data from user to message buffer
Definition: datahandleif.hh:123
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:244
Dune namespace.
Definition: alignment.hh:14
Traits for type conversions and type information.