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
20namespace 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 >
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 >
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 >
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
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
const CollectiveCommunication & comm() const
Definition: gridview.hh:152
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
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
const GridLevel & gridLevel() const
Definition: gridview.hh:161
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
static const bool hasSuperEntityIterator
Definition: gridview.hh:70
Partition< All_Partition >::IteratorImpl IteratorImpl
Definition: gridview.hh:68
Dune::SuperEntityIterator< const Grid, SPSuperEntityIterator > SuperEntityIterator
Definition: gridview.hh:71
Partition< All_Partition >::Iterator Iterator
Definition: gridview.hh:67
Grid::Traits::template Codim< codim >::LocalGeometry LocalGeometry
Definition: gridview.hh:58
Grid::Traits::template Codim< codim >::Entity Entity
Definition: gridview.hh:55
Grid::Traits::template Codim< codim >::Geometry Geometry
Definition: gridview.hh:57
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