24#ifndef BLOCK_STATISTIC_F3D_HH
25#define BLOCK_STATISTIC_F3D_HH
32template <
typename T,
typename W>
39 _indicatorF(indicatorF),
41 _expectedValue(expectedValue)
46template <
typename T,
typename W>
49 OLB_ASSERT(_f.getSourceDim() == _indicatorF.getSourceDim(),
50 "functor source dimension equals indicator source dimension");
52 std::size_t voxels(0);
54 W outputTmp[_f.getTargetDim()];
55 for(
unsigned i=0; i<_f.getTargetDim(); ++i) {
58 int inputTmp[_f.getSourceDim()];
60 for (inputTmp[0] = 0; inputTmp[0] < _cuboid.getNx(); ++inputTmp[0]) {
61 for (inputTmp[1] = 0; inputTmp[1] < _cuboid.getNy(); ++inputTmp[1]) {
62 for (inputTmp[2] = 0; inputTmp[2] < _cuboid.getNz(); ++inputTmp[2]) {
63 if (_indicatorF(inputTmp)) {
64 _f(outputTmp,inputTmp);
65 for (
int i = 0; i < _f.getTargetDim(); ++i) {
66 output[i] +=
util::pow(outputTmp[i] - _expectedValue, 2);
75 output[_f.getTargetDim()] += voxels;
81template <
typename T,
typename W>
88 _indicatorF(indicatorF),
90 _expectedValue(expectedValue)
95template <
typename T,
typename W>
98 OLB_ASSERT(_f.getSourceDim() == _indicatorF.getSourceDim(),
99 "functor source dimension equals indicator source dimension");
101 std::size_t voxels(0);
103 W outputTmp[_f.getTargetDim()];
104 for(
int i=0; i<_f.getTargetDim(); ++i) {
107 int inputTmp[_f.getSourceDim()];
109 for (inputTmp[0] = 0; inputTmp[0] < _cuboid.getNx(); ++inputTmp[0]) {
110 for (inputTmp[1] = 0; inputTmp[1] < _cuboid.getNy(); ++inputTmp[1]) {
111 for (inputTmp[2] = 0; inputTmp[2] < _cuboid.getNz(); ++inputTmp[2]) {
112 if (_indicatorF(inputTmp)) {
113 _f(outputTmp,inputTmp);
114 for (
int i = 0; i < _f.getTargetDim(); ++i) {
115 output[i] +=
util::pow(outputTmp[i] - _expectedValue, 2);
124 output[_f.getTargetDim()] += voxels;
represents all functors that operate on a cuboid in general, mother class of BlockLatticeF,...
Base block indicator functor.
bool operator()(W output[], const int input[]) override
BlockStdDeviationF3D(BlockF3D< W > &f, BlockIndicatorF3D< T > &indicatorF, Cuboid3D< T > &cuboid, T expectedValue)
BlockSum3D sums all components of f over a indicated subset.
bool operator()(W output[], const int input[]) override
BlockVarianceF3D(BlockF3D< W > &f, BlockIndicatorF3D< T > &indicatorF, Cuboid3D< T > &cuboid, T expectedValue)
A regular single 3D cuboid is the basic component of a 3D cuboid structure which defines the grid.
std::string & getName()
read and write access to name
cpu::simd::Pack< T > pow(cpu::simd::Pack< T > base, cpu::simd::Pack< T > exp)
Top level namespace for all of OpenLB.
#define OLB_ASSERT(COND, MESSAGE)