7#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_COARSEFUNCTIONONFINEGRIDVIEW_HH
8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_COARSEFUNCTIONONFINEGRIDVIEW_HH
14#include <dune/common/referencehelper.hh>
39template<
class Gr
idFunction,
class GV,
template<
class>
class DerivativeTraits=Dune::Functions::DefaultDerivativeTraits>
42 using RawGridFunction = Dune::ResolveRef_t<GridFunction>;
44 auto&& rawFunction()
const
56 using Range = std::decay_t<decltype(std::declval<RawGridFunction>()(std::declval<Domain>()))>;
60 using CoarseEntitySet = std::decay_t<decltype(std::declval<RawGridFunction>().entitySet())>;
62 using Traits = Dune::Functions::Imp::GridFunctionTraits<
Range(
Domain),
EntitySet, DerivativeTraits, 56>;
64 class CoarseLocalFunctionOnFineGridView
66 using Traits =
typename CoarseFunctionOnFineGridView::Traits::LocalFunctionTraits;
71 using RawLocalFunction = std::decay_t<decltype(localFunction(std::declval<const RawGridFunction&>()))>;
78 CoarseLocalFunctionOnFineGridView(RawLocalFunction&&
localFunction,
const CoarseEntitySet& coarseEntitySet)
81 , coarseEntitySet_(coarseEntitySet)
82 , geometryInAncestor_()
90 CoarseLocalFunctionOnFineGridView(
92 const CoarseEntitySet& coarseEntitySet,
93 const GeometryInAncestor& geometryInAncestor,
94 const std::optional<Element>& element
98 , coarseEntitySet_(coarseEntitySet)
99 , geometryInAncestor_(geometryInAncestor, *element_)
103 void bind(
const Element& element)
106 geometryInAncestor_.
bind(*element_, [&](
const auto& e) {
return not coarseEntitySet_.contains(e); });
119 return static_cast<bool>(element_);
123 const Element& localContext()
const
129 friend auto derivative(
const CoarseLocalFunctionOnFineGridView& f)
131 if constexpr(
requires{
derivative(f.localFunction_); })
132 return Derivative(
derivative(f.localFunction_), f.coarseEntitySet_, f.geometryInAncestor_, f.element_);
134 return typename Traits::DerivativeInterface{};
140 return localFunction_(geometryInAncestor_.
global(x));
144 std::optional<Element> element_;
145 RawLocalFunction localFunction_;
146 const CoarseEntitySet& coarseEntitySet_;
147 GeometryInAncestor geometryInAncestor_;
185 if constexpr(
requires{
derivative(f.rawFunction()); })
187 using RawDerivative = std::decay_t<
decltype(
derivative(f.rawFunction()))>;
191 return typename Traits::DerivativeInterface{};
Definition monomialset.hh:19
A geometry embedding a descendent element into an ancestor.
Definition geometryinancestor.hh:39
GlobalCoordinate global(LocalCoordinate x) const
Map local coordinate in fine element into coarse element.
Definition geometryinancestor.hh:169
const Element & bind(const Element &fineElement, F &&includeFather)
Bind this GeometryInAncestor to a fine element and search coarse element.
Definition geometryinancestor.hh:119
const Element & coarseElement() const
Return the coarse element.
Definition geometryinancestor.hh:163
friend auto derivative(const CoarseFunctionOnFineGridView &f)
Obtain global derivative of this function.
Definition coarsefunctiononfinegridview.hh:183
Dune::Functions::GridViewEntitySet< GridView, 0 > EntitySet
Definition coarsefunctiononfinegridview.hh:52
Range operator()(const Domain &x) const
Evaluate function in global coordinates.
Definition coarsefunctiononfinegridview.hh:177
typename EntitySet::GlobalCoordinate Domain
Definition coarsefunctiononfinegridview.hh:54
CoarseFunctionOnFineGridView(GridFunction &&function, const GridView &gridView)
Create CoarseFunctionOnFineGridView from GridFunction and GridView.
Definition coarsefunctiononfinegridview.hh:171
const EntitySet & entitySet() const
Return the EntitySet associated to this GridViewFunction.
Definition coarsefunctiononfinegridview.hh:201
CoarseLocalFunctionOnFineGridView LocalFunction
Definition coarsefunctiononfinegridview.hh:152
typename EntitySet::Element Element
Definition coarsefunctiononfinegridview.hh:53
GridFunction function_
Definition coarsefunctiononfinegridview.hh:208
CoarseFunctionOnFineGridView(const GridFunction &function, const GridView &gridView)
Create CoarseFunctionOnFineGridView from GridFunction and GridView.
Definition coarsefunctiononfinegridview.hh:160
EntitySet entitySet_
Definition coarsefunctiononfinegridview.hh:209
typename EntitySet::LocalCoordinate LocalDomain
Definition coarsefunctiononfinegridview.hh:55
friend LocalFunction localFunction(const CoarseFunctionOnFineGridView &f)
Create a LocalFunction for evaluation in local coordinates.
Definition coarsefunctiononfinegridview.hh:195
std::decay_t< decltype(std::declval< RawGridFunction >()(std::declval< Domain >()))> Range
Definition coarsefunctiononfinegridview.hh:56
GV GridView
Definition coarsefunctiononfinegridview.hh:51
Definition gridfunction.hh:36
An entity set for all entities of given codim in a grid view.
Definition gridviewentityset.hh:27
GridView::template Codim< codim >::Entity Element
Definition gridviewentityset.hh:36
const GridView & gridView() const
Return the associated GridView.
Definition gridviewentityset.hh:80
Element::Geometry::LocalCoordinate LocalCoordinate
Definition gridviewentityset.hh:39
Element::Geometry::GlobalCoordinate GlobalCoordinate
Definition gridviewentityset.hh:40