dune-geometry 2.9.1
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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file LICENSE.md in module root
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
5#ifndef DUNE_GEOMETRY_REFINEMENT_BASE_CC
6#define DUNE_GEOMETRY_REFINEMENT_BASE_CC
7
15#include <dune/geometry/type.hh>
16
17namespace Dune
18{
28 namespace RefinementImp
29 {
30 // /////////////////////////////////
31 //
32 // Declaration of RefinementImp::Traits
33 //
34
35#ifdef DOXYGEN
36 // This is just for Doxygen
67 template<unsigned topologyId, class CoordType,
68 unsigned coerceToId, int dimension, class Dummy = void>
69 struct Traits
70 {
72 typedef SquaringTheCircle::Refinement Imp;
73 };
74
75#else // !DOXYGEN
76
77 // Doxygen won't see this
78
79 template<unsigned topologyId, class CoordType,
80 unsigned coerceToId, int dimension, class = void>
81 struct Traits;
82
83#endif // !DOXYGEN
84 } // namespace RefinementImp
85
86
95 int intervals_=1;
96
97 public:
98 explicit RefinementIntervals(int i) : intervals_(i) {}
99
100 int intervals() const { return intervals_; }
101 };
102
109 {
110 return RefinementIntervals{intervals};
111 }
118 {
119 return RefinementIntervals{1<<levels};
120 }
121
122 // ///////////////
123 //
124 // Static Refinement
125 //
126
136 template<unsigned topologyId, class CoordType,
137 unsigned coerceToId, int dimension_>
139 : public RefinementImp::Traits<topologyId, CoordType,
140 coerceToId, dimension_ >::Imp
141 {
142 public:
143#ifdef DOXYGEN
149 template<int codimension>
150 struct Codim
151 {
158 };
159
164
170 typedef CoordVector;
171
177 typedef IndexVector;
178#endif
179
180 typedef typename RefinementImp::Traits< topologyId, CoordType, coerceToId, dimension_>::Imp RefinementImp;
181
182 using RefinementImp::dimension;
183
184 using RefinementImp::Codim;
185
186 using typename RefinementImp::VertexIterator;
187 using typename RefinementImp::CoordVector;
188
189 using typename RefinementImp::ElementIterator;
190 using typename RefinementImp::IndexVector;
191
198 {
199 return RefinementImp::nVertices(tag.intervals());
200 }
201
208 {
209 return RefinementImp::vBegin(tag.intervals());
210 }
211
218 {
219 return RefinementImp::vEnd(tag.intervals());
220 }
221
228 {
229 return RefinementImp::nElements(tag.intervals());
230 }
231
238 {
239 return RefinementImp::eBegin(tag.intervals());
240 }
241
248 {
249 return RefinementImp::eEnd(tag.intervals());
250 }
251 };
252
254} // namespace Dune
255
256#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:108
RefinementIntervals refinementLevels(int levels)
Creates a RefinementIntervals object.
Definition base.cc:117
Definition affinegeometry.hh:21
Mapping from geometryType, CoordType and coerceTo to a particular Refinement implementation.
Definition base.cc:70
Holds the number of refined intervals per axis needed for virtual and static refinement.
Definition base.cc:94
RefinementIntervals(int i)
Definition base.cc:98
int intervals() const
Definition base.cc:100
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
Codim< 0 >::SubEntityIterator ElementIterator
The ElementIterator of the Refinement.
Definition base.cc:163
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
Codim< dimension >::SubEntityIterator VertexIterator
The VertexIterator of the Refinement.
Definition base.cc:161
typedef CoordVector
The CoordVector of the Refinement.
Definition base.cc:170
typedef IndexVector
The IndexVector of the Refinement.
Definition base.cc:177
RefinementImp::Traits< topologyId, CoordType, coerceToId, dimension_ >::Imp RefinementImp
Definition base.cc:180
static VertexIterator vEnd(Dune::RefinementIntervals tag)
Get a VertexIterator.
Definition base.cc:217
The Codim struct inherited from the Refinement implementation.
Definition base.cc:151
typedef SubEntityIterator
The SubEntityIterator for each codim.
Definition base.cc:157