dune-mmesh (1.4)

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
14{
16 template<class GridImp, int dim>
18
20 template<class Grid>
21 using MMeshIncidentIterator = EntityIterator<0, Grid, MMeshIncidentIteratorImp<Grid, Grid::dimension>>;
22
24 template<class GridImp, int dim>
26
28 template<class Grid>
29 using MMeshEdgeIncidentIterator = EntityIterator<0, Grid, MMeshEdgeIncidentIteratorImp<Grid, Grid::dimension>>;
30
32 template<class GridImp, int dim>
34
36 template<class Grid>
37 using MMeshIncidentFacetsIterator = EntityIterator<1, Grid, MMeshIncidentFacetsIteratorImp<Grid, Grid::dimension>>;
38
40 template<class GridImp, int dim>
42
44 template<class Grid>
45 using MMeshIncidentVerticesIterator = EntityIterator<Grid::dimension, Grid, MMeshIncidentVerticesIteratorImp<Grid, Grid::dimensionworld>>;
46
52 template<class GridImp>
53 class MMeshIncidentIteratorImp<GridImp, 2>
54 {
55 private:
57 typedef typename GridImp::template HostGridEntity<GridImp::dimension> HostGridVertex;
58 typedef typename GridImp::template HostGridEntity<0> HostGridEntity;
59
61 using ElementContainer = std::vector<HostGridEntity>;
62
63 public:
64 enum {codimension = 0};
65
66 typedef typename GridImp::template Codim<0>::Entity Entity;
67
68 explicit MMeshIncidentIteratorImp(const GridImp* mMesh, const HostGridVertex& hostEntity)
69 : mMesh_(mMesh),
70 i_(0)
71 {
72 auto circulator = mMesh->getHostGrid().incident_faces(hostEntity);
73 for ( std::size_t i = 0; i < CGAL::circulator_size(circulator); ++i, ++circulator )
74 if (!mMesh->getHostGrid().is_infinite(circulator))
75 elementContainer_.push_back( circulator );
76 }
77
82 explicit MMeshIncidentIteratorImp(const GridImp* mMesh, const HostGridVertex& hostEntity, bool endDummy) :
83 mMesh_(mMesh),
84 i_(0)
85 {
86 auto circulator = mMesh->getHostGrid().incident_faces(hostEntity);
87 for ( std::size_t i = 0; i < CGAL::circulator_size(circulator); ++i, ++circulator )
88 if (!mMesh->getHostGrid().is_infinite(circulator))
89 ++i_;
90 }
91
93 void increment() {
94 ++i_;
95 }
96
98 Entity dereference() const {
99 return Entity {{ mMesh_, elementContainer_[i_] }};
100 }
101
103 bool equals(const MMeshIncidentIteratorImp& iter) const {
104 return i_ == iter.i_;
105 }
106
107 private:
108 const GridImp* mMesh_;
109 ElementContainer elementContainer_;
110 std::size_t i_;
111 };
112
113
115 template<class GridImp>
116 class MMeshIncidentIteratorImp<GridImp, 3>
117 {
118 private:
120 typedef typename GridImp::template HostGridEntity<GridImp::dimension> HostGridVertex;
121 typedef typename GridImp::template HostGridEntity<0> HostGridEntity;
122
124 using ElementOutput = typename GridImp::ElementOutput;
125
127 using ElementContainer = std::vector<HostGridEntity>;
128
129 public:
130 enum {codimension = 0};
131
132 typedef typename GridImp::template Codim<0>::Entity Entity;
133
134 explicit MMeshIncidentIteratorImp(const GridImp* mMesh, const HostGridVertex& hostEntity)
135 : mMesh_(mMesh),
136 i_(0)
137 {
138 ElementOutput elements;
139 mMesh_->getHostGrid().finite_incident_cells( hostEntity, std::back_inserter(elements) );
140
141 typename ElementOutput::iterator fit;
142 for(fit = elements.begin(); fit != elements.end(); fit++)
143 elementContainer_.push_back( *fit );
144 }
145
150 explicit MMeshIncidentIteratorImp(const GridImp* mMesh, const HostGridVertex& hostEntity, bool endDummy) :
151 mMesh_(mMesh),
152 i_(0)
153 {
154 ElementOutput elements;
155 mMesh_->getHostGrid().finite_incident_cells( hostEntity, std::back_inserter(elements) );
156
157 typename ElementOutput::iterator fit;
158 for(fit = elements.begin(); fit != elements.end(); fit++)
159 ++i_;
160 }
161
163 void increment() {
164 ++i_;
165 }
166
168 Entity dereference() const {
169 return Entity {{ mMesh_, elementContainer_[i_] }};
170 }
171
173 bool equals(const MMeshIncidentIteratorImp& iter) const {
174 return i_ == iter.i_;
175 }
176
177 private:
178 const GridImp* mMesh_;
179 ElementContainer elementContainer_;
180 std::size_t i_;
181 };
182
183
185 template<class GridImp>
187 {
188 private:
190 typedef typename GridImp::template HostGridEntity<GridImp::dimension-1> HostGridEdge;
191 typedef typename GridImp::template HostGridEntity<0> HostGridEntity;
192
194 using Circulator = typename GridImp::HostGridType::Cell_circulator;
195 using ElementContainer = std::vector<HostGridEntity>;
196
197 public:
198 enum {codimension = 0};
199
200 typedef typename GridImp::template Codim<0>::Entity Entity;
201
202 explicit MMeshEdgeIncidentIteratorImp(const GridImp* mMesh, const HostGridEdge& hostEntity)
203 : mMesh_(mMesh),
204 i_(0)
205 {
206 Circulator circulator = mMesh_->getHostGrid().incident_cells( hostEntity );
207 for(std::size_t i = 0; i < CGAL::circulator_size(circulator); circulator++, i++)
208 if (!mMesh->getHostGrid().is_infinite(circulator))
209 elementContainer_.push_back(circulator);
210 }
211
216 explicit MMeshEdgeIncidentIteratorImp(const GridImp* mMesh, const HostGridEdge& hostEntity, bool endDummy)
217 : mMesh_(mMesh),
218 i_(0)
219 {
220 Circulator circulator = mMesh_->getHostGrid().incident_cells( hostEntity );
221 for(std::size_t i = 0; i < CGAL::circulator_size(circulator); circulator++, i++)
222 if (!mMesh->getHostGrid().is_infinite(circulator))
223 ++i_;
224 }
225
227 void increment() {
228 ++i_;
229 }
230
232 Entity dereference() const {
233 return Entity {{ mMesh_, elementContainer_[i_] }};
234 }
235
237 bool equals(const MMeshEdgeIncidentIteratorImp& iter) const {
238 return i_ == iter.i_;
239 }
240
241 private:
242 const GridImp* mMesh_;
243 ElementContainer elementContainer_;
244 std::size_t i_;
245 };
246
247
253 template<class GridImp>
255 {
256 private:
258 typedef typename GridImp::template HostGridEntity<GridImp::dimension> HostGridVertex;
259 typedef typename GridImp::template HostGridEntity<1> HostGridEntity;
260
262 using Circulator = typename GridImp::HostGridType::Edge_circulator;
263 using ElementContainer = std::vector<HostGridEntity>;
264
265 public:
266 enum {codimension = 1};
267
268 typedef typename GridImp::template Codim<1>::Entity Entity;
269
270 explicit MMeshIncidentFacetsIteratorImp(const GridImp* mMesh, const HostGridVertex& hostEntity)
271 : mMesh_(mMesh),
272 i_(0)
273 {
274 Circulator circulator = mMesh->getHostGrid().incident_edges(hostEntity);
275 for ( std::size_t i = 0; i < CGAL::circulator_size(circulator); ++i, ++circulator )
276 if (!mMesh->getHostGrid().is_infinite(circulator))
277 elementContainer_.push_back( *circulator );
278 }
279
284 explicit MMeshIncidentFacetsIteratorImp(const GridImp* mMesh, const HostGridVertex& hostEntity, bool endDummy) :
285 mMesh_(mMesh),
286 i_(0)
287 {
288 Circulator circulator = mMesh->getHostGrid().incident_edges(hostEntity);
289 for ( std::size_t i = 0; i < CGAL::circulator_size(circulator); ++i, ++circulator )
290 if (!mMesh->getHostGrid().is_infinite(circulator))
291 ++i_;
292 }
293
295 void increment() {
296 ++i_;
297 }
298
300 Entity dereference() const {
301 return Entity {{ mMesh_, elementContainer_[i_] }};
302 }
303
305 bool equals(const MMeshIncidentFacetsIteratorImp& iter) const {
306 return i_ == iter.i_;
307 }
308
309 private:
310 const GridImp* mMesh_;
311 ElementContainer elementContainer_;
312 std::size_t i_;
313 };
314
315
317 template<class GridImp>
319 {
320 private:
322 typedef typename GridImp::template HostGridEntity<GridImp::dimension> HostGridVertex;
323 typedef typename GridImp::template HostGridEntity<1> HostGridEntity;
324
326 using ElementOutput = typename GridImp::BoundaryEdgesOutput;
327
329 using ElementContainer = std::vector<HostGridEntity>;
330
331 public:
332 enum {codimension = 1};
333
334 typedef typename GridImp::template Codim<1>::Entity Entity;
335
336 explicit MMeshIncidentFacetsIteratorImp(const GridImp* mMesh, const HostGridVertex& hostEntity)
337 : mMesh_(mMesh),
338 i_(0)
339 {
340 ElementOutput elements;
341 mMesh_->getHostGrid().finite_incident_facets( hostEntity, std::back_inserter(elements) );
342
343 typename ElementOutput::iterator fit;
344 for(fit = elements.begin(); fit != elements.end(); fit++)
345 elementContainer_.push_back( *fit );
346 }
347
352 explicit MMeshIncidentFacetsIteratorImp(const GridImp* mMesh, const HostGridVertex& hostEntity, bool endDummy) :
353 mMesh_(mMesh),
354 i_(0)
355 {
356 ElementOutput elements;
357 mMesh_->getHostGrid().finite_incident_facets( hostEntity, std::back_inserter(elements) );
358
359 typename ElementOutput::iterator fit;
360 for(fit = elements.begin(); fit != elements.end(); fit++)
361 ++i_;
362 }
363
365 void increment() {
366 ++i_;
367 }
368
370 Entity dereference() const {
371 return Entity {{ mMesh_, elementContainer_[i_] }};
372 }
373
375 bool equals(const MMeshIncidentFacetsIteratorImp& iter) const {
376 return i_ == iter.i_;
377 }
378
379 private:
380 const GridImp* mMesh_;
381 ElementContainer elementContainer_;
382 std::size_t i_;
383 };
384
390 template<class GridImp>
392 {
393 private:
395 typedef typename GridImp::VertexHandle HostGridVertex;
396
398 using Circulator = typename GridImp::HostGridType::Vertex_circulator;
399 using ElementContainer = std::vector<HostGridVertex>;
400
401 public:
402 enum {codimension = GridImp::dimension};
403
404 typedef typename GridImp::template Codim<codimension>::Entity Entity;
405
406 explicit MMeshIncidentVerticesIteratorImp(const GridImp* mMesh, const HostGridVertex& hostEntity, bool includeInfinite)
407 : mMesh_(mMesh),
408 i_(0)
409 {
410 Circulator circulator = mMesh->getHostGrid().incident_vertices(hostEntity);
411 for ( std::size_t i = 0; i < CGAL::circulator_size(circulator); ++i, ++circulator )
412 if (includeInfinite || !mMesh->getHostGrid().is_infinite(circulator))
413 elementContainer_.push_back( circulator );
414 }
415
420 explicit MMeshIncidentVerticesIteratorImp(const GridImp* mMesh, const HostGridVertex& hostEntity, bool includeInfinite, bool endDummy) :
421 mMesh_(mMesh),
422 i_(0)
423 {
424 Circulator circulator = mMesh->getHostGrid().incident_vertices(hostEntity);
425 for ( std::size_t i = 0; i < CGAL::circulator_size(circulator); ++i, ++circulator )
426 if (includeInfinite || !mMesh->getHostGrid().is_infinite(circulator))
427 ++i_;
428 }
429
431 void increment() {
432 ++i_;
433 }
434
436 Entity dereference() const {
437 return Entity {{ mMesh_, elementContainer_[i_] }};
438 }
439
441 bool equals(const MMeshIncidentVerticesIteratorImp& iter) const {
442 return i_ == iter.i_;
443 }
444
445 private:
446 const GridImp* mMesh_;
447 ElementContainer elementContainer_;
448 std::size_t i_;
449 };
450
451
453 template<class GridImp>
455 {
456 private:
458 typedef typename GridImp::VertexHandle HostGridVertex;
459
461 using ElementOutput = std::list<HostGridVertex>;
462
464 using ElementContainer = std::vector<HostGridVertex>;
465
466 public:
467 enum {codimension = GridImp::dimension};
468
469 typedef typename GridImp::template Codim<codimension>::Entity Entity;
470
471 explicit MMeshIncidentVerticesIteratorImp(const GridImp* mMesh, const HostGridVertex& hostEntity, bool includeInfinite)
472 : mMesh_(mMesh),
473 i_(0)
474 {
475 ElementOutput elements;
476 mMesh_->getHostGrid().incident_vertices( hostEntity, std::back_inserter(elements) );
477
478 typename ElementOutput::iterator fit;
479 for(fit = elements.begin(); fit != elements.end(); fit++)
480 if (includeInfinite || !mMesh->getHostGrid().is_infinite( *fit ))
481 elementContainer_.push_back( *fit );
482 }
483
488 explicit MMeshIncidentVerticesIteratorImp(const GridImp* mMesh, const HostGridVertex& hostEntity, bool includeInfinite, bool endDummy) :
489 mMesh_(mMesh),
490 i_(0)
491 {
492 ElementOutput elements;
493 mMesh_->getHostGrid().incident_vertices( hostEntity, std::back_inserter(elements) );
494
495 typename ElementOutput::iterator fit;
496 for(fit = elements.begin(); fit != elements.end(); fit++)
497 if (includeInfinite || !mMesh->getHostGrid().is_infinite( *fit ))
498 ++i_;
499 }
500
502 void increment() {
503 ++i_;
504 }
505
507 Entity dereference() const {
508 return Entity {{ mMesh_, elementContainer_[i_] }};
509 }
510
512 bool equals(const MMeshIncidentVerticesIteratorImp& iter) const {
513 return i_ == iter.i_;
514 }
515
516 private:
517 const GridImp* mMesh_;
518 ElementContainer elementContainer_;
519 std::size_t i_;
520 };
521
522} // namespace Dune
523
524#endif
bool equals(const MMeshEdgeIncidentIteratorImp &iter) const
equality
Definition: incidentiterator.hh:237
MMeshEdgeIncidentIteratorImp(const GridImp *mMesh, const HostGridEdge &hostEntity, bool endDummy)
Constructor which creates the end iterator.
Definition: incidentiterator.hh:216
void increment()
prefix increment
Definition: incidentiterator.hh:227
Entity dereference() const
dereferencing
Definition: incidentiterator.hh:232
Forward declaration.
Definition: incidentiterator.hh:25
void increment()
prefix increment
Definition: incidentiterator.hh:295
Entity dereference() const
dereferencing
Definition: incidentiterator.hh:300
MMeshIncidentFacetsIteratorImp(const GridImp *mMesh, const HostGridVertex &hostEntity, bool endDummy)
Constructor which creates the end iterator.
Definition: incidentiterator.hh:284
bool equals(const MMeshIncidentFacetsIteratorImp &iter) const
equality
Definition: incidentiterator.hh:305
MMeshIncidentFacetsIteratorImp(const GridImp *mMesh, const HostGridVertex &hostEntity, bool endDummy)
Constructor which creates the end iterator.
Definition: incidentiterator.hh:352
Entity dereference() const
dereferencing
Definition: incidentiterator.hh:370
bool equals(const MMeshIncidentFacetsIteratorImp &iter) const
equality
Definition: incidentiterator.hh:375
void increment()
prefix increment
Definition: incidentiterator.hh:365
Forward declaration.
Definition: incidentiterator.hh:33
MMeshIncidentIteratorImp(const GridImp *mMesh, const HostGridVertex &hostEntity, bool endDummy)
Constructor which creates the end iterator.
Definition: incidentiterator.hh:82
bool equals(const MMeshIncidentIteratorImp &iter) const
equality
Definition: incidentiterator.hh:103
void increment()
prefix increment
Definition: incidentiterator.hh:93
Entity dereference() const
dereferencing
Definition: incidentiterator.hh:98
bool equals(const MMeshIncidentIteratorImp &iter) const
equality
Definition: incidentiterator.hh:173
MMeshIncidentIteratorImp(const GridImp *mMesh, const HostGridVertex &hostEntity, bool endDummy)
Constructor which creates the end iterator.
Definition: incidentiterator.hh:150
void increment()
prefix increment
Definition: incidentiterator.hh:163
Entity dereference() const
dereferencing
Definition: incidentiterator.hh:168
Forward declaration.
Definition: incidentiterator.hh:17
Entity dereference() const
dereferencing
Definition: incidentiterator.hh:436
MMeshIncidentVerticesIteratorImp(const GridImp *mMesh, const HostGridVertex &hostEntity, bool includeInfinite, bool endDummy)
Constructor which creates the end iterator.
Definition: incidentiterator.hh:420
bool equals(const MMeshIncidentVerticesIteratorImp &iter) const
equality
Definition: incidentiterator.hh:441
void increment()
prefix increment
Definition: incidentiterator.hh:431
MMeshIncidentVerticesIteratorImp(const GridImp *mMesh, const HostGridVertex &hostEntity, bool includeInfinite, bool endDummy)
Constructor which creates the end iterator.
Definition: incidentiterator.hh:488
Entity dereference() const
dereferencing
Definition: incidentiterator.hh:507
bool equals(const MMeshIncidentVerticesIteratorImp &iter) const
equality
Definition: incidentiterator.hh:512
void increment()
prefix increment
Definition: incidentiterator.hh:502
Forward declaration.
Definition: incidentiterator.hh:41
EntityIterator< Grid::dimension, Grid, MMeshIncidentVerticesIteratorImp< Grid, Grid::dimensionworld > > MMeshIncidentVerticesIterator
The Incident Facets Iterator alias.
Definition: incidentiterator.hh:45
EntityIterator< 0, Grid, MMeshEdgeIncidentIteratorImp< Grid, Grid::dimension > > MMeshEdgeIncidentIterator
The Incident Entity Iterator alias for edges.
Definition: incidentiterator.hh:29
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:37
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden & Uni Heidelberg  |  generated with Hugo v0.111.3 (Apr 13, 22:42, 2025)