dune-grid  2.7.1
geometrygrid/datahandle.hh
Go to the documentation of this file.
1 // -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2 // vi: set et ts=4 sw=2 sts=2:
3 #ifndef DUNE_GEOGRID_DATAHANDLE_HH
4 #define DUNE_GEOGRID_DATAHANDLE_HH
5 
6 #include <dune/common/typetraits.hh>
7 
12 
13 namespace Dune
14 {
15 
16  namespace GeoGrid
17  {
18 
19  // GeometryGridDataHandle
20  // ----------------------
21 
22  template< class Grid, class WrappedHandle >
24  : public CommDataHandleIF< CommDataHandle< Grid, WrappedHandle >, typename WrappedHandle::DataType >
25  {
26  typedef typename std::remove_const< Grid >::type::Traits Traits;
27 
28  public:
29  CommDataHandle ( const Grid &grid, WrappedHandle &handle )
30  : grid_( grid ),
31  wrappedHandle_( handle )
32  {}
33 
34  bool contains ( int dim, int codim ) const
35  {
36  const bool contains = wrappedHandle_.contains( dim, codim );
37  if( contains )
38  assertHostEntity( dim, codim );
39  return contains;
40  }
41 
42  bool fixedSize ( int dim, int codim ) const
43  {
44  return wrappedHandle_.fixedSize( dim, codim );
45  }
46 
47  template< class HostEntity >
48  size_t size ( const HostEntity &hostEntity ) const
49  {
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 );
54  }
55 
56  template< class MessageBuffer, class HostEntity >
57  void gather ( MessageBuffer &buffer, const HostEntity &hostEntity ) const
58  {
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 );
63  }
64 
65  template< class MessageBuffer, class HostEntity >
66  void scatter ( MessageBuffer &buffer, const HostEntity &hostEntity, size_t size )
67  {
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 );
72  }
73 
74  private:
75  static void assertHostEntity ( int dim, int codim )
76  {
78  DUNE_THROW( NotImplemented, "Host grid has no entities for codimension " << codim << "." );
79  }
80 
81  const Grid &grid_;
82  WrappedHandle &wrappedHandle_;
83  };
84 
85  } // namespace GeoGrid
86 
87 } // namespace Dune
88 
89 #endif // #ifndef DUNE_GEOGRID_DATAHANDLE_HH
Describes the parallel communication interface class for MessageBuffers and DataHandles.
Include standard header files.
Definition: agrid.hh:59
CommDataHandleIF describes the features of a data handle for communication in parallel runs using the...
Definition: datahandleif.hh:76
Grid abstract base class.
Definition: common/grid.hh:373
Definition: geometrygrid/capabilities.hh:114
Definition: geometrygrid/datahandle.hh:25
bool fixedSize(int dim, int codim) const
Definition: geometrygrid/datahandle.hh:42
bool contains(int dim, int codim) const
Definition: geometrygrid/datahandle.hh:34
size_t size(const HostEntity &hostEntity) const
Definition: geometrygrid/datahandle.hh:48
CommDataHandle(const Grid &grid, WrappedHandle &handle)
Definition: geometrygrid/datahandle.hh:29
void gather(MessageBuffer &buffer, const HostEntity &hostEntity) const
Definition: geometrygrid/datahandle.hh:57
void scatter(MessageBuffer &buffer, const HostEntity &hostEntity, size_t size)
Definition: geometrygrid/datahandle.hh:66
DUNE-conform implementation of the entity.
Definition: geometrygrid/entity.hh:32
Different resources needed by all grid implementations.