dune-grid 3.0-git
coordfunction.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_GEOGRID_COORDFUNCTION_HH
4#define DUNE_GEOGRID_COORDFUNCTION_HH
5
6#include <dune/common/fvector.hh>
7
8namespace Dune
9{
10
11 // Internal Forward Declarations
12 // -----------------------------
13
14 template< class ct, unsigned int dimD, unsigned int dimR, class Impl >
15 class AnalyticalCoordFunction;
16
17 template< class ct, unsigned int dimR, class Impl >
18 class DiscreteCoordFunction;
19
20
21
22 // AnalyticalCoordFunctionInterface
23 // --------------------------------
24
37 template< class ct, unsigned int dimD, unsigned int dimR, class Impl >
39 {
41
42 friend class AnalyticalCoordFunction< ct, dimD, dimR, Impl >;
43
44 public:
45 typedef This Interface;
46 typedef Impl Implementation;
47
49 typedef ct ctype;
50
52 static const unsigned int dimDomain = dimD;
54 static const unsigned int dimRange = dimR;
55
57 typedef FieldVector< ctype, dimDomain > DomainVector;
59 typedef FieldVector< ctype, dimRange > RangeVector;
60
61 private:
63 AnalyticalCoordFunctionInterface ( const This & ) = default;
66 This &operator= ( const This & ) = default;
67 This &operator= ( This && ) = default;
68
69 public:
71 void evaluate ( const DomainVector &x, RangeVector &y ) const
72 {
73 return asImp().evaluate( x, y );
74 }
75
76 protected:
77 const Implementation &asImp () const
78 {
79 return static_cast< const Implementation & >( *this );
80 }
81
83 {
84 return static_cast< Implementation & >( *this );
85 }
86 };
87
88
89
90 // AnalyticalCoordFunction
91 // -----------------------
95 template< class ct, unsigned int dimD, unsigned int dimR, class Impl >
97 : public AnalyticalCoordFunctionInterface< ct, dimD, dimR, Impl >
98 {
101
102 public:
103 typedef typename Base :: DomainVector DomainVector;
104 typedef typename Base :: RangeVector RangeVector;
105
106 protected:
108 AnalyticalCoordFunction ( const This & ) = default;
111 This &operator= ( const This & ) = default;
112 This &operator= ( This && ) = default;
113
114 private:
115 void evaluate ( const DomainVector &x, RangeVector &y ) const;
116 };
117
118
119
120 // DiscreteCoordFunctionInterface
121 // ------------------------------
122
137 template< class ct, unsigned int dimR, class Impl >
139 {
141
142 friend class DiscreteCoordFunction< ct, dimR, Impl >;
143
144 public:
146 typedef Impl Implementation;
147
149 typedef ct ctype;
150
152 static const unsigned int dimRange = dimR;
153
155 typedef FieldVector< ctype, dimRange > RangeVector;
156
157 private:
159 DiscreteCoordFunctionInterface ( const This & ) = default;
160 DiscreteCoordFunctionInterface ( This && ) = default;
162 This &operator= ( const This & ) = default;
163 This &operator= ( This && ) = default;
164
165 public:
171 template< class HostEntity >
172 void evaluate ( const HostEntity &hostEntity, unsigned int corner,
173 RangeVector &y ) const
174 {
175 asImp().evaluate( hostEntity, corner, y );
176 }
177
181 void adapt ()
182 {
183 asImp().adapt();
184 }
185
186// protected:
187 const Implementation &asImp () const
188 {
189 return static_cast< const Implementation & >( *this );
190 }
191
193 {
194 return static_cast< Implementation & >( *this );
195 }
196 };
197
198
199
200 // DiscreteCoordFunction
201 // ---------------------
202 //
206 template< class ct, unsigned int dimR, class Impl >
208 : public DiscreteCoordFunctionInterface< ct, dimR, Impl >
209 {
212
213 public:
214 typedef typename Base :: RangeVector RangeVector;
215
216 //protected:
218 DiscreteCoordFunction ( const This & ) = default;
219 DiscreteCoordFunction ( This && ) = default;
221 This &operator= ( const This & ) = default;
222 This &operator= ( This && ) = default;
223
224 void adapt ()
225 {}
226
227 private:
228 template< class HostEntity >
229 void evaluate ( const HostEntity &hostEntity, unsigned int corner,
230 RangeVector &y ) const;
231 };
232
233
234
235 namespace GeoGrid
236 {
237
238 // isCoordFunctionInterface
239 // ------------------------
240
241 template< class CoordFunctionInterface >
242 struct isCoordFunctionInterface
243 {
244 static const bool value = false;
245 };
246
247 template< class ct, unsigned int dimD, unsigned int dimR, class Impl >
248 struct isCoordFunctionInterface
249 < AnalyticalCoordFunctionInterface< ct, dimD, dimR, Impl > >
250 {
251 static const bool value = true;
252 };
253
254 template< class ct, unsigned int dimR, class Impl >
255 struct isCoordFunctionInterface
256 < DiscreteCoordFunctionInterface< ct, dimR, Impl > >
257 {
258 static const bool value = true;
259 };
260
261
262
263 // isDiscreteCoordFunctionInterface
264 // --------------------------------
265
266 template< class CoordFunctionInterface >
267 struct isDiscreteCoordFunctionInterface
268 {
269 static const bool value = false;
270 };
271
272 template< class ct, unsigned int dimR, class Impl >
273 struct isDiscreteCoordFunctionInterface
274 < DiscreteCoordFunctionInterface< ct, dimR, Impl > >
275 {
276 static const bool value = true;
277 };
278
279
280
281 // AdaptCoordFunction
282 // ------------------
283
284 template< class CoordFunctionInterface >
285 struct AdaptCoordFunction
286 {
287 static void adapt ( CoordFunctionInterface &coordFunction )
288 {}
289 };
290
291 template< class ct, unsigned int dimR, class Impl >
292 struct AdaptCoordFunction< DiscreteCoordFunctionInterface< ct, dimR, Impl > >
293 {
294 typedef DiscreteCoordFunctionInterface< ct, dimR, Impl > CoordFunctionInterface;
295
296 static void adapt ( CoordFunctionInterface &coordFunction )
297 {
298 coordFunction.adapt();
299 }
300 };
301
302 } // namespace GeoGrid
303
304} // namespace Dune
305
306#endif // #ifndef DUNE_GEOGRID_COORDFUNCTION_HH
Include standard header files.
Definition agrid.hh:60
Derive an implementation of an analytical coordinate function from this class.
Definition coordfunction.hh:98
Base::DomainVector DomainVector
Definition coordfunction.hh:103
AnalyticalCoordFunction(This &&)=default
Base::RangeVector RangeVector
Definition coordfunction.hh:104
This & operator=(const This &)=default
AnalyticalCoordFunction(const This &)=default
Derive an implementation of a discrete coordinate function from this class.
Definition coordfunction.hh:209
This & operator=(const This &)=default
void adapt()
Definition coordfunction.hh:224
DiscreteCoordFunction(This &&)=default
DiscreteCoordFunction(const This &)=default
Base::RangeVector RangeVector
Definition coordfunction.hh:214
Interface class for using an analytical function to define the geometry of a Dune::GeometryGrid....
Definition coordfunction.hh:39
Impl Implementation
Definition coordfunction.hh:46
FieldVector< ctype, dimRange > RangeVector
range vector for the evaluate method
Definition coordfunction.hh:59
void evaluate(const DomainVector &x, RangeVector &y) const
evaluate method for global mapping
Definition coordfunction.hh:71
static const unsigned int dimRange
dimension of the range vector
Definition coordfunction.hh:54
ct ctype
field type of the coordinate vector
Definition coordfunction.hh:49
static const unsigned int dimDomain
dimension of the range vector (dimensionworld of host grid)
Definition coordfunction.hh:52
const Implementation & asImp() const
Definition coordfunction.hh:77
This Interface
Definition coordfunction.hh:45
Implementation & asImp()
Definition coordfunction.hh:82
FieldVector< ctype, dimDomain > DomainVector
domain vector for the evaluate method
Definition coordfunction.hh:57
Interface class for using a discrete function to define the geometry of a Dune::GeometryGrid....
Definition coordfunction.hh:139
static const unsigned int dimRange
dimension of the range vector
Definition coordfunction.hh:152
void evaluate(const HostEntity &hostEntity, unsigned int corner, RangeVector &y) const
evaluate method
Definition coordfunction.hh:172
Implementation & asImp()
Definition coordfunction.hh:192
ct ctype
field type of the coordinate vector
Definition coordfunction.hh:149
void adapt()
method called from grid.adapt() method to allow adaptation of the discrete coordinate function
Definition coordfunction.hh:181
FieldVector< ctype, dimRange > RangeVector
range vector for the evaluate method
Definition coordfunction.hh:155
const Implementation & asImp() const
Definition coordfunction.hh:187
Impl Implementation
Definition coordfunction.hh:146
This Interface
Definition coordfunction.hh:145