dune-grid 2.8.0
Loading...
Searching...
No Matches
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
13namespace 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 , 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:58
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:372
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:692
Different resources needed by all grid implementations.