3#ifndef DUNE_GRID_MMESHINTERFACEITERATOR_HH
4#define DUNE_GRID_MMESHINTERFACEITERATOR_HH
11#include <dune/grid/common/gridenums.hh>
16 template<
int codim,
class Gr
idImp,
int dim>
20 template<
int codim,
class Gr
id>
28 template<
class Gr
idImp>
33 using EdgeIterator =
typename GridImp::HostGridType::Finite_edges_iterator;
36 typedef typename GridImp::template Codim<1>::Entity Entity;
40 edgeIterator_(mMesh_->getHostGrid().finite_edges_begin()),
41 includeBoundary_(includeBoundary)
43 while( edgeIterator_ != mMesh_->getHostGrid().finite_edges_end() )
58 edgeIterator_(mMesh_->getHostGrid().finite_edges_end()),
59 includeBoundary_(includeBoundary)
66 while( edgeIterator_ != mMesh_->getHostGrid().finite_edges_end() )
77 return Entity {{ mMesh_, *edgeIterator_ }};
82 return edgeIterator_ == iter.edgeIterator_;
86 bool isInterface_()
const
88 if ( includeBoundary_ )
89 return mMesh_->isInterface( dereference() );
92 return mMesh_->isInterface( dereference() )
93 && !mMesh_->getHostGrid().is_infinite(edgeIterator_->first)
94 && !mMesh_->getHostGrid().is_infinite(edgeIterator_->first->neighbor(edgeIterator_->second));
98 const GridImp* mMesh_;
99 EdgeIterator edgeIterator_;
100 bool includeBoundary_;
105 template<
class Gr
idImp>
110 using FacetIterator =
typename GridImp::HostGridType::Finite_facets_iterator;
113 typedef typename GridImp::template Codim<1>::Entity Entity;
117 facetIterator_(mMesh_->getHostGrid().finite_facets_begin()),
118 includeBoundary_(includeBoundary)
120 while( facetIterator_ != mMesh_->getHostGrid().finite_facets_end() )
135 facetIterator_(mMesh_->getHostGrid().finite_facets_end()),
136 includeBoundary_(includeBoundary)
143 while( facetIterator_ != mMesh_->getHostGrid().finite_facets_end() )
154 return Entity {{ mMesh_, *facetIterator_ }};
159 return facetIterator_ == iter.facetIterator_;
163 bool isInterface_()
const
165 if ( includeBoundary_ )
166 return mMesh_->isInterface( dereference() );
169 return mMesh_->isInterface( dereference() )
170 && !mMesh_->getHostGrid().is_infinite(facetIterator_->first)
171 && !mMesh_->getHostGrid().is_infinite(facetIterator_->first->neighbor(facetIterator_->second));
175 const GridImp* mMesh_;
176 FacetIterator facetIterator_;
177 bool includeBoundary_;
183 template<
class Gr
idImp,
int dim>
184 class MMeshInterfaceVertexIteratorImp;
195 template<
class Gr
idImp,
int dim>
201 using InterfaceIteratorImpl =
typename InterfaceIterator::Implementation;
204 typedef typename GridImp::template Codim<dim>::Entity Vertex;
208 interfaceIterator_( InterfaceIteratorImpl(mMesh_, includeBoundary) ),
209 interfaceEnd_( InterfaceIteratorImpl(mMesh_,
true, includeBoundary) ),
212 if( interfaceIterator_ != interfaceEnd_ )
215 std::size_t
id =
dereference().impl().hostEntity()->info().id;
216 visited.insert(
id );
226 interfaceIterator_( InterfaceIteratorImpl(mMesh_, true, includeBoundary) ),
227 interfaceEnd_( InterfaceIteratorImpl(mMesh_, true, includeBoundary) ),
239 interfaceIterator_++;
242 if ( interfaceIterator_ != interfaceEnd_ )
245 std::size_t
id =
dereference().impl().hostEntity()->info().id;
246 int count = visited.count(
id );
247 assert( count <= 1 );
251 visited.insert(
id );
257 const auto host = interfaceIterator_->impl().hostEntity();
258 return Vertex {{ mMesh_, host.first->vertex((host.second+i_+1)%(dim+1)) }};
263 return interfaceIterator_ == iter.interfaceIterator_ && i_ == iter.i_;
267 const GridImp* mMesh_;
268 InterfaceIterator interfaceIterator_, interfaceEnd_;
269 std::unordered_set<std::size_t> visited;
MMeshInterfaceIteratorImp(const GridImp *mMesh, bool endDummy, bool includeBoundary)
Constructor which creates the end iterator.
Definition: interfaceiterator.hh:56
bool equals(const MMeshInterfaceIteratorImp &iter) const
equality
Definition: interfaceiterator.hh:81
Entity dereference() const
dereferencing
Definition: interfaceiterator.hh:76
void increment()
prefix increment
Definition: interfaceiterator.hh:63
bool equals(const MMeshInterfaceIteratorImp &iter) const
equality
Definition: interfaceiterator.hh:158
Entity dereference() const
dereferencing
Definition: interfaceiterator.hh:153
void increment()
prefix increment
Definition: interfaceiterator.hh:140
MMeshInterfaceIteratorImp(const GridImp *mMesh, bool endDummy, bool includeBoundary)
Constructor which creates the end iterator.
Definition: interfaceiterator.hh:133
Forward declarations.
Definition: interfaceiterator.hh:17
Forward declarations.
Definition: interfaceiterator.hh:197
void increment()
prefix increment
Definition: interfaceiterator.hh:232
MMeshInterfaceVertexIteratorImp(const GridImp *mMesh, bool endDummy, bool includeBoundary)
Constructor which creates the end iterator.
Definition: interfaceiterator.hh:224
Vertex dereference() const
dereferencing
Definition: interfaceiterator.hh:256
bool equals(const MMeshInterfaceVertexIteratorImp &iter) const
equality
Definition: interfaceiterator.hh:262
EntityIterator< Grid::dimension, Grid, MMeshInterfaceVertexIteratorImp< Grid, Grid::dimension > > MMeshInterfaceVertexIterator
The Entity Iterator alias.
Definition: interfaceiterator.hh:188
EntityIterator< codim, Grid, MMeshInterfaceIteratorImp< codim, Grid, Grid::dimension > > MMeshInterfaceIterator
The Entity Iterator alias.
Definition: interfaceiterator.hh:21