6 #include <dune/functions/common/signature.hh> 7 #include <dune/functions/gridfunctions/gridviewentityset.hh> 9 #include <amdis/Operations.hpp> 10 #include <amdis/common/DerivativeTraits.hpp> 11 #include <amdis/common/Order.hpp> 12 #include <amdis/gridfunctions/GridFunction.hpp> 17 template <
class Signature,
class LocalContext,
class Function>
21 template <
class R,
class D,
class LC,
class Function>
32 enum { hasDerivative =
true };
35 using Geometry =
typename LC::Geometry;
44 void bind(LC
const& element)
46 geometry_.emplace(element.geometry());
59 assert(
bool(geometry_) );
60 return fct_(geometry_.value().global(local));
63 Function
const& fct()
const 70 std::optional<Geometry> geometry_;
84 template <
class Sig,
class LC,
class F,
85 REQUIRES(Concepts::HasFunctorOrder<F,1>)>
88 return order(lf.fct(),1);
102 template <
class R,
class D,
class LC,
class F,
class Type>
105 static_assert(Concepts::HasDerivative<F,Type>,
106 "No derivative(F,DerivativeType) defined for Functor F of AnalyticLocalFunction.");
108 auto df = derivativeOf(lf.fct(), type);
110 using RawSignature =
typename Dune::Functions::SignatureTraits<R(D)>::RawSignature;
127 template <
class Function,
class Gr
idView>
131 using EntitySet = Dune::Functions::GridViewEntitySet<GridView, 0>;
132 using Domain =
typename EntitySet::GlobalCoordinate;
133 using Range = remove_cvref_t<std::result_of_t<Function(Domain)>>;
135 enum { hasDerivative =
true };
138 using Element =
typename EntitySet::Element;
139 using LocalDomain =
typename EntitySet::LocalCoordinate;
146 , entitySet_{gridView}
168 Function
const&
fct()
const {
return fct_; }
172 EntitySet entitySet_;
184 template <
class F,
class GV,
class Type>
187 static_assert(Concepts::HasDerivative<F,Type>,
188 "No derivative(F,DerivativeType) defined for Functor of AnalyticLocalFunction.");
190 auto df = derivativeOf(gf.
fct(), type);
197 template <
class Function>
204 template <
class Gr
idView>
205 static auto create(
Self const&
self, GridView
const& gridView)
207 using Coordinate =
typename GridView::template Codim<0>::Entity::Geometry::GlobalCoordinate;
208 static_assert(std::is_invocable_v<Function, Coordinate>);
219 template <
class Functor>
237 template <
class Function>
238 auto evalAtQP(Function
const& f)
Range operator()(Domain const &local) const
Evaluate the function in global coordinate by a local-to-global mapping of the local coordinates usin...
Definition: AnalyticGridFunction.hpp:57
AnalyticLocalFunction(Function const &fct)
Constructor. stores the function fct.
Definition: AnalyticGridFunction.hpp:39
Definition: GridFunction.hpp:26
D Domain
The LocalDomain this LocalFunction can be evaluated in.
Definition: AnalyticGridFunction.hpp:26
EntitySet const & entitySet() const
Returns entitySet_.
Definition: AnalyticGridFunction.hpp:162
Definition: AnalyticGridFunction.hpp:202
constexpr bool Functor
A Functor is a function F with signature Signature.
Definition: Concepts.hpp:134
Definition: AnalyticGridFunction.hpp:18
Range operator()(Domain const &x) const
Return the evaluated functor at global coordinates.
Definition: AnalyticGridFunction.hpp:150
Definition: AdaptBase.hpp:6
Function const & fct() const
Returns fct_.
Definition: AnalyticGridFunction.hpp:168
void unbind()
Releases the geometry object.
Definition: AnalyticGridFunction.hpp:50
R Range
The range type of the LocalFunction.
Definition: AnalyticGridFunction.hpp:29
void bind(LC const &element)
Create a geometry object from the element.
Definition: AnalyticGridFunction.hpp:44
friend LocalFunction localFunction(AnalyticGridFunction const &gf)
Return the AnalyticLocalFunction of the AnalyticGridFunction.
Definition: AnalyticGridFunction.hpp:156
A Gridfunction that evaluates a function with global coordinates.
Definition: AnalyticGridFunction.hpp:128
Definition: AnalyticGridFunction.hpp:198
Definition: DerivativeTraits.hpp:29
AnalyticGridFunction(Function const &fct, GridView const &gridView)
Constructor. Stores the function fct and creates an EntitySet.
Definition: AnalyticGridFunction.hpp:144
int order(AnalyticLocalFunction< Sig, LC, F > const &lf)
Definition: AnalyticGridFunction.hpp:86