OpenLB 1.7
Searching...
No Matches
olb::SuperStdDeviationF3D< T, W > Class Template Referencefinal

SuperStdDeviaitonF3D returns the standard deviation in each component of f on a indicated subset calcutalted with Steiner translation theorem. More...

`#include <superStatisticF3D.h>`

Inheritance diagram for olb::SuperStdDeviationF3D< T, W >:
Collaboration diagram for olb::SuperStdDeviationF3D< T, W >:

## Public Member Functions

SuperStdDeviationF3D (FunctorPtr< SuperF3D< T, W > > &&f, SuperGeometry< T, 3 > &superGeometry, const int material, T expectedValue)
Constructor for determining the standard deviation of f on a indicated subset.

SuperStdDeviationF3D (FunctorPtr< SuperF3D< T, W > > &&f, FunctorPtr< SuperIndicatorF3D< T > > &&indicatorF, T expectedValue)

bool operator() (W output[], const int input[]) override

Public Member Functions inherited from olb::SuperF3D< T, W >
SuperF3D< T, W > & operator- (SuperF3D< T, W > &rhs)

SuperF3D< T, W > & operator+ (SuperF3D< T, W > &rhs)

SuperF3D< T, W > & operator* (SuperF3D< T, W > &rhs)

SuperF3D< T, W > & operator/ (SuperF3D< T, W > &rhs)

SuperStructure< T, 3 > & getSuperStructure ()

int getBlockFSize () const

BlockF3D< W > & getBlockF (int iCloc)

bool operator() (W output[], const int input[])

Public Member Functions inherited from olb::GenericF< T, S >
virtual ~GenericF ()=default

int getSourceDim () const

int getTargetDim () const

std::string & getName ()

std::string const & getName () const

virtual bool operator() (T output[], const S input[])=0
has to be implemented for 'every' derived class

bool operator() (T output[])
wrapper that call the pure virtual operator() (T output[], const S input[]) from above

bool operator() (T output[], S input0)

bool operator() (T output[], S input0, S input1)

bool operator() (T output[], S input0, S input1, S input2)

bool operator() (T output[], S input0, S input1, S input2, S input3)

Public Types inherited from olb::SuperF3D< T, W >
using identity_functor_type = SuperIdentity3D<T,W>

Public Types inherited from olb::GenericF< T, S >
using targetType = T

using sourceType = S

Public Attributes inherited from olb::GenericF< T, S >
std::shared_ptr< GenericF< T, S > > _ptrCalcC
memory management, frees resouces (calcClass)

Static Public Attributes inherited from olb::SuperF3D< T, W >
static constexpr bool isSuper = true

static constexpr unsigned d = 3

Protected Member Functions inherited from olb::SuperF3D< T, W >
SuperF3D (SuperStructure< T, 3 > &superStructure, int targetDim)

Protected Member Functions inherited from olb::GenericF< T, S >
GenericF (int targetDim, int sourceDim)

Protected Attributes inherited from olb::SuperF3D< T, W >
SuperStructure< T, 3 > & _superStructure

std::vector< std::unique_ptr< BlockF3D< W > > > _blockF
Super functors may consist of several BlockF3D<W> derived functors.

## Detailed Description

template<typename T, typename W = T>
class olb::SuperStdDeviationF3D< T, W >

SuperStdDeviaitonF3D returns the standard deviation in each component of f on a indicated subset calcutalted with Steiner translation theorem.

Definition at line 95 of file superStatisticF3D.h.

## ◆ SuperStdDeviationF3D() [1/2]

template<typename T , typename W >
 olb::SuperStdDeviationF3D< T, W >::SuperStdDeviationF3D ( FunctorPtr< SuperF3D< T, W > > && f, SuperGeometry< T, 3 > & superGeometry, const int material, T expectedValue )

Constructor for determining the standard deviation of f on a indicated subset.

Parameters
 f functor of which the standard deviation is to be determined indicatorF indicator describing the subset on which to evaluate f Constructor for determining the standard deviation of f on a given material f functor of which the average is to be determined superGeometry super geometry for constructing material indicator material number of the relevant material

Definition at line 162 of file superStatisticF3D.hh.

