3#ifndef DUNE_MMESH_INTERFACE_INCIDENTITERATOR_HH
4#define DUNE_MMESH_INTERFACE_INCIDENTITERATOR_HH
11#include <dune/grid/common/gridenums.hh>
20template <
class Gr
idImp,
int dim>
26 Grid::dimension, Grid,
30template <
class Gr
idImp>
34 typedef typename GridImp::VertexHandle HostGridVertex;
37 using Circulator =
typename GridImp::HostGridType::Vertex_circulator;
38 using ElementContainer = std::vector<HostGridVertex>;
41 enum { codimension = 1 };
43 typedef typename GridImp::template Codim<1>::Entity Entity;
46 const GridImp* igrid,
const HostGridVertex& hostEntity)
47 : mMesh_(&igrid->getMMesh()), i_(0) {
48 Circulator circulator = mMesh_->getHostGrid().incident_vertices(hostEntity);
49 for (std::size_t i = 0; i < CGAL::circulator_size(circulator);
51 if (circulator->info().isInterface)
52 elementContainer_.push_back(circulator);
60 const GridImp* igrid,
const HostGridVertex& hostEntity,
bool endDummy)
61 : mMesh_(&igrid->getMMesh()), i_(0) {
62 Circulator circulator = mMesh_->getHostGrid().incident_vertices(hostEntity);
63 for (std::size_t i = 0; i < CGAL::circulator_size(circulator);
65 if (circulator->info().isInterface) ++i_;
73 return Entity{{&mMesh_->interfaceGrid(), elementContainer_[i_]}};
82 const typename GridImp::MMeshType* mMesh_;
83 ElementContainer elementContainer_;
88template <
class Gr
idImp>
92 typedef typename GridImp::VertexHandle HostGridVertex;
95 using ElementOutput = std::list<HostGridVertex>;
98 using ElementContainer = std::vector<HostGridVertex>;
101 enum { codimension = 2 };
103 typedef typename GridImp::template Codim<2>::Entity Entity;
106 const GridImp* igrid,
const HostGridVertex& hostEntity)
107 : mMesh_(&igrid->getMMesh()), i_(0) {
108 ElementOutput elements;
109 mMesh_->getHostGrid().incident_vertices(hostEntity,
110 std::back_inserter(elements));
112 typename ElementOutput::iterator fit;
113 for (fit = elements.begin(); fit != elements.end(); fit++)
114 if ((*fit)->info().isInterface) elementContainer_.push_back(*fit);
122 const GridImp* igrid,
const HostGridVertex& hostEntity,
bool endDummy)
123 : mMesh_(&igrid->getMMesh()), i_(0) {
124 ElementOutput elements;
125 mMesh_->getHostGrid().incident_vertices(hostEntity,
126 std::back_inserter(elements));
128 typename ElementOutput::iterator fit;
129 for (fit = elements.begin(); fit != elements.end(); fit++)
130 if ((*fit)->info().isInterface) ++i_;
138 return Entity{{&mMesh_->interfaceGrid(), elementContainer_[i_]}};
143 return i_ == iter.i_;
147 const typename GridImp::MMeshType* mMesh_;
148 ElementContainer elementContainer_;
157template <
class Gr
idImp,
int dim>
166template <
class Gr
idImp>
170 typedef typename GridImp::template MMeshInterfaceEntity<0> HostGridElement;
173 typedef typename GridImp::VertexHandle HostGridVertex;
176 using Circulator =
typename GridImp::HostGridType::Edge_circulator;
177 using ElementContainer = std::vector<HostGridElement>;
180 enum { codimension = 0 };
182 typedef typename GridImp::template Codim<0>::Entity Entity;
185 const GridImp* igrid,
const HostGridVertex& hostEntity)
186 : igrid_(igrid), i_(0) {
187 Circulator circulator = mMesh().getHostGrid().incident_edges(hostEntity);
188 for (std::size_t i = 0; i < CGAL::circulator_size(circulator);
190 if (mMesh().isInterface(mMesh().entity(*circulator)))
191 elementContainer_.push_back(*circulator);
199 const GridImp* igrid,
const HostGridVertex& hostEntity,
bool endDummy)
200 : igrid_(igrid), i_(0) {
201 Circulator circulator = mMesh().getHostGrid().incident_edges(hostEntity);
202 for (std::size_t i = 0; i < CGAL::circulator_size(circulator);
204 if (mMesh().isInterface(mMesh().entity(*circulator))) ++i_;
211 Entity
dereference()
const {
return Entity{{igrid_, elementContainer_[i_]}}; }
215 return i_ == iter.i_;
219 const typename GridImp::MMeshType& mMesh()
const {
220 return igrid_->getMMesh();
223 const GridImp* igrid_;
224 ElementContainer elementContainer_;
229template <
class Gr
idImp>
233 typedef typename GridImp::template MMeshInterfaceEntity<0> HostGridElement;
236 typedef typename GridImp::VertexHandle HostGridVertex;
239 using ElementOutput = std::list<HostGridElement>;
242 using ElementContainer = std::vector<HostGridElement>;
245 enum { codimension = 0 };
247 typedef typename GridImp::template Codim<0>::Entity Entity;
250 const GridImp* igrid,
const HostGridVertex& hostEntity)
251 : igrid_(igrid), i_(0) {
252 ElementOutput elements;
253 mMesh().getHostGrid().finite_incident_facets(hostEntity,
254 std::back_inserter(elements));
256 typename ElementOutput::iterator fit;
257 for (fit = elements.begin(); fit != elements.end(); fit++)
258 if (mMesh().isInterface(mMesh().entity(*fit)))
259 elementContainer_.push_back(*fit);
267 const GridImp* igrid,
const HostGridVertex& hostEntity,
bool endDummy)
268 : igrid_(igrid), i_(0) {
269 ElementOutput elements;
270 mMesh().getHostGrid().finite_incident_facets(hostEntity,
271 std::back_inserter(elements));
273 typename ElementOutput::iterator fit;
274 for (fit = elements.begin(); fit != elements.end(); fit++)
275 if (mMesh().isInterface(mMesh().entity(*fit))) ++i_;
282 Entity
dereference()
const {
return Entity{{igrid_, elementContainer_[i_]}}; }
286 return i_ == iter.i_;
290 const typename GridImp::MMeshType& mMesh()
const {
291 return igrid_->getMMesh();
294 const GridImp* igrid_;
295 ElementContainer elementContainer_;
300template <
class Gr
idImp,
int dim>
310template <
class Gr
idImp>
314 typedef typename GridImp::template MMeshInterfaceEntity<0> HostGridElement;
317 typedef typename GridImp::EdgeHandle HostGridEdge;
320 using Circulator =
typename GridImp::HostGridType::Facet_circulator;
323 using ElementContainer = std::vector<HostGridElement>;
326 enum { codimension = 0 };
328 typedef typename GridImp::template Codim<0>::Entity Entity;
331 const GridImp* igrid,
const HostGridEdge& hostEntity)
332 : igrid_(igrid), i_(0) {
333 Circulator circulator = mMesh().getHostGrid().incident_facets(hostEntity);
334 for (std::size_t i = 0; i < CGAL::circulator_size(circulator);
336 if (mMesh().isInterface(mMesh().entity(*circulator)))
337 elementContainer_.push_back(*circulator);
345 const GridImp* igrid,
const HostGridEdge& hostEntity,
bool endDummy)
346 : igrid_(igrid), i_(0) {
347 Circulator circulator = mMesh().getHostGrid().incident_facets(hostEntity);
348 for (std::size_t i = 0; i < CGAL::circulator_size(circulator);
350 if (mMesh().isInterface(mMesh().entity(*circulator))) ++i_;
357 Entity
dereference()
const {
return Entity{{igrid_, elementContainer_[i_]}}; }
361 return i_ == iter.i_;
365 const typename GridImp::MMeshType& mMesh()
const {
366 return igrid_->getMMesh();
369 const GridImp* igrid_;
370 ElementContainer elementContainer_;
Entity dereference() const
dereferencing
Definition: incidentiterator.hh:357
bool equals(const MMeshEdgeIncidentInterfaceElementsIteratorImp &iter) const
equality
Definition: incidentiterator.hh:360
void increment()
prefix increment
Definition: incidentiterator.hh:354
MMeshEdgeIncidentInterfaceElementsIteratorImp(const GridImp *igrid, const HostGridEdge &hostEntity, bool endDummy)
Constructor which creates the end iterator.
Definition: incidentiterator.hh:344
Forward declaration.
Definition: incidentiterator.hh:301
void increment()
prefix increment
Definition: incidentiterator.hh:208
Entity dereference() const
dereferencing
Definition: incidentiterator.hh:211
MMeshIncidentInterfaceElementsIteratorImp(const GridImp *igrid, const HostGridVertex &hostEntity, bool endDummy)
Constructor which creates the end iterator.
Definition: incidentiterator.hh:198
bool equals(const MMeshIncidentInterfaceElementsIteratorImp &iter) const
equality
Definition: incidentiterator.hh:214
Entity dereference() const
dereferencing
Definition: incidentiterator.hh:282
MMeshIncidentInterfaceElementsIteratorImp(const GridImp *igrid, const HostGridVertex &hostEntity, bool endDummy)
Constructor which creates the end iterator.
Definition: incidentiterator.hh:266
bool equals(const MMeshIncidentInterfaceElementsIteratorImp &iter) const
equality
Definition: incidentiterator.hh:285
void increment()
prefix increment
Definition: incidentiterator.hh:279
Iterator over all incident interface elements.
Definition: incidentiterator.hh:158
MMeshIncidentInterfaceVerticesIteratorImp(const GridImp *igrid, const HostGridVertex &hostEntity, bool endDummy)
Constructor which creates the end iterator.
Definition: incidentiterator.hh:59
bool equals(const MMeshIncidentInterfaceVerticesIteratorImp &iter) const
equality
Definition: incidentiterator.hh:77
void increment()
prefix increment
Definition: incidentiterator.hh:69
Entity dereference() const
dereferencing
Definition: incidentiterator.hh:72
MMeshIncidentInterfaceVerticesIteratorImp(const GridImp *igrid, const HostGridVertex &hostEntity, bool endDummy)
Constructor which creates the end iterator.
Definition: incidentiterator.hh:121
Entity dereference() const
dereferencing
Definition: incidentiterator.hh:137
bool equals(const MMeshIncidentInterfaceVerticesIteratorImp &iter) const
equality
Definition: incidentiterator.hh:142
void increment()
prefix increment
Definition: incidentiterator.hh:134
Iterator over all incident interface vertices.
Definition: incidentiterator.hh:21
EntityIterator< Grid::dimension, Grid, MMeshIncidentInterfaceVerticesIteratorImp< Grid, Grid::dimension > > MMeshIncidentInterfaceVerticesIterator
The Incident Interface Vertices Iterator alias.
Definition: incidentiterator.hh:27
EntityIterator< 0, Grid, MMeshIncidentInterfaceElementsIteratorImp< Grid, Grid::dimension > > MMeshIncidentInterfaceElementsIterator
The Incident Interface Elements Iterator alias.
Definition: incidentiterator.hh:163
EntityIterator< 0, Grid, MMeshEdgeIncidentInterfaceElementsIteratorImp< Grid, Grid::dimension > > MMeshEdgeIncidentInterfaceElementsIterator
The Incident Interface Elements Iterator alias.
Definition: incidentiterator.hh:307