3#ifndef DUNE_GRID_YASPGRIDHIERARCHICITERATOR_HH
4#define DUNE_GRID_YASPGRIDHIERARCHICITERATOR_HH
16 template<
class Gr
idImp>
19 enum { dim=GridImp::dimension };
21 typedef YaspEntity<0,GridImp::dimension,GridImp> YaspEntityImp;
25 typedef typename GridImp::YGridLevelIterator YGLI;
26 typedef typename GridImp::YGrid::Iterator I;
34 _entity(YaspEntity<0, dim, GridImp>(g,it))
37 YaspEntityImp& entity = _entity.impl();
39 StackElem se(entity._g);
40 std::copy(entity._it.coord().begin(), entity._it.coord().end(), se.coord.begin());
44 _maxlevel =
std::min(maxlevel,entity._g->mg->maxLevel());
47 if (entity._g->level()<_maxlevel)
61 if (stack.empty())
return;
64 if (_entity.impl()._g->level()<_maxlevel)
74 return (_entity == rhs._entity);
83 void print (std::ostream& s)
const
86 YaspEntityImp& entity = _entity.impl();
87 s <<
"HIER: " <<
"level=" << entity._g.level()
88 <<
" position=" << entity._it.coord()
89 <<
" superindex=" << entity._it.superindex()
90 <<
" maxlevel=" << entity._maxlevel
91 <<
" stacksize=" << stack.size()
102 std::array<int,dim> coord;
103 StackElem(YGLI gg) : g(gg) {}
105 std::stack<StackElem> stack;
111 YaspEntityImp& entity = _entity.impl();
114 YGLI finer = entity._g;
117 for (
int i=0; i<(1<<dim); i++)
119 for (
int k=0; k<dim; k++)
121 se.coord[k] = entity._it.coord(k)*2+1;
123 se.coord[k] = entity._it.coord(k)*2;
126 for (
int k=0; k<dim; k++)
127 if ((se.coord[k] < finer->overlap[0].dataBegin()->origin(k)) || (se.coord[k] >= finer->overlap[0].dataBegin()->origin(k)+finer->overlap[0].dataBegin()->size(k)))
137 StackElem se = stack.top();
139 YaspEntityImp& entity = _entity.impl();
141 entity._it.reinit(entity._g->overlap[0],se.coord);
YaspHierarchicIterator enables iteration over son entities of codim 0.
Definition: yaspgridhierarchiciterator.hh:18
YaspHierarchicIterator()
default constructor creating empty iterator
Definition: yaspgridhierarchiciterator.hh:30
const Entity & dereference() const
dereferencing
Definition: yaspgridhierarchiciterator.hh:78
void increment()
increment
Definition: yaspgridhierarchiciterator.hh:58
bool equals(const YaspHierarchicIterator &rhs) const
equality
Definition: yaspgridhierarchiciterator.hh:72
YaspHierarchicIterator(const YGLI &g, const I &it, int maxlevel)
constructor
Definition: yaspgridhierarchiciterator.hh:33
auto min(ADLTag< 0 >, const V &v1, const V &v2)
implements binary Simd::min()
Definition: defaults.hh:87
Dune namespace.
Definition: alignedallocator.hh:11
Static tag representing a codimension.
Definition: dimension.hh:22