OpenLB 1.7
Loading...
Searching...
No Matches
Public Member Functions | List of all members
olb::SuperMax3D< T, W > Class Template Referencefinal

SuperMax3D returns the max in each component of f on a indicated subset. More...

#include <superMax3D.h>

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

Public Member Functions

 SuperMax3D (FunctorPtr< SuperF3D< T, W > > &&f, FunctorPtr< SuperIndicatorF3D< T > > &&indicatorF)
 Constructor for determining the maximum of f on a indicated subset.
 
 SuperMax3D (FunctorPtr< SuperF3D< T, W > > &&f, SuperGeometry< T, 3 > &superGeometry, const int material)
 Constructor for determining the maximum of f on a given material.
 
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::SuperMax3D< T, W >

SuperMax3D returns the max in each component of f on a indicated subset.

Definition at line 37 of file superMax3D.h.

Constructor & Destructor Documentation

◆ SuperMax3D() [1/2]

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

Constructor for determining the maximum of f on a indicated subset.

Parameters
ffunctor of which the maximum is to be determined
indicatorFindicator describing the subset on which to evaluate f

Definition at line 34 of file superMax3D.hh.

36 : SuperF3D<T,W>(f->getSuperStructure(), f->getTargetDim()),
37 _f(std::move(f)),
38 _indicatorF(std::move(indicatorF))
39{
40 this->getName() = "Max("+_f->getName()+")";
41
42 LoadBalancer<T>& load = _f->getSuperStructure().getLoadBalancer();
43 CuboidGeometry3D<T>& cuboid = _f->getSuperStructure().getCuboidGeometry();
44
45 if ( _f->getBlockFSize() == load.size() &&
46 _indicatorF->getBlockFSize() == load.size() ) {
47 for (int iC = 0; iC < load.size(); ++iC) {
48 this->_blockF.emplace_back(
49 new BlockMax3D<T,W>(_f->getBlockF(iC),
50 _indicatorF->getBlockIndicatorF(iC),
51 cuboid.get(load.glob(iC)))
52 );
53 }
54 }
55}
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:

◆ SuperMax3D() [2/2]

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

Constructor for determining the maximum of f on a given material.

Parameters
ffunctor of which the maximum is to be determined
superGeometrysuper geometry for constructing material indicator
materialnumber of the relevant material

Definition at line 58 of file superMax3D.hh.

61 : SuperMax3D(
62 std::forward<decltype(f)>(f),
63 superGeometry.getMaterialIndicator(material))
64{ }
std::unique_ptr< SuperIndicatorF< T, D > > getMaterialIndicator(std::vector< int > &&materials)
Returns a material indicator using the given vector of materials.
SuperMax3D(FunctorPtr< SuperF3D< T, W > > &&f, FunctorPtr< SuperIndicatorF3D< T > > &&indicatorF)
Constructor for determining the maximum of f on a indicated subset.
Definition superMax3D.hh:34

Member Function Documentation

◆ operator()()

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

Definition at line 67 of file superMax3D.hh.

68{
69 _f->getSuperStructure().communicate();
70 CuboidGeometry3D<T>& geometry = _f->getSuperStructure().getCuboidGeometry();
71 LoadBalancer<T>& load = _f->getSuperStructure().getLoadBalancer();
72
73 for (int i = 0; i < this->getTargetDim(); ++i) {
74 output[i] = std::numeric_limits<W>::min();
75 }
76
77 if (this->_blockF.empty()) {
78 W outputTmp[_f->getTargetDim()];
79 int inputTmp[_f->getSourceDim()];
80
81 for (int iC = 0; iC < load.size(); ++iC) {
82 const Cuboid3D<T> cuboid = geometry.get(load.glob(iC));
83 inputTmp[0] = load.glob(iC);
84 for (inputTmp[1] = 0; inputTmp[1] < cuboid.getNx(); ++inputTmp[1]) {
85 for (inputTmp[2] = 0; inputTmp[2] < cuboid.getNy(); ++inputTmp[2]) {
86 for (inputTmp[3] = 0; inputTmp[3] < cuboid.getNz(); ++inputTmp[3]) {
87 if (_indicatorF(inputTmp)) {
88 _f(outputTmp,inputTmp);
89 for (int i = 0; i < this->getTargetDim(); ++i) {
90 if (outputTmp[i] > output[i]) {
91 output[i] = outputTmp[i];
92 }
93 }
94 }
95 }
96 }
97 }
98 }
99 }
100 else {
101 for (int iC = 0; iC < load.size(); ++iC) {
102 this->getBlockF(iC)(output, input);
103 }
104 }
105
106#ifdef PARALLEL_MODE_MPI
107 for (int i = 0; i < this->getTargetDim(); ++i) {
108 singleton::mpi().reduceAndBcast(output[i], MPI_MAX);
109 }
110#endif
111 return true;
112}
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()

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::singleton::MpiManager::reduceAndBcast(), and olb::LoadBalancer< T >::size().

+ Here is the call graph for this function:

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