47 OLB_ASSERT(_f.getSourceDim() == _indicatorF.getSourceDim(),
48 "functor source dimension equals indicator source dimension");
50 W outputTmp[_f.getTargetDim()];
51 int inputTmp[_f.getSourceDim()];
52 std::size_t voxels(0);
54 const auto& blockStructure = this->getBlockStructure();
56 for (inputTmp[0] = 0; inputTmp[0] < blockStructure.getNx(); ++inputTmp[0]) {
57 for (inputTmp[1] = 0; inputTmp[1] < blockStructure.getNy(); ++inputTmp[1]) {
58 if (_indicatorF(inputTmp)) {
59 _f(outputTmp,inputTmp);
60 for (
int i = 0; i < _f.getTargetDim(); ++i) {
61 output[i] += outputTmp[i];
67 output[_f.getTargetDim()] += voxels;
86 OLB_ASSERT(_f.getSourceDim() == _indicatorF.getSourceDim(),
87 "functor source dimension equals indicator source dimension");
89 const W weight = pow(_indicatorF.getBlockGeometry().getDeltaR(), 2);
91 W outputTmp[_f.getTargetDim()];
92 int inputTmp[_f.getSourceDim()];
94 const auto& blockStructure = this->getBlockStructure();
96 for (inputTmp[0] = 0; inputTmp[0] < blockStructure.getNx(); ++inputTmp[0]) {
97 for (inputTmp[1] = 0; inputTmp[1] < blockStructure.getNy(); ++inputTmp[1]) {
98 if (_indicatorF(inputTmp)) {
99 _f(outputTmp,inputTmp);
100 for (
int i = 0; i < this->getTargetDim(); ++i) {
101 output[i] += outputTmp[i] * weight;