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 for (inputTmp[2] = 0; inputTmp[2] < blockStructure.getNz(); ++inputTmp[2]) {
59 if (_indicatorF(inputTmp)) {
60 _f(outputTmp,inputTmp);
61 for (
int i = 0; i < _f.getTargetDim(); ++i) {
62 output[i] += outputTmp[i];
69 output[_f.getTargetDim()] += voxels;
88 OLB_ASSERT(_f.getSourceDim() == _indicatorF.getSourceDim(),
89 "functor source dimension equals indicator source dimension");
91 const W weight =
util::pow(_indicatorF.getBlockGeometry().getDeltaR(), 3);
93 W outputTmp[_f.getTargetDim()];
94 int inputTmp[_f.getSourceDim()];
96 const auto& blockStructure = this->getBlockStructure();
98 for (inputTmp[0] = 0; inputTmp[0] < blockStructure.getNx(); ++inputTmp[0]) {
99 for (inputTmp[1] = 0; inputTmp[1] < blockStructure.getNy(); ++inputTmp[1]) {
100 for (inputTmp[2] = 0; inputTmp[2] < blockStructure.getNz(); ++inputTmp[2]) {
101 if (_indicatorF(inputTmp)) {
102 _f(outputTmp,inputTmp);
103 for (
int i = 0; i < this->getTargetDim(); ++i) {
104 output[i] += outputTmp[i] * weight;