1#ifndef DUNE_SPGRID_GRIDVIEW_HH
2#define DUNE_SPGRID_GRIDVIEW_HH
7#include <dune/grid/common/gridview.hh>
11#include <dune/grid/spgrid/boundarysegmentiterator.hh>
13#include <dune/grid/spgrid/communication.hh>
14#include <dune/grid/spgrid/indexset.hh>
15#include <dune/grid/spgrid/intersection.hh>
16#include <dune/grid/spgrid/intersectioniterator.hh>
17#include <dune/grid/spgrid/iterator.hh>
18#include <dune/grid/spgrid/superentityiterator.hh>
26 template<
class ViewTraits >
35 struct SPGridViewTraits
37 typedef SPGridView< SPGridViewTraits< G > > GridViewImp;
39 typedef typename std::remove_const< G >::type Grid;
41 typedef SPIndexSet< const Grid > IndexSet;
45 static const bool hasBoundarySegmentIterator =
true;
56 typedef typename Grid::Traits::template Codim< codim >::Entity Entity;
58 typedef typename Grid::Traits::template Codim< codim >::Geometry Geometry;
59 typedef typename Grid::Traits::template Codim< codim >::LocalGeometry LocalGeometry;
61 template< PartitionIteratorType pit >
64 typedef SPPartitionIterator< codim, const Grid > IteratorImpl;
68 typedef typename Partition< All_Partition >::Iterator Iterator;
69 typedef typename Partition< All_Partition >::IteratorImpl IteratorImpl;
71 static const bool hasSuperEntityIterator =
true;
72 typedef Dune::SuperEntityIterator< const Grid, SPSuperEntityIterator > SuperEntityIterator;
81 template<
class ViewTraits >
84 typedef SPGridView< ViewTraits > This;
86 template<
class,
int,
template<
int >
class,
class >
friend class SPGrid;
87 template<
class >
friend class SPGridView;
90 typedef typename ViewTraits::Grid Grid;
91 typedef typename ViewTraits::IndexSet IndexSet;
92 typedef typename ViewTraits::IntersectionIterator IntersectionIterator;
93 typedef typename ViewTraits::BoundarySegmentIterator BoundarySegmentIterator;
94 typedef typename ViewTraits::Communication Communication;
97 typedef SPGridLevel< Grid > GridLevel;
101 :
public ViewTraits::template Codim< codim >
105 typedef std::pair< IndexSet, unsigned int > IndexSetPair;
107 typedef SPIntersectionIterator< const Grid > IntersectionIteratorImpl;
109 SPGridView () : indexSet_( new IndexSet ) {}
111 explicit SPGridView (
const GridLevel &gridLevel ) : indexSet_( new IndexSet( gridLevel ) ) {}
114 const Grid &grid ()
const;
116 const IndexSet &indexSet ()
const;
118 bool isConforming()
const {
return bool(ViewTraits::conforming); }
120 int size (
int codim )
const;
121 int size (
const GeometryType &type )
const;
123 int overlapSize (
const int codim )
const;
124 int ghostSize (
const int codim )
const;
126 template<
int codim >
127 typename Codim< codim >::Iterator
128 begin (
const unsigned int sweepDir = 0 )
const;
130 template<
int codim >
131 typename Codim< codim >::Iterator
132 end (
const unsigned int sweepDir = 0 )
const;
134 template<
int codim, PartitionIteratorType pitype >
135 typename Codim< codim >::template Partition< pitype >::Iterator
136 begin (
const unsigned int sweepDir = 0 )
const;
138 template<
int codim, PartitionIteratorType pitype >
139 typename Codim< codim >::template Partition< pitype >::Iterator
140 end (
const unsigned int sweepDir = 0 )
const;
142 IntersectionIterator ibegin (
const typename Codim< 0 >::Entity &entity )
const;
143 IntersectionIterator iend (
const typename Codim< 0 >::Entity &entity )
const;
145 template<
class Entity >
146 typename Codim< Entity::codimension >::SuperEntityIterator
147 superEntityBegin (
const Entity &entity )
const;
149 template<
class Entity >
150 typename Codim< Entity::codimension >::SuperEntityIterator
151 superEntityEnd (
const Entity &entity )
const;
153 BoundarySegmentIterator boundarySegmentBegin (
int face = 0 )
const;
154 BoundarySegmentIterator boundarySegmentEnd (
int face = GridLevel::numFaces-1 )
const;
156 const Communication &comm ()
const {
return grid().comm(); }
158 template<
class DataHandle,
class Data >
159 SPCommunication< Grid, CommDataHandleIF< DataHandle, Data > >
162 return SPCommunication< Grid, CommDataHandleIF< DataHandle, Data > >( gridLevel(), data, iftype, dir );
165 const GridLevel &gridLevel ()
const {
return indexSet().gridLevel(); }
167 void update (
const GridLevel &gridLevel ) { assert( indexSet_ ); indexSet_->update( gridLevel ); }
170 std::shared_ptr< IndexSet > indexSet_;
178 template<
class ViewTraits >
179 inline const typename SPGridView< ViewTraits >::Grid &
180 SPGridView< ViewTraits >::grid ()
const
182 return gridLevel().grid();
186 template<
class ViewTraits >
187 inline const typename SPGridView< ViewTraits >::IndexSet &
188 SPGridView< ViewTraits >::indexSet ()
const
194 template<
class ViewTraits >
195 inline int SPGridView< ViewTraits >::size (
int codim )
const
197 return indexSet().size( codim );
201 template<
class ViewTraits >
202 inline int SPGridView< ViewTraits >::size (
const GeometryType &type )
const
204 return indexSet().size( type );
208 template<
class ViewTraits >
209 inline int SPGridView< ViewTraits >::overlapSize (
const int codim )
const
212 DUNE_THROW( NotImplemented,
"overlapSize not implemented for codim > 0." );
213 int volume = gridLevel().template partition< OverlapFront_Partition >().volume();
214 volume -= gridLevel().template partition< InteriorBorder_Partition >().volume();
219 template<
class ViewTraits >
220 inline int SPGridView< ViewTraits >::ghostSize (
const int codim )
const
223 DUNE_THROW( NotImplemented,
"ghostSize not implemented for codim > 0." );
224 return gridLevel().template partition< Ghost_Partition >().volume();
228 template<
class ViewTraits >
229 template<
int codim >
230 inline typename SPGridView< ViewTraits >::template Codim< codim >::Iterator
231 SPGridView< ViewTraits >::begin (
const unsigned int sweepDir )
const
233 typedef typename Codim< codim >::IteratorImpl IteratorImpl;
234 typename IteratorImpl::Begin begin;
235 return IteratorImpl( gridLevel(), gridLevel().
template partition< All_Partition >(), begin, sweepDir );
239 template<
class ViewTraits >
240 template<
int codim >
241 inline typename SPGridView< ViewTraits >::template Codim< codim >::Iterator
242 SPGridView< ViewTraits >::end (
const unsigned int sweepDir )
const
244 typedef typename Codim< codim >::IteratorImpl IteratorImpl;
245 typename IteratorImpl::End end;
246 return IteratorImpl( gridLevel(), gridLevel().
template partition< All_Partition >(), end, sweepDir );
250 template<
class ViewTraits >
251 template<
int codim, PartitionIteratorType pitype >
252 inline typename SPGridView< ViewTraits >::template Codim< codim >::template Partition< pitype >::Iterator
253 SPGridView< ViewTraits >::begin (
const unsigned int sweepDir )
const
255 typedef typename Codim< codim >::template Partition< pitype >::IteratorImpl IteratorImpl;
256 typename IteratorImpl::Begin begin;
257 return IteratorImpl( gridLevel(), gridLevel().
template partition< pitype >(), begin, sweepDir );
261 template<
class ViewTraits >
262 template<
int codim, PartitionIteratorType pitype >
263 inline typename SPGridView< ViewTraits >::template Codim< codim >::template Partition< pitype >::Iterator
264 SPGridView< ViewTraits >::end (
const unsigned int sweepDir )
const
266 typedef typename Codim< codim >::template Partition< pitype >::IteratorImpl IteratorImpl;
267 typename IteratorImpl::End end;
268 return IteratorImpl( gridLevel(), gridLevel().
template partition< pitype >(), end, sweepDir );
272 template<
class ViewTraits >
273 inline typename SPGridView< ViewTraits >::IntersectionIterator
274 SPGridView< ViewTraits >::ibegin (
const typename Codim< 0 >::Entity &entity )
const
276 return IntersectionIteratorImpl( entity.impl().entityInfo(), 0 );
280 template<
class ViewTraits >
281 inline typename SPGridView< ViewTraits >::IntersectionIterator
282 SPGridView< ViewTraits >::iend (
const typename Codim< 0 >::Entity &entity )
const
284 return IntersectionIteratorImpl( entity.impl().entityInfo(), GridLevel::ReferenceCube::numFaces );
288 template<
class ViewTraits >
289 template<
class Entity >
290 inline typename SPGridView< ViewTraits >::template Codim< Entity::codimension >::SuperEntityIterator
291 SPGridView< ViewTraits >::superEntityBegin (
const Entity &entity )
const
293 typedef SPSuperEntityIterator< const Grid > Impl;
294 return Impl( entity.impl().entityInfo(),
typename Impl::Begin() );
298 template<
class ViewTraits >
299 template<
class Entity >
300 inline typename SPGridView< ViewTraits >::template Codim< Entity::codimension >::SuperEntityIterator
301 SPGridView< ViewTraits >::superEntityEnd (
const Entity &entity )
const
303 typedef SPSuperEntityIterator< const Grid > Impl;
304 return Impl( entity.impl().entityInfo(),
typename Impl::End() );
308 template<
class ViewTraits >
309 inline typename SPGridView< ViewTraits >::BoundarySegmentIterator
310 SPGridView< ViewTraits >::boundarySegmentBegin (
int face )
const
312 typedef SPBoundarySegmentIterator< const Grid > Impl;
313 return Impl( gridLevel(), face,
typename Impl::Begin() );
317 template<
class ViewTraits >
318 inline typename SPGridView< ViewTraits >::BoundarySegmentIterator
319 SPGridView< ViewTraits >::boundarySegmentEnd (
int face )
const
321 typedef SPBoundarySegmentIterator< const Grid > Impl;
322 return Impl( gridLevel(), face,
typename Impl::End() );
interface class for an iterator over grid entities
Definition: entityiterator.hh:32
detected_or_fallback_t< DeprecatedCollectiveCommunication_t, Communication_t, typename GridFamily::Traits > Communication
A type that is a model of Dune::Communication. It provides a portable way for communication on the se...
Definition: grid.hh:525
Mesh entities of codimension 0 ("elements") allow to visit all intersections with "neighboring" eleme...
Definition: intersectioniterator.hh:83
Intersection of a mesh entity of codimension 0 ("element") with a "neighboring" element or with the d...
Definition: intersection.hh:164
interface classes for superentity iterators
#define DUNE_THROW(E, m)
Definition: exceptions.hh:218
Dune namespace.
Definition: alignedallocator.hh:13
Communication< T > CollectiveCommunication
Definition: communication.hh:541
@ conforming
use only conforming bisection refinement
Definition: declaration.hh:25