3 #ifndef DUNE_GEOGRID_ITERATOR_HH
4 #define DUNE_GEOGRID_ITERATOR_HH
6 #include <dune/geometry/referenceelements.hh>
20 template<
class Traits,
bool fake = Traits::fake >
23 template<
class Gr
id >
31 template<
int codim, PartitionIteratorType pitype,
class Gr
id >
34 template<
int codim,
class Gr
id >
37 static const int dimension = remove_const< Grid >::type::dimension;
38 static const int codimension = codim;
42 typedef typename remove_const< Grid >::type::ctype
ctype;
43 typedef typename remove_const< Grid >::type::Traits::template Codim< 0 >::Entity
Element;
47 const Element &element,
int subEntity )
49 const int size = refElement.size( subEntity, codim, dimension );
50 for(
int i = 0; i < size; ++i )
52 const int j = refElement.subEntity( subEntity, codim, i, dimension );
53 PartitionType type = element.template subEntity< dimension >( j )->partitionType();
61 template<
int codim,
class Gr
id >
64 static const int dimension = remove_const< Grid >::type::dimension;
65 static const int codimension = codim;
69 typedef typename remove_const< Grid >::type::ctype
ctype;
70 typedef typename remove_const< Grid >::type::Traits::template Codim< 0 >::Entity
Element;
74 const Element &element,
int subEntity )
80 template<
int codim,
class Gr
id >
83 static const int dimension = remove_const< Grid >::type::dimension;
84 static const int codimension = codim;
88 typedef typename remove_const< Grid >::type::ctype
ctype;
89 typedef typename remove_const< Grid >::type::Traits::template Codim< 0 >::Entity
Element;
93 const Element &element,
int subEntity )
98 const int size = refElement.size( subEntity, codim, dimension );
99 for(
int i = 0; i < size; ++i )
101 const int j = refElement.subEntity( subEntity, codim, i, dimension );
102 PartitionType type = element.template subEntity< dimension >( j )->partitionType();
110 template<
int codim,
class Gr
id >
113 static const int dimension = remove_const< Grid >::type::dimension;
114 static const int codimension = codim;
118 typedef typename remove_const< Grid >::type::ctype
ctype;
119 typedef typename remove_const< Grid >::type::Traits::template Codim< 0 >::Entity
Element;
123 const Element &element,
int subEntity )
129 template<
int codim,
class Gr
id >
132 static const int dimension = remove_const< Grid >::type::dimension;
133 static const int codimension = codim;
137 typedef typename remove_const< Grid >::type::ctype
ctype;
138 typedef typename remove_const< Grid >::type::Traits::template Codim< 0 >::Entity
Element;
142 const Element &element,
int subEntity )
148 template<
int codim,
class Gr
id >
151 static const int dimension = remove_const< Grid >::type::dimension;
152 static const int codimension = codim;
156 typedef typename remove_const< Grid >::type::ctype
ctype;
157 typedef typename remove_const< Grid >::type::Traits::template Codim< 0 >::Entity
Element;
161 const Element &element,
int subEntity )
163 const int size = refElement.size( subEntity, codim, dimension );
164 for(
int i = 0; i < size; ++i )
166 const int j = refElement.subEntity( subEntity, codim, i, dimension );
167 PartitionType type = element.template subEntity< dimension >( j )->partitionType();
180 template<
class HostGr
idView,
int codim, PartitionIteratorType pitype,
class Gr
id >
191 typedef typename HostGridView::template Codim< codim >
192 ::template Partition< Entity_Partition >::Iterator
194 typedef typename HostGridView::template Codim< 0 >
195 ::template Partition< Element_Partition >::Iterator
208 template<
class Traits >
214 typedef typename Traits::Grid Grid;
219 using Base::codimension;
224 using Base::hostEntityIterator_;
225 using Base::entityImpl;
229 template<
class HostGr
idView >
231 :
Base( grid, (type == Traits::begin ? hostGridView.template begin< codimension, Traits::Entity_Partition >()
232 : hostGridView.template end< codimension, Traits::Entity_Partition >()) )
237 ++hostEntityIterator_;
247 template<
class Traits >
253 typedef typename Traits::Grid Grid;
256 static const int dimension = Traits::dimension;
257 static const int codimension = Traits::codimension;
262 typedef typename Traits::Filter Filter;
266 typedef typename Traits::HostIndexSet HostIndexSet;
271 using Base::hostElementIterator_;
272 using Base::entityImpl;
276 template<
class HostGr
idView >
278 :
Base( grid, (type == Traits::begin ? hostGridView.template begin< 0, Traits::Element_Partition >()
279 : hostGridView.template end< 0, Traits::Element_Partition >()), -1 ),
280 hostEnd_( hostGridView.template end< 0, Traits::Element_Partition >() ),
281 hostIndexSet_( &hostGridView.indexSet() )
283 if( hostElementIterator_ != hostEnd_ )
285 visited_.resize( hostIndexSet_->size( codimension ), false );
292 typedef typename Traits::ctype ctype;
294 int subEntity = this->subEntity();
295 while( hostElementIterator_ != hostEnd_ )
297 const HostElement &hostElement = *hostElementIterator_;
299 const ReferenceElement< ctype, dimension > &refElement
300 = ReferenceElements< ctype, dimension >::general( hostElement.type() );
303 const int count = refElement.size( codimension );
304 for( ; subEntity < count; ++subEntity )
306 if( !Filter::apply( refElement, hostElement, subEntity ) )
309 const size_t index = hostIndexSet_->subIndex( hostElement, subEntity, codimension );
310 if( !visited_[ index ] )
312 visited_[ index ] =
true;
313 entityImpl() =
EntityImpl( grid(), subEntity );
317 ++hostElementIterator_;
320 entityImpl() =
EntityImpl( grid(), subEntity );
324 HostElementIterator hostEnd_;
325 const HostIndexSet *hostIndexSet_;
326 std::vector< bool > visited_;
334 template<
class Gr
id >
338 typedef typename remove_const< Grid >::type::Traits
Traits;
349 template<
class Gr
id >
361 using Base::hostEntityIterator_;
362 using Base::entityImpl;
368 :
Base( grid, hostEntityIterator )
373 ++hostEntityIterator_;
382 #endif // #ifndef DUNE_GEOGRID_ITERATOR_HH
ReferenceElement< ctype, dimension > RefElement
Definition: geometrygrid/iterator.hh:158
interior, border, overlap and front entities
Definition: gridenums.hh:134
PartitionIteratorType
Parameter to be used for the parallel level- and leaf iterators.
Definition: gridenums.hh:130
static const PartitionIteratorType Entity_Partition
Definition: geometrygrid/iterator.hh:188
HierarchicIterator(const Grid &grid, const HostEntityIterator &hostEntityIterator)
Definition: geometrygrid/iterator.hh:366
IteratorType
Definition: geometrygrid/iterator.hh:200
void increment()
Definition: geometrygrid/iterator.hh:371
ReferenceElement< ctype, dimension > RefElement
Definition: geometrygrid/iterator.hh:71
remove_const< Grid >::type::Traits::template Codim< 0 >::Entity Element
Definition: geometrygrid/iterator.hh:138
PartitionIteratorFilter< codim, pitype, HostGrid > Filter
Definition: geometrygrid/iterator.hh:186
all entities
Definition: gridenums.hh:135
static bool apply(const RefElement &refElement, const Element &element, int subEntity)
Definition: geometrygrid/iterator.hh:122
remove_const< Grid >::type::Traits::template Codim< 0 >::Entity Element
Definition: geometrygrid/iterator.hh:89
static bool apply(const RefElement &refElement, const Element &element, int subEntity)
Definition: geometrygrid/iterator.hh:160
Definition: geometrygrid/entitypointer.hh:84
remove_const< Grid >::type::Traits::template Codim< 0 >::Entity Element
Definition: geometrygrid/iterator.hh:157
EntityPointerTraits< codim, Grid >::HostGrid HostGrid
Definition: geometrygrid/iterator.hh:184
Definition: geometrygrid/iterator.hh:200
Base::EntityImpl EntityImpl
Definition: geometrygrid/iterator.hh:222
ReferenceElement< ctype, dimension > RefElement
Definition: geometrygrid/iterator.hh:120
ReferenceElement< ctype, dimension > RefElement
Definition: geometrygrid/iterator.hh:90
remove_const< Grid >::type::ctype ctype
Definition: geometrygrid/iterator.hh:42
remove_const< Grid >::type::Traits::template Codim< 0 >::Entity Element
Definition: geometrygrid/iterator.hh:119
static bool apply(const RefElement &refElement, const Element &element, int subEntity)
Definition: geometrygrid/iterator.hh:73
Iterator(const Grid &grid, const HostGridView &hostGridView, IteratorType type)
Definition: geometrygrid/iterator.hh:230
HostGridView::template Codim< 0 >::template Partition< Element_Partition >::Iterator HostElementIterator
Definition: geometrygrid/iterator.hh:196
DUNE-conform implementation of the entityThis class merely changes the template parameters of the ent...
Definition: geometrygrid/entity.hh:49
Traits::HostElement HostElement
Definition: geometrygrid/entitypointer.hh:225
Definition: geometrygrid/iterator.hh:181
void increment()
Definition: geometrygrid/iterator.hh:235
interior, border, and overlap entities
Definition: gridenums.hh:133
ghost entities
Definition: gridenums.hh:29
remove_const< Grid >::type::ctype ctype
Definition: geometrygrid/iterator.hh:118
on boundary between interior and overlap
Definition: gridenums.hh:26
Definition: geometrygrid/entitypointer.hh:37
Definition: geometrygrid/iterator.hh:21
Traits::HostGrid::Traits::HierarchicIterator HostElementIterator
Definition: geometrygrid/iterator.hh:341
Definition: geometrygrid/iterator.hh:335
remove_const< Grid >::type::Traits::template Codim< 0 >::Entity Element
Definition: geometrygrid/iterator.hh:70
Traits::IteratorType IteratorType
Definition: geometrygrid/iterator.hh:217
static bool apply(const RefElement &refElement, const Element &element, int subEntity)
Definition: geometrygrid/iterator.hh:46
ReferenceElement< ctype, dimension > RefElement
Definition: geometrygrid/iterator.hh:44
HostGridView::IndexSet HostIndexSet
Definition: geometrygrid/iterator.hh:198
only ghost entities
Definition: gridenums.hh:136
remove_const< Grid >::type::ctype ctype
Definition: geometrygrid/iterator.hh:69
Base::EntityImpl EntityImpl
Definition: geometrygrid/iterator.hh:269
PartitionType
Attributes used in the generic overlap model.
Definition: gridenums.hh:24
HostGridView::template Codim< codim >::template Partition< Entity_Partition >::Iterator HostEntityIterator
Definition: geometrygrid/iterator.hh:193
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:386
static bool apply(const RefElement &refElement, const Element &element, int subEntity)
Definition: geometrygrid/iterator.hh:141
Definition: geometrygrid/iterator.hh:32
Definition: geometrygrid/entitypointer.hh:34
remove_const< Grid >::type::ctype ctype
Definition: geometrygrid/iterator.hh:137
interior and border entities
Definition: gridenums.hh:132
Iterator(const Grid &grid, const HostGridView &hostGridView, IteratorType type)
Definition: geometrygrid/iterator.hh:277
all entities lying in the overlap zone
Definition: gridenums.hh:27
Base::EntityImpl EntityImpl
Definition: geometrygrid/iterator.hh:358
static const PartitionIteratorType Element_Partition
Definition: geometrygrid/iterator.hh:189
Traits::IteratorType IteratorType
Definition: geometrygrid/iterator.hh:259
void increment()
Definition: geometrygrid/iterator.hh:290
static bool apply(const RefElement &refElement, const Element &element, int subEntity)
Definition: geometrygrid/iterator.hh:92
ReferenceElement< ctype, dimension > RefElement
Definition: geometrygrid/iterator.hh:139
remove_const< Grid >::type::ctype ctype
Definition: geometrygrid/iterator.hh:88
remove_const< Grid >::type::Traits::template Codim< 0 >::Entity Element
Definition: geometrygrid/iterator.hh:43
only interior entities
Definition: gridenums.hh:131
Definition: geometrygrid/entity.hh:57
Definition: geometrygrid/entitypointer.hh:203
remove_const< Grid >::type::Traits Traits
Definition: geometrygrid/iterator.hh:338
all interior entities
Definition: gridenums.hh:25
Traits::HostGrid::Traits::HierarchicIterator HostEntityIterator
Definition: geometrygrid/iterator.hh:340
Definition: geometrygrid/iterator.hh:200
Traits::HostEntityIterator HostEntityIterator
Definition: geometrygrid/iterator.hh:359
Traits::HostElementIterator HostElementIterator
Definition: geometrygrid/entitypointer.hh:224
remove_const< Grid >::type::ctype ctype
Definition: geometrygrid/iterator.hh:156