6 #include <amdis/GridFunctionOperatorTransposed.hpp> 7 #include <amdis/common/Order.hpp> 8 #include <amdis/common/TypeTraits.hpp> 9 #include <amdis/utility/QuadratureFactory.hpp> 18 template <
class LF,
class Imp>
36 template <
class GF,
class Imp>
40 using GridFunction = GF;
41 using Implementation = Imp;
48 template <
class Gr
idFct,
class Impl>
50 int derivDeg,
int gridFctOrder)
51 : gridFct_(FWD(gridFct))
54 , gridFctOrder_(gridFctOrder)
57 template <
class Gr
idView>
58 void update(GridView
const&) { }
63 op.derivDeg_, op.gridFctOrder_};
68 GridFunction gridFct_;
80 template <
class Gr
idFct,
class Impl>
99 template <
class LF,
class Imp>
104 using LocalFunction = LF;
107 using Implementation = Imp;
116 template <
class LocalFct,
class Impl>
118 int derivDeg,
int localFctOrder)
119 : localFct_(FWD(localFct))
121 , derivDeg_(derivDeg)
122 , localFctOrder_(localFctOrder)
129 template <
class Element>
130 void bind(Element
const& element)
132 localFct_.bind(element);
146 template <
class CG,
class RN,
class CN,
class Mat>
147 void assemble(CG
const& contextGeo, RN
const& rowNode, CN
const& colNode,
148 Mat& elementMatrix)
const 150 auto const& quad = getQuadratureRule(contextGeo.localContext().geometry(),
151 derivDeg_, localFctOrder(), rowNode, colNode);
152 impl().assemble(contextGeo, rowNode, colNode, quad, localFct_, elementMatrix);
160 template <
class CG,
class Node,
class Vec>
161 void assemble(CG
const& contextGeo, Node
const& node,
162 Vec& elementVector)
const 164 auto const& quad = getQuadratureRule(contextGeo.localContext().geometry(),
165 derivDeg_, localFctOrder(), node);
166 impl().assemble(contextGeo, node, quad, localFct_, elementVector);
169 Implementation & impl() {
return impl_; }
170 Implementation
const& impl()
const {
return impl_; }
174 int localFctOrder()
const 176 if constexpr (Concepts::Polynomial<LF>)
177 return order(localFct_);
179 return localFctOrder_;
184 LocalFunction localFct_;
187 Implementation impl_;
197 template <
class LocalFct,
class Impl>
203 template <
class Tag,
class LocalContext>
206 template <
class Tag,
class Expr>
213 OperatorTerm(Tag tag, Expr
const& expr,
int gridFctDeg = -1)
216 , gridFctDeg(gridFctDeg)
222 template <
class Tag,
class Expr>
228 template <
class Tag,
class Expr>
229 auto operatorTerm(Tag
const& tag, Expr&& expr,
int gridFctDeg = -1)
238 template <
class R,
class Tag>
239 using IsTransposed = decltype(R::transposedTag(std::declval<Tag>()));
243 template <
class Context,
class Tag,
class Expr,
class Gr
idView>
249 if constexpr (Dune::Std::is_detected_v<IsTransposed,Registry,Tag>) {
250 auto impl =
typename Registry::type{Registry::transposedTag(op.tag)};
255 auto impl =
typename Registry::type{op.tag};
void assemble(CG const &contextGeo, RN const &rowNode, CN const &colNode, Mat &elementMatrix) const
Assemble a local element matrix on the element that is bound.
Definition: GridFunctionOperator.hpp:147
The main implementation of an operator depending on a grid-function.
Definition: GridFunctionOperator.hpp:37
GridFunctionLocalOperator(LocalFct &&localFct, Impl &&impl, int derivDeg, int localFctOrder)
Constructor. Stores a copy of localFct and impl.
Definition: GridFunctionOperator.hpp:117
decltype(auto) makeGridFunction(PreGridFct const &preGridFct, GridView const &gridView)
Generator for Gridfunctions from Expressions (PreGridfunctions)
Definition: GridFunction.hpp:168
Definition: AdaptBase.hpp:6
GridFunctionOperator(GridFct &&gridFct, Impl &&impl, int derivDeg, int gridFctOrder)
Constructor. Stores a copy of gridFct and impl.
Definition: GridFunctionOperator.hpp:49
void unbind()
Unbinds operator from element.
Definition: GridFunctionOperator.hpp:136
auto makeOperator(Tag const &tag, Expr &&expr, int gridFctDeg=-1)
Definition: GridFunctionOperator.hpp:223
The transposed operator, implemented in terms of its transposed by calling assemble with inverted arg...
Definition: GridFunctionOperatorTransposed.hpp:13
void assemble(CG const &contextGeo, Node const &node, Vec &elementVector) const
Assemble a local element vector on the element that is bound.
Definition: GridFunctionOperator.hpp:161
Definition: GridFunctionOperator.hpp:207
void bind(Element const &element)
Binds operator to element.
Definition: GridFunctionOperator.hpp:130
Registry to specify a tag for each implementation type.
Definition: GridFunctionOperator.hpp:204
The main implementation of a local-operator depending on a local-function.
Definition: GridFunctionOperator.hpp:19