Loading [MathJax]/extensions/tex2jax.js

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_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{
15
21 template<class GridImp, int dim>
23
25 template<class Grid>
26 using MMeshIncidentInterfaceVerticesIterator = EntityIterator<Grid::dimension, Grid, MMeshIncidentInterfaceVerticesIteratorImp<Grid, Grid::dimension>>;
27
29 template<class GridImp>
31 {
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
45 explicit MMeshIncidentInterfaceVerticesIteratorImp(const GridImp* igrid, const HostGridVertex& hostEntity)
46 : mMesh_(&igrid->getMMesh()),
47 i_(0)
48 {
49 Circulator circulator = mMesh_->getHostGrid().incident_vertices(hostEntity);
50 for ( std::size_t i = 0; i < CGAL::circulator_size(circulator); ++i, ++circulator )
51 if (circulator->info().isInterface)
52 elementContainer_.push_back( circulator );
53 }
54
58 explicit MMeshIncidentInterfaceVerticesIteratorImp(const GridImp* igrid, const HostGridVertex& hostEntity, bool endDummy)
59 : mMesh_(&igrid->getMMesh()),
60 i_(0)
61 {
62 Circulator circulator = mMesh_->getHostGrid().incident_vertices(hostEntity);
63 for ( std::size_t i = 0; i < CGAL::circulator_size(circulator); ++i, ++circulator )
64 if (circulator->info().isInterface)
65 ++i_;
66 }
67
69 void increment() {
70 ++i_;
71 }
72
74 Entity dereference() const {
75 return Entity {{ &mMesh_->interfaceGrid(), elementContainer_[i_] }};
76 }
77
80 return i_ == iter.i_;
81 }
82
83 private:
84 const typename GridImp::MMeshType* mMesh_;
85 ElementContainer elementContainer_;
86 std::size_t i_;
87 };
88
89
91 template<class GridImp>
93 {
94 private:
96 typedef typename GridImp::VertexHandle HostGridVertex;
97
99 using ElementOutput = std::list<HostGridVertex>;
100
102 using ElementContainer = std::vector<HostGridVertex>;
103
104 public:
105 enum {codimension = 2};
106
107 typedef typename GridImp::template Codim<2>::Entity Entity;
108
109 explicit MMeshIncidentInterfaceVerticesIteratorImp(const GridImp* igrid, const HostGridVertex& hostEntity)
110 : mMesh_(&igrid->getMMesh()),
111 i_(0)
112 {
113 ElementOutput elements;
114 mMesh_->getHostGrid().incident_vertices( hostEntity, std::back_inserter(elements) );
115
116 typename ElementOutput::iterator fit;
117 for(fit = elements.begin(); fit != elements.end(); fit++)
118 if ((*fit)->info().isInterface)
119 elementContainer_.push_back( *fit );
120 }
121
125 explicit MMeshIncidentInterfaceVerticesIteratorImp(const GridImp* igrid, const HostGridVertex& hostEntity, bool endDummy)
126 : mMesh_(&igrid->getMMesh()),
127 i_(0)
128 {
129 ElementOutput elements;
130 mMesh_->getHostGrid().incident_vertices( hostEntity, std::back_inserter(elements) );
131
132 typename ElementOutput::iterator fit;
133 for(fit = elements.begin(); fit != elements.end(); fit++)
134 if ((*fit)->info().isInterface)
135 ++i_;
136 }
137
139 void increment() {
140 ++i_;
141 }
142
144 Entity dereference() const {
145 return Entity {{ &mMesh_->interfaceGrid(), elementContainer_[i_] }};
146 }
147
150 return i_ == iter.i_;
151 }
152
153 private:
154 const typename GridImp::MMeshType* mMesh_;
155 ElementContainer elementContainer_;
156 std::size_t i_;
157 };
158
159
165 template<class GridImp, int dim>
167
169 template<class Grid>
170 using MMeshIncidentInterfaceElementsIterator = EntityIterator<0, Grid, MMeshIncidentInterfaceElementsIteratorImp<Grid, Grid::dimension>>;
171
173 template<class GridImp>
175 {
176 private:
178 typedef typename GridImp::template MMeshInterfaceEntity<0> HostGridElement;
179
181 typedef typename GridImp::VertexHandle HostGridVertex;
182
184 using Circulator = typename GridImp::HostGridType::Edge_circulator;
185 using ElementContainer = std::vector<HostGridElement>;
186
187 public:
188 enum {codimension = 0};
189
190 typedef typename GridImp::template Codim<0>::Entity Entity;
191
192 explicit MMeshIncidentInterfaceElementsIteratorImp(const GridImp* igrid, const HostGridVertex& hostEntity)
193 : igrid_(igrid),
194 i_(0)
195 {
196 Circulator circulator = mMesh().getHostGrid().incident_edges(hostEntity);
197 for ( std::size_t i = 0; i < CGAL::circulator_size(circulator); ++i, ++circulator )
198 if ( mMesh().isInterface( mMesh().entity( *circulator ) ) )
199 elementContainer_.push_back( *circulator );
200 }
201
205 explicit MMeshIncidentInterfaceElementsIteratorImp(const GridImp* igrid, const HostGridVertex& hostEntity, bool endDummy)
206 : igrid_(igrid),
207 i_(0)
208 {
209 Circulator circulator = mMesh().getHostGrid().incident_edges(hostEntity);
210 for ( std::size_t i = 0; i < CGAL::circulator_size(circulator); ++i, ++circulator )
211 if ( mMesh().isInterface( mMesh().entity( *circulator ) ) )
212 ++i_;
213 }
214
216 void increment() {
217 ++i_;
218 }
219
221 Entity dereference() const {
222 return Entity {{ igrid_, elementContainer_[i_] }};
223 }
224
227 return i_ == iter.i_;
228 }
229
230 private:
231 const typename GridImp::MMeshType& mMesh() const { return igrid_->getMMesh(); }
232
233 const GridImp* igrid_;
234 ElementContainer elementContainer_;
235 std::size_t i_;
236 };
237
238
240 template<class GridImp>
242 {
243 private:
245 typedef typename GridImp::template MMeshInterfaceEntity<0> HostGridElement;
246
248 typedef typename GridImp::VertexHandle HostGridVertex;
249
251 using ElementOutput = std::list<HostGridElement>;
252
254 using ElementContainer = std::vector<HostGridElement>;
255
256 public:
257 enum {codimension = 0};
258
259 typedef typename GridImp::template Codim<0>::Entity Entity;
260
261 explicit MMeshIncidentInterfaceElementsIteratorImp(const GridImp* igrid, const HostGridVertex& hostEntity)
262 : igrid_(igrid),
263 i_(0)
264 {
265 ElementOutput elements;
266 mMesh().getHostGrid().finite_incident_facets( hostEntity, std::back_inserter(elements) );
267
268 typename ElementOutput::iterator fit;
269 for(fit = elements.begin(); fit != elements.end(); fit++)
270 if ( mMesh().isInterface( mMesh().entity( *fit ) ) )
271 elementContainer_.push_back( *fit );
272 }
273
277 explicit MMeshIncidentInterfaceElementsIteratorImp(const GridImp* igrid, const HostGridVertex& hostEntity, bool endDummy)
278 : igrid_(igrid),
279 i_(0)
280 {
281 ElementOutput elements;
282 mMesh().getHostGrid().finite_incident_facets( hostEntity, std::back_inserter(elements) );
283
284 typename ElementOutput::iterator fit;
285 for(fit = elements.begin(); fit != elements.end(); fit++)
286 if ( mMesh().isInterface( mMesh().entity( *fit ) ) )
287 ++i_;
288 }
289
291 void increment() {
292 ++i_;
293 }
294
296 Entity dereference() const {
297 return Entity {{ igrid_, elementContainer_[i_] }};
298 }
299
302 return i_ == iter.i_;
303 }
304
305 private:
306 const typename GridImp::MMeshType& mMesh() const { return igrid_->getMMesh(); }
307
308 const GridImp* igrid_;
309 ElementContainer elementContainer_;
310 std::size_t i_;
311 };
312
313
315 template<class GridImp, int dim>
317
319 template<class Grid>
320 using MMeshEdgeIncidentInterfaceElementsIterator = EntityIterator<0, Grid,
322
324 template<class GridImp>
326 {
327 private:
329 typedef typename GridImp::template MMeshInterfaceEntity<0> HostGridElement;
330
332 typedef typename GridImp::EdgeHandle HostGridEdge;
333
335 using Circulator = typename GridImp::HostGridType::Facet_circulator;
336
338 using ElementContainer = std::vector<HostGridElement>;
339
340 public:
341 enum {codimension = 0};
342
343 typedef typename GridImp::template Codim<0>::Entity Entity;
344
345 explicit MMeshEdgeIncidentInterfaceElementsIteratorImp(const GridImp* igrid, const HostGridEdge& hostEntity)
346 : igrid_(igrid),
347 i_(0)
348 {
349 Circulator circulator = mMesh().getHostGrid().incident_facets(hostEntity);
350 for ( std::size_t i = 0; i < CGAL::circulator_size(circulator); ++i, ++circulator )
351 if ( mMesh().isInterface( mMesh().entity( *circulator ) ) )
352 elementContainer_.push_back( *circulator );
353 }
354
358 explicit MMeshEdgeIncidentInterfaceElementsIteratorImp(const GridImp* igrid, const HostGridEdge& hostEntity, bool endDummy)
359 : igrid_(igrid),
360 i_(0)
361 {
362 Circulator circulator = mMesh().getHostGrid().incident_facets(hostEntity);
363 for ( std::size_t i = 0; i < CGAL::circulator_size(circulator); ++i, ++circulator )
364 if ( mMesh().isInterface( mMesh().entity( *circulator ) ) )
365 ++i_;
366 }
367
369 void increment() {
370 ++i_;
371 }
372
374 Entity dereference() const {
375 return Entity {{ igrid_, elementContainer_[i_] }};
376 }
377
380 return i_ == iter.i_;
381 }
382
383 private:
384 const typename GridImp::MMeshType& mMesh() const { return igrid_->getMMesh(); }
385
386 const GridImp* igrid_;
387 ElementContainer elementContainer_;
388 std::size_t i_;
389 };
390
391} // namespace Dune
392
393#endif
Entity dereference() const
dereferencing
Definition: incidentiterator.hh:374
bool equals(const MMeshEdgeIncidentInterfaceElementsIteratorImp &iter) const
equality
Definition: incidentiterator.hh:379
void increment()
prefix increment
Definition: incidentiterator.hh:369
MMeshEdgeIncidentInterfaceElementsIteratorImp(const GridImp *igrid, const HostGridEdge &hostEntity, bool endDummy)
Constructor which creates the end iterator.
Definition: incidentiterator.hh:358
Forward declaration.
Definition: incidentiterator.hh:316
void increment()
prefix increment
Definition: incidentiterator.hh:216
Entity dereference() const
dereferencing
Definition: incidentiterator.hh:221
MMeshIncidentInterfaceElementsIteratorImp(const GridImp *igrid, const HostGridVertex &hostEntity, bool endDummy)
Constructor which creates the end iterator.
Definition: incidentiterator.hh:205
bool equals(const MMeshIncidentInterfaceElementsIteratorImp &iter) const
equality
Definition: incidentiterator.hh:226
Entity dereference() const
dereferencing
Definition: incidentiterator.hh:296
MMeshIncidentInterfaceElementsIteratorImp(const GridImp *igrid, const HostGridVertex &hostEntity, bool endDummy)
Constructor which creates the end iterator.
Definition: incidentiterator.hh:277
bool equals(const MMeshIncidentInterfaceElementsIteratorImp &iter) const
equality
Definition: incidentiterator.hh:301
void increment()
prefix increment
Definition: incidentiterator.hh:291
Iterator over all incident interface elements.
Definition: incidentiterator.hh:166
MMeshIncidentInterfaceVerticesIteratorImp(const GridImp *igrid, const HostGridVertex &hostEntity, bool endDummy)
Constructor which creates the end iterator.
Definition: incidentiterator.hh:58
bool equals(const MMeshIncidentInterfaceVerticesIteratorImp &iter) const
equality
Definition: incidentiterator.hh:79
void increment()
prefix increment
Definition: incidentiterator.hh:69
Entity dereference() const
dereferencing
Definition: incidentiterator.hh:74
MMeshIncidentInterfaceVerticesIteratorImp(const GridImp *igrid, const HostGridVertex &hostEntity, bool endDummy)
Constructor which creates the end iterator.
Definition: incidentiterator.hh:125
Entity dereference() const
dereferencing
Definition: incidentiterator.hh:144
bool equals(const MMeshIncidentInterfaceVerticesIteratorImp &iter) const
equality
Definition: incidentiterator.hh:149
void increment()
prefix increment
Definition: incidentiterator.hh:139
Iterator over all incident interface vertices.
Definition: incidentiterator.hh:22
EntityIterator< 0, Grid, MMeshEdgeIncidentInterfaceElementsIteratorImp< Grid, Grid::dimension > > MMeshEdgeIncidentInterfaceElementsIterator
The Incident Interface Elements Iterator alias.
Definition: incidentiterator.hh:321
EntityIterator< Grid::dimension, Grid, MMeshIncidentInterfaceVerticesIteratorImp< Grid, Grid::dimension > > MMeshIncidentInterfaceVerticesIterator
The Incident Interface Vertices Iterator alias.
Definition: incidentiterator.hh:26
EntityIterator< 0, Grid, MMeshIncidentInterfaceElementsIteratorImp< Grid, Grid::dimension > > MMeshIncidentInterfaceElementsIterator
The Incident Interface Elements Iterator alias.
Definition: incidentiterator.hh:170
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden & Uni Heidelberg  |  generated with Hugo v0.111.3 (Apr 13, 22:42, 2025)