dune-alugrid  3.0.0
gridview.hh
Go to the documentation of this file.
1 #ifndef DUNE_ALUGRID_3D_GRIDVIEW_HH
2 #define DUNE_ALUGRID_3D_GRIDVIEW_HH
3 
4 #include <type_traits>
5 
6 #include <dune/common/exceptions.hh>
7 
8 #include <dune/grid/common/capabilities.hh>
9 #include <dune/grid/common/gridview.hh>
10 
11 namespace Dune
12 {
13 
14  template< class GridImp, PartitionIteratorType pitype >
16 
17  template< class GridImp, PartitionIteratorType pitype >
19 
20 
21  template< class GridImp, PartitionIteratorType pitype >
23  {
25 
27  typedef typename std::remove_const<GridImp>::type Grid;
28 
30  typedef typename Grid :: Traits :: LevelIndexSet IndexSet;
31 
33  typedef typename Grid :: Traits :: LevelIntersection Intersection;
34 
36  typedef typename Grid :: Traits :: LevelIntersectionIterator
38 
40  typedef typename Grid :: Traits :: CollectiveCommunication CollectiveCommunication;
41 
42  template< int cd >
43  struct Codim
44  {
45  typedef typename Grid::Traits::template Codim< cd >::Twists Twists;
46  typedef typename Twists::Twist Twist;
47 
48  typedef typename Grid :: Traits
49  :: template Codim< cd > :: template Partition< pitype > :: LevelIterator
51 
52  typedef typename Grid :: Traits :: template Codim< cd > :: Entity Entity;
53  typedef typename Grid :: Traits :: template Codim< cd > :: EntityPointer
55 
56  typedef typename Grid :: template Codim< cd > :: Geometry Geometry;
57  typedef typename Grid :: template Codim< cd > :: LocalGeometry
59 
61  template< PartitionIteratorType pit >
62  struct Partition
63  {
65  typedef typename Grid :: template Codim< cd >
66  :: template Partition< pit > :: LevelIterator
68  };
69  };
70 
71  enum { conforming = Capabilities :: isLevelwiseConforming< Grid > :: v };
72  };
73 
74 
75  template< class GridImp, PartitionIteratorType pitype >
76  class ALU3dLevelGridView
77  {
78  typedef ALU3dLevelGridView< GridImp, pitype > ThisType;
79 
80  public:
82 
84  typedef typename Traits::Grid Grid;
85 
87  typedef typename Traits :: IndexSet IndexSet;
88 
91 
94 
97 
99  template< int cd >
100  struct Codim : public Traits :: template Codim<cd> {};
101 
103 
104  ALU3dLevelGridView ( const Grid &grid, int level )
105  : grid_( &grid ),
106  level_( level )
107  {}
108 
110  const Grid &grid () const
111  {
112  assert( grid_ );
113  return *grid_;
114  }
115 
117  const IndexSet &indexSet () const
118  {
119  return grid().levelIndexSet( level_ );
120  }
121 
123  int size ( int codim ) const
124  {
125  return grid().size( level_, codim );
126  }
127 
129  int size ( const GeometryType &type ) const
130  {
131  return grid().size( level_, type );
132  }
133 
135  template< int cd >
136  typename Codim< cd > :: Iterator begin () const
137  {
138  return grid().template lbegin< cd, pitype >( level_ );
139  }
140 
142  template< int cd, PartitionIteratorType pit >
143  typename Codim< cd > :: template Partition< pit > :: Iterator begin () const
144  {
145  return grid().template lbegin< cd, pit >( level_ );
146  }
147 
149  template< int cd >
150  typename Codim< cd > :: Iterator end () const
151  {
152  return grid().template lend< cd, pitype >( level_ );
153  }
154 
156  template< int cd, PartitionIteratorType pit >
157  typename Codim< cd > :: template Partition< pit > :: Iterator end () const
158  {
159  return grid().template lend< cd, pit >( level_ );
160  }
161 
164  ibegin ( const typename Codim< 0 > :: Entity &entity ) const
165  {
166  return grid().ilevelbegin( entity );
167  }
168 
171  iend ( const typename Codim< 0 > :: Entity &entity ) const
172  {
173  return grid().ilevelend( entity );
174  }
175 
178  {
179  return grid().comm();
180  }
181 
183  int overlapSize(int codim) const
184  {
185  return grid().overlapSize(level_, codim);
186  }
187 
189  int ghostSize(int codim) const
190  {
191  return grid().ghostSize(level_, codim);
192  }
193 
195  template< class DataHandle, class Data >
196  typename Grid::LevelCommunication communicate ( CommDataHandleIF< DataHandle, Data > &data,
197  InterfaceType iftype,
198  CommunicationDirection dir ) const
199  {
200  return grid().communicate( data, iftype, dir, level_ );
201  }
202 
203  template< int cd >
204  typename Codim< cd >::Twists twists ( GeometryType type ) const
205  {
206  return grid().template twists< cd >( type );
207  }
208 
209  private:
210  const Grid *grid_;
211  int level_;
212  };
213 
214 
215  template< class GridImp, PartitionIteratorType pitype >
218 
220  typedef typename std::remove_const<GridImp>::type Grid;
221 
223  typedef typename Grid :: Traits :: LeafIndexSet IndexSet;
224 
226  typedef typename Grid :: Traits :: LeafIntersection Intersection;
227 
229  typedef typename Grid :: Traits :: LeafIntersectionIterator
231 
233  typedef typename Grid :: Traits :: CollectiveCommunication CollectiveCommunication;
234 
235  template< int cd >
236  struct Codim
237  {
238  typedef typename Grid::Traits::template Codim< cd >::Twists Twists;
239  typedef typename Twists::Twist Twist;
240 
241  typedef typename Grid :: Traits
242  :: template Codim< cd > :: template Partition< pitype > :: LeafIterator
244 
245  typedef typename Grid :: Traits :: template Codim< cd > :: Entity Entity;
246  typedef typename Grid :: Traits :: template Codim< cd > :: EntityPointer
248 
249  typedef typename Grid :: template Codim< cd > :: Geometry Geometry;
250  typedef typename Grid :: template Codim< cd > :: LocalGeometry
252 
254  template <PartitionIteratorType pit >
255  struct Partition
256  {
258  typedef typename Grid :: template Codim< cd >
259  :: template Partition< pit > :: LeafIterator
261  };
262  };
263 
264  enum { conforming = Capabilities :: isLeafwiseConforming< Grid > :: v };
265  };
266 
267 
268  template< class GridImp, PartitionIteratorType pitype >
269  class ALU3dLeafGridView
270  {
271  typedef ALU3dLeafGridView< GridImp, pitype > ThisType;
272 
273  public:
275 
277  typedef typename Traits::Grid Grid;
278 
280  typedef typename Traits :: IndexSet IndexSet;
281 
284 
287 
290 
292  template< int cd >
293  struct Codim : public Traits :: template Codim<cd> {};
294 
296 
297  public:
299  : grid_( &grid )
300  {}
301 
303  const Grid &grid () const
304  {
305  assert( grid_ );
306  return *grid_;
307  }
308 
310  const IndexSet &indexSet () const
311  {
312  return grid().leafIndexSet();
313  }
314 
316  int size ( int codim ) const
317  {
318  return grid().size( codim );
319  }
320 
322  int size ( const GeometryType &type ) const
323  {
324  return grid().size( type );
325  }
326 
328  template< int cd >
329  typename Codim< cd > :: Iterator begin () const
330  {
331  return grid().template leafbegin< cd, pitype >();
332  }
333 
335  template< int cd, PartitionIteratorType pit >
336  typename Codim< cd > :: template Partition< pit > :: Iterator begin () const
337  {
338  return grid().template leafbegin< cd, pit >();
339  }
340 
342  template< int cd >
343  typename Codim< cd > :: Iterator end () const
344  {
345  return grid().template leafend< cd, pitype >();
346  }
347 
349  template< int cd, PartitionIteratorType pit >
350  typename Codim< cd > :: template Partition< pit > :: Iterator end () const
351  {
352  return grid().template leafend< cd, pit >();
353  }
354 
357  ibegin ( const typename Codim< 0 > :: Entity &entity ) const
358  {
359  return grid().ileafbegin( entity );
360  }
361 
364  iend ( const typename Codim< 0 > :: Entity &entity ) const
365  {
366  return grid().ileafend( entity );
367  }
368 
371  {
372  return grid().comm();
373  }
374 
376  int overlapSize(int codim) const
377  {
378  return grid().overlapSize(codim);
379  }
380 
382  int ghostSize(int codim) const
383  {
384  return grid().ghostSize(codim);
385  }
386 
388  template< class DataHandle, class Data >
389  typename Grid::LeafCommunication communicate ( CommDataHandleIF< DataHandle, Data > &data,
390  InterfaceType iftype,
391  CommunicationDirection dir ) const
392  {
393  return grid().communicate( data, iftype, dir );
394  }
395 
396  template< int cd >
397  typename Codim< cd >::Twists twists ( GeometryType type ) const
398  {
399  return grid().template twists< cd >( type );
400  }
401 
402  private:
403  const Grid *grid_;
404  };
405 
406 } // namespace Dune
407 
408 #endif // #ifndef DUNE_ALUGRID_3D_GRIDVIEW_HH
Dune::ALU3dLevelGridView::ibegin
IntersectionIterator ibegin(const typename Codim< 0 > ::Entity &entity) const
obtain begin intersection iterator with respect to this view
Definition: gridview.hh:164
Dune::ALU3dLevelGridView::begin
Codim< cd >::template Partition< pit >::Iterator begin() const
obtain begin iterator for this view
Definition: gridview.hh:143
Dune::ALU3dLevelGridView::size
int size(const GeometryType &type) const
obtain number of entities with a given geometry type
Definition: gridview.hh:129
Dune::ALU3dLeafGridView::communicate
Grid::LeafCommunication communicate(CommDataHandleIF< DataHandle, Data > &data, InterfaceType iftype, CommunicationDirection dir) const
Definition: gridview.hh:389
Dune::ALU3dLevelGridViewTraits::Codim::Twists
Grid::Traits::template Codim< cd >::Twists Twists
Definition: gridview.hh:45
Dune::ALU3dLevelGridViewTraits::Codim::EntityPointer
Grid ::Traits ::template Codim< cd >::EntityPointer EntityPointer
Definition: gridview.hh:54
Dune::ALU3dLeafGridViewTraits::IndexSet
Grid ::Traits ::LeafIndexSet IndexSet
type of the index set
Definition: gridview.hh:223
Dune::ALU3dLevelGridViewTraits::GridViewImp
ALU3dLevelGridView< GridImp, pitype > GridViewImp
Definition: gridview.hh:24
Dune::ALU3dLeafGridViewTraits::Codim::Partition
Define types needed to iterate over entities of a given partition type.
Definition: gridview.hh:255
Dune::ALU3dLevelGridViewTraits::Codim::Geometry
Grid ::template Codim< cd >::Geometry Geometry
Definition: gridview.hh:56
Dune::ALU3dLevelGridView::Codim
Codim Structure.
Definition: gridview.hh:100
Dune::ALU3dLevelGridView::IndexSet
Traits ::IndexSet IndexSet
type of the index set
Definition: gridview.hh:87
Dune::ALU3dLevelGridViewTraits::Codim::LocalGeometry
Grid ::template Codim< cd >::LocalGeometry LocalGeometry
Definition: gridview.hh:58
Dune::ALU3dLevelGridView::end
Codim< cd >::template Partition< pit >::Iterator end() const
obtain end iterator for this view
Definition: gridview.hh:157
Dune::ALU3dLevelGridView::grid
const Grid & grid() const
obtain a const reference to the underlying hierarchic grid
Definition: gridview.hh:110
Dune::ALU3dLeafGridViewTraits::GridViewImp
ALU3dLeafGridView< GridImp, pitype > GridViewImp
Definition: gridview.hh:217
Dune::ALU3dLeafGridViewTraits::Codim::Geometry
Grid ::template Codim< cd >::Geometry Geometry
Definition: gridview.hh:249
Dune::ALU3dLeafGridViewTraits::Intersection
Grid ::Traits ::LeafIntersection Intersection
type of the intersection
Definition: gridview.hh:226
Dune::ALU3dLevelGridView::conforming
Definition: gridview.hh:102
Dune::ALU3dLevelGridViewTraits::Codim
Definition: gridview.hh:43
Dune::ALU3dLevelGridView::IntersectionIterator
Traits ::IntersectionIterator IntersectionIterator
type of the intersection iterator
Definition: gridview.hh:93
Dune::ALU3dLeafGridViewTraits::Codim
Definition: gridview.hh:236
Dune::ALU3dLevelGridView::iend
IntersectionIterator iend(const typename Codim< 0 > ::Entity &entity) const
obtain end intersection iterator with respect to this view
Definition: gridview.hh:171
Dune::ALU3dLevelGridViewTraits::Codim::Twist
Twists::Twist Twist
Definition: gridview.hh:46
Dune::ALU3dLevelGridView::overlapSize
int overlapSize(int codim) const
Return size of the overlap region for a given codim on the grid view.
Definition: gridview.hh:183
Dune::ALU3dLevelGridViewTraits::Grid
std::remove_const< GridImp >::type Grid
type of the grid
Definition: gridview.hh:27
Dune::ALU3dLevelGridView::begin
Codim< cd >::Iterator begin() const
obtain begin iterator for this view
Definition: gridview.hh:136
Dune::ALU3dLevelGridViewTraits
Definition: gridview.hh:22
Dune::ALU3dLeafGridView::CollectiveCommunication
Traits ::CollectiveCommunication CollectiveCommunication
type of the collective communication
Definition: gridview.hh:289
Dune::ALU3dLevelGridView::size
int size(int codim) const
obtain number of entities in a given codimension
Definition: gridview.hh:123
Dune::ALU3dLeafGridView::IntersectionIterator
Traits ::IntersectionIterator IntersectionIterator
type of the intersection iterator
Definition: gridview.hh:286
Dune::ALU3dLeafGridView::begin
Codim< cd >::Iterator begin() const
obtain begin iterator for this view
Definition: gridview.hh:329
Dune::ALU3dLevelGridView::ghostSize
int ghostSize(int codim) const
Return size of the ghost region for a given codim on the grid view.
Definition: gridview.hh:189
Dune::ALU3dLevelGridView::comm
const CollectiveCommunication & comm() const
obtain collective communication object
Definition: gridview.hh:177
Dune::ALU3dLeafGridView::comm
const CollectiveCommunication & comm() const
obtain collective communication object
Definition: gridview.hh:370
Dune::ALU3dLeafGridView::overlapSize
int overlapSize(int codim) const
Return size of the overlap region for a given codim on the grid view.
Definition: gridview.hh:376
Dune::ALU3dLevelGridViewTraits::conforming
Definition: gridview.hh:71
Dune::ALU3dLeafGridView::conforming
Definition: gridview.hh:295
Dune::ALU3dLevelGridView
Definition: gridview.hh:15
Dune::ALU3dLevelGridView::end
Codim< cd >::Iterator end() const
obtain end iterator for this view
Definition: gridview.hh:150
Dune::ALU3dLevelGridViewTraits::Codim::Partition::Iterator
Grid ::template Codim< cd >::template Partition< pit >::LevelIterator Iterator
iterator over a given codim and partition type
Definition: gridview.hh:67
Dune::ALU3dLevelGridViewTraits::Codim::Iterator
Grid ::Traits ::template Codim< cd >::template Partition< pitype >::LevelIterator Iterator
Definition: gridview.hh:50
Dune::ALU3dLeafGridView::size
int size(const GeometryType &type) const
obtain number of entities with a given geometry type
Definition: gridview.hh:322
Dune::ALU3dLeafGridView::ALU3dLeafGridView
ALU3dLeafGridView(const Grid &grid)
Definition: gridview.hh:298
Dune::ALU3dLeafGridViewTraits::conforming
Definition: gridview.hh:264
Dune::ALU3dLeafGridView::ghostSize
int ghostSize(int codim) const
Return size of the ghost region for a given codim on the grid view.
Definition: gridview.hh:382
Dune::ALU3dLevelGridViewTraits::CollectiveCommunication
Grid ::Traits ::CollectiveCommunication CollectiveCommunication
type of the collective communication
Definition: gridview.hh:40
Dune::ALU3dLeafGridView::Traits
ALU3dLeafGridViewTraits< GridImp, pitype > Traits
Definition: gridview.hh:274
Dune::ALU3dLeafGridViewTraits::Grid
std::remove_const< GridImp >::type Grid
type of the grid
Definition: gridview.hh:220
Dune::ALU3dLeafGridView::begin
Codim< cd >::template Partition< pit >::Iterator begin() const
obtain begin iterator for this view
Definition: gridview.hh:336
Dune::ALU3dLevelGridView::Grid
Traits::Grid Grid
type of the grid
Definition: gridview.hh:84
Dune::ALU3dLeafGridView::Codim
Codim Structure.
Definition: gridview.hh:293
Dune::ALU3dLeafGridView::indexSet
const IndexSet & indexSet() const
obtain the index set
Definition: gridview.hh:310
Dune::ALU3dLeafGridViewTraits::Codim::Twist
Twists::Twist Twist
Definition: gridview.hh:239
Dune::ALU3dLeafGridView::IndexSet
Traits ::IndexSet IndexSet
type of the index set
Definition: gridview.hh:280
Dune::ALU3dLevelGridViewTraits::IndexSet
Grid ::Traits ::LevelIndexSet IndexSet
type of the index set
Definition: gridview.hh:30
Dune::ALU3dLeafGridView::end
Codim< cd >::template Partition< pit >::Iterator end() const
obtain end iterator for this view
Definition: gridview.hh:350
Dune::ALU3dLevelGridViewTraits::IntersectionIterator
Grid ::Traits ::LevelIntersectionIterator IntersectionIterator
type of the intersection iterator
Definition: gridview.hh:37
Dune::ALU3dLevelGridView::Intersection
Traits ::Intersection Intersection
type of the intersection
Definition: gridview.hh:90
Dune::ALU3dLeafGridViewTraits::Codim::Iterator
Grid ::Traits ::template Codim< cd >::template Partition< pitype >::LeafIterator Iterator
Definition: gridview.hh:243
Dune::ALU3dLevelGridViewTraits::Intersection
Grid ::Traits ::LevelIntersection Intersection
type of the intersection
Definition: gridview.hh:33
Dune::ALU3dLeafGridView::size
int size(int codim) const
obtain number of entities in a given codimension
Definition: gridview.hh:316
Dune::ALU3dLevelGridViewTraits::Codim::Partition
Define types needed to iterate over entities of a given partition type.
Definition: gridview.hh:62
Dune::ALU3dLeafGridViewTraits::Codim::Partition::Iterator
Grid ::template Codim< cd >::template Partition< pit >::LeafIterator Iterator
iterator over a given codim and partition type
Definition: gridview.hh:260
Dune::ALU3dLeafGridView::Grid
Traits::Grid Grid
type of the grid
Definition: gridview.hh:277
Dune::ALU3dLeafGridViewTraits::Codim::EntityPointer
Grid ::Traits ::template Codim< cd >::EntityPointer EntityPointer
Definition: gridview.hh:247
Dune::ALU3dLeafGridView::end
Codim< cd >::Iterator end() const
obtain end iterator for this view
Definition: gridview.hh:343
Dune::ALU3dLeafGridView::iend
IntersectionIterator iend(const typename Codim< 0 > ::Entity &entity) const
obtain end intersection iterator with respect to this view
Definition: gridview.hh:364
Dune::ALU3dLevelGridView::CollectiveCommunication
Traits ::CollectiveCommunication CollectiveCommunication
type of the collective communication
Definition: gridview.hh:96
Dune::ALU3dLeafGridView::twists
Codim< cd >::Twists twists(GeometryType type) const
Definition: gridview.hh:397
Dune::ALU3dLeafGridViewTraits::CollectiveCommunication
Grid ::Traits ::CollectiveCommunication CollectiveCommunication
type of the collective communication
Definition: gridview.hh:233
Dune::ALU3dLevelGridView::twists
Codim< cd >::Twists twists(GeometryType type) const
Definition: gridview.hh:204
Dune::ALU3dLeafGridViewTraits::IntersectionIterator
Grid ::Traits ::LeafIntersectionIterator IntersectionIterator
type of the intersection iterator
Definition: gridview.hh:230
Dune::ALU3dLeafGridViewTraits
Definition: gridview.hh:216
Dune::ALU3dLevelGridView::indexSet
const IndexSet & indexSet() const
obtain the index set
Definition: gridview.hh:117
Dune::ALU3dLevelGridView::ALU3dLevelGridView
ALU3dLevelGridView(const Grid &grid, int level)
Definition: gridview.hh:104
Dune::ALU3dLeafGridViewTraits::Codim::Entity
Grid ::Traits ::template Codim< cd >::Entity Entity
Definition: gridview.hh:245
Dune::ALU3dLevelGridView::Traits
ALU3dLevelGridViewTraits< GridImp, pitype > Traits
Definition: gridview.hh:81
Dune::ALU3dLeafGridViewTraits::Codim::Twists
Grid::Traits::template Codim< cd >::Twists Twists
Definition: gridview.hh:238
Dune::ALU3dLevelGridViewTraits::Codim::Entity
Grid ::Traits ::template Codim< cd >::Entity Entity
Definition: gridview.hh:52
Dune::ALU3dLeafGridView::ibegin
IntersectionIterator ibegin(const typename Codim< 0 > ::Entity &entity) const
obtain begin intersection iterator with respect to this view
Definition: gridview.hh:357
Dune
Definition: alu3dinclude.hh:79
Dune::ALU3dLeafGridViewTraits::Codim::LocalGeometry
Grid ::template Codim< cd >::LocalGeometry LocalGeometry
Definition: gridview.hh:251
Dune::ALU3dLeafGridView
Definition: gridview.hh:18
Dune::ALU3dLevelGridView::communicate
Grid::LevelCommunication communicate(CommDataHandleIF< DataHandle, Data > &data, InterfaceType iftype, CommunicationDirection dir) const
Definition: gridview.hh:196
Dune::ALU3dLeafGridView::grid
const Grid & grid() const
obtain a const reference to the underlying hierarchic grid
Definition: gridview.hh:303
Dune::ALU3dLeafGridView::Intersection
Traits ::Intersection Intersection
type of the intersection
Definition: gridview.hh:283