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_GRID_MMESHINCIDENTITERATOR_HH
4#define DUNE_GRID_MMESHINCIDENTITERATOR_HH
5
10// Dune includes
11#include <dune/grid/common/gridenums.hh>
12
13namespace Dune {
15template <class GridImp, int dim>
17
19template <class Grid>
21 EntityIterator<0, Grid, MMeshIncidentIteratorImp<Grid, Grid::dimension>>;
22
24template <class GridImp, int dim>
26
28template <class Grid>
30 EntityIterator<0, Grid,
32
34template <class GridImp, int dim>
36
38template <class Grid>
40 EntityIterator<1, Grid,
42
44template <class GridImp, int dim>
46
48template <class Grid>
49using MMeshIncidentVerticesIterator = EntityIterator<
50 Grid::dimension, Grid,
52
58template <class GridImp>
59class MMeshIncidentIteratorImp<GridImp, 2> {
60 private:
62 typedef typename GridImp::template HostGridEntity<GridImp::dimension>
63 HostGridVertex;
64 typedef typename GridImp::template HostGridEntity<0> HostGridEntity;
65
67 using ElementContainer = std::vector<HostGridEntity>;
68
69 public:
70 enum { codimension = 0 };
71
72 typedef typename GridImp::template Codim<0>::Entity Entity;
73
74 explicit MMeshIncidentIteratorImp(const GridImp* mMesh,
75 const HostGridVertex& hostEntity)
76 : mMesh_(mMesh), i_(0) {
77 auto circulator = mMesh->getHostGrid().incident_faces(hostEntity);
78 for (std::size_t i = 0; i < CGAL::circulator_size(circulator);
79 ++i, ++circulator)
80 if (!mMesh->getHostGrid().is_infinite(circulator))
81 elementContainer_.push_back(circulator);
82 }
83
88 explicit MMeshIncidentIteratorImp(const GridImp* mMesh,
89 const HostGridVertex& hostEntity,
90 bool endDummy)
91 : mMesh_(mMesh), i_(0) {
92 auto circulator = mMesh->getHostGrid().incident_faces(hostEntity);
93 for (std::size_t i = 0; i < CGAL::circulator_size(circulator);
94 ++i, ++circulator)
95 if (!mMesh->getHostGrid().is_infinite(circulator)) ++i_;
96 }
97
99 void increment() { ++i_; }
100
102 Entity dereference() const { return Entity{{mMesh_, elementContainer_[i_]}}; }
103
105 bool equals(const MMeshIncidentIteratorImp& iter) const {
106 return i_ == iter.i_;
107 }
108
109 private:
110 const GridImp* mMesh_;
111 ElementContainer elementContainer_;
112 std::size_t i_;
113};
114
116template <class GridImp>
117class MMeshIncidentIteratorImp<GridImp, 3> {
118 private:
120 typedef typename GridImp::template HostGridEntity<GridImp::dimension>
121 HostGridVertex;
122 typedef typename GridImp::template HostGridEntity<0> HostGridEntity;
123
125 using ElementOutput = typename GridImp::ElementOutput;
126
128 using ElementContainer = std::vector<HostGridEntity>;
129
130 public:
131 enum { codimension = 0 };
132
133 typedef typename GridImp::template Codim<0>::Entity Entity;
134
135 explicit MMeshIncidentIteratorImp(const GridImp* mMesh,
136 const HostGridVertex& hostEntity)
137 : mMesh_(mMesh), i_(0) {
138 ElementOutput elements;
139 mMesh_->getHostGrid().finite_incident_cells(hostEntity,
140 std::back_inserter(elements));
141
142 typename ElementOutput::iterator fit;
143 for (fit = elements.begin(); fit != elements.end(); fit++)
144 elementContainer_.push_back(*fit);
145 }
146
151 explicit MMeshIncidentIteratorImp(const GridImp* mMesh,
152 const HostGridVertex& hostEntity,
153 bool endDummy)
154 : mMesh_(mMesh), i_(0) {
155 ElementOutput elements;
156 mMesh_->getHostGrid().finite_incident_cells(hostEntity,
157 std::back_inserter(elements));
158
159 typename ElementOutput::iterator fit;
160 for (fit = elements.begin(); fit != elements.end(); fit++) ++i_;
161 }
162
164 void increment() { ++i_; }
165
167 Entity dereference() const { return Entity{{mMesh_, elementContainer_[i_]}}; }
168
170 bool equals(const MMeshIncidentIteratorImp& iter) const {
171 return i_ == iter.i_;
172 }
173
174 private:
175 const GridImp* mMesh_;
176 ElementContainer elementContainer_;
177 std::size_t i_;
178};
179
181template <class GridImp>
183 private:
185 typedef typename GridImp::template HostGridEntity<GridImp::dimension - 1>
186 HostGridEdge;
187 typedef typename GridImp::template HostGridEntity<0> HostGridEntity;
188
190 using Circulator = typename GridImp::HostGridType::Cell_circulator;
191 using ElementContainer = std::vector<HostGridEntity>;
192
193 public:
194 enum { codimension = 0 };
195
196 typedef typename GridImp::template Codim<0>::Entity Entity;
197
198 explicit MMeshEdgeIncidentIteratorImp(const GridImp* mMesh,
199 const HostGridEdge& hostEntity)
200 : mMesh_(mMesh), i_(0) {
201 Circulator circulator = mMesh_->getHostGrid().incident_cells(hostEntity);
202 for (std::size_t i = 0; i < CGAL::circulator_size(circulator);
203 circulator++, i++)
204 if (!mMesh->getHostGrid().is_infinite(circulator))
205 elementContainer_.push_back(circulator);
206 }
207
212 explicit MMeshEdgeIncidentIteratorImp(const GridImp* mMesh,
213 const HostGridEdge& hostEntity,
214 bool endDummy)
215 : mMesh_(mMesh), i_(0) {
216 Circulator circulator = mMesh_->getHostGrid().incident_cells(hostEntity);
217 for (std::size_t i = 0; i < CGAL::circulator_size(circulator);
218 circulator++, i++)
219 if (!mMesh->getHostGrid().is_infinite(circulator)) ++i_;
220 }
221
223 void increment() { ++i_; }
224
226 Entity dereference() const { return Entity{{mMesh_, elementContainer_[i_]}}; }
227
229 bool equals(const MMeshEdgeIncidentIteratorImp& iter) const {
230 return i_ == iter.i_;
231 }
232
233 private:
234 const GridImp* mMesh_;
235 ElementContainer elementContainer_;
236 std::size_t i_;
237};
238
244template <class GridImp>
246 private:
248 typedef typename GridImp::template HostGridEntity<GridImp::dimension>
249 HostGridVertex;
250 typedef typename GridImp::template HostGridEntity<1> HostGridEntity;
251
253 using Circulator = typename GridImp::HostGridType::Edge_circulator;
254 using ElementContainer = std::vector<HostGridEntity>;
255
256 public:
257 enum { codimension = 1 };
258
259 typedef typename GridImp::template Codim<1>::Entity Entity;
260
261 explicit MMeshIncidentFacetsIteratorImp(const GridImp* mMesh,
262 const HostGridVertex& hostEntity)
263 : mMesh_(mMesh), i_(0) {
264 Circulator circulator = mMesh->getHostGrid().incident_edges(hostEntity);
265 for (std::size_t i = 0; i < CGAL::circulator_size(circulator);
266 ++i, ++circulator)
267 if (!mMesh->getHostGrid().is_infinite(circulator))
268 elementContainer_.push_back(*circulator);
269 }
270
275 explicit MMeshIncidentFacetsIteratorImp(const GridImp* mMesh,
276 const HostGridVertex& hostEntity,
277 bool endDummy)
278 : mMesh_(mMesh), i_(0) {
279 Circulator circulator = mMesh->getHostGrid().incident_edges(hostEntity);
280 for (std::size_t i = 0; i < CGAL::circulator_size(circulator);
281 ++i, ++circulator)
282 if (!mMesh->getHostGrid().is_infinite(circulator)) ++i_;
283 }
284
286 void increment() { ++i_; }
287
289 Entity dereference() const { return Entity{{mMesh_, elementContainer_[i_]}}; }
290
292 bool equals(const MMeshIncidentFacetsIteratorImp& iter) const {
293 return i_ == iter.i_;
294 }
295
296 private:
297 const GridImp* mMesh_;
298 ElementContainer elementContainer_;
299 std::size_t i_;
300};
301
303template <class GridImp>
305 private:
307 typedef typename GridImp::template HostGridEntity<GridImp::dimension>
308 HostGridVertex;
309 typedef typename GridImp::template HostGridEntity<1> HostGridEntity;
310
312 using ElementOutput = typename GridImp::BoundaryEdgesOutput;
313
315 using ElementContainer = std::vector<HostGridEntity>;
316
317 public:
318 enum { codimension = 1 };
319
320 typedef typename GridImp::template Codim<1>::Entity Entity;
321
322 explicit MMeshIncidentFacetsIteratorImp(const GridImp* mMesh,
323 const HostGridVertex& hostEntity)
324 : mMesh_(mMesh), i_(0) {
325 ElementOutput elements;
326 mMesh_->getHostGrid().finite_incident_facets(hostEntity,
327 std::back_inserter(elements));
328
329 typename ElementOutput::iterator fit;
330 for (fit = elements.begin(); fit != elements.end(); fit++)
331 elementContainer_.push_back(*fit);
332 }
333
338 explicit MMeshIncidentFacetsIteratorImp(const GridImp* mMesh,
339 const HostGridVertex& hostEntity,
340 bool endDummy)
341 : mMesh_(mMesh), i_(0) {
342 ElementOutput elements;
343 mMesh_->getHostGrid().finite_incident_facets(hostEntity,
344 std::back_inserter(elements));
345
346 typename ElementOutput::iterator fit;
347 for (fit = elements.begin(); fit != elements.end(); fit++) ++i_;
348 }
349
351 void increment() { ++i_; }
352
354 Entity dereference() const { return Entity{{mMesh_, elementContainer_[i_]}}; }
355
357 bool equals(const MMeshIncidentFacetsIteratorImp& iter) const {
358 return i_ == iter.i_;
359 }
360
361 private:
362 const GridImp* mMesh_;
363 ElementContainer elementContainer_;
364 std::size_t i_;
365};
366
372template <class GridImp>
374 private:
376 typedef typename GridImp::VertexHandle HostGridVertex;
377
379 using Circulator = typename GridImp::HostGridType::Vertex_circulator;
380 using ElementContainer = std::vector<HostGridVertex>;
381
382 public:
383 enum { codimension = GridImp::dimension };
384
385 typedef typename GridImp::template Codim<codimension>::Entity Entity;
386
387 explicit MMeshIncidentVerticesIteratorImp(const GridImp* mMesh,
388 const HostGridVertex& hostEntity,
389 bool includeInfinite)
390 : mMesh_(mMesh), i_(0) {
391 Circulator circulator = mMesh->getHostGrid().incident_vertices(hostEntity);
392 for (std::size_t i = 0; i < CGAL::circulator_size(circulator);
393 ++i, ++circulator)
394 if (includeInfinite || !mMesh->getHostGrid().is_infinite(circulator))
395 elementContainer_.push_back(circulator);
396 }
397
402 explicit MMeshIncidentVerticesIteratorImp(const GridImp* mMesh,
403 const HostGridVertex& hostEntity,
404 bool includeInfinite, bool endDummy)
405 : mMesh_(mMesh), i_(0) {
406 Circulator circulator = mMesh->getHostGrid().incident_vertices(hostEntity);
407 for (std::size_t i = 0; i < CGAL::circulator_size(circulator);
408 ++i, ++circulator)
409 if (includeInfinite || !mMesh->getHostGrid().is_infinite(circulator))
410 ++i_;
411 }
412
414 void increment() { ++i_; }
415
417 Entity dereference() const { return Entity{{mMesh_, elementContainer_[i_]}}; }
418
420 bool equals(const MMeshIncidentVerticesIteratorImp& iter) const {
421 return i_ == iter.i_;
422 }
423
424 private:
425 const GridImp* mMesh_;
426 ElementContainer elementContainer_;
427 std::size_t i_;
428};
429
431template <class GridImp>
433 private:
435 typedef typename GridImp::VertexHandle HostGridVertex;
436
438 using ElementOutput = std::list<HostGridVertex>;
439
441 using ElementContainer = std::vector<HostGridVertex>;
442
443 public:
444 enum { codimension = GridImp::dimension };
445
446 typedef typename GridImp::template Codim<codimension>::Entity Entity;
447
448 explicit MMeshIncidentVerticesIteratorImp(const GridImp* mMesh,
449 const HostGridVertex& hostEntity,
450 bool includeInfinite)
451 : mMesh_(mMesh), i_(0) {
452 ElementOutput elements;
453 mMesh_->getHostGrid().incident_vertices(hostEntity,
454 std::back_inserter(elements));
455
456 typename ElementOutput::iterator fit;
457 for (fit = elements.begin(); fit != elements.end(); fit++)
458 if (includeInfinite || !mMesh->getHostGrid().is_infinite(*fit))
459 elementContainer_.push_back(*fit);
460 }
461
466 explicit MMeshIncidentVerticesIteratorImp(const GridImp* mMesh,
467 const HostGridVertex& hostEntity,
468 bool includeInfinite, bool endDummy)
469 : mMesh_(mMesh), i_(0) {
470 ElementOutput elements;
471 mMesh_->getHostGrid().incident_vertices(hostEntity,
472 std::back_inserter(elements));
473
474 typename ElementOutput::iterator fit;
475 for (fit = elements.begin(); fit != elements.end(); fit++)
476 if (includeInfinite || !mMesh->getHostGrid().is_infinite(*fit)) ++i_;
477 }
478
480 void increment() { ++i_; }
481
483 Entity dereference() const { return Entity{{mMesh_, elementContainer_[i_]}}; }
484
486 bool equals(const MMeshIncidentVerticesIteratorImp& iter) const {
487 return i_ == iter.i_;
488 }
489
490 private:
491 const GridImp* mMesh_;
492 ElementContainer elementContainer_;
493 std::size_t i_;
494};
495
496} // namespace Dune
497
498#endif
bool equals(const MMeshEdgeIncidentIteratorImp &iter) const
equality
Definition: incidentiterator.hh:229
MMeshEdgeIncidentIteratorImp(const GridImp *mMesh, const HostGridEdge &hostEntity, bool endDummy)
Constructor which creates the end iterator.
Definition: incidentiterator.hh:212
void increment()
prefix increment
Definition: incidentiterator.hh:223
Entity dereference() const
dereferencing
Definition: incidentiterator.hh:226
Forward declaration.
Definition: incidentiterator.hh:25
void increment()
prefix increment
Definition: incidentiterator.hh:286
Entity dereference() const
dereferencing
Definition: incidentiterator.hh:289
MMeshIncidentFacetsIteratorImp(const GridImp *mMesh, const HostGridVertex &hostEntity, bool endDummy)
Constructor which creates the end iterator.
Definition: incidentiterator.hh:275
bool equals(const MMeshIncidentFacetsIteratorImp &iter) const
equality
Definition: incidentiterator.hh:292
MMeshIncidentFacetsIteratorImp(const GridImp *mMesh, const HostGridVertex &hostEntity, bool endDummy)
Constructor which creates the end iterator.
Definition: incidentiterator.hh:338
Entity dereference() const
dereferencing
Definition: incidentiterator.hh:354
bool equals(const MMeshIncidentFacetsIteratorImp &iter) const
equality
Definition: incidentiterator.hh:357
void increment()
prefix increment
Definition: incidentiterator.hh:351
Forward declaration.
Definition: incidentiterator.hh:35
MMeshIncidentIteratorImp(const GridImp *mMesh, const HostGridVertex &hostEntity, bool endDummy)
Constructor which creates the end iterator.
Definition: incidentiterator.hh:88
bool equals(const MMeshIncidentIteratorImp &iter) const
equality
Definition: incidentiterator.hh:105
void increment()
prefix increment
Definition: incidentiterator.hh:99
Entity dereference() const
dereferencing
Definition: incidentiterator.hh:102
bool equals(const MMeshIncidentIteratorImp &iter) const
equality
Definition: incidentiterator.hh:170
MMeshIncidentIteratorImp(const GridImp *mMesh, const HostGridVertex &hostEntity, bool endDummy)
Constructor which creates the end iterator.
Definition: incidentiterator.hh:151
void increment()
prefix increment
Definition: incidentiterator.hh:164
Entity dereference() const
dereferencing
Definition: incidentiterator.hh:167
Forward declaration.
Definition: incidentiterator.hh:16
Entity dereference() const
dereferencing
Definition: incidentiterator.hh:417
MMeshIncidentVerticesIteratorImp(const GridImp *mMesh, const HostGridVertex &hostEntity, bool includeInfinite, bool endDummy)
Constructor which creates the end iterator.
Definition: incidentiterator.hh:402
bool equals(const MMeshIncidentVerticesIteratorImp &iter) const
equality
Definition: incidentiterator.hh:420
void increment()
prefix increment
Definition: incidentiterator.hh:414
MMeshIncidentVerticesIteratorImp(const GridImp *mMesh, const HostGridVertex &hostEntity, bool includeInfinite, bool endDummy)
Constructor which creates the end iterator.
Definition: incidentiterator.hh:466
Entity dereference() const
dereferencing
Definition: incidentiterator.hh:483
bool equals(const MMeshIncidentVerticesIteratorImp &iter) const
equality
Definition: incidentiterator.hh:486
void increment()
prefix increment
Definition: incidentiterator.hh:480
Forward declaration.
Definition: incidentiterator.hh:45
EntityIterator< Grid::dimension, Grid, MMeshIncidentVerticesIteratorImp< Grid, Grid::dimensionworld > > MMeshIncidentVerticesIterator
The Incident Facets Iterator alias.
Definition: incidentiterator.hh:51
EntityIterator< 0, Grid, MMeshEdgeIncidentIteratorImp< Grid, Grid::dimension > > MMeshEdgeIncidentIterator
The Incident Entity Iterator alias for edges.
Definition: incidentiterator.hh:31
EntityIterator< 0, Grid, MMeshIncidentIteratorImp< Grid, Grid::dimension > > MMeshIncidentIterator
The Incident Entity Iterator alias.
Definition: incidentiterator.hh:21
EntityIterator< 1, Grid, MMeshIncidentFacetsIteratorImp< Grid, Grid::dimension > > MMeshIncidentFacetsIterator
The Incident Facets Iterator alias.
Definition: incidentiterator.hh:41
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden & Uni Heidelberg  |  generated with Hugo v0.111.3 (Mar 16, 23:47, 2025)