5 #ifndef DUNE_GEOGRID_COORDFUNCTION_HH 6 #define DUNE_GEOGRID_COORDFUNCTION_HH 10 #include <dune/common/fvector.hh> 11 #include <dune/common/std/type_traits.hh> 19 template<
class ct,
unsigned int dimD,
unsigned int dimR,
class Impl >
22 template<
class ct,
unsigned int dimR,
class Impl >
42 template<
class ct,
unsigned int dimD,
unsigned int dimR,
class Impl >
71 This &operator= (
const This & ) =
default;
72 This &operator= (
This && ) =
default;
75 template<
typename F,
typename DV>
76 using has_operator_parentheses = decltype(std::declval<F>()(std::declval<DV>()));
89 Std::is_detected<has_operator_parentheses,Impl,DV>::value
98 not Std::is_detected<has_operator_parentheses,Impl,DV>::value
105 "You need to implement either operator() or evaluate() in your coordinate function!");
106 asImp().evaluate( x, y );
131 template<
class ct,
unsigned int dimD,
unsigned int dimR,
class Impl >
132 class AnalyticalCoordFunction
133 :
public AnalyticalCoordFunctionInterface< ct, dimD, dimR, Impl >
135 typedef AnalyticalCoordFunction< ct, dimD, dimR, Impl > This;
136 typedef AnalyticalCoordFunctionInterface< ct, dimD, dimR, Impl > Base;
173 template<
class ct,
unsigned int dimR,
class Impl >
198 This &operator= (
const This & ) =
default;
199 This &operator= (
This && ) =
default;
210 template<
class HostEntity >
211 void evaluate (
const HostEntity &hostEntity,
unsigned int corner,
214 asImp().evaluate( hostEntity, corner, y );
245 template<
class ct,
unsigned int dimR,
class Impl >
246 class DiscreteCoordFunction
247 :
public DiscreteCoordFunctionInterface< ct, dimR, Impl >
249 typedef DiscreteCoordFunction< ct, dimR, Impl > This;
250 typedef DiscreteCoordFunctionInterface< ct, dimR, Impl > Base;
267 template<
class HostEntity >
268 void evaluate (
const HostEntity &hostEntity,
unsigned int corner,
280 template<
class CoordFunctionInterface >
286 template<
class ct,
unsigned int dimD,
unsigned int dimR,
class Impl >
290 static const bool value =
true;
293 template<
class ct,
unsigned int dimR,
class Impl >
294 struct isCoordFunctionInterface
297 static const bool value =
true;
305 template<
class CoordFunctionInterface >
311 template<
class ct,
unsigned int dimR,
class Impl >
315 static const bool value =
true;
323 template<
class CoordFunctionInterface >
326 static void adapt ( CoordFunctionInterface & )
330 template<
class ct,
unsigned int dimR,
class Impl >
335 static void adapt ( CoordFunctionInterface &coordFunction )
337 coordFunction.adapt();
345 #endif // #ifndef DUNE_GEOGRID_COORDFUNCTION_HH DiscreteCoordFunction()=default
Definition: coordfunction.hh:281
Derive an implementation of a discrete coordinate function from this class.
Definition: coordfunction.hh:23
ct ctype
field type of the coordinate vector
Definition: coordfunction.hh:185
~AnalyticalCoordFunction()=default
static const unsigned int dimRange
dimension of the range vector
Definition: coordfunction.hh:59
This & operator=(const This &)=default
Definition: coordfunction.hh:324
AnalyticalCoordFunction()=default
Implementation & asImp()
Definition: coordfunction.hh:118
ct ctype
field type of the coordinate vector
Definition: coordfunction.hh:54
Base ::DomainVector DomainVector
Definition: coordfunction.hh:139
void adapt()
Definition: coordfunction.hh:263
const Implementation & asImp() const
Definition: coordfunction.hh:226
Base ::RangeVector RangeVector
Definition: coordfunction.hh:140
static const bool value
Definition: coordfunction.hh:283
static const bool value
Definition: coordfunction.hh:308
Implementation & asImp()
Definition: coordfunction.hh:231
const Implementation & asImp() const
Definition: coordfunction.hh:113
This Interface
Definition: coordfunction.hh:181
static void adapt(CoordFunctionInterface &)
Definition: coordfunction.hh:326
FieldVector< ctype, dimRange > RangeVector
range vector for the evaluate method
Definition: coordfunction.hh:191
Interface class for using a discrete function to define the geometry of a Dune::GeometryGrid. An implementation should be derived from Dune::DiscreteCoordinateFunction and the evaluate method taking an entity of the host grid together with the number of a vertex returns the coordinate in of that corner. The user must ensure continuity of this mapping. In addition an adapt method is provided which is called whenever adapt() is called on the Dune::GeometryGrid.
Definition: coordfunction.hh:174
void evaluate(const HostEntity &hostEntity, unsigned int corner, RangeVector &y) const
evaluate method
Definition: coordfunction.hh:211
Include standard header files.
Definition: agrid.hh:59
FieldVector< ctype, dimDomain > DomainVector
domain vector for the evaluate method
Definition: coordfunction.hh:62
Impl Implementation
Definition: coordfunction.hh:182
static const unsigned int dimDomain
dimension of the range vector (dimensionworld of host grid)
Definition: coordfunction.hh:57
~DiscreteCoordFunction()=default
Base ::RangeVector RangeVector
Definition: coordfunction.hh:253
Derive an implementation of an analytical coordinate function from this class.
Definition: coordfunction.hh:20
void evaluate(const DomainVector &x, RangeVector &y) const
evaluate method for global mapping
Definition: dgfgeogrid.hh:43
static const unsigned int dimRange
dimension of the range vector
Definition: coordfunction.hh:188
FieldVector< ctype, dimRange > RangeVector
range vector for the evaluate method
Definition: coordfunction.hh:64
Impl Implementation
Definition: coordfunction.hh:51
This Interface
Definition: coordfunction.hh:50
void adapt()
method called from grid.adapt() method to allow adaptation of the discrete coordinate function ...
Definition: coordfunction.hh:220
Interface class for using an analytical function to define the geometry of a Dune::GeometryGrid. An implementation should be derived from Dune::AnalyticalCoordFunction and the evaluate method mapping has to be supplied.
Definition: coordfunction.hh:43
This & operator=(const This &)=default
Definition: cachedcoordfunction.hh:26
Definition: coordfunction.hh:306