OpenLB  1.4
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | List of all members
olb::SuperLocalAverage2D< T, W > Class Template Referencefinal

Averages given functor inside the local sphere. More...

#include <superLocalAverage2D.h>

+ Inheritance diagram for olb::SuperLocalAverage2D< T, W >:
+ Collaboration diagram for olb::SuperLocalAverage2D< T, W >:

Public Member Functions

 SuperLocalAverage2D (FunctorPtr< SuperF2D< T >> &&f, FunctorPtr< SuperIndicatorF2D< T >> &&indicatorF, T radius)
 Primary constructor. More...
 
bool operator() (W output[], const int input[]) override
 Returns average of functor _f evaluated on all cells both inside a sphere of _radius around input and indicated by _indicatorF. More...
 
- Public Member Functions inherited from olb::SuperF2D< T, W >
SuperF2D< T, W > & operator- (SuperF2D< T, W > &rhs)
 
SuperF2D< T, W > & operator+ (SuperF2D< T, W > &rhs)
 
SuperF2D< T, W > & operator* (SuperF2D< T, W > &rhs)
 
SuperF2D< T, W > & operator/ (SuperF2D< T, W > &rhs)
 
SuperStructure2D< T > & getSuperStructure ()
 
int getBlockFSize () const
 
BlockF2D< W > & getBlockF (int iCloc)
 
- Public Member Functions inherited from olb::GenericF< W, int >
virtual ~GenericF ()
 
int getSourceDim () const
 read only access to member variable _m More...
 
int getTargetDim () const
 read only access to member variable _n More...
 
std::string & getName ()
 read and write access to name More...
 
std::string const & getName () const
 read only access to name More...
 
bool operator() (Woutput[])
 wrapper that call the pure virtual operator() (T output[], const S input[]) from above More...
 
bool operator() (Woutput[], intinput0)
 
bool operator() (Woutput[], intinput0, intinput1)
 
bool operator() (Woutput[], intinput0, intinput1, intinput2)
 
bool operator() (Woutput[], intinput0, intinput1, intinput2, intinput3)
 

Additional Inherited Members

- Public Types inherited from olb::SuperF2D< T, W >
using identity_functor_type = SuperIdentity2D< T, W >
 
- Public Attributes inherited from olb::GenericF< W, int >
std::shared_ptr< GenericF< W,
int > > 
_ptrCalcC
 memory management, frees resouces (calcClass) More...
 
- Protected Member Functions inherited from olb::SuperF2D< T, W >
 SuperF2D (SuperStructure2D< T > &superStructure, int targetDim)
 
- Protected Member Functions inherited from olb::GenericF< W, int >
 GenericF (int targetDim, int sourceDim)
 
- Protected Attributes inherited from olb::SuperF2D< T, W >
SuperStructure2D< T > & _superStructure
 
std::vector< std::unique_ptr
< BlockF2D< W > > > 
_blockF
 Super functors may consist of several BlockF2D<W> derived functors. More...
 

Detailed Description

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

Averages given functor inside the local sphere.

Definition at line 36 of file superLocalAverage2D.h.

Constructor & Destructor Documentation

template<typename T , typename W >
olb::SuperLocalAverage2D< T, W >::SuperLocalAverage2D ( FunctorPtr< SuperF2D< T >> &&  f,
FunctorPtr< SuperIndicatorF2D< T >> &&  indicatorF,
radius 
)

Primary constructor.

Parameters
fFunctor to be locally averaged
indicatorFIndicator describing relevant cells
radiusRadius of the locality sphere

Definition at line 35 of file superLocalAverage2D.hh.

References olb::SuperF2D< T, W >::_blockF, olb::GenericF< W, int >::getName(), and olb::LoadBalancer< T >::size().

39  : SuperF2D<T,W>(f->getSuperStructure(), f->getTargetDim()),
40  _f(std::move(f)),
41  _indicatorF(std::move(indicatorF)),
42  _radius(radius)
43 {
44  this->getName() = "LocalAverage(" + _f->getName() + ")";
45 
46  LoadBalancer<T>& load = _f->getSuperStructure().getLoadBalancer();
47 
48  if ( _f->getBlockFSize() == load.size() &&
49  _indicatorF->getBlockFSize() == load.size() ) {
50  for (int iC = 0; iC < load.size(); ++iC) {
51  this->_blockF.emplace_back(
52  new BlockLocalAverage2D<T,W>(_f->getBlockF(iC),
53  _indicatorF->getBlockIndicatorF(iC),
54  _radius)
55  );
56  }
57  }
58 }
std::string & getName()
read and write access to name
std::vector< std::unique_ptr< BlockF2D< W > > > _blockF
Super functors may consist of several BlockF2D&lt;W&gt; derived functors.
Definition: superBaseF2D.h:62

+ Here is the call graph for this function:

Member Function Documentation

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

Returns average of functor _f evaluated on all cells both inside a sphere of _radius around input and indicated by _indicatorF.

Reimplemented from olb::SuperF2D< T, W >.

Definition at line 61 of file superLocalAverage2D.hh.

References olb::singleton::mpi().

62 {
63  const auto& geometry = this->getSuperStructure().getCuboidGeometry();
64  const auto& load = this->getSuperStructure().getLoadBalancer();
65 
66  for (int i = 0; i < this->getTargetDim(); ++i) {
67  output[i] = 0.;
68  }
69 
70  if (!_indicatorF(input)) {
71  return true;
72  }
73 
74  T centerOfCircle[2];
75  geometry.getPhysR(centerOfCircle, input);
76  IndicatorCircle2D<T> analyticalCircle(centerOfCircle, _radius);
77  SuperIndicatorFfromIndicatorF2D<T> latticeCircle(
78  analyticalCircle,
79  _indicatorF->getSuperGeometry());
80 
81  std::size_t voxels(0);
82  int inputTmp[3];
83 
84  for (int iC = 0; iC < load.size(); ++iC) {
85  inputTmp[0] = load.glob(iC);
86  const auto& cuboid = geometry.get(inputTmp[0]);
87 
88  for (inputTmp[1] = 0; inputTmp[1] < cuboid.getNx(); ++inputTmp[1]) {
89  for (inputTmp[2] = 0; inputTmp[2] < cuboid.getNy(); ++inputTmp[2]) {
90  if (latticeCircle(inputTmp) && _indicatorF(inputTmp)) {
91  T outputTmp[_f->getTargetDim()];
92  _f(outputTmp, inputTmp);
93  for (int i = 0; i < this->getTargetDim(); ++i) {
94  output[i] += outputTmp[i];
95  }
96  voxels += 1;
97  }
98  }
99  }
100  }
101 
102 #ifdef PARALLEL_MODE_MPI
103  singleton::mpi().reduceAndBcast(voxels, MPI_SUM);
104 #endif
105 
106  if (voxels > 0) {
107  for (int i = 0; i < this->getTargetDim(); ++i) {
108 #ifdef PARALLEL_MODE_MPI
109  singleton::mpi().reduceAndBcast(output[i], MPI_SUM);
110 #endif
111  output[i] /= voxels;
112  }
113  }
114 
115  return true;
116 }
MpiManager & mpi()
Definition: mpiManager.h:284
int getTargetDim() const
read only access to member variable _n
SuperStructure2D< T > & getSuperStructure()
Definition: superBaseF2D.hh:38

+ Here is the call graph for this function:


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