3 #ifndef DUNE_GEOGRID_ITERATOR_HH
4 #define DUNE_GEOGRID_ITERATOR_HH
11 #include <dune/geometry/referenceelements.hh>
28 bool fake = !Capabilities::hasHostEntity< Grid, codim >::v >
31 template<
class Gr
id >
39 template<
int codim, PartitionIteratorType pitype,
class Gr
id >
42 template<
int codim,
class Gr
id >
45 static const int dimension = std::remove_const< Grid >::type::dimension;
46 static const int codimension = codim;
50 typedef typename std::remove_const< Grid >::type::ctype
ctype;
51 typedef typename std::remove_const< Grid >::type::Traits::template Codim< 0 >::Entity
Element;
55 const Element &element,
int subEntity )
57 const int size = refElement.size( subEntity, codim, dimension );
58 for(
int i = 0; i < size; ++i )
60 const int j = refElement.subEntity( subEntity, codim, i, dimension );
61 PartitionType type = element.template subEntity< dimension >( j )->partitionType();
69 template<
int codim,
class Gr
id >
72 static const int dimension = std::remove_const< Grid >::type::dimension;
73 static const int codimension = codim;
77 typedef typename std::remove_const< Grid >::type::ctype
ctype;
78 typedef typename std::remove_const< Grid >::type::Traits::template Codim< 0 >::Entity
Element;
82 const Element &element,
int subEntity )
88 template<
int codim,
class Gr
id >
91 static const int dimension = std::remove_const< Grid >::type::dimension;
92 static const int codimension = codim;
96 typedef typename std::remove_const< Grid >::type::ctype
ctype;
97 typedef typename std::remove_const< Grid >::type::Traits::template Codim< 0 >::Entity
Element;
101 const Element &element,
int subEntity )
106 const int size = refElement.size( subEntity, codim, dimension );
107 for(
int i = 0; i < size; ++i )
109 const int j = refElement.subEntity( subEntity, codim, i, dimension );
110 PartitionType type = element.template subEntity< dimension >( j )->partitionType();
118 template<
int codim,
class Gr
id >
121 static const int dimension = std::remove_const< Grid >::type::dimension;
122 static const int codimension = codim;
126 typedef typename std::remove_const< Grid >::type::ctype
ctype;
127 typedef typename std::remove_const< Grid >::type::Traits::template Codim< 0 >::Entity
Element;
131 const Element &element,
int subEntity )
137 template<
int codim,
class Gr
id >
140 static const int dimension = std::remove_const< Grid >::type::dimension;
141 static const int codimension = codim;
145 typedef typename std::remove_const< Grid >::type::ctype
ctype;
146 typedef typename std::remove_const< Grid >::type::Traits::template Codim< 0 >::Entity
Element;
150 const Element &element,
int subEntity )
156 template<
int codim,
class Gr
id >
159 static const int dimension = std::remove_const< Grid >::type::dimension;
160 static const int codimension = codim;
164 typedef typename std::remove_const< Grid >::type::ctype
ctype;
165 typedef typename std::remove_const< Grid >::type::Traits::template Codim< 0 >::Entity
Element;
169 const Element &element,
int subEntity )
171 const int size = refElement.size( subEntity, codim, dimension );
172 for(
int i = 0; i < size; ++i )
174 const int j = refElement.subEntity( subEntity, codim, i, dimension );
175 PartitionType type = element.template subEntity< dimension >( j )->partitionType();
188 template<
class HostGr
idView,
int codim, PartitionIteratorType pitype,
class G >
189 class Iterator< HostGridView, codim, pitype, G, false >
191 typedef typename std::remove_const< G >::type::Traits Traits;
194 typedef typename Traits::Grid
Grid;
196 static const int codimension = codim;
198 typedef typename Traits::template Codim< codimension >::Entity
Entity;
200 static const bool fake =
false;
205 typedef typename HostGridView::template Codim< codim >::template Partition< pitype >::Iterator HostEntityIterator;
212 hostEntityIterator_( std::
move( hostEntityIterator ) )
217 ++hostEntityIterator_;
222 return hostEntityIterator_ == rhs.hostEntityIterator_;
227 return EntityImpl( grid(), *hostEntityIterator_ );
230 int level ()
const {
return hostEntityIterator_.level(); }
240 HostEntityIterator hostEntityIterator = hostGridView.template begin< codimension, pitype >();
246 HostEntityIterator hostEntityIterator = hostGridView.template end< codimension, pitype >();
257 return dereference() == rhs.dereference();
262 HostEntityIterator hostEntityIterator_;
270 template<
class HostGr
idView,
int codim, PartitionIteratorType pitype,
class G >
271 class Iterator< HostGridView, codim, pitype, G, true >
273 typedef typename std::remove_const< G >::type::Traits Traits;
276 typedef typename Traits::Grid
Grid;
278 static const int codimension = codim;
280 typedef typename Traits::template Codim< codimension >::Entity
Entity;
287 typedef typename HostGridView::template Codim< codim >::template Partition< typename Filter::ElementPartition >::Iterator HostElementIterator;
288 typedef typename HostElementIterator::Entity HostElement;
289 typedef typename HostGridView::IndexSet HostIndexSet;
292 Iterator () : grid_( nullptr ), hostIndexSet_( nullptr ), subEntity_( -1 ) {}
294 Iterator (
const Grid &grid, HostElementIterator hostElementIterator, HostElementIterator hostEnd,
const HostIndexSet &hostIndexSet )
296 hostElementIterator_( hostElementIterator ),
299 hostIndexSet_( &hostIndexSet )
301 if( hostElementIterator_ != hostEnd_ )
303 visited_.resize( hostIndexSet_->size( codimension ), false );
310 typedef typename Traits::ctype ctype;
312 while( hostElementIterator_ != hostEnd_ )
314 const HostElement &hostElement = *hostElementIterator_;
316 const ReferenceElement< ctype, Traits::dimension > &refElement
317 = ReferenceElements< ctype, Traits::dimension >::general( hostElement.type() );
320 const int count = refElement.size( codimension );
321 for( ; subEntity_ < count; ++subEntity_ )
323 if( !Filter::apply( refElement, hostElement, subEntity_ ) )
326 const size_t index = hostIndexSet_->subIndex( hostElement, subEntity_, codimension );
327 if( !visited_[ index ] )
329 visited_[ index ] =
true;
333 ++hostElementIterator_;
340 return hostElementIterator_ == rhs.hostElementIterator_ && ( hostElementIterator_ == hostEnd_ || subEntity_ == rhs.subEntity_ );
345 return EntityImpl( grid(), *hostElementIterator_, subEntity_ );
348 int level ()
const {
return hostElementIterator_.level(); }
358 HostElementIterator first = hostGridView.template begin< codim, Filter::Element_Partition >();
359 HostElementIterator last = hostGridView.template begin< codim, Filter::Element_Partition >();
365 HostElementIterator last = hostGridView.template begin< codim, Filter::Element_Partition >();
366 return Iterator( grid, last, last, hostGridView.indexSet() );
376 return dereference() == rhs.dereference();
381 HostElementIterator hostElementIterator_, hostEnd_;
383 const HostIndexSet *hostIndexSet_;
384 std::vector< bool > visited_;
393 class HierarchicIterator
395 typedef typename std::remove_const< G >::type::Traits Traits;
398 typedef typename Traits::Grid
Grid;
402 typedef typename Traits::template Codim< codimension >::Entity
Entity;
407 typedef typename Grid::HostGrid::HierarchicIterator HostEntityIterator;
414 hostEntityIterator_( std::
move( hostEntityIterator ) )
419 ++hostEntityIterator_;
424 return hostEntityIterator_ == rhs.hostEntityIterator_;
432 int level ()
const {
return hostEntityIterator_.level(); }
452 HostEntityIterator hostEntityIterator_;
459 #endif // #ifndef DUNE_GEOGRID_ITERATOR_HH
ReferenceElement< ctype, dimension > RefElement
Definition: geometrygrid/iterator.hh:52
static bool apply(const RefElement &refElement, const Element &element, int subEntity)
Definition: geometrygrid/iterator.hh:100
Traits::template Codim< codimension >::Entity Entity
Definition: geometrygrid/iterator.hh:280
Definition: geometrygrid/entity.hh:57
ReferenceElement< ctype, dimension > RefElement
Definition: geometrygrid/iterator.hh:128
ReferenceElement< ctype, dimension > RefElement
Definition: geometrygrid/iterator.hh:98
Iterator(const Grid &grid, HostEntityIterator hostEntityIterator)
Definition: geometrygrid/iterator.hh:210
static bool apply(const RefElement &refElement, const Element &element, int subEntity)
Definition: geometrygrid/iterator.hh:168
Traits::Grid Grid
Definition: geometrygrid/iterator.hh:276
ghost entities
Definition: gridenums.hh:33
bool equals(const Dune::DefaultEntityPointer< Entity > &rhs) const
Definition: geometrygrid/iterator.hh:255
Entity dereference() const
Definition: geometrygrid/iterator.hh:225
Entity dereference() const
Definition: geometrygrid/iterator.hh:427
Definition: common/entitypointer.hh:595
Definition: geometrygrid/iterator.hh:29
static void(*)(*)(*)(*)(*)(*) move(const double *)
Definition: partitiondisplay.cc:122
only ghost entities
Definition: gridenums.hh:140
std::remove_const< Grid >::type::Traits::template Codim< 0 >::Entity Element
Definition: geometrygrid/iterator.hh:97
std::remove_const< Grid >::type::Traits::template Codim< 0 >::Entity Element
Definition: geometrygrid/iterator.hh:78
Wrapper and interface class for a static iterator (EntityPointer)
only interior entities
Definition: gridenums.hh:135
std::remove_const< Grid >::type::Traits::template Codim< 0 >::Entity Element
Definition: geometrygrid/iterator.hh:51
bool equals(const Dune::DefaultEntityPointer< Entity > &rhs) const
Definition: geometrygrid/iterator.hh:445
on boundary between interior and overlap
Definition: gridenums.hh:30
Traits::Grid Grid
Definition: geometrygrid/iterator.hh:398
bool equals(const Iterator &rhs) const
Definition: geometrygrid/iterator.hh:220
static bool apply(const RefElement &refElement, const Element &element, int subEntity)
Definition: geometrygrid/iterator.hh:81
Entity dereference() const
Definition: geometrygrid/iterator.hh:343
HierarchicIterator()
Definition: geometrygrid/iterator.hh:410
all interior entities
Definition: gridenums.hh:29
HierarchicIterator(const Grid &grid, HostEntityIterator hostEntityIterator)
Definition: geometrygrid/iterator.hh:412
static bool apply(const RefElement &refElement, const Element &element, int subEntity)
Definition: geometrygrid/iterator.hh:54
bool equals(const Iterator &rhs) const
Definition: geometrygrid/iterator.hh:338
PartitionType
Attributes used in the generic overlap model.
Definition: gridenums.hh:28
std::remove_const< Grid >::type::ctype ctype
Definition: geometrygrid/iterator.hh:126
static Iterator begin(const Grid &grid, const HostGridView &hostGridView)
Definition: geometrygrid/iterator.hh:356
ReferenceElement< ctype, dimension > RefElement
Definition: geometrygrid/iterator.hh:79
all entities
Definition: gridenums.hh:139
Traits::Grid Grid
Definition: geometrygrid/iterator.hh:194
static bool apply(const RefElement &refElement, const Element &element, int subEntity)
Definition: geometrygrid/iterator.hh:149
std::remove_const< Grid >::type::Traits::template Codim< 0 >::Entity Element
Definition: geometrygrid/iterator.hh:165
const Grid & grid() const
Definition: geometrygrid/iterator.hh:232
static Iterator end(const Grid &grid, const HostGridView &hostGridView)
Definition: geometrygrid/iterator.hh:363
std::remove_const< Grid >::type::Traits::template Codim< 0 >::Entity Element
Definition: geometrygrid/iterator.hh:146
interior and border entities
Definition: gridenums.hh:136
std::remove_const< Grid >::type::Traits::template Codim< 0 >::Entity Element
Definition: geometrygrid/iterator.hh:127
const Grid & grid() const
Definition: geometrygrid/iterator.hh:434
ReferenceElement< ctype, dimension > RefElement
Definition: geometrygrid/iterator.hh:147
Grid abstract base classThis class is the base class for all grid implementations. Although no virtual functions are used we call it abstract since its methods do not contain an implementation but forward to the methods of the derived class via the Barton-Nackman trick.
Definition: common/grid.hh:388
Traits::template Codim< codimension >::Entity Entity
Definition: geometrygrid/iterator.hh:402
static Iterator begin(const Grid &grid, const HostGridView &hostGridView)
Definition: geometrygrid/iterator.hh:238
Iterator()
Definition: geometrygrid/iterator.hh:208
int level() const
Definition: geometrygrid/iterator.hh:432
std::remove_const< Grid >::type::ctype ctype
Definition: geometrygrid/iterator.hh:96
std::remove_const< Grid >::type::ctype ctype
Definition: geometrygrid/iterator.hh:164
all entities lying in the overlap zone
Definition: gridenums.hh:31
int level() const
Definition: geometrygrid/iterator.hh:230
static bool apply(const RefElement &refElement, const Element &element, int subEntity)
Definition: geometrygrid/iterator.hh:130
void increment()
Definition: geometrygrid/iterator.hh:215
std::remove_const< Grid >::type::ctype ctype
Definition: geometrygrid/iterator.hh:145
interior, border, and overlap entities
Definition: gridenums.hh:137
void increment()
Definition: geometrygrid/iterator.hh:308
std::remove_const< Grid >::type::ctype ctype
Definition: geometrygrid/iterator.hh:50
static const int codimension
Definition: geometrygrid/iterator.hh:400
Iterator(const Grid &grid, HostElementIterator hostElementIterator, HostElementIterator hostEnd, const HostIndexSet &hostIndexSet)
Definition: geometrygrid/iterator.hh:294
Iterator()
Definition: geometrygrid/iterator.hh:292
bool equals(const HierarchicIterator &rhs) const
Definition: geometrygrid/iterator.hh:422
const Grid & grid() const
Definition: geometrygrid/iterator.hh:350
bool equals(const Dune::DefaultEntityPointer< Entity > &rhs) const
Definition: geometrygrid/iterator.hh:374
Definition: geometrygrid/iterator.hh:40
static Iterator end(const Grid &grid, const HostGridView &hostGridView)
Definition: geometrygrid/iterator.hh:244
PartitionIteratorType
Parameter to be used for the parallel level- and leaf iterators.
Definition: gridenums.hh:134
std::remove_const< Grid >::type::ctype ctype
Definition: geometrygrid/iterator.hh:77
ReferenceElement< ctype, dimension > RefElement
Definition: geometrygrid/iterator.hh:166
void increment()
Definition: geometrygrid/iterator.hh:417
DUNE-conform implementation of the entityThis class merely changes the template parameters of the ent...
Definition: geometrygrid/entity.hh:49
interior, border, overlap and front entities
Definition: gridenums.hh:138
int level() const
Definition: geometrygrid/iterator.hh:348
Traits::template Codim< codimension >::Entity Entity
Definition: geometrygrid/iterator.hh:198