7#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH
8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH
13#include <dune/common/copyableoptional.hh>
14#include <dune/common/typeutilities.hh>
29template<
class Signature,
class GV,
class FLocal,
template<
class>
class DerivativeTraits=DefaultDerivativeTraits>
30class LocalAnalyticGridViewFunction;
32template<
class Range,
class LocalDomain,
class GV,
class F,
template<
class>
class DerivativeTraits>
33class LocalAnalyticGridViewFunction<Range(LocalDomain), GV, F, DerivativeTraits>
36 using Signature = Range(LocalDomain);
37 using RawSignature =
typename SignatureTraits<Signature>::RawSignature;
38 using DerivativeSignature =
typename DerivativeTraits<RawSignature>::Range(LocalDomain);
41 using EntitySet = GridViewEntitySet<GridView, 0>;
42 using Element =
typename EntitySet::Element;
44 using Geometry = std::decay_t<typename Element::Geometry>;
50 using DerivativeDummy = DifferentiableFunction<DerivativeSignature>;
51 using GlobalRawDerivative =
decltype(Imp::derivativeIfImplemented<DerivativeDummy, F>(std::declval<F>()));
52 using LocalDerivative = LocalAnalyticGridViewFunction<DerivativeSignature, GridView, GlobalRawDerivative, DerivativeTraits>;
55 template<
class FT, disableCopyMove<LocalAnalyticGr
idViewFunction, FT> = 0>
56 LocalAnalyticGridViewFunction(FT&& f) :
57 f_(std::forward<FT>(f))
62 LocalAnalyticGridViewFunction(FT&& f,
const Element& element,
const std::optional<Geometry>& geometry) :
63 f_(std::forward<FT>(f)),
77 void bind(
const Element& element)
80 geometry_.emplace(element_.geometry());
93 return static_cast<bool>(geometry_);
105 Range operator()(
const LocalDomain& x)
const
108 return (*f_)(geometry_->global(x));
112 const Element& localContext()
const
126 friend LocalDerivative
derivative(
const LocalAnalyticGridViewFunction& t)
128 return LocalDerivative(Imp::derivativeIfImplemented<DerivativeDummy, F>(*t.f_), t.element_, t.geometry_);
133 CopyableOptional<F> f_;
135 std::optional<Geometry> geometry_ = std::nullopt;
143template<
class Signature,
class GV,
class F,
template<
class>
class DerivativeTraits=DefaultDerivativeTraits>
152template<
class Range,
class Domain,
class GV,
class F,
template<
class>
class DerivativeTraits>
170 using GlobalRawDerivative =
decltype(Imp::derivativeIfImplemented<DerivativeDummy, F>(std::declval<F>()));
179 f_(std::forward<FT>(f)),
192 return Derivative(Imp::derivativeIfImplemented<DerivativeDummy, F>(*t.f_), t.entitySet_.gridView());
209 CopyableOptional<F> f_;
210 EntitySet entitySet_;
214template<
class F,
class GridView,
215 class Domain =
typename GridView::template Codim<0>::Geometry::GlobalCoordinate,
216 class Range = std::invoke_result_t<F,Domain>>
237template<
class F,
class Gr
idView>
240 using Domain =
typename GridView::template Codim<0>::Geometry::GlobalCoordinate;
241 using Range = std::invoke_result_t<F, Domain>;
242 using FRaw = std::decay_t<F>;
TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const TrigonometricFunction< K, sinFactor, cosFactor > &f)
Obtain derivative of TrigonometricFunction function.
Definition trigonometricfunction.hh:43
auto makeAnalyticGridViewFunction(F &&f, const GridView &gridView)
Create an AnalyticGridViewFunction from a function and a grid view.
Definition analyticgridviewfunction.hh:238
Definition polynomial.hh:17
Definition differentiablefunction.hh:33
Helper class to deduce the signature of a callable.
Definition signature.hh:60
Definition analyticgridviewfunction.hh:144
Range operator()(const Domain &x) const
Evaluate the wrapped function f directly in global coordinates x.
Definition analyticgridviewfunction.hh:184
typename EntitySet::LocalCoordinate LocalDomain
Definition analyticgridviewfunction.hh:173
friend Derivative derivative(const AnalyticGridViewFunction &t)
Create a derivative grid-function by wrapping the derivative of f.
Definition analyticgridviewfunction.hh:190
typename Element::Geometry Geometry
Definition analyticgridviewfunction.hh:163
typename EntitySet::Element Element
Definition analyticgridviewfunction.hh:162
GV GridView
Definition analyticgridviewfunction.hh:160
decltype(Imp::derivativeIfImplemented< DerivativeDummy, F >(std::declval< F >())) GlobalRawDerivative
Definition analyticgridviewfunction.hh:170
Range(Domain) Signature
Definition analyticgridviewfunction.hh:156
AnalyticGridViewFunction(FT &&f, const GridView &gridView)
Create the grid-function by wrapping a function f and create a GridViewEntitySet.
Definition analyticgridviewfunction.hh:178
friend LocalFunction localFunction(const AnalyticGridViewFunction &t)
Construct the associated local-function.
Definition analyticgridviewfunction.hh:196
typename Imp::LocalAnalyticGridViewFunction< Range(LocalDomain), GridView, F, LocalDerivativeTraits< EntitySet, DerivativeTraits >::template Traits > LocalFunction
Definition analyticgridviewfunction.hh:174
typename SignatureTraits< Signature >::RawSignature RawSignature
Definition analyticgridviewfunction.hh:157
const EntitySet & entitySet() const
Return the set of entities this local-function can be bound to.
Definition analyticgridviewfunction.hh:202
typename DerivativeTraits< RawSignature >::Range(Domain) DerivativeSignature
Definition analyticgridviewfunction.hh:158
GridView::template Codim< codim >::Entity Element
Type of Elements contained in this EntitySet.
Definition gridviewentityset.hh:36
Element::Geometry::LocalCoordinate LocalCoordinate
Type of local coordinates with respect to the Element.
Definition gridviewentityset.hh:39
Derivative traits for local functions.
Definition localderivativetraits.hh:32