3#ifndef DUNE_MMESH_INTERFACE_MMESHLEAFITERATOR_HH
4#define DUNE_MMESH_INTERFACE_MMESHLEAFITERATOR_HH
20 typename Enable =
void>
23template <
int codim, PartitionIteratorType pitype,
class Gr
idImp>
30template <PartitionIteratorType pitype,
class Gr
idImp>
32 0, pitype, GridImp,
std::enable_if_t<GridImp::dimensionworld == 2>> {
35 using HostGridLeafIterator =
36 typename GridImp::HostGridType::Finite_faces_iterator;
38 using HostGridFacet =
typename GridImp::MMeshType::FacetHandle;
41 enum { codimension = 0 };
50 ? mMesh->partitionHelper().leafInteriorBegin()
51 : mMesh->getHostGrid().finite_faces_begin()),
64 ? mMesh->partitionHelper().leafInteriorEnd()
65 : mMesh->getHostGrid().finite_faces_end()),
81 return Entity{{mMesh_, HostGridFacet(hostLeafIterator_, face_)}};
86 return hostLeafIterator_ == i.hostLeafIterator_ && face_ == i.face_;
93 ? mMesh_->partitionHelper().leafInteriorEnd()
94 : mMesh_->getHostGrid().finite_faces_end());
95 if (hostLeafIterator_ == endIterator)
return false;
97 HostGridFacet facet(hostLeafIterator_, face_);
98 if (!mMesh_->isInterface(facet))
return true;
100 const auto mirrored = hostLeafIterator_->neighbor(face_);
101 if (hostLeafIterator_->info().insertionIndex >
102 mirrored->info().insertionIndex)
105 return !mMesh_->partitionHelper().contains(pitype,
dereference());
108 const GridImp* mMesh_;
110 HostGridLeafIterator hostLeafIterator_;
114template <PartitionIteratorType pitype,
class Gr
idImp>
116 1, pitype, GridImp,
std::enable_if_t<GridImp::dimensionworld == 2>> {
119 typedef typename GridImp::HostGridType::Vertex_iterator HostGridLeafIterator;
122 enum { codimension = GridImp::dimension };
128 hostLeafIterator_(mMesh->getHostGrid().finite_vertices_begin()),
129 hostLeafIteratorEnd_(mMesh->getHostGrid().finite_vertices_end()) {
130 while (proceed()) ++hostLeafIterator_;
140 hostLeafIterator_(mMesh->getHostGrid().finite_vertices_end()),
141 hostLeafIteratorEnd_(mMesh->getHostGrid().finite_vertices_end()) {}
147 while (proceed()) ++hostLeafIterator_;
155 return hostLeafIterator_ == i.hostLeafIterator_;
161 if (hostLeafIterator_ == hostLeafIteratorEnd_)
return false;
162 if (!hostLeafIterator_->info().isInterface)
return true;
163 return !mMesh_->partitionHelper().contains(pitype,
dereference());
166 const GridImp* mMesh_;
168 HostGridLeafIterator hostLeafIterator_;
169 HostGridLeafIterator hostLeafIteratorEnd_;
176template <PartitionIteratorType pitype,
class Gr
idImp>
178 0, pitype, GridImp,
std::enable_if_t<GridImp::dimensionworld == 3>> {
181 using HostGridLeafIterator =
182 typename GridImp::HostGridType::Finite_cells_iterator;
184 using HostGridFacet =
typename GridImp::MMeshType::FacetHandle;
187 enum { codimension = 0 };
196 ? mMesh->partitionHelper().leafInteriorBegin()
197 : mMesh->getHostGrid().finite_cells_begin()),
210 ? mMesh->partitionHelper().leafInteriorEnd()
211 : mMesh->getHostGrid().finite_cells_end()),
227 return Entity{{mMesh_, HostGridFacet(hostLeafIterator_, face_)}};
232 return hostLeafIterator_ == i.hostLeafIterator_ && face_ == i.face_;
239 ? mMesh_->partitionHelper().leafInteriorEnd()
240 : mMesh_->getHostGrid().finite_cells_end());
241 if (hostLeafIterator_ == endIterator)
return false;
243 HostGridFacet facet(hostLeafIterator_, face_);
244 if (!mMesh_->isInterface(facet))
return true;
246 const auto mirrored = hostLeafIterator_->neighbor(face_);
247 if (hostLeafIterator_->info().insertionIndex >
248 mirrored->info().insertionIndex)
251 return !mMesh_->partitionHelper().contains(pitype,
dereference());
254 const GridImp* mMesh_;
256 HostGridLeafIterator hostLeafIterator_;
260template <PartitionIteratorType pitype,
class Gr
idImp>
262 1, pitype, GridImp,
std::enable_if_t<GridImp::dimensionworld == 3>> {
265 using HostGridLeafIterator =
266 typename GridImp::HostGridType::Finite_edges_iterator;
269 enum { codimension = 1 };
275 hostLeafIterator_(mMesh->getHostGrid().finite_edges_begin()),
276 hostLeafIteratorEnd_(mMesh->getHostGrid().finite_edges_end()) {
277 while (proceed()) ++hostLeafIterator_;
287 hostLeafIterator_(mMesh->getHostGrid().finite_edges_end()),
288 hostLeafIteratorEnd_(mMesh->getHostGrid().finite_edges_end()) {}
294 while (proceed()) ++hostLeafIterator_;
302 return hostLeafIterator_ == i.hostLeafIterator_;
308 if (hostLeafIterator_ == hostLeafIteratorEnd_)
return false;
309 if (!mMesh_->isInterface(*hostLeafIterator_))
return true;
310 return !mMesh_->partitionHelper().contains(pitype,
dereference());
313 const GridImp* mMesh_;
315 HostGridLeafIterator hostLeafIterator_;
316 HostGridLeafIterator hostLeafIteratorEnd_;
319template <PartitionIteratorType pitype,
class Gr
idImp>
321 2, pitype, GridImp,
std::enable_if_t<GridImp::dimensionworld == 3>> {
324 typedef typename GridImp::HostGridType::Vertex_iterator HostGridLeafIterator;
327 enum { codimension = GridImp::dimension };
333 hostLeafIterator_(mMesh->getHostGrid().finite_vertices_begin()),
334 hostLeafIteratorEnd_(mMesh->getHostGrid().finite_vertices_end()) {
335 while (proceed()) ++hostLeafIterator_;
345 hostLeafIterator_(mMesh->getHostGrid().finite_vertices_end()),
346 hostLeafIteratorEnd_(mMesh->getHostGrid().finite_vertices_end()) {}
352 while (proceed()) ++hostLeafIterator_;
360 return hostLeafIterator_ == i.hostLeafIterator_;
366 if (hostLeafIterator_ == hostLeafIteratorEnd_)
return false;
367 if (!hostLeafIterator_->info().isInterface)
return true;
368 return !mMesh_->partitionHelper().contains(pitype,
dereference());
371 const GridImp* mMesh_;
373 HostGridLeafIterator hostLeafIterator_;
374 HostGridLeafIterator hostLeafIteratorEnd_;
Iterator over all entities of a given codimension and level of a grid (2D).
Definition interface/leafiterator.hh:21
MMeshInterfaceGridLeafIteratorImp()
Definition interface/leafiterator.hh:45
Entity dereference() const
dereferencing
Definition interface/leafiterator.hh:80
MMeshInterfaceGridLeafIteratorImp(const GridImp *mMesh, bool endDummy)
Constructor which creates the end iterator.
Definition interface/leafiterator.hh:60
GridImp::template Codim< 0 >::Entity Entity
Definition interface/leafiterator.hh:43
void increment()
prefix increment
Definition interface/leafiterator.hh:69
MMeshInterfaceGridLeafIteratorImp(const GridImp *mMesh)
Definition interface/leafiterator.hh:47
bool equals(const MMeshInterfaceGridLeafIteratorImp &i) const
equality
Definition interface/leafiterator.hh:85
bool equals(const MMeshInterfaceGridLeafIteratorImp &i) const
equality
Definition interface/leafiterator.hh:154
Entity dereference() const
dereferencing
Definition interface/leafiterator.hh:151
void increment()
prefix increment
Definition interface/leafiterator.hh:144
GridImp::template Codim< codimension >::Entity Entity
Definition interface/leafiterator.hh:124
MMeshInterfaceGridLeafIteratorImp(const GridImp *mMesh, bool endDummy)
Constructor which create the end iterator.
Definition interface/leafiterator.hh:137
MMeshInterfaceGridLeafIteratorImp(const GridImp *mMesh)
Definition interface/leafiterator.hh:126
MMeshInterfaceGridLeafIteratorImp()
Definition interface/leafiterator.hh:191
GridImp::template Codim< 0 >::Entity Entity
Definition interface/leafiterator.hh:189
MMeshInterfaceGridLeafIteratorImp(const GridImp *mMesh)
Definition interface/leafiterator.hh:193
void increment()
prefix increment
Definition interface/leafiterator.hh:215
Entity dereference() const
dereferencing
Definition interface/leafiterator.hh:226
bool equals(const MMeshInterfaceGridLeafIteratorImp &i) const
equality
Definition interface/leafiterator.hh:231
MMeshInterfaceGridLeafIteratorImp(const GridImp *mMesh, bool endDummy)
Constructor which creates the end iterator.
Definition interface/leafiterator.hh:206
GridImp::template Codim< 1 >::Entity Entity
Definition interface/leafiterator.hh:271
Entity dereference() const
dereferencing
Definition interface/leafiterator.hh:298
MMeshInterfaceGridLeafIteratorImp(const GridImp *mMesh, bool endDummy)
Constructor which creates the end iterator.
Definition interface/leafiterator.hh:284
void increment()
prefix increment
Definition interface/leafiterator.hh:291
bool equals(const MMeshInterfaceGridLeafIteratorImp &i) const
equality
Definition interface/leafiterator.hh:301
MMeshInterfaceGridLeafIteratorImp(const GridImp *mMesh)
Definition interface/leafiterator.hh:273
GridImp::template Codim< codimension >::Entity Entity
Definition interface/leafiterator.hh:329
MMeshInterfaceGridLeafIteratorImp(const GridImp *mMesh, bool endDummy)
Constructor which create the end iterator.
Definition interface/leafiterator.hh:342
Entity dereference() const
dereferencing
Definition interface/leafiterator.hh:356
bool equals(const MMeshInterfaceGridLeafIteratorImp &i) const
equality
Definition interface/leafiterator.hh:359
MMeshInterfaceGridLeafIteratorImp(const GridImp *mMesh)
Definition interface/leafiterator.hh:331
void increment()
prefix increment
Definition interface/leafiterator.hh:349