167 std::forward<decltype(f)>(f),
168 superGeometry.getMaterialIndicator(material),
169 expectedValue)
170{ }
std::unique_ptr< SuperIndicatorF< T, D > > getMaterialIndicator(std::vector< int > &&materials)
Returns a material indicator using the given vector of materials.
SuperStdDeviationF3D(FunctorPtr< SuperF3D< T, W > > &&f, SuperGeometry< T, 3 > &superGeometry, const int material, T expectedValue)
Constructor for determining the standard deviation of f on a indicated subset.

## ◆ SuperStdDeviationF3D() [2/2]

template<typename T , typename W >
 olb::SuperStdDeviationF3D< T, W >::SuperStdDeviationF3D ( FunctorPtr< SuperF3D< T, W > > && f, FunctorPtr< SuperIndicatorF3D< T > > && indicatorF, T expectedValue )

Definition at line 135 of file superStatisticF3D.hh.

138 : SuperF3D<T,W>(f->getSuperStructure(), f->getTargetDim()+1),
139 _f(std::move(f)),
140 _indicatorF(std::move(indicatorF)),
141 _expectedValue(expectedValue)
142{
143 this->getName() = "Variance("+_f->getName()+")";
144
146 CuboidGeometry3D<T>& cuboid = _f->getSuperStructure().getCuboidGeometry();
147
148 if ( _f->getBlockFSize() == load.size() &&
149 _indicatorF->getBlockFSize() == load.size() ) {
150 for (int iC = 0; iC < load.size(); ++iC) {
151 this->_blockF.emplace_back(
152 new BlockStdDeviationF3D<T,W>(_f->getBlockF(iC),
153 _indicatorF->getBlockIndicatorF(iC),
155 _expectedValue)
156 );
157 }
158 }
159}
std::string & getName()
Definition genericF.hh:51
std::vector< std::unique_ptr< BlockF3D< W > > > _blockF
Super functors may consist of several BlockF3D<W> derived functors.
Here is the call graph for this function:

## ◆ operator()()

template<typename T , typename W >
 bool olb::SuperStdDeviationF3D< T, W >::operator() ( W output[], const int input[] )
override

Definition at line 173 of file superStatisticF3D.hh.

174{
175 _f->getSuperStructure().communicate();
176 CuboidGeometry3D<T>& geometry = _f->getSuperStructure().getCuboidGeometry();
178
179 std::size_t voxels(0);
180
181 for (int i = 0; i <= _f->getTargetDim(); ++i) {
182 output[i] = W(0);
183 }
184
185 if (this->_blockF.empty()) {
186 W outputTmp[_f->getTargetDim()];
187 for(int i=0; i<_f->getTargetDim(); ++i) {
188 outputTmp[i] = W(0);
189 }
190 int inputTmp[_f->getSourceDim()];
191
192 for (int iC = 0; iC < load.size(); ++iC) {
193 const Cuboid3D<T> cuboid = geometry.get(load.glob(iC));
195 for (inputTmp[1] = 0; inputTmp[1] < cuboid.getNx(); ++inputTmp[1]) {
196 for (inputTmp[2] = 0; inputTmp[2] < cuboid.getNy(); ++inputTmp[2]) {
197 for (inputTmp[3] = 0; inputTmp[3] < cuboid.getNz(); ++inputTmp[3]) {
198 if (_indicatorF(inputTmp)) {
199 _f(outputTmp,inputTmp);
200 for (int i = 0; i < _f->getTargetDim(); ++i) {
201 output[i] += util::pow(outputTmp[i] - _expectedValue, 2);
202 }
203 voxels += 1;
204 }
205 }
206 }
207 }
208 output[_f->getTargetDim()] += voxels;
209 }
210 }
211 else {
212 for (int iC = 0; iC < load.size(); ++iC) {
213 this->getBlockF(iC)(output, input);
214 }
215 }
216
217#ifdef PARALLEL_MODE_MPI
218 for (int i = 0; i <= this->getTargetDim(); ++i) {
219 singleton::mpi().reduceAndBcast(output[i], MPI_SUM);
220 }
221#endif
222
223 for (int i = 0; i < _f->getTargetDim(); ++i) {
224 output[i] = util::sqrt(output[i] / output[_f->getTargetDim()]);
225 }
226
227
228 return true;
229}
int getTargetDim() const