dune-grid  2.5-git
common/gridview.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_GRIDVIEW_HH
4 #define DUNE_GRIDVIEW_HH
5 
6 #include <dune/common/iteratorrange.hh>
7 
8 #include <dune/geometry/type.hh>
9 
12 
13 namespace Dune
14 {
15 
16  template< int, int, class, class >
17  class GridDefaultImplementation;
18 
19 
20 
58  template< class ViewTraits >
59  class GridView
60  {
62 
63 #if DUNE_GRID_EXPERIMENTAL_GRID_EXTENSIONS
64  public:
65 #else
66  protected:
67 #endif
68  // type of underlying implementation, for internal use only
69  typedef typename ViewTraits :: GridViewImp Implementation;
70 
71  public:
72  typedef typename ViewTraits :: GridViewImp GridViewImp;
73 
75  typedef ViewTraits Traits;
76 
78  typedef typename Traits :: Grid Grid;
79 
81  typedef typename Traits :: IndexSet IndexSet;
82 
84  typedef typename Traits :: Intersection Intersection;
85 
87  typedef typename Traits :: IntersectionIterator IntersectionIterator;
88 
90  typedef typename Traits :: CollectiveCommunication CollectiveCommunication;
91 
95  template< int cd >
96  struct Codim {
98  typedef typename Traits :: template Codim<cd> :: Iterator Iterator;
99 
101  typedef typename Traits :: template Codim<cd> :: Entity Entity;
102 
104  typedef typename Traits :: template Codim<cd> :: Geometry Geometry;
105 
107  typedef typename Traits :: template Codim<cd> :: LocalGeometry LocalGeometry;
108 
110  template< PartitionIteratorType pit >
111  struct Partition
112  {
114  typedef typename Traits :: template Codim< cd >
116  };
117  }; //: public Traits :: template Codim<cd> {};
118 
119  enum {
122  };
123 
125  typedef typename Grid::ctype ctype;
126 
127  enum {
129  };
130 
131  enum {
133  };
134 
135  public:
136 
137  //===========================================================
141  //===========================================================
143  GridView ( const Implementation &imp )
144  : impl_( imp )
145  {}
147 
149  GridView ( const ThisType &other )
150  : impl_( other.impl_ )
151  {}
152 
154  ThisType &operator= ( const ThisType &other )
155  {
156  impl_ = other.impl_;
157  return *this;
158  }
159 
160  public:
162  const Grid &grid () const
163  {
164  return impl().grid();
165  }
166 
173  const IndexSet &indexSet () const
174  {
175  return impl().indexSet();
176  }
177 
179  int size ( int codim ) const
180  {
181  return impl().size( codim );
182  }
183 
185  int size ( const GeometryType &type ) const
186  {
187  return impl().size( type );
188  }
189 
196  template<class EntityType>
197  bool contains (const EntityType& e) const
198  {
199  return impl().indexSet().contains(e);
200  }
201 
203  template< int cd >
204  typename Codim< cd > :: Iterator begin () const
205  {
206  return impl().template begin<cd>();
207  }
208 
210  template< int cd >
211  typename Codim< cd > :: Iterator end () const
212  {
213  return impl().template end<cd>();
214  }
215 
217  template< int cd , PartitionIteratorType pitype >
218  typename Codim< cd > :: template Partition< pitype > :: Iterator
219  begin () const
220  {
221  return impl().template begin<cd,pitype>();
222  }
223 
225  template< int cd, PartitionIteratorType pitype >
226  typename Codim< cd > :: template Partition< pitype > :: Iterator
227  end () const
228  {
229  return impl().template end<cd,pitype>();
230  }
231 
233  IntersectionIterator
234  ibegin ( const typename Codim< 0 > :: Entity &entity ) const
235  {
236  return impl().ibegin(entity);
237  }
238 
240  IntersectionIterator
241  iend ( const typename Codim< 0 > :: Entity &entity ) const
242  {
243  return impl().iend(entity);
244  }
245 
247  const CollectiveCommunication &comm () const
248  {
249  return impl().comm();
250  }
251 
253  int overlapSize(int codim) const
254  {
255  return impl().overlapSize(codim);
256  }
257 
259  int ghostSize(int codim) const
260  {
261  return impl().ghostSize(codim);
262  }
263 
265  template< class DataHandleImp, class DataType >
267  InterfaceType iftype,
268  CommunicationDirection dir ) const
269  {
270  impl().communicate(data,iftype,dir);
271  }
272 
273 #if DUNE_GRID_EXPERIMENTAL_GRID_EXTENSIONS
274  public:
275 #else
276  protected:
277  // give the GridDefaultImplementation class access to the realImp
278  friend class GridDefaultImplementation< Grid::dimension, Grid::dimensionworld, typename Grid::ctype, typename Grid::GridFamily >;
279 #endif
280  Implementation &impl () { return impl_; }
283  const Implementation &impl () const { return impl_; }
284 
285  protected:
286  Implementation impl_;
287  };
288 
289 } // namespace Dune
290 
291 #endif // #ifndef DUNE_GRIDVIEW_HH
int size(const GeometryType &type) const
obtain number of entities with a given geometry type
Definition: common/gridview.hh:185
ct ctype
Define type used for coordinates in grid module.
Definition: common/grid.hh:522
Export if this grid view is conforming.
Definition: common/gridview.hh:121
int ghostSize(int codim) const
Return size of the ghost region for a given codim on the grid view.
Definition: common/gridview.hh:259
Define types needed to iterate over entities of a given partition type.
Definition: common/gridview.hh:111
Codim< cd >::Iterator end() const
obtain end iterator for this view
Definition: common/gridview.hh:211
Describes the parallel communication interface class for MessageBuffers and DataHandles.
GeometryType
Type representing VTK&#39;s entity geometry types.
Definition: common.hh:178
Traits ::template Codim< cd >::Geometry Geometry
type of the geometry implementation
Definition: common/gridview.hh:104
ViewTraits ::GridViewImp Implementation
Definition: common/gridview.hh:69
A struct that collects all associated types of one implementation from the Traits class...
Definition: common/gridview.hh:96
CommunicationDirection
Define a type for communication direction parameter.
Definition: gridenums.hh:168
Codim< cd >::template Partition< pitype >::Iterator end() const
obtain end iterator for this view
Definition: common/gridview.hh:227
IntersectionIterator iend(const typename Codim< 0 > ::Entity &entity) const
obtain end intersection iterator with respect to this view
Definition: common/gridview.hh:241
Definition: common/geometry.hh:24
GridView(const Implementation &imp)
constructor (engine concept)
Definition: common/gridview.hh:143
Traits ::IntersectionIterator IntersectionIterator
type of the intersection iterator
Definition: common/gridview.hh:87
Traits ::Intersection Intersection
type of the intersection
Definition: common/gridview.hh:84
Traits ::CollectiveCommunication CollectiveCommunication
type of the collective communication
Definition: common/gridview.hh:90
Output conforming data.
Definition: common.hh:70
int size(int codim) const
obtain number of entities in a given codimension
Definition: common/gridview.hh:179
ViewTraits Traits
Traits class.
Definition: common/gridview.hh:75
ThisType & operator=(const ThisType &other)
assignment operator
Definition: common/gridview.hh:154
Traits ::template Codim< cd >::Entity Entity
type of corresponding entity
Definition: common/gridview.hh:101
const Grid & grid() const
obtain a const reference to the underlying hierarchic grid
Definition: common/gridview.hh:162
const IndexSet & indexSet() const
obtain the index set
Definition: common/gridview.hh:173
IntersectionIterator ibegin(const typename Codim< 0 > ::Entity &entity) const
obtain begin intersection iterator with respect to this view
Definition: common/gridview.hh:234
Traits ::template Codim< cd >::template Partition< pit >::Iterator Iterator
iterator over a given codim and partition type
Definition: common/gridview.hh:115
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:72
const Implementation & impl() const
return reference to the real implementation
Definition: common/gridview.hh:283
The dimension of the grid.
Definition: common/gridview.hh:128
ViewTraits ::GridViewImp GridViewImp
Definition: common/gridview.hh:72
int overlapSize(int codim) const
Return size of the overlap region for a given codim on the grid view.
Definition: common/gridview.hh:253
bool contains(const EntityType &e) const
Return true if the given entity is contained in this grid view.
Definition: common/gridview.hh:197
Implementation impl_
Definition: common/gridview.hh:286
Traits ::Grid Grid
type of the grid
Definition: common/gridview.hh:78
Traits ::template Codim< cd >::LocalGeometry LocalGeometry
type of the implementation for local geometries
Definition: common/gridview.hh:107
Codim< cd >::template Partition< pitype >::Iterator begin() const
obtain begin iterator for this view
Definition: common/gridview.hh:219
The dimension of the grid.
Definition: common/grid.hh:387
Grid::ctype ctype
type used for coordinates in grid
Definition: common/gridview.hh:125
GridView(const ThisType &other)
Copy constructor.
Definition: common/gridview.hh:149
Traits ::IndexSet IndexSet
type of the index set
Definition: common/gridview.hh:81
Implementation & impl()
return reference to the real implementation
Definition: common/gridview.hh:281
InterfaceType
Parameter to be used for the communication functions.
Definition: gridenums.hh:84
const CollectiveCommunication & comm() const
obtain collective communication object
Definition: common/gridview.hh:247
Grid view abstract base class.
Definition: common/gridview.hh:59
Traits ::template Codim< cd >::Iterator Iterator
type of iterator returned by the grid view
Definition: common/gridview.hh:98
Codim< cd >::Iterator begin() const
obtain begin iterator for this view
Definition: common/gridview.hh:204
The dimension of the world the grid lives in.
Definition: common/gridview.hh:132
void communicate(CommDataHandleIF< DataHandleImp, DataType > &data, InterfaceType iftype, CommunicationDirection dir) const
Communicate data on this view.
Definition: common/gridview.hh:266
The dimension of the world the grid lives in.
Definition: common/grid.hh:393