Loading [MathJax]/extensions/MathMenu.js

DUNE MultiDomainGrid (unstable)

iterator.hh
1#ifndef DUNE_GRID_MULTIDOMAINGRID_SUBDOMAINGRID_ITERATOR_HH
2#define DUNE_GRID_MULTIDOMAINGRID_SUBDOMAINGRID_ITERATOR_HH
3
4#include <dune/grid/common/gridenums.hh>
5
6#include "entity.hh"
7
8namespace Dune {
9
10namespace mdgrid {
11
12namespace subdomain {
13
14template<typename MDGrid>
15class SubDomainGrid;
16
17template<int,int,typename>
18class EntityWrapper;
19
20template<
21 typename GridView,
22 typename MultiDomainIterator,
23 int codim,
24 PartitionIteratorType pitype,
25 typename GridImp
26 >
27class IteratorWrapper
28{
29
30 template<typename MDGrid>
31 friend class SubDomainGrid;
32
33 template< int cd, class Grid, class IteratorImp >
34 friend class Dune::EntityIterator;
35
36 static const int codimension = codim;
37
38 using IndexSet = typename GridView::IndexSet;
39
40public:
41
42 // Entity has to be public for iterator traits
43 using Entity = typename GridImp::template Codim<codim>::Entity;
44
45private:
46
47 using EntityWrapper = Dune::mdgrid::subdomain::EntityWrapper<codim,GridImp::dimension,GridImp>;
48
49 IteratorWrapper()
50 : _grid(nullptr)
51 , _indexSet(nullptr)
52 {}
53
54 IteratorWrapper(
55 const GridImp* grid,
56 const IndexSet* indexSet,
57 MultiDomainIterator multiDomainIterator,
58 MultiDomainIterator endIterator
59 )
60 : _grid(grid)
61 , _indexSet(indexSet)
62 , _multiDomainIterator(multiDomainIterator)
63 , _end(endIterator)
64 {
65 incrementToNextValidPosition();
66 }
67
68 void incrementToNextValidPosition() {
69 while(_multiDomainIterator != _end && !_indexSet->containsMultiDomainEntity(*_multiDomainIterator))
70 {
71 ++_multiDomainIterator;
72 }
73 }
74
75 void increment() {
76 ++_multiDomainIterator;
77 incrementToNextValidPosition();
78 }
79
80 bool equals(const IteratorWrapper& r) const
81 {
82 return _grid == r._grid && _indexSet == r._indexSet && _multiDomainIterator == r._multiDomainIterator;
83 }
84
85 Entity dereference() const
86 {
87 return {EntityWrapper(_grid,*_multiDomainIterator)};
88 }
89
90 int level() const
91 {
92 return _multiDomainIterator.level();
93 }
94
95public:
96
97private:
98
99 const GridImp* _grid;
100 const IndexSet* _indexSet;
101 MultiDomainIterator _multiDomainIterator;
102 MultiDomainIterator _end;
103
104};
105
106} // namespace subdomain
107
108} // namespace mdgrid
109
110} // namespace Dune
111
112#endif // DUNE_GRID_MULTIDOMAINGRID_SUBDOMAINGRID_ITERATOR_HH
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden & Uni Heidelberg  |  generated with Hugo v0.111.3 (Apr 7, 22:57, 2025)