3#ifndef DUNE_MMESH_GRID_MMESHLEAFITERATOR_HH
4#define DUNE_MMESH_GRID_MMESHLEAFITERATOR_HH
12#include <dune/grid/common/gridenums.hh>
21 template<
int codim, PartitionIteratorType pitype,
class Gr
idImp,
typename Enable =
void>
24 template<
int codim, PartitionIteratorType pitype,
class Gr
idImp>
30 template<PartitionIteratorType pitype,
class Gr
idImp>
36 enum {codimension = 0};
38 typedef typename GridImp::template Codim<0>::Entity Entity;
44 explicit MMeshLeafIteratorImp(
const GridImp* mMesh) :
46 hostLeafIterator_(pitype == Interior_Partition
47 ? mMesh->partitionHelper().leafInteriorBegin()
48 : mMesh->getHostGrid().finite_faces_begin())
60 hostLeafIterator_(pitype == Interior_Partition
61 ? mMesh->partitionHelper().leafInteriorEnd()
62 : mMesh->getHostGrid().finite_faces_end())
74 return Entity {{ mMesh_, hostLeafIterator_ }};
79 return hostLeafIterator_ == i.hostLeafIterator_;
86 const auto endIterator = (pitype == Interior_Partition ? mMesh_->partitionHelper().leafInteriorEnd() : mMesh_->getHostGrid().finite_faces_end());
87 if (hostLeafIterator_ == endIterator)
89 return !mMesh_->partitionHelper().contains(pitype, hostLeafIterator_->info().partition);
92 const GridImp* mMesh_;
93 HostGridLeafIterator hostLeafIterator_;
96 template<PartitionIteratorType pitype,
class Gr
idImp>
97 class MMeshLeafIteratorImp<1, pitype, GridImp,
std::enable_if_t<GridImp::dimension == 2>>
101 using HostGridLeafIterator =
typename GridImp::HostGridType::Finite_edges_iterator;
104 enum {codimension = 1};
106 typedef typename GridImp::template Codim<1>::Entity Entity;
108 explicit MMeshLeafIteratorImp(
const GridImp* mMesh) :
110 hostLeafIterator_(mMesh->getHostGrid().finite_edges_begin())
120 explicit MMeshLeafIteratorImp(
const GridImp* mMesh,
bool endDummy) :
122 hostLeafIterator_(mMesh->getHostGrid().finite_edges_end())
129 }
while( proceed() );
133 Entity dereference()
const {
134 return Entity {{ mMesh_, *hostLeafIterator_ }};
138 bool equals(
const MMeshLeafIteratorImp& i)
const {
139 return hostLeafIterator_ == i.hostLeafIterator_;
146 if (hostLeafIterator_ == mMesh_->getHostGrid().finite_edges_end())
148 return !mMesh_->partitionHelper().contains(pitype, dereference());
150 const GridImp* mMesh_;
152 HostGridLeafIterator hostLeafIterator_;
156 template<PartitionIteratorType pitype,
class Gr
idImp>
157 class MMeshLeafIteratorImp<2, pitype, GridImp,
std::enable_if_t<GridImp::dimension == 2>>
161 using HostGridLeafIterator =
typename GridImp::HostGridType::Finite_vertices_iterator;
164 enum {codimension = GridImp::dimension};
166 typedef typename GridImp::template Codim<codimension>::Entity Entity;
168 explicit MMeshLeafIteratorImp(
const GridImp* mMesh) :
170 hostLeafIterator_(mMesh->getHostGrid().finite_vertices_begin())
180 explicit MMeshLeafIteratorImp(
const GridImp* mMesh,
bool endDummy) :
182 hostLeafIterator_(mMesh->getHostGrid().finite_vertices_end())
189 }
while( proceed() );
193 Entity dereference()
const {
194 return Entity {{ mMesh_, hostLeafIterator_ }};
198 bool equals(
const MMeshLeafIteratorImp& i)
const {
199 return hostLeafIterator_ == i.hostLeafIterator_;
206 if (hostLeafIterator_ == mMesh_->getHostGrid().finite_vertices_end())
208 return !mMesh_->partitionHelper().contains(pitype, hostLeafIterator_->info().partition);
211 const GridImp* mMesh_;
212 HostGridLeafIterator hostLeafIterator_;
221 template<PartitionIteratorType pitype,
class Gr
idImp>
228 enum {codimension = 0};
230 typedef typename GridImp::template Codim<0>::Entity Entity;
236 explicit MMeshLeafIteratorImp(
const GridImp* mMesh) :
238 hostLeafIterator_(pitype == Interior_Partition
239 ? mMesh->partitionHelper().leafInteriorBegin()
240 : mMesh->getHostGrid().finite_cells_begin())
252 hostLeafIterator_(pitype == Interior_Partition
253 ? mMesh->partitionHelper().leafInteriorEnd()
254 : mMesh->getHostGrid().finite_cells_end())
261 }
while( proceed() );
266 return Entity {{ mMesh_, hostLeafIterator_ }};
271 return hostLeafIterator_ == i.hostLeafIterator_;
278 const auto endIterator = (pitype == Interior_Partition ? mMesh_->partitionHelper().leafInteriorEnd() : mMesh_->getHostGrid().finite_cells_end());
279 if (hostLeafIterator_ == endIterator)
281 return !mMesh_->partitionHelper().contains(pitype, hostLeafIterator_->info().partition);
284 const GridImp* mMesh_;
285 HostGridLeafIterator hostLeafIterator_;
290 template<PartitionIteratorType pitype,
class Gr
idImp>
295 using HostGridLeafIterator =
typename GridImp::HostGridType::Finite_facets_iterator;
298 enum {codimension = 1};
300 typedef typename GridImp::template Codim<1>::Entity Entity;
304 hostLeafIterator_(mMesh->getHostGrid().finite_facets_begin())
316 hostLeafIterator_(mMesh->getHostGrid().finite_facets_end())
323 }
while( proceed() );
328 return Entity {{ mMesh_, *hostLeafIterator_ }};
333 return hostLeafIterator_ == i.hostLeafIterator_;
340 if (hostLeafIterator_ == mMesh_->getHostGrid().finite_facets_end())
342 return !mMesh_->partitionHelper().contains(pitype, dereference());
345 const GridImp* mMesh_;
346 HostGridLeafIterator hostLeafIterator_;
351 template<PartitionIteratorType pitype,
class Gr
idImp>
356 using HostGridLeafIterator =
typename GridImp::HostGridType::Finite_edges_iterator;
359 enum {codimension = 2};
361 typedef typename GridImp::template Codim<2>::Entity Entity;
365 hostLeafIterator_(mMesh->getHostGrid().finite_edges_begin())
377 hostLeafIterator_(mMesh->getHostGrid().finite_edges_end())
384 }
while( proceed() );
389 return Entity {{ mMesh_, *hostLeafIterator_ }};
394 return hostLeafIterator_ == i.hostLeafIterator_;
401 if (hostLeafIterator_ == mMesh_->getHostGrid().finite_edges_end())
403 return !mMesh_->partitionHelper().contains(pitype, dereference());
406 const GridImp* mMesh_;
407 HostGridLeafIterator hostLeafIterator_;
412 template<PartitionIteratorType pitype,
class Gr
idImp>
417 typedef typename GridImp::HostGridType::Vertex_iterator HostGridLeafIterator;
420 enum {codimension = GridImp::dimension};
422 typedef typename GridImp::template Codim<codimension>::Entity Entity;
426 hostLeafIterator_(mMesh->getHostGrid().finite_vertices_begin())
438 hostLeafIterator_(mMesh->getHostGrid().finite_vertices_end())
445 }
while( proceed() );
450 return Entity {{ mMesh_, hostLeafIterator_ }};
455 return hostLeafIterator_ == i.hostLeafIterator_;
462 if (hostLeafIterator_ == HostGridLeafIterator(mMesh_->getHostGrid().finite_vertices_end()))
464 if (hostLeafIterator_ == mMesh_->getHostGrid().infinite_vertex())
466 return !mMesh_->partitionHelper().contains(pitype, hostLeafIterator_->info().partition);
469 const GridImp* mMesh_;
470 HostGridLeafIterator hostLeafIterator_;
bool equals(const MMeshLeafIteratorImp &i) const
equality
Definition: leafiterator.hh:78
void increment()
prefix increment
Definition: leafiterator.hh:66
MMeshLeafIteratorImp(const GridImp *mMesh, bool endDummy)
Constructor which creates the end iterator.
Definition: leafiterator.hh:58
typename GridImp::HostGridType::Finite_faces_iterator HostGridLeafIterator
The type of the underlying entities.
Definition: leafiterator.hh:35
Entity dereference() const
dereferencing
Definition: leafiterator.hh:73
Entity dereference() const
dereferencing
Definition: leafiterator.hh:265
typename GridImp::HostGridType::Finite_cells_iterator HostGridLeafIterator
The type of the underlying entities.
Definition: leafiterator.hh:226
bool equals(const MMeshLeafIteratorImp &i) const
equality
Definition: leafiterator.hh:270
MMeshLeafIteratorImp(const GridImp *mMesh, bool endDummy)
Constructor which creates the end iterator.
Definition: leafiterator.hh:250
void increment()
prefix increment
Definition: leafiterator.hh:258
bool equals(const MMeshLeafIteratorImp &i) const
equality
Definition: leafiterator.hh:332
void increment()
prefix increment
Definition: leafiterator.hh:320
MMeshLeafIteratorImp(const GridImp *mMesh, bool endDummy)
Constructor which creates the end iterator.
Definition: leafiterator.hh:314
Entity dereference() const
dereferencing
Definition: leafiterator.hh:327
bool equals(const MMeshLeafIteratorImp &i) const
equality
Definition: leafiterator.hh:393
Entity dereference() const
dereferencing
Definition: leafiterator.hh:388
void increment()
prefix increment
Definition: leafiterator.hh:381
MMeshLeafIteratorImp(const GridImp *mMesh, bool endDummy)
Constructor which creates the end iterator.
Definition: leafiterator.hh:375
void increment()
prefix increment
Definition: leafiterator.hh:442
Entity dereference() const
dereferencing
Definition: leafiterator.hh:449
bool equals(const MMeshLeafIteratorImp &i) const
equality
Definition: leafiterator.hh:454
MMeshLeafIteratorImp(const GridImp *mMesh, bool endDummy)
Constructor which create the end iterator.
Definition: leafiterator.hh:436
Iterator over all entities of a given codimension and level of a grid (2D).
Definition: leafiterator.hh:22