6 #include <amdis/GridFunctionOperatorTransposed.hpp> 7 #include <amdis/Output.hpp> 8 #include <amdis/common/Order.hpp> 9 #include <amdis/common/TypeTraits.hpp> 10 #include <amdis/utility/QuadratureFactory.hpp> 19 template <
class LF,
class Imp>
37 template <
class GF,
class Imp>
41 using GridFunction = GF;
42 using Implementation = Imp;
49 template <
class Gr
idFct,
class Impl>
51 int derivDeg,
int gridFctOrder)
52 : gridFct_(FWD(gridFct))
55 , gridFctOrder_(gridFctOrder)
58 template <
class Gr
idView>
59 void update(GridView
const&) { }
64 op.derivDeg_, op.gridFctOrder_};
69 GridFunction gridFct_;
81 template <
class Gr
idFct,
class Impl>
100 template <
class LF,
class Imp>
105 using LocalFunction = LF;
108 using Implementation = Imp;
117 template <
class LocalFct,
class Impl>
119 int derivDeg,
int localFctOrder)
120 : localFct_(FWD(localFct))
122 , derivDeg_(derivDeg)
123 , localFctOrder_(localFctOrder)
130 template <
class Element>
131 void bind(Element
const& element)
133 localFct_.bind(element);
147 template <
class CG,
class RN,
class CN,
class Mat>
148 void assemble(CG
const& contextGeo, RN
const& rowNode, CN
const& colNode,
149 Mat& elementMatrix)
const 151 auto const& quad = getQuadratureRule(contextGeo.geometry(),
152 derivDeg_, localFctOrder(), rowNode, colNode);
153 impl().assemble(contextGeo, rowNode, colNode, quad, localFct_, elementMatrix);
161 template <
class CG,
class Node,
class Vec>
162 void assemble(CG
const& contextGeo, Node
const& node,
163 Vec& elementVector)
const 165 auto const& quad = getQuadratureRule(contextGeo.geometry(),
166 derivDeg_, localFctOrder(), node);
167 impl().assemble(contextGeo, node, quad, localFct_, elementVector);
170 Implementation & impl() {
return impl_; }
171 Implementation
const& impl()
const {
return impl_; }
176 int localFctOrder()
const 178 if (localFctOrder_ >= 0)
179 return localFctOrder_;
183 if constexpr (Concepts::Polynomial<LF>)
184 coeffOrder = order(localFct_);
186 test_exit(coeffOrder >= 0,
187 "Polynomial degree of coefficients cannot be determined. " 188 "Please provide a quadrature order manually.");
196 LocalFunction localFct_;
199 Implementation impl_;
209 template <
class LocalFct,
class Impl>
215 template <
class Tag,
class LocalContext>
218 template <
class Tag,
class Expr>
225 OperatorTerm(Tag tag, Expr
const& expr,
int gridFctDeg = -1)
228 , gridFctDeg(gridFctDeg)
234 template <
class Tag,
class Expr>
240 template <
class Tag,
class Expr>
241 auto operatorTerm(Tag
const& tag, Expr&& expr,
int gridFctDeg = -1)
250 template <
class R,
class Tag>
251 using IsTransposed = decltype(R::transposedTag(std::declval<Tag>()));
255 template <
class Context,
class Tag,
class Expr,
class Gr
idView>
261 if constexpr (Dune::Std::is_detected_v<IsTransposed,Registry,Tag>) {
262 auto impl =
typename Registry::type{Registry::transposedTag(op.tag)};
267 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:148
The main implementation of an operator depending on a grid-function.
Definition: GridFunctionOperator.hpp:38
GridFunctionLocalOperator(LocalFct &&localFct, Impl &&impl, int derivDeg, int localFctOrder)
Constructor. Stores a copy of localFct and impl.
Definition: GridFunctionOperator.hpp:118
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:50
void unbind()
Unbinds operator from element.
Definition: GridFunctionOperator.hpp:137
auto makeOperator(Tag const &tag, Expr &&expr, int gridFctDeg=-1)
Definition: GridFunctionOperator.hpp:235
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:162
Definition: GridFunctionOperator.hpp:219
void bind(Element const &element)
Binds operator to element.
Definition: GridFunctionOperator.hpp:131
Registry to specify a tag for each implementation type.
Definition: GridFunctionOperator.hpp:216
The main implementation of a local-operator depending on a local-function.
Definition: GridFunctionOperator.hpp:20