dune-mmesh (unstable)

incidentiterator.hh
Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2// vi: set et ts=4 sw=2 sts=2:
3#ifndef DUNE_MMESH_INTERFACE_INCIDENTITERATOR_HH
4#define DUNE_MMESH_INTERFACE_INCIDENTITERATOR_HH
5
10// Dune includes
11#include <dune/grid/common/gridenums.hh>
12
13namespace Dune {
14
20template <class GridImp, int dim>
22
24template <class Grid>
26 Grid::dimension, Grid,
28
30template <class GridImp>
32 private:
34 typedef typename GridImp::VertexHandle HostGridVertex;
35
37 using Circulator = typename GridImp::HostGridType::Vertex_circulator;
38 using ElementContainer = std::vector<HostGridVertex>;
39
40 public:
41 enum { codimension = 1 };
42
43 typedef typename GridImp::template Codim<1>::Entity Entity;
44
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);
50 ++i, ++circulator)
51 if (circulator->info().isInterface)
52 elementContainer_.push_back(circulator);
53 }
54
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);
64 ++i, ++circulator)
65 if (circulator->info().isInterface) ++i_;
66 }
67
69 void increment() { ++i_; }
70
72 Entity dereference() const {
73 return Entity{{&mMesh_->interfaceGrid(), elementContainer_[i_]}};
74 }
75
78 return i_ == iter.i_;
79 }
80
81 private:
82 const typename GridImp::MMeshType* mMesh_;
83 ElementContainer elementContainer_;
84 std::size_t i_;
85};
86
88template <class GridImp>
90 private:
92 typedef typename GridImp::VertexHandle HostGridVertex;
93
95 using ElementOutput = std::list<HostGridVertex>;
96
98 using ElementContainer = std::vector<HostGridVertex>;
99
100 public:
101 enum { codimension = 2 };
102
103 typedef typename GridImp::template Codim<2>::Entity Entity;
104
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));
111
112 typename ElementOutput::iterator fit;
113 for (fit = elements.begin(); fit != elements.end(); fit++)
114 if ((*fit)->info().isInterface) elementContainer_.push_back(*fit);
115 }
116
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));
127
128 typename ElementOutput::iterator fit;
129 for (fit = elements.begin(); fit != elements.end(); fit++)
130 if ((*fit)->info().isInterface) ++i_;
131 }
132
134 void increment() { ++i_; }
135
137 Entity dereference() const {
138 return Entity{{&mMesh_->interfaceGrid(), elementContainer_[i_]}};
139 }
140
143 return i_ == iter.i_;
144 }
145
146 private:
147 const typename GridImp::MMeshType* mMesh_;
148 ElementContainer elementContainer_;
149 std::size_t i_;
150};
151
157template <class GridImp, int dim>
159
161template <class Grid>
164
166template <class GridImp>
168 private:
170 typedef typename GridImp::template MMeshInterfaceEntity<0> HostGridElement;
171
173 typedef typename GridImp::VertexHandle HostGridVertex;
174
176 using Circulator = typename GridImp::HostGridType::Edge_circulator;
177 using ElementContainer = std::vector<HostGridElement>;
178
179 public:
180 enum { codimension = 0 };
181
182 typedef typename GridImp::template Codim<0>::Entity Entity;
183
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);
189 ++i, ++circulator)
190 if (mMesh().isInterface(mMesh().entity(*circulator)))
191 elementContainer_.push_back(*circulator);
192 }
193
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);
203 ++i, ++circulator)
204 if (mMesh().isInterface(mMesh().entity(*circulator))) ++i_;
205 }
206
208 void increment() { ++i_; }
209
211 Entity dereference() const { return Entity{{igrid_, elementContainer_[i_]}}; }
212
215 return i_ == iter.i_;
216 }
217
218 private:
219 const typename GridImp::MMeshType& mMesh() const {
220 return igrid_->getMMesh();
221 }
222
223 const GridImp* igrid_;
224 ElementContainer elementContainer_;
225 std::size_t i_;
226};
227
229template <class GridImp>
231 private:
233 typedef typename GridImp::template MMeshInterfaceEntity<0> HostGridElement;
234
236 typedef typename GridImp::VertexHandle HostGridVertex;
237
239 using ElementOutput = std::list<HostGridElement>;
240
242 using ElementContainer = std::vector<HostGridElement>;
243
244 public:
245 enum { codimension = 0 };
246
247 typedef typename GridImp::template Codim<0>::Entity Entity;
248
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));
255
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);
260 }
261
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));
272
273 typename ElementOutput::iterator fit;
274 for (fit = elements.begin(); fit != elements.end(); fit++)
275 if (mMesh().isInterface(mMesh().entity(*fit))) ++i_;
276 }
277
279 void increment() { ++i_; }
280
282 Entity dereference() const { return Entity{{igrid_, elementContainer_[i_]}}; }
283
286 return i_ == iter.i_;
287 }
288
289 private:
290 const typename GridImp::MMeshType& mMesh() const {
291 return igrid_->getMMesh();
292 }
293
294 const GridImp* igrid_;
295 ElementContainer elementContainer_;
296 std::size_t i_;
297};
298
300template <class GridImp, int dim>
302
304template <class Grid>
306 0, Grid,
308
310template <class GridImp>
312 private:
314 typedef typename GridImp::template MMeshInterfaceEntity<0> HostGridElement;
315
317 typedef typename GridImp::EdgeHandle HostGridEdge;
318
320 using Circulator = typename GridImp::HostGridType::Facet_circulator;
321
323 using ElementContainer = std::vector<HostGridElement>;
324
325 public:
326 enum { codimension = 0 };
327
328 typedef typename GridImp::template Codim<0>::Entity Entity;
329
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);
335 ++i, ++circulator)
336 if (mMesh().isInterface(mMesh().entity(*circulator)))
337 elementContainer_.push_back(*circulator);
338 }
339
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);
349 ++i, ++circulator)
350 if (mMesh().isInterface(mMesh().entity(*circulator))) ++i_;
351 }
352
354 void increment() { ++i_; }
355
357 Entity dereference() const { return Entity{{igrid_, elementContainer_[i_]}}; }
358
361 return i_ == iter.i_;
362 }
363
364 private:
365 const typename GridImp::MMeshType& mMesh() const {
366 return igrid_->getMMesh();
367 }
368
369 const GridImp* igrid_;
370 ElementContainer elementContainer_;
371 std::size_t i_;
372};
373
374} // namespace Dune
375
376#endif
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
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden & Uni Heidelberg  |  generated with Hugo v0.111.3 (Mar 17, 23:30, 2025)