3#ifndef DUNE_GRID_MMESHINTERFACEITERATOR_HH
4#define DUNE_GRID_MMESHINTERFACEITERATOR_HH
11#include <dune/grid/common/gridenums.hh>
15template <
int codim,
class Gr
idImp,
int dim>
19template <
int codim,
class Gr
id>
21 EntityIterator<codim, Grid,
29template <
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) {
42 while (edgeIterator_ != mMesh_->getHostGrid().finite_edges_end()) {
57 edgeIterator_(mMesh_->getHostGrid().finite_edges_end()),
58 includeBoundary_(includeBoundary) {}
63 while (edgeIterator_ != mMesh_->getHostGrid().finite_edges_end()) {
72 Entity
dereference()
const {
return Entity{{mMesh_, *edgeIterator_}}; }
76 return edgeIterator_ == iter.edgeIterator_;
80 bool isInterface_()
const {
82 return mMesh_->isInterface(dereference());
84 return mMesh_->isInterface(dereference()) &&
85 !mMesh_->getHostGrid().is_infinite(
87 && !mMesh_->getHostGrid().is_infinite(
88 edgeIterator_->first->neighbor(edgeIterator_->second));
92 const GridImp* mMesh_;
93 EdgeIterator edgeIterator_;
94 bool includeBoundary_;
98template <
class Gr
idImp>
102 using FacetIterator =
typename GridImp::HostGridType::Finite_facets_iterator;
105 typedef typename GridImp::template Codim<1>::Entity Entity;
109 facetIterator_(mMesh_->getHostGrid().finite_facets_begin()),
110 includeBoundary_(includeBoundary) {
111 while (facetIterator_ != mMesh_->getHostGrid().finite_facets_end()) {
124 bool includeBoundary)
126 facetIterator_(mMesh_->getHostGrid().finite_facets_end()),
127 includeBoundary_(includeBoundary) {}
132 while (facetIterator_ != mMesh_->getHostGrid().finite_facets_end()) {
141 Entity
dereference()
const {
return Entity{{mMesh_, *facetIterator_}}; }
145 return facetIterator_ == iter.facetIterator_;
149 bool isInterface_()
const {
150 if (includeBoundary_)
151 return mMesh_->isInterface(dereference());
153 return mMesh_->isInterface(dereference()) &&
154 !mMesh_->getHostGrid().is_infinite(
155 facetIterator_->first)
156 && !mMesh_->getHostGrid().is_infinite(
157 facetIterator_->first->neighbor(facetIterator_->second));
161 const GridImp* mMesh_;
162 FacetIterator facetIterator_;
163 bool includeBoundary_;
167template <
class Gr
idImp,
int dim>
168class MMeshInterfaceVertexIteratorImp;
173 EntityIterator<Grid::dimension, Grid,
181template <
class Gr
idImp,
int dim>
186 using InterfaceIteratorImpl =
typename InterfaceIterator::Implementation;
189 typedef typename GridImp::template Codim<dim>::Entity Vertex;
192 bool includeBoundary)
194 interfaceIterator_(InterfaceIteratorImpl(mMesh_, includeBoundary)),
195 interfaceEnd_(InterfaceIteratorImpl(mMesh_,
true, includeBoundary)),
197 if (interfaceIterator_ != interfaceEnd_) {
199 std::size_t
id =
dereference().impl().hostEntity()->info().id;
209 bool includeBoundary)
212 InterfaceIteratorImpl(mMesh_, true, includeBoundary)),
213 interfaceEnd_(InterfaceIteratorImpl(mMesh_, true, includeBoundary)),
222 interfaceIterator_++;
225 if (interfaceIterator_ != interfaceEnd_) {
227 std::size_t
id =
dereference().impl().hostEntity()->info().id;
228 int count = visited.count(
id);
239 const auto host = interfaceIterator_->impl().hostEntity();
241 {mMesh_, host.first->vertex((host.second + i_ + 1) % (dim + 1))}};
246 return interfaceIterator_ == iter.interfaceIterator_ && i_ == iter.i_;
250 const GridImp* mMesh_;
251 InterfaceIterator interfaceIterator_, interfaceEnd_;
252 std::unordered_set<std::size_t> visited;
MMeshInterfaceIteratorImp(const GridImp *mMesh, bool endDummy, bool includeBoundary)
Constructor which creates the end iterator.
Definition: interfaceiterator.hh:54
bool equals(const MMeshInterfaceIteratorImp &iter) const
equality
Definition: interfaceiterator.hh:75
Entity dereference() const
dereferencing
Definition: interfaceiterator.hh:72
void increment()
prefix increment
Definition: interfaceiterator.hh:61
bool equals(const MMeshInterfaceIteratorImp &iter) const
equality
Definition: interfaceiterator.hh:144
Entity dereference() const
dereferencing
Definition: interfaceiterator.hh:141
void increment()
prefix increment
Definition: interfaceiterator.hh:130
MMeshInterfaceIteratorImp(const GridImp *mMesh, bool endDummy, bool includeBoundary)
Constructor which creates the end iterator.
Definition: interfaceiterator.hh:123
Forward declarations.
Definition: interfaceiterator.hh:16
Forward declarations.
Definition: interfaceiterator.hh:182
void increment()
prefix increment
Definition: interfaceiterator.hh:217
MMeshInterfaceVertexIteratorImp(const GridImp *mMesh, bool endDummy, bool includeBoundary)
Constructor which creates the end iterator.
Definition: interfaceiterator.hh:208
Vertex dereference() const
dereferencing
Definition: interfaceiterator.hh:238
bool equals(const MMeshInterfaceVertexIteratorImp &iter) const
equality
Definition: interfaceiterator.hh:245
EntityIterator< Grid::dimension, Grid, MMeshInterfaceVertexIteratorImp< Grid, Grid::dimension > > MMeshInterfaceVertexIterator
The Entity Iterator alias.
Definition: interfaceiterator.hh:174
EntityIterator< codim, Grid, MMeshInterfaceIteratorImp< codim, Grid, Grid::dimension > > MMeshInterfaceIterator
The Entity Iterator alias.
Definition: interfaceiterator.hh:22