5 #include <amdis/GridFunctionOperator.hpp> 6 #include <amdis/Output.hpp> 7 #include <amdis/common/StaticSize.hpp> 23 template <
class LC,
class Gr
idFct>
30 static_assert( static_size_v<typename GridFct::Range> == 1,
"Expression must be of scalar type." );
37 template <
class CG,
class Node,
class Vec>
38 void getElementVector(CG
const& context, Node
const& node, Vec& elementVector)
40 static_assert(Node::isPower,
"Node must be a Power-Node.");
42 static const std::size_t CHILDREN = Node::CHILDREN;
43 static_assert( CHILDREN == CG::dow,
"" );
45 auto const& quad = this->getQuadratureRule(context.type(), node);
46 std::size_t feSize = node.child(0).size();
48 using RangeFieldType =
typename Node::ChildType::LocalBasis::Traits::RangeFieldType;
49 using WorldVector = FieldVector<RangeFieldType,CG::dow>;
50 std::vector<WorldVector> gradients;
52 for (
auto const& qp : quad) {
54 auto&& local = context.local(qp.position());
57 const auto jacobian = context.geometry().jacobianInverseTransposed(local);
60 const auto factor = Super::coefficient(local) * context.integrationElement(qp.position()) * qp.weight();
63 auto const& shapeGradients = node.child(0).localBasisJacobiansAt(local);
66 gradients.resize(shapeGradients.size());
68 for (std::size_t i = 0; i < gradients.size(); ++i)
69 jacobian.mv(shapeGradients[i][0], gradients[i]);
71 for (std::size_t j = 0; j < feSize; ++j) {
72 for (std::size_t k = 0; k < CHILDREN; ++k) {
73 const auto local_kj = node.child(k).localIndex(j);
74 elementVector[local_kj] += factor * gradients[j][k];
The base-template for GridFunctionOperators.
Definition: GridFunctionOperator.hpp:242
Definition: FirstOrderDivTestvec.hpp:18
Contains all classes needed for solving linear and non linear equation systems.
Definition: AdaptBase.hpp:6
The main implementation of an CRTP-base class for operators using a grid-function coefficient to be u...
Definition: GridFunctionOperator.hpp:39