28 template <
class CG,
class Node,
class Quad,
class LocalFct,
class Vec>
29 void assemble(CG
const& contextGeo, Node
const& node, Quad
const& quad,
30 LocalFct
const& localFct, Vec& elementVector)
const
32 static_assert(static_size_v<typename LocalFct::Range> == 1,
33 "Expression must be of scalar type." );
34 static_assert(Dune::TypeTree::Concept::LeafTreeNode<Node>,
35 "Operator can be applied to Leaf-Nodes only");
37 std::size_t size = node.size();
39 for (
auto const& qp : quad) {
41 auto&& local = contextGeo.coordinateInElement(qp.position());
44 auto factor = contextGeo.integrationElement(qp.position()) * qp.weight();
45 factor *= localFct(local);
47 auto const& shapeValues = node.localBasisValuesAt(local);
48 for (std::size_t i = 0; i < size; ++i) {
49 const auto local_i = node.localIndex(i);
50 elementVector[local_i] += factor * shapeValues[i];