29 template <
class Coeff,
class Gr
idFct,
class BitVector>
30 void operator()(Coeff& coeff, GridFct
const& gf, BitVector
const& bitVec)
const
33 VectorType_t<typename Coeff::value_type, Coeff> coeff0(basis_);
34 VectorType_t<std::uint8_t, Coeff> counter(basis_);
35 using Counter = TYPEOF(counter);
38 auto lf = localFunction(gf);
39 auto localView = basis_.localView();
41 std::vector<typename Coeff::value_type> localCoeff;
42 std::vector<typename Counter::value_type> localOnes(localView.maxSize(), 1);
44 for (
const auto& e : entitySet(basis_))
49 auto&& subTree = Dune::TypeTree::child(localView.tree(),treePath_);
50 Traversal::forEachLeafNode(subTree, [&](
auto const& node,
auto const& tp)
52 auto bitVecRange = mappedRangeView(Dune::range(node.size()), [&](std::size_t i) ->
bool {
53 return bitVec[localView.index(node.localIndex(i))];
57 std::vector<bool> mask(bitVecRange.begin(), bitVecRange.end());
58 if (std::all_of(mask.begin(), mask.end(), [](
bool m) { return !m; }))
67 localOnes.resize(node.size(), 1);
77 std::map<typename Basis::MultiIndex, typename Coeff::value_type> coeffMap;
78 std::map<typename Basis::MultiIndex, std::uint8_t> counterMap;
80 std::vector<typename Coeff::value_type> localCoeffs;
81 std::vector<typename Counter::value_type> localCounter;
83 for (
const auto& e : entitySet(basis_))
87 auto&& node = Dune::TypeTree::child(localView.tree(),treePath_);
88 counter.gather(localView, node, localCounter);
89 coeff0.gather(localView, node, localCoeffs);
91 for (std::size_t i = 0; i < node.size(); ++i) {
92 if (localCounter[i] > 0) {
93 auto idx = localView.index(node.localIndex(i));
94 coeffMap[idx] = localCoeffs[i];
95 counterMap[idx] = localCounter[i];
100 assert(coeffMap.size() == counterMap.size());
103 auto value_it = coeffMap.begin();
104 auto count_it = counterMap.begin();
105 for (; value_it != coeffMap.end(); ++value_it, ++count_it) {
106 assert(count_it->second > 0);
107 coeff.set(value_it->first, value_it->second/
double(count_it->second));
112 template <
class Coeff,
class Gr
idFct>
113 void operator()(Coeff& coeff, GridFct
const& gf)
const
120 , treePath_{treePath}
124 TreePath treePath_ = {};