dune-fem  2.8-git
gridpart/idgridpart/datahandle.hh
Go to the documentation of this file.
1 #ifndef DUNE_IDGRID_DATAHANDLE_HH
2 #define DUNE_IDGRID_DATAHANDLE_HH
3 
4 //- C++ include
5 #include <type_traits>
6 
7 //- dune-grid includes
8 #include <dune/grid/common/datahandleif.hh>
9 
10 #if HAVE_DUNE_ALUGRID
11 #include <dune/alugrid/common/ldbhandleif.hh>
12 #endif
13 
14 namespace Dune
15 {
16 
17  // IdDataHandle
18  // ------------
19 
20  template< class WrappedHandle, class GridFamily >
22  : public CommDataHandleIF< IdDataHandle< WrappedHandle, GridFamily >, typename WrappedHandle::DataType >
23  {
24  protected:
26 
27  // type of traits
28  typedef typename std::remove_const< GridFamily >::type::Traits Traits;
29 
30  typedef typename Traits :: ExtraData ExtraData ;
31 
32  template< int codim >
33  struct Codim
34  {
35  // type of entity
36  typedef typename Traits::template Codim< codim >::Entity EntityType;
37  };
38 
39  public:
40  // type of data to be communicated
41  typedef typename WrappedHandle::DataType DataType;
42 
43  typedef CommDataHandleIF< ThisType, DataType > DataHandleIFType;
44 
45  IdDataHandle ( const ThisType & ) = delete;
46 
47  IdDataHandle ( ExtraData data, WrappedHandle &wrappedHandle )
48  : wrappedHandle_( wrappedHandle ),
49  data_( data )
50  {}
51 
52  bool contains ( int dim, int codim ) const
53  {
54  return wrappedHandle_.contains( dim, codim );
55  }
56 
57  bool fixedSize ( int dim, int codim ) const
58  {
59  return wrappedHandle_.fixedSize( dim, codim );
60  }
61 
62  template< class HostEntity >
63  size_t size ( const HostEntity &hostEntity ) const
64  {
65  typedef typename Codim< HostEntity::codimension >::EntityType EntityType;
66  const EntityType entity( typename EntityType::Implementation( data(), hostEntity ) );
67  return wrappedHandle_.size( entity );
68  }
69 
70  template< class MessageBuffer, class HostEntity >
71  void gather ( MessageBuffer &buffer, const HostEntity &hostEntity ) const
72  {
73  typedef typename Codim< HostEntity::codimension >::EntityType EntityType;
74  const EntityType entity( typename EntityType::Implementation( data(), hostEntity ) );
75  wrappedHandle_.gather( buffer, entity );
76  }
77 
78  template< class MessageBuffer, class HostEntity >
79  void scatter ( MessageBuffer &buffer, const HostEntity &hostEntity, size_t size )
80  {
81  typedef typename Codim< HostEntity::codimension >::EntityType EntityType;
82  const EntityType entity( typename EntityType::Implementation( data(), hostEntity ) );
83  wrappedHandle_.scatter( buffer, entity, size );
84  }
85 
86  ExtraData data() const { return data_; }
87 
88  protected:
89  WrappedHandle &wrappedHandle_;
91  };
92 
93 } // namespace Dune
94 
95 #endif // #ifndef DUNE_IDGRID_DATAHANDLE_HH
Definition: bindguard.hh:11
Definition: gridpart/idgridpart/datahandle.hh:23
void gather(MessageBuffer &buffer, const HostEntity &hostEntity) const
Definition: gridpart/idgridpart/datahandle.hh:71
std::remove_const< GridFamily >::type::Traits Traits
Definition: gridpart/idgridpart/datahandle.hh:28
WrappedHandle::DataType DataType
Definition: gridpart/idgridpart/datahandle.hh:41
bool fixedSize(int dim, int codim) const
Definition: gridpart/idgridpart/datahandle.hh:57
IdDataHandle(ExtraData data, WrappedHandle &wrappedHandle)
Definition: gridpart/idgridpart/datahandle.hh:47
WrappedHandle & wrappedHandle_
Definition: gridpart/idgridpart/datahandle.hh:89
Traits ::ExtraData ExtraData
Definition: gridpart/idgridpart/datahandle.hh:30
CommDataHandleIF< ThisType, DataType > DataHandleIFType
Definition: gridpart/idgridpart/datahandle.hh:43
ExtraData data() const
Definition: gridpart/idgridpart/datahandle.hh:86
IdDataHandle< WrappedHandle, GridFamily > ThisType
Definition: gridpart/idgridpart/datahandle.hh:25
void scatter(MessageBuffer &buffer, const HostEntity &hostEntity, size_t size)
Definition: gridpart/idgridpart/datahandle.hh:79
bool contains(int dim, int codim) const
Definition: gridpart/idgridpart/datahandle.hh:52
size_t size(const HostEntity &hostEntity) const
Definition: gridpart/idgridpart/datahandle.hh:63
IdDataHandle(const ThisType &)=delete
ExtraData data_
Definition: gridpart/idgridpart/datahandle.hh:90
Definition: gridpart/idgridpart/datahandle.hh:34
Traits::template Codim< codim >::Entity EntityType
Definition: gridpart/idgridpart/datahandle.hh:36