3 #ifndef DUNE_GRID_YASPGRIDHIERARCHICITERATOR_HH
4 #define DUNE_GRID_YASPGRIDHIERARCHICITERATOR_HH
16 template<
class Gr
idImp>
19 enum { dim=GridImp::dimension };
25 typedef typename GridImp::YGridLevelIterator
YGLI;
26 typedef typename GridImp::YGrid::Iterator
I;
27 typedef typename GridImp::template Codim<0>::Entity
Entity;
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)
60 _maxlevel(it._maxlevel), stack(it.stack)
67 if (stack.empty())
return;
70 if (_entity.impl()._g->level()<_maxlevel)
80 return (_entity == rhs._entity);
89 void print (std::ostream& s)
const
93 s <<
"HIER: " <<
"level=" << entity.
_g.level()
94 <<
" position=" << entity.
_it.coord()
95 <<
" superindex=" << entity.
_it.superindex()
96 <<
" maxlevel=" << entity._maxlevel
97 <<
" stacksize=" << stack.size()
108 std::array<int,dim> coord;
109 StackElem(
YGLI gg) : g(gg) {}
111 std::stack<StackElem> stack;
117 YaspEntityImp& entity = _entity.
impl();
120 YGLI finer = entity._g;
123 for (
int i=0; i<(1<<dim); i++)
125 for (
int k=0; k<dim; k++)
127 se.coord[k] = entity._it.coord(k)*2+1;
129 se.coord[k] = entity._it.coord(k)*2;
132 for (
int k=0; k<dim; k++)
133 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)))
143 StackElem se = stack.top();
145 YaspEntityImp& entity = _entity.
impl();
147 entity._it.reinit(entity._g->overlap[0],se.coord);
Include standard header files.
Definition: agrid.hh:59
int min(const DofVectorPointer< int > &dofVector)
Definition: dofvector.hh:346
Wrapper class for entities.
Definition: common/entity.hh:64
Implementation & impl()
access to the underlying implementation
Definition: common/entity.hh:78
YGLI _g
Definition: yaspgridentity.hh:412
I _it
Definition: yaspgridentity.hh:411
YaspHierarchicIterator enables iteration over son entities of codim 0.
Definition: yaspgridhierarchiciterator.hh:18
YaspHierarchicIterator()
default constructor creating empty iterator
Definition: yaspgridhierarchiciterator.hh:30
GridImp::template Codim< 0 >::Entity Entity
Definition: yaspgridhierarchiciterator.hh:27
YaspHierarchicIterator(const YaspHierarchicIterator &it)
constructor
Definition: yaspgridhierarchiciterator.hh:58
void print(std::ostream &s) const
Definition: yaspgridhierarchiciterator.hh:89
const Entity & dereference() const
dereferencing
Definition: yaspgridhierarchiciterator.hh:84
GridImp::YGrid::Iterator I
Definition: yaspgridhierarchiciterator.hh:26
GridImp::YGridLevelIterator YGLI
Definition: yaspgridhierarchiciterator.hh:25
void increment()
increment
Definition: yaspgridhierarchiciterator.hh:64
bool equals(const YaspHierarchicIterator &rhs) const
equality
Definition: yaspgridhierarchiciterator.hh:78
YaspHierarchicIterator(const YGLI &g, const I &it, int maxlevel)
constructor
Definition: yaspgridhierarchiciterator.hh:33