Loading [MathJax]/extensions/tex2jax.js

DUNE MultiDomainGrid (unstable)

hierarchiciterator.hh
1#ifndef DUNE_MULTIDOMAINGRID_SUBDOMAINGRID_HIERARCHICITERATOR_HH
2#define DUNE_MULTIDOMAINGRID_SUBDOMAINGRID_HIERARCHICITERATOR_HH
3
4#include "entity.hh"
5
6namespace Dune {
7
8namespace mdgrid {
9
10namespace subdomain {
11
12template<int,int,typename>
13class EntityWrapper;
14
15template<typename GridImp>
16class HierarchicIteratorWrapper
17{
18
19 template< int cd, class Grid, class IteratorImp >
20 friend class Dune::EntityIterator;
21
22 template<int, int, typename>
23 friend class EntityWrapper;
24
25 template<int, int, typename>
26 friend class EntityWrapper;
27
28 using MultiDomainIterator = typename GridImp::MultiDomainGrid::template Codim<0>::Entity::HierarchicIterator;
29
30public:
31
32 static const int codimension = 0;
33
34 using EntityWrapper = Dune::mdgrid::subdomain::EntityWrapper<0,GridImp::dimension,GridImp>;
35 using Entity = typename GridImp::template Codim<0>::Entity;
36
37 HierarchicIteratorWrapper()
38 : _grid(nullptr)
39 {}
40
41 HierarchicIteratorWrapper(
42 const GridImp* grid,
43 const MultiDomainIterator& multiDomainIterator,
44 const MultiDomainIterator& multiDomainEnd
45 )
46 : _grid(grid)
47 , _multiDomainIterator(multiDomainIterator)
48 , _multiDomainEnd(multiDomainEnd)
49 {
50 incrementToNextValidPosition();
51 }
52
53 bool equals(const HierarchicIteratorWrapper& r) const
54 {
55 return _grid == r._grid && _multiDomainIterator == r._multiDomainIterator;
56 }
57
58 Entity dereference() const
59 {
60 return {EntityWrapper(_grid,*_multiDomainIterator)};
61 }
62
63 void incrementToNextValidPosition() {
64 while(_multiDomainIterator != _multiDomainEnd && !_grid->containsMultiDomainEntity(*_multiDomainIterator))
65 {
66 ++_multiDomainIterator;
67 }
68 }
69
70 void increment() {
71 ++_multiDomainIterator;
72 incrementToNextValidPosition();
73 }
74
75private:
76
77 const GridImp* _grid;
78 MultiDomainIterator _multiDomainIterator;
79 MultiDomainIterator _multiDomainEnd;
80
81};
82
83} // namespace subdomain
84
85} // namespace mdgrid
86
87} // namespace Dune
88
89#endif // DUNE_MULTIDOMAINGRID_SUBDOMAINGRID_HIERARCHICITERATOR_HH
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden & Uni Heidelberg  |  generated with Hugo v0.111.3 (Apr 7, 22:57, 2025)