5 #include <dune/grid/utility/hierarchicsearch.hh> 7 #include <amdis/common/Concepts.hpp> 8 #include <amdis/common/DerivativeTraits.hpp> 9 #include <amdis/gridfunctions/Derivative.hpp> 10 #include <amdis/gridfunctions/GridFunction.hpp> 16 template <
class LF,
class Sig>
17 struct CheckFunctorConcept
19 static_assert(Concepts::Functor<LF, Sig>,
"Derivative of LocalFunction can not be called as a functor.");
22 template <
class Traits>
23 struct CheckValidRange
25 static_assert(!std::is_same_v<typename Traits::Range, Dune::Functions::InvalidRange>,
"Invalid Range.");
43 template <
class Gr
idFunction,
class Type>
46 using GridFctRange =
typename GridFunction::Range;
47 using GridFctDomain =
typename GridFunction::Domain;
48 using RawSignature =
typename Dune::Functions::SignatureTraits<GridFctRange(GridFctDomain)>::RawSignature;
51 using LocalFunction = TYPEOF(
derivativeOf(localFunction(std::declval<GridFunction>()), std::declval<Type>()) ) ;
53 using LocalFctRange =
typename Traits::Range;
54 using LocalFctDomain =
typename GridFunction::EntitySet::LocalCoordinate;
56 CHECK_CONCEPT(Impl::CheckValidRange<Traits>);
57 CHECK_CONCEPT(Impl::CheckFunctorConcept<LocalFunction, LocalFctRange(LocalFctDomain)>);
59 enum { hasDerivative =
false };
63 using Range =
typename Traits::Range;
81 auto gv = entitySet().gridView();
83 using GridView = decltype(gv);
84 using Grid =
typename GridView::Grid;
85 using IS =
typename GridView::IndexSet;
87 Dune::HierarchicSearch<Grid,IS> hsearch{gv.grid(), gv.indexSet()};
89 auto element = hsearch.findEntity(x);
90 auto geometry = element.geometry();
91 auto localFct = makeLocalFunction();
92 localFct.bind(element);
93 return localFct(geometry.local(x));
105 return gridFct_.entitySet();
127 template <
class GridFct,
class Type,
128 class LocalFct = decltype( localFunction(std::declval<GridFct>()) ),
129 REQUIRES(not GridFct::hasDerivative)>
132 static_assert(Concepts::HasDerivative<LocalFct,Type>,
133 "derivativeOf(LocalFunction,type) not defined!");
139 template <
class Expr,
class Type>
146 template <
class Gr
idView>
147 static auto create(
Self const&
self, GridView
const& gridView)
159 template <
class Expr,
class Type>
178 template <
class Expr>
185 template <
class Expr>
192 template <
class Expr>
constexpr bool GridFunction
GridFunction GF is a Type that has LocalFunction and provides some typedefs for Domain, Range, and EntitySet.
Definition: GridFunction.hpp:72
auto divergenceOf(Expr const &expr)
Generates a Gridfunction representing the divergence of a vector-valued GridFunction.
Definition: DerivativeGridFunction.hpp:186
Definition: GridFunction.hpp:26
Definition: DerivativeTraits.hpp:22
decltype(auto) makeGridFunction(PreGridFct const &preGridFct, GridView const &gridView)
Generator for Gridfunctions from Expressions (PreGridfunctions)
Definition: GridFunction.hpp:154
Contains all classes needed for solving linear and non linear equation systems.
Definition: AdaptBase.hpp:6
EntitySet const & entitySet() const
Return the EntitySet of the GridFunction.
Definition: DerivativeGridFunction.hpp:103
auto partialDerivativeOf(Expr const &expr, std::size_t i)
Generates a Gridfunction representing the partial derivative of a GridFunction.
Definition: DerivativeGridFunction.hpp:193
auto gradientOf(Expr const &expr)
Definition: DerivativeGridFunction.hpp:179
typename Traits::Range Range
The Range of the derivative of the GridFunction.
Definition: DerivativeGridFunction.hpp:63
auto derivativeOf(AnalyticLocalFunction< R(D), LC, F > const &lf, Type const &type)
Definition: AnalyticGridFunction.hpp:103
A Gridfunction that returns the derivative when calling localFunction.
Definition: DerivativeGridFunction.hpp:44
Definition: DerivativeTraits.hpp:29
Definition: DerivativeGridFunction.hpp:140
GridFctDomain Domain
The domain of the GridFunction.
Definition: DerivativeGridFunction.hpp:66
LocalFunction makeLocalFunction() const
Return the derivative-localFunction of the GridFunction.
Definition: DerivativeGridFunction.hpp:97
DerivativeGridFunction(GridFunction const &gridFct, Type const &type)
Constructor. Stores a copy of gridFct.
Definition: DerivativeGridFunction.hpp:73
Range operator()(Domain const &x) const
Evaluate derivative in global coordinates. NOTE: expensive.
Definition: DerivativeGridFunction.hpp:79
Definition: DerivativeGridFunction.hpp:144
typename GridFunction::EntitySet EntitySet
The EntitySet of the GridFunction.
Definition: DerivativeGridFunction.hpp:69