24#ifndef SUPER_INDICATOR_F_3D_HH
25#define SUPER_INDICATOR_F_3D_HH
39 _indicatorF(std::move(indicatorF))
45 for (
int iC = 0; iC < load.
size(); ++iC) {
57 this->_superStructure.getCuboidGeometry().getPhysR(physR, input);
58 return _indicatorF(output, physR);
62template <
typename T,
bool HLBM>
67 _indicatorF(std::move(indicatorF))
73 for (
int iC = 0; iC < load.
size(); ++iC) {
81template <
typename T,
bool HLBM>
86 this->_superStructure.getCuboidGeometry().getPhysR(physR, input);
87 _indicatorF(inside, physR);
97 const std::string matString = std::accumulate(
100 std::to_string(materials[0]),
101 [](
const std::string& a,
int b) {
102 return a +
'_' + std::to_string(b);
104 this->
getName() =
"SuperIndicator_on_Material_" + matString;
118 std::vector<int>(materials.begin(), materials.end()))
128 if (!this->_blockF.empty() && load.
isLocal(input[0])) {
130 return this->getBlockF(load.
loc(input[0]))(output,&input[1]);
140 _indicatorF(std::move(indicatorF))
142 this->
getName() = _indicatorF->getName();
144 for (
int iC = 0; iC < _indicatorF->getBlockFSize(); ++iC) {
153 _indicatorF(output, input);
154 for (
int iPop=1; iPop < descriptors::D3Q27<>::q; ++iPop) {
157 auto c_i = descriptors::c<descriptors::D3Q27<>>(iPop);
159 _indicatorF(&tmpOutput, tmpInput.
data());
160 output[0] |= tmpOutput;
168 _indicatorF(std::move(indicatorF))
172 for (
int iC = 0; iC <
_indicatorF->getBlockFSize(); ++iC) {
181 return _indicatorF(output, input);
189 _f(std::move(f)), _g(std::move(g))
191 this->
getName() =
_f->getName() +
" * " +
_g->getName();
193 for (
int iC = 0; iC <
_f->getBlockFSize(); ++iC) {
196 _f->getBlockIndicatorF(iC),
197 _g->getBlockIndicatorF(iC)));
203 bool output[],
const int input[])
215 _indicatorF(std::move(indicatorF)),
218 this->
getName() =
"SuperIndicatorBoundaryNeighbor_for_BoundaryMaterial_" +
_indicatorF->getName();
220 for (
int iC = 0; iC <
_indicatorF->getBlockFSize(); ++iC) {
234 return this->getBlockF(load.
loc(input[0]))(output, &input[1]);
Block indicator identifying neighbors of boundary cells.
BlockIndicatorF3D from IndicatorF3D.
BlockIndicatorF3D from SmoothIndicatorF3D.
Block indicator identity.
Block indicator extended by a layer.
Block indicator functor from material numbers.
Block indicator intersection.
Smart pointer for managing the various ways of passing functors around.
std::string & getName()
read and write access to name
IndicatorF3D is an application from .
Base class for all LoadBalancer.
bool isLocal(const int &glob)
returns whether glob is on this process
SuperStructure< T, 3 > & getSuperStructure()
std::vector< std::unique_ptr< BlockF3D< bool > > > _blockF
Super functors may consist of several BlockF3D<W> derived functors.
Representation of a statistic for a parallel 2D geometry.
void updateStatistics(bool verbose=true)
Updates the super geometry at the boundaries if needed and afterwards the statisics if needed.
BlockGeometry< T, D > & getBlockGeometry(int locIC)
Read and write access to a single block geometry.
FunctorPtr< SuperIndicatorF3D< T > > _indicatorF
bool operator()(bool output[], const int input[]) override
SuperIndicatorBoundaryNeighbor3D(FunctorPtr< SuperIndicatorF3D< T > > &&indicatorF, int overlap)
Base indicator functor (discrete)
SuperGeometry< T, 3 > & _superGeometry
FunctorPtr< IndicatorF3D< T > > _indicatorF
SuperIndicatorFfromIndicatorF3D(FunctorPtr< IndicatorF3D< T > > &&indicatorF, SuperGeometry< T, 3 > &geometry)
bool operator()(bool output[], const int input[]) override
FunctorPtr< SmoothIndicatorF3D< T, T, HLBM > > _indicatorF
bool operator()(bool output[], const int input[]) override
SuperIndicatorFfromSmoothIndicatorF3D(FunctorPtr< SmoothIndicatorF3D< T, T, HLBM > > &&indicatorF, SuperGeometry< T, 3 > &geometry)
SuperIndicatorIdentity3D(FunctorPtr< SuperIndicatorF3D< T > > &&indicatorF)
bool operator()(bool output[], const int input[]) override
FunctorPtr< SuperIndicatorF3D< T > > _indicatorF
SuperIndicatorLayer3D(FunctorPtr< SuperIndicatorF3D< T > > &&indicatorF)
bool operator()(bool output[], const int input[]) override
Indicator functor from material numbers.
bool operator()(bool output[], const int input[]) override
SuperIndicatorMaterial3D(SuperGeometry< T, 3 > &geometry, std::vector< int > materials)
FunctorPtr< SuperIndicatorF3D< T > > _f
FunctorPtr< SuperIndicatorF3D< T > > _g
SuperIndicatorMultiplication3D(FunctorPtr< SuperIndicatorF3D< T > > &&f, FunctorPtr< SuperIndicatorF3D< T > > &&g)
bool operator()(bool output[], const int input[]) override
LoadBalancer< T > & getLoadBalancer()
Read and write access to the load balancer.
constexpr const T * data() const any_platform
bool nearZero(const ADf< T, DIM > &a)
Top level namespace for all of OpenLB.
Set of functions commonly used in LB computations – header file.