37 template <
class CG,
class Node,
class Quad,
class LocalFct,
class Vec>
38 void assemble(CG
const& contextGeo, Node
const& node, Quad
const& quad,
39 LocalFct
const& localFct, Vec& elementVector)
const
41 static_assert(static_size_v<typename LocalFct::Range> == 1,
"Expression must be of scalar type." );
42 static_assert(Dune::TypeTree::Concept::LeafTreeNode<Node>,
"Operator can be applied to Leaf-Nodes only.");
46 for (
auto const& qp : quad) {
48 decltype(
auto) local = contextGeo.coordinateInElement(qp.position());
51 auto dx = contextGeo.integrationElement(qp.position()) * qp.weight();
52 dx *= localFct(local);
55 auto const& partial = localBasis.
partialsAt(local, comp_);
57 for (std::size_t j = 0; j < localBasis.
size(); ++j) {
58 const auto local_j = node.localIndex(j);
59 elementVector[local_j] += dx * partial[j];