dune-geometry 2.11
Loading...
Searching...
No Matches
virtualrefinement.cc
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// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
5
6#ifndef DUNE_GEOMETRY_VIRTUALREFINEMENT_CC
7#define DUNE_GEOMETRY_VIRTUALREFINEMENT_CC
8
13
14#include <cassert>
15#include <typeinfo>
16
17#include <dune/common/exceptions.hh>
18#include <dune/common/fvector.hh>
19#include <dune/common/iteratorfacades.hh>
20
21#include "type.hh"
22#include "refinement.hh"
23
24namespace Dune
25{
26 // //////////////////////////////////////////
27 //
28 // The virtual base class and its iterators
29 //
30
31 //
32 // Refinement
33 //
34
35 template<int dimension, class CoordType>
36 typename VirtualRefinement<dimension, CoordType>::VertexIterator
42
43 template<int dimension, class CoordType>
50
51 template<int dimension, class CoordType>
58
59 template<int dimension, class CoordType>
66
67 //
68 // The iterators
69 //
70
71 template<int dimension, class CoordType, int codimension>
73
74 // The iterator for vertices
75 template<int dimension, class CoordType>
76 class VirtualRefinementSubEntityIteratorSpecial<dimension, CoordType, dimension>
77 {};
78
79 // The iterator for elements
80 template<int dimension, class CoordType>
81 class VirtualRefinementSubEntityIteratorSpecial<dimension, CoordType, 0>
82 {
83 public:
85 typedef typename Refinement::template Codim<0>::SubEntityIterator Common;
87
89 };
90
91 template<int dimension, class CoordType>
94 vertexIndices() const
95 {
96 return static_cast<const Common *>(this)->backend->vertexIndices();
97 }
98
99 // The iterator common stuff
100 template<int dimension, class CoordType>
101 template<int codimension>
102 class VirtualRefinement<dimension, CoordType>::Codim<codimension>::SubEntityIterator
103 : public ForwardIteratorFacade<typename VirtualRefinement<dimension, CoordType>::template Codim<codimension>::SubEntityIterator, int>,
104 public VirtualRefinementSubEntityIteratorSpecial<dimension, CoordType, codimension>
105 {
106 public:
108 typedef typename Refinement::template Codim<codimension>::SubEntityIterator This;
109 typedef typename Refinement::template SubEntityIteratorBack<codimension> IteratorBack;
111
113 SubEntityIterator(const This &other);
115
116 This &operator=(const This &other);
117
118 bool equals(const This &other) const;
119 void increment();
120
121 int index() const;
122
123 // If you simply use an unqualified CoordVector here g++-4.2 chokes
125 CoordVector coords() const;
126 private:
127 friend class VirtualRefinementSubEntityIteratorSpecial<dimension, CoordType, codimension>;
128 IteratorBack *backend;
129 };
130
131#ifndef DOXYGEN
132 template<int dimension, class CoordType>
133 template<int codimension>
135 SubEntityIterator(IteratorBack *backend_)
136 : backend(backend_)
137 {}
138
139 template<int dimension, class CoordType>
140 template<int codimension>
142 SubEntityIterator(const This &other)
143 : backend(other.backend->clone())
144 {}
145
146 template<int dimension, class CoordType>
147 template<int codimension>
148 VirtualRefinement<dimension, CoordType>::Codim<codimension>::SubEntityIterator::
149 ~SubEntityIterator()
150 {
151 delete backend;
152 }
153
154 template<int dimension, class CoordType>
155 template<int codimension>
156 typename VirtualRefinement<dimension, CoordType>::template Codim<codimension>::SubEntityIterator &
157 VirtualRefinement<dimension, CoordType>::Codim<codimension>::SubEntityIterator::
158 operator=(const This &other)
159 {
160 delete backend;
161 backend = other.backend->clone();
162 return *this;
163 }
164
165 template<int dimension, class CoordType>
166 template<int codimension>
167 bool
168 VirtualRefinement<dimension, CoordType>::Codim<codimension>::SubEntityIterator::
169 equals(const This &other) const
170 { return *backend == *(other.backend); }
171
172 template<int dimension, class CoordType>
173 template<int codimension>
174 void
175 VirtualRefinement<dimension, CoordType>::Codim<codimension>::SubEntityIterator::
176 increment()
177 {
178 ++*backend;
179 }
180
181 template<int dimension, class CoordType>
182 template<int codimension>
183 int
184 VirtualRefinement<dimension, CoordType>::Codim<codimension>::SubEntityIterator::
185 index() const
186 { return backend->index(); }
187
188 template<int dimension, class CoordType>
189 template<int codimension>
190 typename VirtualRefinement<dimension, CoordType>::template Codim<codimension>::SubEntityIterator::CoordVector
191 VirtualRefinement<dimension, CoordType>::Codim<codimension>::SubEntityIterator::
192 coords() const
193 { return backend->coords(); }
194#endif // DOXYGEN
195
196 //
197 // The iterator backend
198 //
199
200 template<int dimension, class CoordType, int codimension>
202
203 // The iterator backend for vertices
204 template<int dimension, class CoordType>
205 class VirtualRefinementSubEntityIteratorBackSpecial<dimension, CoordType, dimension>
206 {
207 public:
208
211 };
212
213 // The iterator backend for elements
214 template<int dimension, class CoordType>
226
227 // The iterator backend common stuff
228 template<int dimension, class CoordType>
229 template<int codimension>
230 class VirtualRefinement<dimension, CoordType>::SubEntityIteratorBack
231 : public VirtualRefinementSubEntityIteratorBackSpecial<dimension, CoordType, codimension>
232 {
233 public:
235 typedef typename Refinement::template SubEntityIteratorBack<codimension> This;
237
239
240 virtual This *clone() const = 0;
241
242 virtual bool operator==(const This &other) const = 0;
243 virtual This &operator++() = 0;
244
245 virtual int index() const = 0;
246 virtual CoordVector coords() const = 0;
247 };
248
249 // /////////////////////////////////////////////////
250 //
251 // The derived classes and their iterator backends
252 //
253
254 //
255 // The refinement implementation
256 //
257
258 template<unsigned topologyId, class CoordType,
259 unsigned coerceToId, int dimension>
260 class VirtualRefinementImp
261 : public Dune::VirtualRefinement<dimension, CoordType>
262 {
263 public:
266
267 template<int codimension>
269
270 int nVertices(Dune::RefinementIntervals tag) const override;
271
272 int nElements(Dune::RefinementIntervals tag) const override;
273
274 static VirtualRefinementImp<topologyId, CoordType, coerceToId, dimension> &instance();
275 private:
276 VirtualRefinementImp() {}
277
278 typename VirtualRefinement::VertexIteratorBack *vBeginBack(Dune::RefinementIntervals tag) const override;
279 typename VirtualRefinement::VertexIteratorBack *vEndBack(Dune::RefinementIntervals tag) const override;
280 typename VirtualRefinement::ElementIteratorBack *eBeginBack(Dune::RefinementIntervals tag) const override;
281 typename VirtualRefinement::ElementIteratorBack *eEndBack(Dune::RefinementIntervals tag) const override;
282 };
283
284 template<unsigned topologyId, class CoordType,
285 unsigned coerceToId, int dimension>
286 VirtualRefinementImp<topologyId, CoordType, coerceToId, dimension> &
288 {
289 static VirtualRefinementImp instance_{};
290 return instance_;
291 }
292
293 template<unsigned topologyId, class CoordType,
294 unsigned coerceToId, int dimension>
300
301 template<unsigned topologyId, class CoordType,
302 unsigned coerceToId, int dimension>
306 {
307 return new SubEntityIteratorBack<dimension>(StaticRefinement::vBegin(tag));
308 }
309
310 template<unsigned topologyId, class CoordType,
311 unsigned coerceToId, int dimension>
313 VirtualRefinementImp<topologyId, CoordType, coerceToId, dimension>::
314 vEndBack(Dune::RefinementIntervals tag) const
315 {
316 return new SubEntityIteratorBack<dimension>(StaticRefinement::vEnd(tag));
317 }
318
319 template<unsigned topologyId, class CoordType,
320 unsigned coerceToId, int dimension>
323 return StaticRefinement::nElements(tag);
324 }
325
326 template<unsigned topologyId, class CoordType,
327 unsigned coerceToId, int dimension>
331 {
333 }
334
335 template<unsigned topologyId, class CoordType,
336 unsigned coerceToId, int dimension>
340 {
342 }
344 //
345 // The iterator backend implementation
346 //
347
348 // The iterator backend implementation specialties
349 template<unsigned topologyId, class CoordType,
350 unsigned coerceToId, int dimension, int codimension>
352
353 // The iterator backend implementation specialties for vertices
354 template<unsigned topologyId, class CoordType,
355 unsigned coerceToId, int dimension>
356 class VirtualRefinementImpSubEntityIteratorBackSpecial<topologyId, CoordType, coerceToId, dimension, dimension>
357 : public VirtualRefinement<dimension, CoordType>::template SubEntityIteratorBack<dimension>
358 {};
359
360 // The iterator backend implementation specialties for elements
361
362 template<unsigned topologyId, class CoordType,
363 unsigned coerceToId, int dimension>
364 class VirtualRefinementImpSubEntityIteratorBackSpecial<topologyId, CoordType, coerceToId, dimension, 0>
365 : public VirtualRefinement<dimension, CoordType>::template SubEntityIteratorBack<0>
366 {
367 public:
369 typedef typename VirtualRefinementImp::template SubEntityIteratorBack<0> Common;
373
375 };
376
377 template<unsigned topologyId, class CoordType,
378 unsigned coerceToId, int dimension>
381 vertexIndices() const
382 {
383 IndexVector vIndices;
384 vIndices.reserve(StaticRefinement::IndexVector::dimension);
385
386 typename StaticRefinement::IndexVector sIndices = static_cast<const Common *>(this)->backend.vertexIndices();
387 for(int i = 0; i < StaticRefinement::IndexVector::dimension; ++i)
388 vIndices.push_back(sIndices[i]);
389 return vIndices;
390 }
391
392 // The shared iterator backend implementation
393 template<unsigned topologyId, class CoordType,
394 unsigned coerceToId, int dimension>
395 template<int codimension>
396 class VirtualRefinementImp<topologyId, CoordType, coerceToId, dimension>::SubEntityIteratorBack
397 : public VirtualRefinementImpSubEntityIteratorBackSpecial<topologyId, CoordType, coerceToId, dimension, codimension>
398 {
399 public:
400 typedef typename StaticRefinement::template Codim<codimension>::SubEntityIterator BackendIterator;
401 typedef typename VirtualRefinementImp<topologyId, CoordType, coerceToId, dimension>::template SubEntityIteratorBack<codimension> This;
402 typedef typename VirtualRefinement::template SubEntityIteratorBack<codimension> Base;
404
406 SubEntityIteratorBack(const This &other);
407
408 Base *clone() const;
409
410 bool operator==(const Base &other) const;
412
413 int index() const;
415
416 private:
417 friend class VirtualRefinementImpSubEntityIteratorBackSpecial<topologyId, CoordType, coerceToId, dimension, codimension>;
418 BackendIterator backend;
419 };
420
421 template<unsigned topologyId, class CoordType,
422 unsigned coerceToId, int dimension>
423 template<int codimension>
424 VirtualRefinementImp<topologyId, CoordType, coerceToId, dimension>::SubEntityIteratorBack<codimension>::
425 SubEntityIteratorBack(const BackendIterator &backend_)
426 : backend(backend_)
427 {}
428
429 template<unsigned topologyId, class CoordType,
430 unsigned coerceToId, int dimension>
431 template<int codimension>
432 VirtualRefinementImp<topologyId, CoordType, coerceToId, dimension>::SubEntityIteratorBack<codimension>::
433 SubEntityIteratorBack(const This &other)
434 : VirtualRefinementImpSubEntityIteratorBackSpecial<topologyId, CoordType, coerceToId, dimension, codimension>(other),
435 backend(other.backend)
436 {}
437
438 template<unsigned topologyId, class CoordType, unsigned coerceToId, int dimension>
439 template<int codimension>
440 typename VirtualRefinementImp<topologyId, CoordType, coerceToId, dimension>::template SubEntityIteratorBack<codimension>::Base *
441 VirtualRefinementImp<topologyId, CoordType, coerceToId, dimension>::SubEntityIteratorBack<codimension>::
442 clone() const
443 { return new This(*this); }
444
445 template<unsigned topologyId, class CoordType, unsigned coerceToId, int dimension>
446 template<int codimension>
447 bool
448 VirtualRefinementImp<topologyId, CoordType, coerceToId, dimension>::SubEntityIteratorBack<codimension>::
449 operator==(const Base &other) const
450 {
451 try {
452 return backend == dynamic_cast<const This &>(other).backend;
453 }
454 catch(const std::bad_cast&)
455 {
456 return false;
457 }
458 }
459
460 template<unsigned topologyId, class CoordType, unsigned coerceToId, int dimension>
461 template<int codimension>
462 typename VirtualRefinementImp<topologyId, CoordType, coerceToId, dimension>::template SubEntityIteratorBack<codimension>::Base &
463 VirtualRefinementImp<topologyId, CoordType, coerceToId, dimension>::SubEntityIteratorBack<codimension>::
464 operator++()
465 {
466 ++backend;
467 return *this;
468 }
469
470 template<unsigned topologyId, class CoordType, unsigned coerceToId, int dimension>
471 template<int codimension>
472 int
473 VirtualRefinementImp<topologyId, CoordType, coerceToId, dimension>::SubEntityIteratorBack<codimension>::
474 index() const
475 { return backend.index(); }
476
477 template<unsigned topologyId, class CoordType, unsigned coerceToId, int dimension>
478 template<int codimension>
479 typename VirtualRefinementImp<topologyId, CoordType, coerceToId, dimension>::template SubEntityIteratorBack<codimension>::CoordVector
480 VirtualRefinementImp<topologyId, CoordType, coerceToId, dimension>::SubEntityIteratorBack<codimension>::
481 coords() const
482 { return backend.coords(); }
483
484 // ////////////////////////
485 //
486 // The refinement builder
487 //
488
489 template<int dimension, class CoordType>
490 class RefinementBuilder;
491
502 template<int dimension, class CoordType>
505 GeometryType geometryType,
507 GeometryType coerceTo)
508 {
509 // Check that the user used valid geometry types
510 assert(geometryType.dim() == dimension && coerceTo.dim() == dimension);
511 return RefinementBuilder<dimension, CoordType>::build( geometryType.id(), coerceTo.id() );
512 }
513
514 // In principle the trick with the class is no longer necessary,
515 // but I'm keeping it in here so it will be easier to specialize
516 // buildRefinement when someone implements pyramids and prisms
517 template<int dimension, class CoordType>
519 {
520 public:
521 static
523 build(unsigned topologyId, unsigned coerceToId)
524 {
525 topologyId &= ~1;
526 coerceToId &= ~1;
527
528 constexpr unsigned idSimplex = GeometryTypes::simplex(dimension).id() & ~1;
529 constexpr unsigned idCube = GeometryTypes::cube(dimension).id() & ~1;
530
531 switch( topologyId )
532 {
533 //case GeometryType::simplex:
534 case idSimplex :
535 //switch( coerceTo )
536 switch( coerceToId )
537 {
538 //case GeometryType::simplex:
539 case idSimplex :
541 default :
542 break;
543 }
544 break;
545
546 //case GeometryType::cube:
547 case idCube :
548 switch( coerceToId )
549 {
550 case idSimplex :
552 case idCube :
554 default :
555 break;
556 }
557 break;
558
559 default :
560 break;
561 }
562 DUNE_THROW( NotImplemented, "No Refinement<" << topologyId << ", CoordType, "
563 << coerceToId << " >.");
564 }
565 };
566
567 template<class CoordType>
568 class RefinementBuilder<1, CoordType>
569 {
570 static const std::size_t dimension = 1;
571 public:
572 static
574 build(unsigned topologyId, unsigned coerceToId)
575 {
576 topologyId &= ~1;
577 coerceToId &= ~1;
578
579 constexpr unsigned idSimplex = GeometryTypes::simplex(dimension).id() & ~1;
580
581 if (topologyId == 0 && coerceToId == 0)
583
584 DUNE_THROW( NotImplemented, "No Refinement<" << topologyId << ", CoordType, "
585 << coerceToId << " >.");
586 }
587 };
588
589 template<class CoordType>
590 class RefinementBuilder<3, CoordType>
591 {
592 static const std::size_t dimension = 3;
593 public:
594 static
596 build(unsigned topologyId, unsigned coerceToId)
597 {
598 topologyId &= ~1;
599 coerceToId &= ~1;
600
601 constexpr unsigned idSimplex = GeometryTypes::simplex(dimension).id() & ~1;
602 constexpr unsigned idCube = GeometryTypes::cube(dimension).id() & ~1;
603 constexpr unsigned idPrism = GeometryTypes::prism.id() & ~1;
604 constexpr unsigned idPyramid = GeometryTypes::pyramid.id() & ~1;
605
606 switch( topologyId )
607 {
608 //case GeometryType::simplex:
609 case idSimplex :
610 //switch( coerceTo )
611 switch( coerceToId )
612 {
613 //case GeometryType::simplex:
614 case idSimplex :
616 default :
617 break;
618 }
619 break;
620
621 //case GeometryType::cube:
622 case idCube :
623 switch( coerceToId )
624 {
625 case idSimplex :
627 case idCube :
629 default :
630 break;
631 }
632 break;
633
634 //case GeometryType::prism:
635 case idPrism :
636 switch( coerceToId )
637 {
638 case idSimplex :
640 default :
641 break;
642 }
643 break;
644
645 //case GeometryType::pyramid:
646 case idPyramid :
647 switch( coerceToId )
648 {
649 case idSimplex :
651 default :
652 break;
653 }
654 break;
655
656 default :
657 break;
658 }
659 DUNE_THROW( NotImplemented, "No Refinement<" << topologyId << ", CoordType, "
660 << coerceToId << " >.");
661 }
662 };
663
664} // namespace Dune
665
666#endif // DUNE_GEOMETRY_VIRTUALREFINEMENT_CC
This file simply includes all Refinement implementations so you don't have to do them separately.
A unique label for each type of element that can occur in a grid.
constexpr GeometryType cube(unsigned int dim)
Returns a GeometryType representing a hypercube of dimension dim.
Definition type.hh:462
constexpr GeometryType prism
GeometryType representing a 3D prism.
Definition type.hh:528
constexpr GeometryType pyramid
GeometryType representing a 3D pyramid.
Definition type.hh:522
constexpr GeometryType simplex(unsigned int dim)
Returns a GeometryType representing a simplex of dimension dim.
Definition type.hh:453
Definition affinegeometry.hh:22
VirtualRefinement< dimension, CoordType > & buildRefinement(GeometryType geometryType, GeometryType coerceTo)
return a reference to the VirtualRefinement according to the parameters
Definition virtualrefinement.cc:504
Static tag representing a codimension.
Definition dimension.hh:24
Holds the number of refined intervals per axis needed for virtual and static refinement.
Definition base.cc:94
Wrap each Refinement implementation to get a consistent interface.
Definition base.cc:141
static ElementIterator eEnd(Dune::RefinementIntervals tag)
Get an ElementIterator.
Definition base.cc:247
static ElementIterator eBegin(Dune::RefinementIntervals tag)
Get an ElementIterator.
Definition base.cc:237
static int nElements(Dune::RefinementIntervals tag)
Get the number of Elements.
Definition base.cc:227
static int nVertices(Dune::RefinementIntervals tag)
Get the number of Vertices.
Definition base.cc:197
static VertexIterator vBegin(Dune::RefinementIntervals tag)
Get a VertexIterator.
Definition base.cc:207
static VertexIterator vEnd(Dune::RefinementIntervals tag)
Get a VertexIterator.
Definition base.cc:217
Unique label for each type of entities that can occur in DUNE grids.
Definition type.hh:114
constexpr unsigned int dim() const
Return dimension of the type.
Definition type.hh:360
constexpr unsigned int id() const
Return the topology id of the type.
Definition type.hh:365
Definition virtualrefinement.cc:72
Refinement::template Codim< 0 >::SubEntityIterator Common
Definition virtualrefinement.cc:85
IndexVector vertexIndices() const
Definition virtualrefinement.cc:94
VirtualRefinement< dimension, CoordType > Refinement
Definition virtualrefinement.cc:84
Refinement::IndexVector IndexVector
Definition virtualrefinement.cc:86
VirtualRefinement< dimension, CoordType >::template Codim< codimension >::SubEntityIterator::CoordVector coords() const
Refinement::template SubEntityIteratorBack< codimension > IteratorBack
Definition virtualrefinement.cc:109
Refinement::CoordVector CoordVector
Definition virtualrefinement.cc:110
Refinement::template Codim< codimension >::SubEntityIterator This
Definition virtualrefinement.cc:108
bool equals(const This &other) const
VirtualRefinement< dimension, CoordType > Refinement
Definition virtualrefinement.cc:107
Definition virtualrefinement.cc:201
virtual ~VirtualRefinementSubEntityIteratorBackSpecial()
Definition virtualrefinement.cc:209
VirtualRefinement< dimension, CoordType > Refinement
Definition virtualrefinement.cc:218
Refinement::IndexVector IndexVector
Definition virtualrefinement.cc:219
virtual ~VirtualRefinementSubEntityIteratorBackSpecial()
Definition virtualrefinement.cc:223
Definition virtualrefinement.cc:232
Refinement::template SubEntityIteratorBack< codimension > This
Definition virtualrefinement.cc:235
Refinement::CoordVector CoordVector
Definition virtualrefinement.cc:236
VirtualRefinement< dimension, CoordType > Refinement
Definition virtualrefinement.cc:234
virtual bool operator==(const This &other) const =0
virtual CoordVector coords() const =0
virtual ~SubEntityIteratorBack()
Definition virtualrefinement.cc:238
Definition virtualrefinement.cc:262
int nVertices(Dune::RefinementIntervals tag) const override
Get the number of Vertices.
Definition virtualrefinement.cc:296
int nElements(Dune::RefinementIntervals tag) const override
Get the number of Elements.
Definition virtualrefinement.cc:321
Dune::VirtualRefinement< dimension, CoordType > VirtualRefinement
Definition virtualrefinement.cc:265
static VirtualRefinementImp< topologyId, CoordType, coerceToId, dimension > & instance()
Definition virtualrefinement.cc:287
Dune::StaticRefinement< topologyId, CoordType, coerceToId, dimension > StaticRefinement
Definition virtualrefinement.cc:264
Definition virtualrefinement.cc:398
SubEntityIteratorBack(const BackendIterator &backend)
Definition virtualrefinement.cc:425
VirtualRefinement::template SubEntityIteratorBack< codimension > Base
Definition virtualrefinement.cc:402
bool operator==(const Base &other) const
Definition virtualrefinement.cc:449
Base * clone() const
Definition virtualrefinement.cc:442
CoordVector coords() const
Definition virtualrefinement.cc:481
VirtualRefinementImp< topologyId, CoordType, coerceToId, dimension >::template SubEntityIteratorBack< codimension > This
Definition virtualrefinement.cc:401
StaticRefinement::template Codim< codimension >::SubEntityIterator BackendIterator
Definition virtualrefinement.cc:400
VirtualRefinement::CoordVector CoordVector
Definition virtualrefinement.cc:403
VirtualRefinementImp::template SubEntityIteratorBack< 0 > Common
Definition virtualrefinement.cc:369
VirtualRefinement< dimension, CoordType > RefinementBase
Definition virtualrefinement.cc:371
Dune::VirtualRefinementImp< topologyId, CoordType, coerceToId, dimension > VirtualRefinementImp
Definition virtualrefinement.cc:368
VirtualRefinementImp::StaticRefinement StaticRefinement
Definition virtualrefinement.cc:370
Definition virtualrefinement.cc:519
static VirtualRefinement< dimension, CoordType > & build(unsigned topologyId, unsigned coerceToId)
Definition virtualrefinement.cc:523
static VirtualRefinement< dimension, CoordType > & build(unsigned topologyId, unsigned coerceToId)
Definition virtualrefinement.cc:574
static VirtualRefinement< dimension, CoordType > & build(unsigned topologyId, unsigned coerceToId)
Definition virtualrefinement.cc:596
VirtualRefinement base class.
Definition virtualrefinement.hh:283
SubEntityIteratorBack< dimension > VertexIteratorBack
Definition virtualrefinement.hh:307
virtual ElementIteratorBack * eEndBack(Dune::RefinementIntervals tag) const =0
VertexIterator vBegin(Dune::RefinementIntervals tag) const
Get an VertexIterator.
Definition virtualrefinement.cc:38
ElementIterator eBegin(Dune::RefinementIntervals tag) const
Get an ElementIterator.
Definition virtualrefinement.cc:54
ElementIterator eEnd(Dune::RefinementIntervals tag) const
Get an ElementIterator.
Definition virtualrefinement.cc:62
Codim< 0 >::SubEntityIterator ElementIterator
The ElementIterator of the VirtualRefinement.
Definition virtualrefinement.hh:290
VertexIterator vEnd(Dune::RefinementIntervals tag) const
Get an VertexIterator.
Definition virtualrefinement.cc:46
FieldVector< CoordType, dimension > CoordVector
The CoordVector of the VirtualRefinement.
Definition virtualrefinement.hh:297
std::vector< int > IndexVector
The IndexVector of the VirtualRefinement.
Definition virtualrefinement.hh:303
Codim< dimension >::SubEntityIterator VertexIterator
The VertexIterator of the VirtualRefinement.
Definition virtualrefinement.hh:288
virtual VertexIteratorBack * vEndBack(Dune::RefinementIntervals tag) const =0
SubEntityIteratorBack< 0 > ElementIteratorBack
Definition virtualrefinement.hh:308
virtual ElementIteratorBack * eBeginBack(Dune::RefinementIntervals tag) const =0
virtual VertexIteratorBack * vBeginBack(Dune::RefinementIntervals tag) const =0
codim database of VirtualRefinement
Definition virtualrefinement.hh:367