5 #include <dune/common/concept.hh> 6 #include <dune/functions/common/typeerasure.hh> 8 #include <amdis/LocalOperator.hpp> 9 #include <amdis/common/ConceptsBase.hpp> 10 #include <amdis/typetree/TreeContainerTrafo.hpp> 15 template <
class GV,
class LC,
class C>
19 using LocalContext = LC;
20 using ElementContainer = C;
23 template <
class Traits,
class... Nodes>
24 struct OperatorDefinition
26 using GridView =
typename Traits::GridView;
31 virtual ~Interface() =
default;
32 virtual void update(GridView
const&) = 0;
33 virtual LocalOperator<
Traits,Nodes...> asLocalOperator()
const = 0;
38 struct Model :
public Impl 41 void update(GridView
const& gv)
final { this->
get().update(gv); }
42 LocalOperator<
Traits,Nodes...> asLocalOperator() const final {
43 return localOperator(this->
get()); }
49 using LOpConcept =
typename LocalOperatorDefinition<Traits,Nodes...>::Concept;
52 auto require(Op&& op) -> decltype
54 op.update(std::declval<GridView>()),
55 Dune::Concept::requireConcept<LOpConcept>(localOperator(op))
59 using Base = Dune::Functions::TypeErasureBase<Interface,Model>;
78 template <
class Traits,
class... Nodes>
80 :
public Impl::OperatorDefinition<Traits,Nodes...>::Base
82 using Definition = Impl::OperatorDefinition<
Traits,Nodes...>;
83 using Super =
typename Definition::Base;
87 using GridView =
typename Traits::GridView;
91 template <
class Impl, Dune::disableCopyMove<Operator,Impl> = 0>
95 static_assert(Concepts::models<
typename Definition::Concept(
Impl)>,
96 "Implementation does not model the Operator concept.");
105 this->asInterface().update(gv);
111 return op.asInterface().asLocalOperator();
115 template <
class LocalContext,
class Op,
class GV>
124 template <
class Container>
127 return Recursive::map([](
auto const& op) {
return localOperator(op); }, c);
auto localOperators(Container const &c)
Definition: Operator.hpp:125
The base class for an operator to be used in an Assembler.
Definition: Operator.hpp:79
friend LocalOperator< Traits, Nodes... > localOperator(Operator const &op)
Transform an operator into a local-operator.
Definition: Operator.hpp:109
Operator(Impl &&impl)
Constructor. Pass any type supporting the OperatorInterface.
Definition: Operator.hpp:92
Definition: AdaptBase.hpp:6
The base class for a local operator to be used in a Assembler.
Definition: LocalOperator.hpp:73
auto makeOperator(Tag const &tag, Expr &&expr, int gridFctDeg=-1)
Definition: GridFunctionOperator.hpp:235
void update(GridView const &gv)
Update the operator data on a GridView.
Definition: Operator.hpp:103