dune-geometry 2.8.0
Loading...
Searching...
No Matches
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>
14
15namespace Dune
16{
26 namespace RefinementImp
27 {
28 // /////////////////////////////////
29 //
30 // Declaration of RefinementImp::Traits
31 //
32
33#ifdef DOXYGEN
34 // This is just for Doxygen
65 template<unsigned topologyId, class CoordType,
66 unsigned coerceToId, int dimension, class Dummy = void>
67 struct Traits
68 {
70 typedef SquaringTheCircle::Refinement Imp;
71 };
72
73#else // !DOXYGEN
74
75 // Doxygen won't see this
76
77 template<unsigned topologyId, class CoordType,
78 unsigned coerceToId, int dimension, class = void>
79 struct Traits;
80
81#endif // !DOXYGEN
82 } // namespace RefinementImp
83
84
93 int intervals_=1;
94
95 public:
96 explicit RefinementIntervals(int i) : intervals_(i) {}
97
98 int intervals() const { return intervals_; }
99 };
100
107 {
108 return RefinementIntervals{intervals};
109 }
119
120 // ///////////////
121 //
122 // Static Refinement
123 //
124
134 template<unsigned topologyId, class CoordType,
135 unsigned coerceToId, int dimension_>
137 : public RefinementImp::Traits<topologyId, CoordType,
138 coerceToId, dimension_ >::Imp
139 {
140 public:
141#ifdef DOXYGEN
147 template<int codimension>
148 struct Codim
149 {
156 };
157
162
168 typedef CoordVector;
169
175 typedef IndexVector;
176#endif
177
178 typedef typename RefinementImp::Traits< topologyId, CoordType, coerceToId, dimension_>::Imp RefinementImp;
179
180 using RefinementImp::dimension;
181
182 using RefinementImp::Codim;
183
184 using typename RefinementImp::VertexIterator;
185 using typename RefinementImp::CoordVector;
186
187 using typename RefinementImp::ElementIterator;
188 using typename RefinementImp::IndexVector;
189
196 {
197 return RefinementImp::nVertices(tag.intervals());
198 }
199
206 {
207 return RefinementImp::vBegin(tag.intervals());
208 }
209
216 {
217 return RefinementImp::vEnd(tag.intervals());
218 }
219
226 {
227 return RefinementImp::nElements(tag.intervals());
228 }
229
236 {
237 return RefinementImp::eBegin(tag.intervals());
238 }
239
246 {
247 return RefinementImp::eEnd(tag.intervals());
248 }
249 };
250
252} // namespace Dune
253
254#endif // DUNE_GEOMETRY_REFINEMENT_BASE_CC
A unique label for each type of element that can occur in a grid.
RefinementIntervals refinementIntervals(int intervals)
Creates a RefinementIntervals object.
Definition base.cc:106
RefinementIntervals refinementLevels(int levels)
Creates a RefinementIntervals object.
Definition base.cc:115
Mapping from geometryType, CoordType and coerceTo to a particular Refinement implementation.
Definition base.cc:68
Holds the number of refined intervals per axis needed for virtual and static refinement.
Definition base.cc:92
RefinementIntervals(int i)
Definition base.cc:96
int intervals() const
Definition base.cc:98
Wrap each Refinement implementation to get a consistent interface.
Definition base.cc:139
static ElementIterator eEnd(Dune::RefinementIntervals tag)
Get an ElementIterator.
Definition base.cc:245
static ElementIterator eBegin(Dune::RefinementIntervals tag)
Get an ElementIterator.
Definition base.cc:235
static int nElements(Dune::RefinementIntervals tag)
Get the number of Elements.
Definition base.cc:225
Codim< 0 >::SubEntityIterator ElementIterator
The ElementIterator of the Refinement.
Definition base.cc:161
static int nVertices(Dune::RefinementIntervals tag)
Get the number of Vertices.
Definition base.cc:195
static VertexIterator vBegin(Dune::RefinementIntervals tag)
Get a VertexIterator.
Definition base.cc:205
Codim< dimension >::SubEntityIterator VertexIterator
The VertexIterator of the Refinement.
Definition base.cc:159
typedef CoordVector
The CoordVector of the Refinement.
Definition base.cc:168
typedef IndexVector
The IndexVector of the Refinement.
Definition base.cc:175
RefinementImp::Traits< topologyId, CoordType, coerceToId, dimension_ >::Imp RefinementImp
Definition base.cc:178
static VertexIterator vEnd(Dune::RefinementIntervals tag)
Get a VertexIterator.
Definition base.cc:215
The Codim struct inherited from the Refinement implementation.
Definition base.cc:149
typedef SubEntityIterator
The SubEntityIterator for each codim.
Definition base.cc:155