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>()));
132 using LocalFunction =
typename Imp::LocalAnalyticGridViewFunction<Range(LocalDomain), GridView, F, LocalDerivativeTraits<EntitySet, DerivativeTraits>::template Traits>;
136 f_(
std::forward<FT>(f)),
147 return Derivative(Imp::derivativeIfImplemented<DerivativeDummy, F>(t.f_), t.entitySet_.gridView());
178 template<
class F,
class Gr
idView>
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 friend Derivative derivative(const AnalyticGridViewFunction &t)
Definition: analyticgridviewfunction.hh:145
GridView::template Codim< codim >::Entity Element
Type of Elements contained in this EntitySet.
Definition: gridviewentityset.hh:32
Helper class to deduce the signature of a callable.
Definition: signature.hh:60
const EntitySet & entitySet() const
Definition: analyticgridviewfunction.hh:155
typename SignatureTraits< Signature >::RawSignature RawSignature
Definition: analyticgridviewfunction.hh:115
typename Imp::LocalAnalyticGridViewFunction< Range(LocalDomain), GridView, F, LocalDerivativeTraits< EntitySet, DerivativeTraits >::template Traits > LocalFunction
Definition: analyticgridviewfunction.hh:132
Definition: differentiablefunction.hh:28
TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const TrigonometricFunction< K, sinFactor, cosFactor > &f)
Obtain derivative of TrigonometricFunction function.
Definition: trigonometricfunction.hh:38
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
Definition: analyticgridviewfunction.hh:102
typename EntitySet::LocalCoordinate LocalDomain
Definition: analyticgridviewfunction.hh:131
Element::Geometry::LocalCoordinate LocalCoordinate
Type of local coordinates with respect to the Element.
Definition: gridviewentityset.hh:35
decltype(Imp::derivativeIfImplemented< DerivativeDummy, F >(std::declval< F >())) GlobalRawDerivative
Definition: analyticgridviewfunction.hh:128
Range(Domain) Signature
Definition: analyticgridviewfunction.hh:114
friend LocalFunction localFunction(const AnalyticGridViewFunction &t)
Definition: analyticgridviewfunction.hh:150
AnalyticGridViewFunction(FT &&f, const GridView &gridView)
Definition: analyticgridviewfunction.hh:135
GV GridView
Definition: analyticgridviewfunction.hh:118
typename Element::Geometry Geometry
Definition: analyticgridviewfunction.hh:121
Definition: polynomial.hh:7
typename DerivativeTraits< RawSignature >::Range(Domain) DerivativeSignature
Definition: analyticgridviewfunction.hh:116
Range operator()(const Domain &x) const
Definition: analyticgridviewfunction.hh:140
typename EntitySet::Element Element
Definition: analyticgridviewfunction.hh:120