3#ifndef DUNE_GEOGRID_ITERATOR_HH
4#define DUNE_GEOGRID_ITERATOR_HH
11#include <dune/geometry/referenceelements.hh>
27 bool fake = !Capabilities::hasHostEntity< Grid, codim >::v >
30 template<
class Gr
id >
38 template<
int codim, PartitionIteratorType pitype,
class Gr
id >
41 template<
int codim,
class Gr
id >
44 static const int dimension = std::remove_const< Grid >::type::dimension;
45 static const int codimension = codim;
49 typedef typename std::remove_const< Grid >::type::ctype
ctype;
50 typedef typename std::remove_const< Grid >::type::Traits::template Codim< 0 >::Entity
Element;
51 typedef Transitional::ReferenceElement< ctype, Dim<dimension> >
RefElement;
54 const Element &element,
int subEntity )
56 const int size = refElement.size( subEntity, codim, dimension );
57 for(
int i = 0; i < size; ++i )
59 const int j = refElement.subEntity( subEntity, codim, i, dimension );
60 PartitionType type = element.template subEntity< dimension >( j ).partitionType();
68 template<
int codim,
class Gr
id >
71 static const int dimension = std::remove_const< Grid >::type::dimension;
72 static const int codimension = codim;
76 typedef typename std::remove_const< Grid >::type::ctype
ctype;
77 typedef typename std::remove_const< Grid >::type::Traits::template Codim< 0 >::Entity
Element;
78 typedef Transitional::ReferenceElement< ctype, Dim<dimension> >
RefElement;
81 const Element &element,
int subEntity )
87 template<
int codim,
class Gr
id >
90 static const int dimension = std::remove_const< Grid >::type::dimension;
91 static const int codimension = codim;
95 typedef typename std::remove_const< Grid >::type::ctype
ctype;
96 typedef typename std::remove_const< Grid >::type::Traits::template Codim< 0 >::Entity
Element;
97 typedef Transitional::ReferenceElement< ctype, Dim<dimension> >
RefElement;
100 const Element &element,
int subEntity )
105 const int size = refElement.size( subEntity, codim, dimension );
106 for(
int i = 0; i < size; ++i )
108 const int j = refElement.subEntity( subEntity, codim, i, dimension );
109 PartitionType type = element.template subEntity< dimension >( j ).partitionType();
117 template<
int codim,
class Gr
id >
120 static const int dimension = std::remove_const< Grid >::type::dimension;
121 static const int codimension = codim;
125 typedef typename std::remove_const< Grid >::type::ctype
ctype;
126 typedef typename std::remove_const< Grid >::type::Traits::template Codim< 0 >::Entity
Element;
127 typedef Transitional::ReferenceElement< ctype, Dim<dimension> >
RefElement;
130 const Element &element,
int subEntity )
136 template<
int codim,
class Gr
id >
139 static const int dimension = std::remove_const< Grid >::type::dimension;
140 static const int codimension = codim;
144 typedef typename std::remove_const< Grid >::type::ctype
ctype;
145 typedef typename std::remove_const< Grid >::type::Traits::template Codim< 0 >::Entity
Element;
146 typedef Transitional::ReferenceElement< ctype, Dim<dimension> >
RefElement;
149 const Element &element,
int subEntity )
155 template<
int codim,
class Gr
id >
158 static const int dimension = std::remove_const< Grid >::type::dimension;
159 static const int codimension = codim;
163 typedef typename std::remove_const< Grid >::type::ctype
ctype;
164 typedef typename std::remove_const< Grid >::type::Traits::template Codim< 0 >::Entity
Element;
165 typedef Transitional::ReferenceElement< ctype, Dim<dimension> >
RefElement;
168 const Element &element,
int subEntity )
170 const int size = refElement.size( subEntity, codim, dimension );
171 for(
int i = 0; i < size; ++i )
173 const int j = refElement.subEntity( subEntity, codim, i, dimension );
174 PartitionType type = element.template subEntity< dimension >( j ).partitionType();
187 template<
class HostGr
idView,
int codim, PartitionIteratorType pitype,
class G >
188 class Iterator< HostGridView, codim, pitype, G, false >
190 typedef typename std::remove_const< G >::type::Traits Traits;
193 typedef typename Traits::Grid
Grid;
195 static const int codimension = codim;
197 typedef typename Traits::template Codim< codimension >::Entity
Entity;
199 static const bool fake =
false;
204 typedef typename HostGridView::template Codim< codim >::template Partition< pitype >::Iterator HostEntityIterator;
211 hostEntityIterator_(
std::move( hostEntityIterator ) )
216 ++hostEntityIterator_;
221 return hostEntityIterator_ == rhs.hostEntityIterator_;
226 return EntityImpl( grid(), *hostEntityIterator_ );
229 int level ()
const {
return hostEntityIterator_.level(); }
239 HostEntityIterator hostEntityIterator = hostGridView.template begin< codimension, pitype >();
240 return Iterator( grid, std::move( hostEntityIterator ) );
245 HostEntityIterator hostEntityIterator = hostGridView.template end< codimension, pitype >();
246 return Iterator( grid, std::move( hostEntityIterator ) );
251 HostEntityIterator hostEntityIterator_;
259 template<
class HostGr
idView,
int codim, PartitionIteratorType pitype,
class G >
260 class Iterator< HostGridView, codim, pitype, G, true >
262 typedef typename std::remove_const< G >::type::Traits Traits;
265 typedef typename Traits::Grid
Grid;
267 static const int codimension = codim;
269 typedef typename Traits::template Codim< codimension >::Entity
Entity;
276 typedef typename HostGridView::template Codim<0>::template Partition< Filter::Element_Partition >::Iterator HostElementIterator;
277 typedef typename HostElementIterator::Entity HostElement;
278 typedef typename HostGridView::IndexSet HostIndexSet;
281 Iterator () : grid_( nullptr ), subEntity_( -1 ), hostIndexSet_( nullptr ) {}
283 Iterator (
const Grid &grid, HostElementIterator hostElementIterator, HostElementIterator hostEnd,
const HostIndexSet &hostIndexSet )
285 hostElementIterator_( hostElementIterator ),
288 hostIndexSet_( &hostIndexSet )
290 if( hostElementIterator_ != hostEnd_ )
292 visited_.resize( hostIndexSet_->size( codimension ),
false );
299 typedef typename Traits::ctype ctype;
301 while( hostElementIterator_ != hostEnd_ )
303 const HostElement &hostElement = *hostElementIterator_;
305 auto refElement = referenceElement< ctype, Traits::dimension >( hostElement.type() );
308 const int count = refElement.size( codimension );
309 for( ; subEntity_ < count; ++subEntity_ )
311 if( !Filter::apply( refElement, hostElement, subEntity_ ) )
314 const size_t index = hostIndexSet_->subIndex( hostElement, subEntity_, codimension );
315 if( !visited_[ index ] )
317 visited_[ index ] =
true;
321 ++hostElementIterator_;
328 return hostElementIterator_ == rhs.hostElementIterator_ && ( hostElementIterator_ == hostEnd_ || subEntity_ == rhs.subEntity_ );
333 return EntityImpl( grid(), *hostElementIterator_, subEntity_ );
336 int level ()
const {
return hostElementIterator_.level(); }
346 HostElementIterator first = hostGridView.template begin< 0, Filter::Element_Partition >();
347 HostElementIterator last = hostGridView.template end< 0, Filter::Element_Partition >();
348 return Iterator( grid, std::move( first ), std::move( last ), hostGridView.indexSet() );
353 HostElementIterator last = hostGridView.template end< 0, Filter::Element_Partition >();
354 return Iterator( grid, last, last, hostGridView.indexSet() );
359 HostElementIterator hostElementIterator_, hostEnd_;
361 const HostIndexSet *hostIndexSet_;
362 std::vector< bool > visited_;
373 typedef typename std::remove_const< G >::type::Traits Traits;
376 typedef typename Traits::Grid
Grid;
380 typedef typename Traits::template Codim< codimension >::Entity
Entity;
385 typedef typename Grid::HostGrid::HierarchicIterator HostEntityIterator;
392 hostEntityIterator_(
std::move( hostEntityIterator ) )
397 ++hostEntityIterator_;
402 return hostEntityIterator_ == rhs.hostEntityIterator_;
410 int level ()
const {
return hostEntityIterator_.level(); }
420 HostEntityIterator hostEntityIterator_;
PartitionIteratorType
Parameter to be used for the parallel level- and leaf iterators.
Definition: gridenums.hh:134
PartitionType
Attributes used in the generic overlap model.
Definition: gridenums.hh:28
@ All_Partition
all entities
Definition: gridenums.hh:139
@ OverlapFront_Partition
interior, border, overlap and front entities
Definition: gridenums.hh:138
@ Interior_Partition
only interior entities
Definition: gridenums.hh:135
@ InteriorBorder_Partition
interior and border entities
Definition: gridenums.hh:136
@ Overlap_Partition
interior, border, and overlap entities
Definition: gridenums.hh:137
@ Ghost_Partition
only ghost entities
Definition: gridenums.hh:140
@ InteriorEntity
all interior entities
Definition: gridenums.hh:29
@ GhostEntity
ghost entities
Definition: gridenums.hh:33
@ BorderEntity
on boundary between interior and overlap
Definition: gridenums.hh:30
@ OverlapEntity
all entities lying in the overlap zone
Definition: gridenums.hh:31
Include standard header files.
Definition: agrid.hh:58
Grid abstract base class.
Definition: common/grid.hh:372
DUNE-conform implementation of the entity.
Definition: geometrygrid/entity.hh:692
Definition: iterator.hh:372
static const int codimension
Definition: iterator.hh:378
int level() const
Definition: iterator.hh:410
void increment()
Definition: iterator.hh:395
bool equals(const HierarchicIterator &rhs) const
Definition: iterator.hh:400
Entity dereference() const
Definition: iterator.hh:405
HierarchicIterator()
Definition: iterator.hh:388
HierarchicIterator(const Grid &grid, HostEntityIterator hostEntityIterator)
Definition: iterator.hh:390
Traits::Grid Grid
Definition: iterator.hh:376
const Grid & grid() const
Definition: iterator.hh:412
Traits::template Codim< codimension >::Entity Entity
Definition: iterator.hh:380
Definition: iterator.hh:28
Definition: iterator.hh:39
std::remove_const< Grid >::type::ctype ctype
Definition: iterator.hh:49
std::remove_const< Grid >::type::Traits::template Codim< 0 >::Entity Element
Definition: iterator.hh:50
static bool apply(const RefElement &refElement, const Element &element, int subEntity)
Definition: iterator.hh:53
Transitional::ReferenceElement< ctype, Dim< dimension > > RefElement
Definition: iterator.hh:51
Transitional::ReferenceElement< ctype, Dim< dimension > > RefElement
Definition: iterator.hh:78
static bool apply(const RefElement &refElement, const Element &element, int subEntity)
Definition: iterator.hh:80
std::remove_const< Grid >::type::ctype ctype
Definition: iterator.hh:76
std::remove_const< Grid >::type::Traits::template Codim< 0 >::Entity Element
Definition: iterator.hh:77
Transitional::ReferenceElement< ctype, Dim< dimension > > RefElement
Definition: iterator.hh:97
std::remove_const< Grid >::type::Traits::template Codim< 0 >::Entity Element
Definition: iterator.hh:96
static bool apply(const RefElement &refElement, const Element &element, int subEntity)
Definition: iterator.hh:99
std::remove_const< Grid >::type::ctype ctype
Definition: iterator.hh:95
std::remove_const< Grid >::type::Traits::template Codim< 0 >::Entity Element
Definition: iterator.hh:126
std::remove_const< Grid >::type::ctype ctype
Definition: iterator.hh:125
Transitional::ReferenceElement< ctype, Dim< dimension > > RefElement
Definition: iterator.hh:127
static bool apply(const RefElement &refElement, const Element &element, int subEntity)
Definition: iterator.hh:129
static bool apply(const RefElement &refElement, const Element &element, int subEntity)
Definition: iterator.hh:148
std::remove_const< Grid >::type::ctype ctype
Definition: iterator.hh:144
Transitional::ReferenceElement< ctype, Dim< dimension > > RefElement
Definition: iterator.hh:146
std::remove_const< Grid >::type::Traits::template Codim< 0 >::Entity Element
Definition: iterator.hh:145
Transitional::ReferenceElement< ctype, Dim< dimension > > RefElement
Definition: iterator.hh:165
std::remove_const< Grid >::type::Traits::template Codim< 0 >::Entity Element
Definition: iterator.hh:164
std::remove_const< Grid >::type::ctype ctype
Definition: iterator.hh:163
static bool apply(const RefElement &refElement, const Element &element, int subEntity)
Definition: iterator.hh:167
Iterator()
Definition: iterator.hh:207
Traits::Grid Grid
Definition: iterator.hh:193
Entity dereference() const
Definition: iterator.hh:224
int level() const
Definition: iterator.hh:229
void increment()
Definition: iterator.hh:214
bool equals(const Iterator &rhs) const
Definition: iterator.hh:219
static Iterator begin(const Grid &grid, const HostGridView &hostGridView)
Definition: iterator.hh:237
Traits::template Codim< codimension >::Entity Entity
Definition: iterator.hh:197
const Grid & grid() const
Definition: iterator.hh:231
static Iterator end(const Grid &grid, const HostGridView &hostGridView)
Definition: iterator.hh:243
Iterator(const Grid &grid, HostEntityIterator hostEntityIterator)
Definition: iterator.hh:209
Traits::Grid Grid
Definition: iterator.hh:265
int level() const
Definition: iterator.hh:336
void increment()
Definition: iterator.hh:297
const Grid & grid() const
Definition: iterator.hh:338
static Iterator end(const Grid &grid, const HostGridView &hostGridView)
Definition: iterator.hh:351
static Iterator begin(const Grid &grid, const HostGridView &hostGridView)
Definition: iterator.hh:344
bool equals(const Iterator &rhs) const
Definition: iterator.hh:326
Entity dereference() const
Definition: iterator.hh:331
Iterator(const Grid &grid, HostElementIterator hostElementIterator, HostElementIterator hostEnd, const HostIndexSet &hostIndexSet)
Definition: iterator.hh:283
Traits::template Codim< codimension >::Entity Entity
Definition: iterator.hh:269
Iterator()
Definition: iterator.hh:281