dune-geometry 3.0-git
base.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#ifndef DUNE_GEOMETRY_REFINEMENT_BASE_CC
4#define DUNE_GEOMETRY_REFINEMENT_BASE_CC
5
13#include <dune/geometry/type.hh>
15
16namespace Dune
17{
27 namespace RefinementImp
28 {
29 // /////////////////////////////////
30 //
31 // Declaration of RefinementImp::Traits
32 //
33
34#ifdef DOXYGEN
35 // This is just for Doxygen
66 template<unsigned topologyId, class CoordType,
67 unsigned coerceToId, int dimension, class Dummy = void>
68 struct Traits
69 {
71 typedef SquaringTheCircle::Refinement Imp;
72 };
73
74#else // !DOXYGEN
75
76 // Doxygen won't see this
77
78 template<unsigned topologyId, class CoordType,
79 unsigned coerceToId, int dimension, class = void>
80 struct Traits;
81
82#endif // !DOXYGEN
83 } // namespace RefinementImp
84
85 // ///////////////
86 //
87 // Static Refinement
88 //
89
99 template<unsigned topologyId, class CoordType,
100 unsigned coerceToId, int dimension_>
102 : public RefinementImp::Traits<topologyId, CoordType,
103 coerceToId, dimension_ >::Imp
104 {
105 public:
106#ifdef DOXYGEN
112 template<int codimension>
113 struct Codim
114 {
121 };
122
127
133 typedef CoordVector;
134
140 typedef IndexVector;
141
143 static int nVertices(int level);
145 static VertexIterator vBegin(int level);
147 static VertexIterator vEnd(int level);
148
150 static int nElements(int level);
152 static ElementIterator eBegin(int level);
154 static ElementIterator eEnd(int level);
155#endif //DOXYGEN
157
158 using RefinementImp::dimension;
159
160 using RefinementImp::Codim;
161
162 using typename RefinementImp::VertexIterator;
163 using typename RefinementImp::CoordVector;
164
165 using typename RefinementImp::ElementIterator;
166 using typename RefinementImp::IndexVector;
167 };
168
171} // namespace Dune
172
173#endif // DUNE_GEOMETRY_REFINEMENT_BASE_CC
A unique label for each type of element that can occur in a grid.
Definition affinegeometry.hh:19
Mapping from geometryType, CoordType and coerceTo to a particular Refinement implementation.
Definition base.cc:69
SquaringTheCircle::Refinement Imp
The implementation this specialisation maps to.
Definition base.cc:71
Wrap each Refinement implementation to get a consistent interface.
Definition base.cc:104
static VertexIterator vEnd(int level)
Get a VertexIterator.
static ElementIterator eEnd(int level)
Get an ElementIterator.
Codim< 0 >::SubEntityIterator ElementIterator
The ElementIterator of the Refinement.
Definition base.cc:126
static ElementIterator eBegin(int level)
Get an ElementIterator.
static VertexIterator vBegin(int level)
Get a VertexIterator.
Codim< dimension >::SubEntityIterator VertexIterator
The VertexIterator of the Refinement.
Definition base.cc:124
typedef CoordVector
The CoordVector of the Refinement.
Definition base.cc:133
static int nVertices(int level)
Get the number of Vertices.
typedef IndexVector
The IndexVector of the Refinement.
Definition base.cc:140
RefinementImp::Traits< topologyId, CoordType, coerceToId, dimension_ >::Imp RefinementImp
Definition base.cc:156
static int nElements(int level)
Get the number of Elements.
The Codim struct inherited from the Refinement implementation.
Definition base.cc:114
typedef SubEntityIterator
The SubEntityIterator for each codim.
Definition base.cc:120