7#ifndef HIERARCHIC_LEAF_ITERATOR_HH
8#define HIERARCHIC_LEAF_ITERATOR_HH
23template <
class Gr
idImp>
27 typedef typename GridImp::template Codim<0>::Entity Element;
28 typedef typename GridImp::HierarchicIterator HierarchicIterator;
29 enum {dim = GridImp::dimension};
30 enum {dimworld = GridImp::dimensionworld};
38 : element_(element), maxlevel_(grid.
maxLevel()), hIt_(element.hend(maxlevel_)),
39 flag_(flag), nested_(nested)
43 if (flag==
begin && !element_.isLeaf()) {
44 hIt_ = element_.hbegin(maxlevel_);
51 typename GridImp::LevelGridView levelView = grid.
levelGridView(element_.level());
54 for (
const auto lIt : intersections(levelView,element_))
70 return (element_ == other.element_) &&
71 ((flag_==other.flag_ && flag_==
end) || (hIt_ == other.hIt_ && flag_==
begin && other.flag_==flag_));
77 HierarchicIterator hEndIt = element_.hend(maxlevel_);
87 }
while(hIt_ != hEndIt && (!hIt_->isLeaf()));
99 return (element_.isLeaf()) ? element_ : leafChild_;
106 auto ref = Dune::ReferenceElements<typename GridImp::ctype,dim>::general(element_.type());
110 for (
int i=0; i<corners.
size(); i++)
111 corners[i] = ref.position(i,dim);
114 if (element_.isLeaf())
118 const typename Element::Geometry leafGeom = leafChild_->geometry();
119 const typename Element::Geometry coarseGeom = element_.geometry();
121 for (
int i=0; i<corners.
size();i++)
122 corners[i] = coarseGeom.local(leafGeom.corner(i));
126 Element father(leafChild_);
127 while (father != element_) {
129 const typename Element::LocalGeometry fatherGeom = father.geometryInFather();
130 father = father->father();
132 for (
int i=0; i<corners.
size(); i++)
133 corners[i] = fatherGeom.global(corners[i]);
142 const Element& element_;
148 HierarchicIterator hIt_;
#define DUNE_THROW(E,...)
LevelGridView levelGridView(int level) const
Hierarchic leaf iterator.
Definition hierarchicleafiterator.hh:26
bool equals(const HierarchicLeafIterator< GridImp > &other) const
Equality.
Definition hierarchicleafiterator.hh:69
LocalGeometry geometryInAncestor()
Compute the local geometry mapping from the leaf child to the starting element.
Definition hierarchicleafiterator.hh:103
PositionFlag
Definition hierarchicleafiterator.hh:34
@ begin
Definition hierarchicleafiterator.hh:34
@ end
Definition hierarchicleafiterator.hh:34
Dune::CachedMultiLinearGeometry< typename GridImp::ctype, dim, dimworld > LocalGeometry
Definition hierarchicleafiterator.hh:32
const Element & dereference() const
Dereferencing.
Definition hierarchicleafiterator.hh:96
HierarchicLeafIterator(const GridImp &grid, const Element &element, PositionFlag flag, bool nested=true)
Definition hierarchicleafiterator.hh:36
void increment()
Prefix increment.
Definition hierarchicleafiterator.hh:75