dune-spgrid  2.7
gridview.hh
Go to the documentation of this file.
1 #ifndef DUNE_SPGRID_GRIDVIEW_HH
2 #define DUNE_SPGRID_GRIDVIEW_HH
3 
4 #include <memory>
5 #include <type_traits>
6 
7 #include <dune/grid/common/gridview.hh>
8 
10 
19 
20 namespace Dune
21 {
22 
23  // Internal Forward Declarations
24  // -----------------------------
25 
26  template< class ViewTraits >
27  class SPGridView;
28 
29 
30 
31  // SPGridViewTraits
32  // ----------------
33 
34  template< class G >
36  {
38 
39  typedef typename std::remove_const< G >::type Grid;
40 
42  typedef Dune::Intersection< const Grid, SPIntersection< const Grid > > Intersection;
43  typedef Dune::IntersectionIterator< const Grid, SPIntersectionIterator< const Grid >, SPIntersection< const Grid > > IntersectionIterator;
44 
45  static const bool hasBoundarySegmentIterator = true;
46  typedef Dune::IntersectionIterator< const Grid, SPBoundarySegmentIterator< const Grid >, SPIntersection< const Grid > > BoundarySegmentIterator;
47 
48  typedef typename Grid::CollectiveCommunication CollectiveCommunication;
49 
50  static const bool conforming = true;
51 
52  template< int codim >
53  struct Codim
54  {
55  typedef typename Grid::Traits::template Codim< codim >::Entity Entity;
56 
57  typedef typename Grid::Traits::template Codim< codim >::Geometry Geometry;
58  typedef typename Grid::Traits::template Codim< codim >::LocalGeometry LocalGeometry;
59 
60  template< PartitionIteratorType pit >
61  struct Partition
62  {
64  typedef Dune::EntityIterator< codim, const Grid, IteratorImpl > Iterator;
65  };
66 
69 
70  static const bool hasSuperEntityIterator = true;
72  };
73  };
74 
75 
76 
77  // SPGridView
78  // ----------
79 
80  template< class ViewTraits >
81  class SPGridView
82  {
84 
85  template< class, int, template< int > class, class > friend class SPGrid;
86  template< class > friend class SPGridView;
87 
88  public:
89  typedef typename ViewTraits::Grid Grid;
90  typedef typename ViewTraits::IndexSet IndexSet;
91  typedef typename ViewTraits::IntersectionIterator IntersectionIterator;
92  typedef typename ViewTraits::BoundarySegmentIterator BoundarySegmentIterator;
93  typedef typename ViewTraits::CollectiveCommunication CollectiveCommunication;
94 
96 
97  template< int codim >
98  struct Codim
99  : public ViewTraits::template Codim< codim >
100  {};
101 
102  private:
103  typedef std::pair< IndexSet, unsigned int > IndexSetPair;
104 
106 
107  SPGridView () : indexSet_( new IndexSet ) {}
108 
109  explicit SPGridView ( const GridLevel &gridLevel ) : indexSet_( new IndexSet( gridLevel ) ) {}
110 
111  public:
112  const Grid &grid () const;
113 
114  const IndexSet &indexSet () const;
115 
116  int size ( int codim ) const;
117  int size ( const GeometryType &type ) const;
118 
119  int overlapSize ( const int codim ) const;
120  int ghostSize ( const int codim ) const;
121 
122  template< int codim >
123  typename Codim< codim >::Iterator
124  begin ( const unsigned int sweepDir = 0 ) const;
125 
126  template< int codim >
127  typename Codim< codim >::Iterator
128  end ( const unsigned int sweepDir = 0 ) const;
129 
130  template< int codim, PartitionIteratorType pitype >
131  typename Codim< codim >::template Partition< pitype >::Iterator
132  begin ( const unsigned int sweepDir = 0 ) const;
133 
134  template< int codim, PartitionIteratorType pitype >
135  typename Codim< codim >::template Partition< pitype >::Iterator
136  end ( const unsigned int sweepDir = 0 ) const;
137 
138  IntersectionIterator ibegin ( const typename Codim< 0 >::Entity &entity ) const;
139  IntersectionIterator iend ( const typename Codim< 0 >::Entity &entity ) const;
140 
141  template< class Entity >
143  superEntityBegin ( const Entity &entity ) const;
144 
145  template< class Entity >
147  superEntityEnd ( const Entity &entity ) const;
148 
149  BoundarySegmentIterator boundarySegmentBegin ( int face = 0 ) const;
151 
152  const CollectiveCommunication &comm () const { return grid().comm(); }
153 
154  template< class DataHandle, class Data >
156  communicate ( CommDataHandleIF< DataHandle, Data > &data, InterfaceType iftype, CommunicationDirection dir ) const
157  {
159  }
160 
161  const GridLevel &gridLevel () const { return indexSet().gridLevel(); }
162 
163  void update ( const GridLevel &gridLevel ) { assert( indexSet_ ); indexSet_->update( gridLevel ); }
164 
165  private:
166  std::shared_ptr< IndexSet > indexSet_;
167  };
168 
169 
170 
171  // Implementation of SPGridView
172  // ----------------------------
173 
174  template< class ViewTraits >
175  inline const typename SPGridView< ViewTraits >::Grid &
177  {
178  return gridLevel().grid();
179  }
180 
181 
182  template< class ViewTraits >
183  inline const typename SPGridView< ViewTraits >::IndexSet &
185  {
186  return *indexSet_;
187  }
188 
189 
190  template< class ViewTraits >
191  inline int SPGridView< ViewTraits >::size ( int codim ) const
192  {
193  return indexSet().size( codim );
194  }
195 
196 
197  template< class ViewTraits >
198  inline int SPGridView< ViewTraits >::size ( const GeometryType &type ) const
199  {
200  return indexSet().size( type );
201  }
202 
203 
204  template< class ViewTraits >
205  inline int SPGridView< ViewTraits >::overlapSize ( const int codim ) const
206  {
207  if( codim != 0 )
208  DUNE_THROW( NotImplemented, "overlapSize not implemented for codim > 0." );
209  int volume = gridLevel().template partition< OverlapFront_Partition >().volume();
210  volume -= gridLevel().template partition< InteriorBorder_Partition >().volume();
211  return volume;
212  }
213 
214 
215  template< class ViewTraits >
216  inline int SPGridView< ViewTraits >::ghostSize ( const int codim ) const
217  {
218  if( codim != 0 )
219  DUNE_THROW( NotImplemented, "ghostSize not implemented for codim > 0." );
220  return gridLevel().template partition< Ghost_Partition >().volume();
221  }
222 
223 
224  template< class ViewTraits >
225  template< int codim >
226  inline typename SPGridView< ViewTraits >::template Codim< codim >::Iterator
227  SPGridView< ViewTraits >::begin ( const unsigned int sweepDir ) const
228  {
229  typedef typename Codim< codim >::IteratorImpl IteratorImpl;
230  typename IteratorImpl::Begin begin;
231  return IteratorImpl( gridLevel(), gridLevel().template partition< All_Partition >(), begin, sweepDir );
232  }
233 
234 
235  template< class ViewTraits >
236  template< int codim >
237  inline typename SPGridView< ViewTraits >::template Codim< codim >::Iterator
238  SPGridView< ViewTraits >::end ( const unsigned int sweepDir ) const
239  {
240  typedef typename Codim< codim >::IteratorImpl IteratorImpl;
241  typename IteratorImpl::End end;
242  return IteratorImpl( gridLevel(), gridLevel().template partition< All_Partition >(), end, sweepDir );
243  }
244 
245 
246  template< class ViewTraits >
247  template< int codim, PartitionIteratorType pitype >
248  inline typename SPGridView< ViewTraits >::template Codim< codim >::template Partition< pitype >::Iterator
249  SPGridView< ViewTraits >::begin ( const unsigned int sweepDir ) const
250  {
251  typedef typename Codim< codim >::template Partition< pitype >::IteratorImpl IteratorImpl;
252  typename IteratorImpl::Begin begin;
253  return IteratorImpl( gridLevel(), gridLevel().template partition< pitype >(), begin, sweepDir );
254  }
255 
256 
257  template< class ViewTraits >
258  template< int codim, PartitionIteratorType pitype >
259  inline typename SPGridView< ViewTraits >::template Codim< codim >::template Partition< pitype >::Iterator
260  SPGridView< ViewTraits >::end ( const unsigned int sweepDir ) const
261  {
262  typedef typename Codim< codim >::template Partition< pitype >::IteratorImpl IteratorImpl;
263  typename IteratorImpl::End end;
264  return IteratorImpl( gridLevel(), gridLevel().template partition< pitype >(), end, sweepDir );
265  }
266 
267 
268  template< class ViewTraits >
270  SPGridView< ViewTraits >::ibegin ( const typename Codim< 0 >::Entity &entity ) const
271  {
272  return IntersectionIteratorImpl( entity.impl().entityInfo(), 0 );
273  }
274 
275 
276  template< class ViewTraits >
278  SPGridView< ViewTraits >::iend ( const typename Codim< 0 >::Entity &entity ) const
279  {
280  return IntersectionIteratorImpl( entity.impl().entityInfo(), GridLevel::ReferenceCube::numFaces );
281  }
282 
283 
284  template< class ViewTraits >
285  template< class Entity >
286  inline typename SPGridView< ViewTraits >::template Codim< Entity::codimension >::SuperEntityIterator
287  SPGridView< ViewTraits >::superEntityBegin ( const Entity &entity ) const
288  {
290  return Impl( entity.impl().entityInfo(), typename Impl::Begin() );
291  }
292 
293 
294  template< class ViewTraits >
295  template< class Entity >
296  inline typename SPGridView< ViewTraits >::template Codim< Entity::codimension >::SuperEntityIterator
297  SPGridView< ViewTraits >::superEntityEnd ( const Entity &entity ) const
298  {
300  return Impl( entity.impl().entityInfo(), typename Impl::End() );
301  }
302 
303 
304  template< class ViewTraits >
307  {
309  return Impl( gridLevel(), face, typename Impl::Begin() );
310  }
311 
312 
313  template< class ViewTraits >
316  {
318  return Impl( gridLevel(), face, typename Impl::End() );
319  }
320 
321 } // namespace Dune
322 
323 #endif // #ifndef DUNE_SPGRID_GRIDVIEW_HH
capabilities for SPGrid
Definition: iostream.hh:7
Definition: extensions/superentityiterator.hh:20
Definition: boundarysegmentiterator.hh:29
Definition: communication.hh:77
structured, parallel DUNE grid
Definition: grid.hh:136
Definition: gridlevel.hh:35
static const int numFaces
Definition: gridlevel.hh:47
Definition: gridview.hh:82
friend class SPGridView
Definition: gridview.hh:86
IntersectionIterator iend(const typename Codim< 0 >::Entity &entity) const
Definition: gridview.hh:278
Codim< codim >::template Partition< pitype >::Iterator end(const unsigned int sweepDir=0) const
int overlapSize(const int codim) const
Definition: gridview.hh:205
const CollectiveCommunication & comm() const
Definition: gridview.hh:152
Codim< codim >::template Partition< pitype >::Iterator begin(const unsigned int sweepDir=0) const
ViewTraits::CollectiveCommunication CollectiveCommunication
Definition: gridview.hh:93
SPCommunication< Grid, CommDataHandleIF< DataHandle, Data > > communicate(CommDataHandleIF< DataHandle, Data > &data, InterfaceType iftype, CommunicationDirection dir) const
Definition: gridview.hh:156
ViewTraits::BoundarySegmentIterator BoundarySegmentIterator
Definition: gridview.hh:92
ViewTraits::IndexSet IndexSet
Definition: gridview.hh:90
Codim< codim >::Iterator begin(const unsigned int sweepDir=0) const
ViewTraits::IntersectionIterator IntersectionIterator
Definition: gridview.hh:91
IntersectionIterator ibegin(const typename Codim< 0 >::Entity &entity) const
Definition: gridview.hh:270
ViewTraits::Grid Grid
Definition: gridview.hh:89
const IndexSet & indexSet() const
Definition: gridview.hh:184
int ghostSize(const int codim) const
Definition: gridview.hh:216
Codim< Entity::codimension >::SuperEntityIterator superEntityEnd(const Entity &entity) const
const GridLevel & gridLevel() const
Definition: gridview.hh:161
BoundarySegmentIterator boundarySegmentBegin(int face=0) const
Definition: gridview.hh:306
BoundarySegmentIterator boundarySegmentEnd(int face=GridLevel::numFaces-1) const
Definition: gridview.hh:315
void update(const GridLevel &gridLevel)
Definition: gridview.hh:163
SPGridLevel< Grid > GridLevel
Definition: gridview.hh:95
Codim< codim >::Iterator end(const unsigned int sweepDir=0) const
Codim< Entity::codimension >::SuperEntityIterator superEntityBegin(const Entity &entity) const
int size(int codim) const
Definition: gridview.hh:191
const Grid & grid() const
Definition: gridview.hh:176
Definition: gridview.hh:36
SPGridView< SPGridViewTraits< G > > GridViewImp
Definition: gridview.hh:37
static const bool conforming
Definition: gridview.hh:50
std::remove_const< G >::type Grid
Definition: gridview.hh:39
Grid::CollectiveCommunication CollectiveCommunication
Definition: gridview.hh:48
Dune::IntersectionIterator< const Grid, SPIntersectionIterator< const Grid >, SPIntersection< const Grid > > IntersectionIterator
Definition: gridview.hh:43
Dune::IntersectionIterator< const Grid, SPBoundarySegmentIterator< const Grid >, SPIntersection< const Grid > > BoundarySegmentIterator
Definition: gridview.hh:46
static const bool hasBoundarySegmentIterator
Definition: gridview.hh:45
SPIndexSet< const Grid > IndexSet
Definition: gridview.hh:41
Dune::Intersection< const Grid, SPIntersection< const Grid > > Intersection
Definition: gridview.hh:42
Definition: gridview.hh:54
Partition< All_Partition >::Iterator Iterator
Definition: gridview.hh:67
static const bool hasSuperEntityIterator
Definition: gridview.hh:70
Partition< All_Partition >::IteratorImpl IteratorImpl
Definition: gridview.hh:68
Grid::Traits::template Codim< codim >::Entity Entity
Definition: gridview.hh:55
Grid::Traits::template Codim< codim >::Geometry Geometry
Definition: gridview.hh:57
Dune::SuperEntityIterator< const Grid, SPSuperEntityIterator > SuperEntityIterator
Definition: gridview.hh:71
Grid::Traits::template Codim< codim >::LocalGeometry LocalGeometry
Definition: gridview.hh:58
Dune::EntityIterator< codim, const Grid, IteratorImpl > Iterator
Definition: gridview.hh:64
SPPartitionIterator< codim, const Grid > IteratorImpl
Definition: gridview.hh:63
Definition: gridview.hh:100
Definition: indexset.hh:19
Definition: intersection.hh:37
Definition: intersectioniterator.hh:18
Definition: iterator.hh:19
Definition: spgrid/superentityiterator.hh:20
interface classes for superentity iterators