Go to the documentation of this file.
3 #ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH
4 #define DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH
8 #include <dune/common/std/optional.hh>
9 #include <dune/common/typeutilities.hh>
24 template<
class Signature,
class GV,
class FLocal,
template<
class>
class DerivativeTraits=DefaultDerivativeTraits>
25 class LocalAnalyticGridViewFunction;
27 template<
class Range,
class LocalDomain,
class GV,
class F,
template<
class>
class DerivativeTraits>
28 class LocalAnalyticGridViewFunction<Range(LocalDomain), GV, F, DerivativeTraits>
31 using Signature = Range(LocalDomain);
32 using RawSignature =
typename SignatureTraits<Signature>::RawSignature;
33 using DerivativeSignature =
typename DerivativeTraits<RawSignature>::Range(LocalDomain);
36 using EntitySet = GridViewEntitySet<GridView, 0>;
37 using Element =
typename EntitySet::Element;
39 using Geometry =
typename std::decay<typename Element::Geometry>::type;
45 using DerivativeDummy = DifferentiableFunction<DerivativeSignature>;
46 using GlobalRawDerivative = decltype(Imp::derivativeIfImplemented<DerivativeDummy, F>(std::declval<F>()));
47 using LocalDerivative = LocalAnalyticGridViewFunction<DerivativeSignature, GridView, GlobalRawDerivative, DerivativeTraits>;
49 template<
class FT, disableCopyMove<LocalAnalyticGr
idViewFunction, FT> = 0>
50 LocalAnalyticGridViewFunction(FT&& f) :
51 f_(std::forward<FT>(f))
55 void bind(
const Element& element)
66 geometry_.emplace(element_.geometry());
72 Range operator()(
const LocalDomain& x)
const
74 return f_(geometry_.value().global(x));
77 const Element& localContext()
const
82 friend LocalDerivative
derivative(
const LocalAnalyticGridViewFunction& t)
84 return LocalDerivative(Imp::derivativeIfImplemented<DerivativeDummy, F>(t.f_));
90 Std::optional<Geometry> geometry_;
101 template<
class Signature,
class GV,
class F,
template<
class>
class DerivativeTraits=DefaultDerivativeTraits>
110 template<
class Range,
class Domain,
class GV,
class F,
template<
class>
class DerivativeTraits>
128 using GlobalRawDerivative = decltype(Imp::derivativeIfImplemented<DerivativeDummy, F>(std::declval<F>()));
136 f_(std::forward<FT>(f)),
147 return Derivative(Imp::derivativeIfImplemented<DerivativeDummy, F>(t.f_), t.entitySet_.gridView());
162 EntitySet entitySet_;
178 template<
class F,
class Gr
idView>
179 AnalyticGridViewFunction<
180 typename std::result_of<F(
typename GridView::template Codim<0>::Geometry::GlobalCoordinate)>::type
181 (
typename GridView::template Codim<0>::Geometry::GlobalCoordinate),
183 typename std::decay<F>::type >
186 using Domain =
typename GridView::template Codim<0>::Geometry::GlobalCoordinate;
187 using Range =
typename std::result_of<F(Domain)>::type;
188 using FRaw =
typename std::decay<F>::type;
199 #endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH
typename DerivativeTraits< RawSignature >::Range(Domain) DerivativeSignature
Definition: analyticgridviewfunction.hh:116
typename EntitySet::LocalCoordinate LocalDomain
Definition: analyticgridviewfunction.hh:131
Definition: polynomial.hh:7
GridView::template Codim< codim >::Entity Element
Type of Elements contained in this EntitySet.
Definition: gridviewentityset.hh:32
decltype(Imp::derivativeIfImplemented< DerivativeDummy, F >(std::declval< F >())) GlobalRawDerivative
Definition: analyticgridviewfunction.hh:128
GV GridView
Definition: analyticgridviewfunction.hh:118
friend Derivative derivative(const AnalyticGridViewFunction &t)
Definition: analyticgridviewfunction.hh:145
const EntitySet & entitySet() const
Definition: analyticgridviewfunction.hh:155
Helper class to deduce the signature of a callable.
Definition: signature.hh:60
Definition: analyticgridviewfunction.hh:102
Range operator()(const Domain &x) const
Definition: analyticgridviewfunction.hh:140
typename SignatureTraits< Signature >::RawSignature RawSignature
Definition: analyticgridviewfunction.hh:115
friend LocalFunction localFunction(const AnalyticGridViewFunction &t)
Definition: analyticgridviewfunction.hh:150
TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const TrigonometricFunction< K, sinFactor, cosFactor > &f)
Obtain derivative of TrigonometricFunction function.
Definition: trigonometricfunction.hh:38
AnalyticGridViewFunction(FT &&f, const GridView &gridView)
Definition: analyticgridviewfunction.hh:135
Range(Domain) Signature
Definition: analyticgridviewfunction.hh:114
Element::Geometry::LocalCoordinate LocalCoordinate
Type of local coordinates with respect to the Element.
Definition: gridviewentityset.hh:35
Definition: differentiablefunction.hh:28
typename Element::Geometry Geometry
Definition: analyticgridviewfunction.hh:121
typename EntitySet::Element Element
Definition: analyticgridviewfunction.hh:120
typename Imp::LocalAnalyticGridViewFunction< Range(LocalDomain), GridView, F, LocalDerivativeTraits< EntitySet, DerivativeTraits >::template Traits > LocalFunction
Definition: analyticgridviewfunction.hh:132
Derivative traits for local functions.
Definition: localderivativetraits.hh:27
AnalyticGridViewFunction< typename std::result_of< F(typename GridView::template Codim< 0 >::Geometry::GlobalCoordinate)>::type(typename GridView::template Codim< 0 >::Geometry::GlobalCoordinate), GridView, typename std::decay< F >::type > makeAnalyticGridViewFunction(F &&f, const GridView &gridView)
Construct AnalyticGridViewFunction from function and grid view.
Definition: analyticgridviewfunction.hh:184