dune-fem  2.4.1-rc
gridpart2gridview.hh
Go to the documentation of this file.
1 #ifndef DUNE_FEM_GRIDPART_COMMON_GRIDPART2GRIDVIEW_HH
2 #define DUNE_FEM_GRIDPART_COMMON_GRIDPART2GRIDVIEW_HH
3 
4 #include <dune/common/exceptions.hh>
5 
6 #include <dune/grid/common/gridenums.hh>
7 #include <dune/grid/common/gridview.hh>
8 
9 namespace Dune
10 {
11 
12  namespace Fem
13  {
14 
15  template< class GridPart >
17 
18 
19  template< class GridPart >
21  {
23 
24  typedef typename GridPart::GridType Grid;
25  typedef typename GridPart::IndexSetType IndexSet;
26  typedef typename GridPart::IntersectionIteratorType IntersectionIterator;
27 
28  typedef typename IntersectionIterator::Intersection Intersection;
29 
30  typedef typename GridPart::CollectiveCommunicationType CollectiveCommunication;
31 
32  template< int codim >
33  struct Codim
34  : public Grid::Traits::template Codim< codim >
35  {
36  typedef typename GridPart::template Codim< codim >::EntityType Entity;
37  typedef typename GridPart::template Codim< codim >::EntityPointerType EntityPointer;
38 
39  typedef typename GridPart::template Codim< codim >::GeometryType Geometry;
40  typedef typename GridPart::template Codim< codim >::LocalGeometryType LocalGeometry;
41 
42  template< PartitionIteratorType pitype >
43  struct Partition
44  {
46  };
47 
49  };
50 
51  static const bool conforming = GridPart::Traits::conforming;
52  };
53 
54 
55  template< class GridPart >
57  {
58  typedef GridPart2GridViewImpl< GridPart > ThisType;
59 
60  public:
61  typedef GridPart GridPartType;
62 
64 
66  typedef typename Traits::Grid Grid;
67 
69  typedef typename Traits::IndexSet IndexSet;
70 
73 
76 
79 
81  template< int codim >
82  struct Codim
83  : public Traits::template Codim< codim >
84  {};
85 
86  enum { conforming = Traits::conforming };
87 
88  enum { dimension = GridPartType::dimension };
89  enum { dimensionworld = GridPartType::dimensionworld };
90 
91  typedef typename GridPartType::ctype ctype;
92 
93  explicit GridPart2GridViewImpl ( const GridPartType &gridPart )
94  : gridPart_( gridPart )
95  {}
96 
97  GridPart2GridViewImpl ( const ThisType &other ) = default;
98 
99  ThisType &operator= ( const ThisType & ) = delete;
100 
101  const Grid &grid () const
102  {
103  return gridPart_.grid();
104  }
105 
106  const IndexSet &indexSet () const
107  {
108  return gridPart_.indexSet();
109  }
110 
111  int size ( int codim ) const
112  {
113  return indexSet().size( codim );
114  }
115 
116  int size ( const GeometryType &type ) const
117  {
118  return indexSet().size( type );
119  }
120 
121  template<class EntityType>
122  bool contains (const EntityType& e) const
123  {
124  return indexSet().contains(e);
125  }
126 
127  template< int codim >
128  typename Codim< codim >::Iterator begin () const
129  {
130  return begin< codim, All_Partition >();
131  }
132 
133  template< int codim, PartitionIteratorType pitype >
135  {
136  return gridPart_.template begin< codim, pitype >();
137  }
138 
139  template< int codim >
140  typename Codim< codim >::Iterator end () const
141  {
142  return end< codim, All_Partition >();
143  }
144 
145  template< int codim, PartitionIteratorType pitype >
147  {
148  return gridPart_.template end< codim, pitype >();
149  }
150 
151  IntersectionIterator ibegin ( const typename Codim< 0 >::Entity &entity ) const
152  {
153  return gridPart_.ibegin( entity );
154  }
155 
156  IntersectionIterator iend ( const typename Codim< 0 >::Entity &entity ) const
157  {
158  return gridPart_.iend( entity );
159  }
160 
161  const CollectiveCommunication &comm () const
162  {
163  return gridPart_.comm();
164  }
165 
166  int overlapSize ( int codim ) const
167  {
168  DUNE_THROW( NotImplemented, "Method ghostSize() not implemented yet" );
169  }
170 
171  int ghostSize( int codim ) const
172  {
173  DUNE_THROW( NotImplemented, "Method ghostSize() not implemented yet" );
174  }
175 
176  template< class DataHandleImp, class DataType >
177  void communicate ( CommDataHandleIF< DataHandleImp, DataType > &data,
178  InterfaceType iftype,
179  CommunicationDirection dir ) const
180  {
181  gridPart_.communicate( data, iftype, dir );
182  }
183 
184  private:
185  const GridPartType &gridPart_;
186  };
187 
188 
189 
190  template< class GridPart >
192  : public GridView< GridPart2GridViewTraits< GridPart > >
193  {
195  typedef GridView< GridPart2GridViewTraits< GridPart > > BaseType;
196 
197  typedef typename BaseType::GridViewImp GridViewImp;
198 
199  public:
200  explicit GridPart2GridView ( const GridPart &gridPart )
201  : BaseType( GridViewImp( gridPart ) )
202  {}
203  };
204 
205  } // namespace Fem
206 
207 } // namespace Dune
208 
209 #endif // #ifndef DUNE_FEM_GRIDPART_COMMON_GRIDPART2GRIDVIEW_HH
const CollectiveCommunication & comm() const
Definition: gridpart2gridview.hh:161
Traits::Grid Grid
type of the grid
Definition: gridpart2gridview.hh:66
IntersectionIterator iend(const typename Codim< 0 >::Entity &entity) const
Definition: gridpart2gridview.hh:156
GridPartType::ctype ctype
Definition: gridpart2gridview.hh:91
Codim< codim >::template Partition< pitype >::Iterator end() const
Definition: gridpart2gridview.hh:146
Definition: gridpart2gridview.hh:33
GridPart2GridViewTraits< GridPartType > Traits
Definition: gridpart2gridview.hh:63
GridPart GridPartType
Definition: gridpart2gridview.hh:61
Codim< codim >::Iterator end() const
Definition: gridpart2gridview.hh:140
GridPart::IntersectionIteratorType IntersectionIterator
Definition: gridpart2gridview.hh:26
int size(int codim) const
Definition: gridpart2gridview.hh:111
int size(const GeometryType &type) const
Definition: gridpart2gridview.hh:116
IntersectionIterator ibegin(const typename Codim< 0 >::Entity &entity) const
Definition: gridpart2gridview.hh:151
Definition: gridpart2gridview.hh:20
GridPart::template Codim< codim >::LocalGeometryType LocalGeometry
Definition: gridpart2gridview.hh:40
GridPart::CollectiveCommunicationType CollectiveCommunication
Definition: gridpart2gridview.hh:30
Traits::Intersection Intersection
type of the intersection
Definition: gridpart2gridview.hh:72
Codim< codim >::Iterator begin() const
Definition: gridpart2gridview.hh:128
IntersectionIterator::Intersection Intersection
Definition: gridpart2gridview.hh:28
GridPart::template Codim< codim >::EntityType Entity
Definition: gridpart2gridview.hh:36
Codim< codim >::template Partition< pitype >::Iterator begin() const
Definition: gridpart2gridview.hh:134
GridPart::GridType Grid
Definition: gridpart2gridview.hh:24
const IndexSet & indexSet() const
Definition: gridpart2gridview.hh:106
int overlapSize(int codim) const
Definition: gridpart2gridview.hh:166
Definition: coordinate.hh:4
Traits::IndexSet IndexSet
type of the index set
Definition: gridpart2gridview.hh:69
int ghostSize(int codim) const
Definition: gridpart2gridview.hh:171
Definition: gridpart2gridview.hh:16
GridPart::IndexSetType IndexSet
Definition: gridpart2gridview.hh:25
GridPart2GridViewImpl< GridPart > GridViewImp
Definition: gridpart2gridview.hh:22
GridPart::template Codim< codim >::EntityPointerType EntityPointer
Definition: gridpart2gridview.hh:37
Codim Structure.
Definition: gridpart2gridview.hh:82
bool contains(const EntityType &e) const
Definition: gridpart2gridview.hh:122
void communicate(CommDataHandleIF< DataHandleImp, DataType > &data, InterfaceType iftype, CommunicationDirection dir) const
Definition: gridpart2gridview.hh:177
Traits::IntersectionIterator IntersectionIterator
type of the intersection iterator
Definition: gridpart2gridview.hh:75
GridPart::template Codim< codim >::template Partition< pitype >::IteratorType Iterator
Definition: gridpart2gridview.hh:45
Definition: gridpart2gridview.hh:43
static const bool conforming
Definition: gridpart2gridview.hh:51
GridPart2GridView(const GridPart &gridPart)
Definition: gridpart2gridview.hh:200
Traits::CollectiveCommunication CollectiveCommunication
type of the collective communication
Definition: gridpart2gridview.hh:78
GridPart::template Codim< codim >::GeometryType Geometry
Definition: gridpart2gridview.hh:39
GridPart2GridViewImpl(const GridPartType &gridPart)
Definition: gridpart2gridview.hh:93
Definition: gridpart2gridview.hh:191
Partition< All_Partition >::Iterator Iterator
Definition: gridpart2gridview.hh:48
const Grid & grid() const
Definition: gridpart2gridview.hh:101