OpenLB 1.7
Loading...
Searching...
No Matches
Public Member Functions | List of all members
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
 read only access to member variable _m
 
int getTargetDim () const
 read only access to member variable _n
 
std::string & getName ()
 read and write access to name
 
std::string const & getName () const
 read only access to name
 
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)
 

Additional Inherited Members

- 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.

Constructor & Destructor Documentation

◆ 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
ffunctor of which the standard deviation is to be determined
indicatorFindicator describing the subset on which to evaluate f Constructor for determining the standard deviation of f on a given material
ffunctor of which the average is to be determined
superGeometrysuper geometry for constructing material indicator
materialnumber 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
145 LoadBalancer<T>& load = _f->getSuperStructure().getLoadBalancer();
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),
154 cuboid.get(load.glob(iC)),
155 _expectedValue)
156 );
157 }
158 }
159}
std::string & getName()
read and write access to name
Definition genericF.hh:51
std::vector< std::unique_ptr< BlockF3D< W > > > _blockF
Super functors may consist of several BlockF3D<W> derived functors.

References olb::SuperF3D< T, W >::_blockF, olb::CuboidGeometry3D< T >::get(), olb::GenericF< T, S >::getName(), olb::LoadBalancer< T >::glob(), and olb::LoadBalancer< T >::size().

+ Here is the call graph for this function:

Member Function Documentation

◆ 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();
177 LoadBalancer<T>& load = _f->getSuperStructure().getLoadBalancer();
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));
194 inputTmp[0] = 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
read only access to member variable _n
Definition genericF.hh:45
BlockF3D< W > & getBlockF(int iCloc)
void reduceAndBcast(T &reductVal, MPI_Op op, int root=0, MPI_Comm comm=MPI_COMM_WORLD)
Reduction operation, followed by a broadcast.
MpiManager & mpi()
cpu::simd::Pack< T > sqrt(cpu::simd::Pack< T > value)
Definition pack.h:100
cpu::simd::Pack< T > pow(cpu::simd::Pack< T > base, cpu::simd::Pack< T > exp)
Definition pack.h:112

References olb::SuperStructure< T, D >::communicate(), olb::CuboidGeometry3D< T >::get(), olb::Cuboid3D< T >::getNx(), olb::Cuboid3D< T >::getNy(), olb::Cuboid3D< T >::getNz(), olb::SuperF3D< T, W >::getSuperStructure(), olb::LoadBalancer< T >::glob(), olb::singleton::mpi(), olb::util::pow(), olb::singleton::MpiManager::reduceAndBcast(), olb::LoadBalancer< T >::size(), and olb::util::sqrt().

+ Here is the call graph for this function:

The documentation for this class was generated from the following files: