OpenLB 1.7
Loading...
Searching...
No Matches
Public Member Functions | List of all members
olb::RegularCachedIndicatorF3D< S > Class Template Reference

#include <indicatorBaseF3D.h>

+ Inheritance diagram for olb::RegularCachedIndicatorF3D< S >:
+ Collaboration diagram for olb::RegularCachedIndicatorF3D< S >:

Public Member Functions

 RegularCachedIndicatorF3D (IndicatorF3D< S > &indicatorF, S deltaR)
 
bool operator() (bool output[1], const S input[3]) override
 Returns true if input is inside the indicator.
 
bool save (std::string fileName)
 
bool load (std::string fileName)
 
Vector< S, 3 > & getMin () override
 
Vector< S, 3 > & getMax () override
 
bool distance (S &distance, const Vector< S, 3 > &origin, S precision, const Vector< S, 3 > &direction) override
 
bool distance (S &distance, const Vector< S, 3 > &origin, const Vector< S, 3 > &direction, S precision, S pitch) override
 
bool distance (S &distance, const Vector< S, 3 > &origin, const Vector< S, 3 > &direction, int iC=-1) override
 
bool distance (S &distance, const Vector< S, 3 > &origin) override
 
bool distance (S &distance, const S input[]) override
 
bool normal (Vector< S, 3 > &normal, const Vector< S, 3 > &origin, const Vector< S, 3 > &direction, int iC=-1) override
 returns true and the normal if there was one found for an given origin and direction
 
bool rotOnAxis (Vector< S, 3 > &vec_rot, const Vector< S, 3 > &vec, const Vector< S, 3 > &axis, S &theta) override
 Rotate vector around axis by angle theta.
 
signedDistance (const Vector< S, 3 > &input) override
 Returns signed distance to the nearest point on the indicator surface.
 
Vector< S, 3 > surfaceNormal (const Vector< S, 3 > &pos, const S meshSize) override
 Return surface normal.
 
- Public Member Functions inherited from olb::IndicatorF3D< S >
Vector< S, 3 > surfaceNormal (const Vector< S, 3 > &pos, const S meshSize, std::function< Vector< S, 3 >(const Vector< S, 3 > &)> transformPos)
 Return surface normal after possible translation and rotation.
 
bool isInsideBox (Vector< S, 3 > point)
 Returns true if point is inside a cube with corners _myMin and _myMax
 
virtual Vector< S, 3 > getSample (const std::function< S()> &randomness) const
 
- Public Member Functions inherited from olb::GenericF< bool, 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() (bool output[], const S input[])=0
 has to be implemented for 'every' derived class
 
bool operator() (bool output[])
 wrapper that call the pure virtual operator() (T output[], const S input[]) from above
 
bool operator() (bool output[], S input0)
 
bool operator() (bool output[], S input0, S input1)
 
bool operator() (bool output[], S input0, S input1, S input2)
 
bool operator() (bool output[], S input0, S input1, S input2, S input3)
 

Additional Inherited Members

- Public Types inherited from olb::GenericF< bool, S >
using targetType
 
using sourceType
 
- Public Attributes inherited from olb::GenericF< bool, S >
std::shared_ptr< GenericF< bool, S > > _ptrCalcC
 memory management, frees resouces (calcClass)
 
- Protected Member Functions inherited from olb::IndicatorF3D< S >
 IndicatorF3D ()
 
- Protected Member Functions inherited from olb::GenericF< bool, S >
 GenericF (int targetDim, int sourceDim)
 
- Protected Attributes inherited from olb::IndicatorF3D< S >
Vector< S, 3 > _myMin
 
Vector< S, 3 > _myMax
 

Detailed Description

template<typename S>
class olb::RegularCachedIndicatorF3D< S >

Definition at line 87 of file indicatorBaseF3D.h.

Constructor & Destructor Documentation

◆ RegularCachedIndicatorF3D()

template<typename S >
olb::RegularCachedIndicatorF3D< S >::RegularCachedIndicatorF3D ( IndicatorF3D< S > & indicatorF,
S deltaR )
inline

Definition at line 97 of file indicatorBaseF3D.h.

97 :
98 _indicatorF(indicatorF),
99 _deltaR(deltaR),
100 _cacheCuboid(indicatorF.getMin()[0], indicatorF.getMin()[1], indicatorF.getMin()[2], deltaR,
101 (int)((indicatorF.getMax()[0] - indicatorF.getMin()[0]) / deltaR + 1.5),
102 (int)((indicatorF.getMax()[1] - indicatorF.getMin()[1]) / deltaR + 1.5),
103 (int)((indicatorF.getMax()[2] - indicatorF.getMin()[2]) / deltaR + 1.5)),
104 _cacheBlock(_cacheCuboid.getExtent(), 0),
105 _cache(_cacheBlock.getNcells())
106 { }
std::size_t getNcells() const
Get number of cells.
Vector< int, 3 > const getExtent() const
Read only access to the number of voxels in every dimension.
Definition cuboid3D.hh:165

Member Function Documentation

◆ distance() [1/5]

template<typename S >
bool olb::RegularCachedIndicatorF3D< S >::distance ( S & distance,
const S input[] )
inlineoverridevirtual

Reimplemented from olb::IndicatorF3D< S >.

Definition at line 152 of file indicatorBaseF3D.h.

152 {
153 return _indicatorF.distance(distance, input);
154 }
bool distance(S &distance, const Vector< S, 3 > &origin, S precision, const Vector< S, 3 > &direction) override

References olb::IndicatorF3D< S >::distance(), and olb::RegularCachedIndicatorF3D< S >::distance().

+ Here is the call graph for this function:

◆ distance() [2/5]

template<typename S >
bool olb::RegularCachedIndicatorF3D< S >::distance ( S & distance,
const Vector< S, 3 > & origin )
inlineoverridevirtual

Reimplemented from olb::IndicatorF3D< S >.

Definition at line 149 of file indicatorBaseF3D.h.

149 {
150 return _indicatorF.distance(distance, origin);
151 }

References olb::IndicatorF3D< S >::distance(), and olb::RegularCachedIndicatorF3D< S >::distance().

+ Here is the call graph for this function:

◆ distance() [3/5]

template<typename S >
bool olb::RegularCachedIndicatorF3D< S >::distance ( S & distance,
const Vector< S, 3 > & origin,
const Vector< S, 3 > & direction,
int iC = -1 )
inlineoverridevirtual

Reimplemented from olb::IndicatorF3D< S >.

Definition at line 146 of file indicatorBaseF3D.h.

146 {
147 return _indicatorF.distance(distance, origin, direction, iC);
148 }

References olb::IndicatorF3D< S >::distance(), and olb::RegularCachedIndicatorF3D< S >::distance().

+ Here is the call graph for this function:

◆ distance() [4/5]

template<typename S >
bool olb::RegularCachedIndicatorF3D< S >::distance ( S & distance,
const Vector< S, 3 > & origin,
const Vector< S, 3 > & direction,
S precision,
S pitch )
inlineoverridevirtual

Reimplemented from olb::IndicatorF3D< S >.

Definition at line 143 of file indicatorBaseF3D.h.

143 {
144 return _indicatorF.distance(distance, origin, direction, precision, pitch);
145 }

References olb::IndicatorF3D< S >::distance(), and olb::RegularCachedIndicatorF3D< S >::distance().

+ Here is the call graph for this function:

◆ distance() [5/5]

template<typename S >
bool olb::RegularCachedIndicatorF3D< S >::distance ( S & distance,
const Vector< S, 3 > & origin,
S precision,
const Vector< S, 3 > & direction )
inlineoverridevirtual
Returns
false or true and pos. distance if there was one found for a given origin and direction. Mind that the default computation is done by a numerical approximation which searches .. [TODO: CYRIL]

Reimplemented from olb::IndicatorF3D< S >.

Definition at line 140 of file indicatorBaseF3D.h.

140 {
141 return _indicatorF.distance(distance, origin, precision, direction);
142 }

References olb::IndicatorF3D< S >::distance(), and olb::RegularCachedIndicatorF3D< S >::distance().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getMax()

template<typename S >
Vector< S, 3 > & olb::RegularCachedIndicatorF3D< S >::getMax ( )
inlineoverridevirtual

Reimplemented from olb::IndicatorF3D< S >.

Definition at line 137 of file indicatorBaseF3D.h.

137 {
138 return _indicatorF.getMax();
139 }

References olb::IndicatorF3D< S >::getMax().

+ Here is the call graph for this function:

◆ getMin()

template<typename S >
Vector< S, 3 > & olb::RegularCachedIndicatorF3D< S >::getMin ( )
inlineoverridevirtual

Reimplemented from olb::IndicatorF3D< S >.

Definition at line 134 of file indicatorBaseF3D.h.

134 {
135 return _indicatorF.getMin();
136 }

References olb::IndicatorF3D< S >::getMin().

+ Here is the call graph for this function:

◆ load()

template<typename S >
bool olb::RegularCachedIndicatorF3D< S >::load ( std::string fileName)
inline

Definition at line 130 of file indicatorBaseF3D.h.

130 {
131 return _cache.load(fileName);
132 }

References olb::Serializable::load().

+ Here is the call graph for this function:

◆ normal()

template<typename S >
bool olb::RegularCachedIndicatorF3D< S >::normal ( Vector< S, 3 > & normal,
const Vector< S, 3 > & origin,
const Vector< S, 3 > & direction,
int iC = -1 )
inlineoverridevirtual

returns true and the normal if there was one found for an given origin and direction

(mind that the default computation is done by a numerical approximation which searches .. [TODO])

find perpendicular vector to direction

Loop 3 times to find three points on the surface to use for normal calc. orthogonal to direction vector 120 degree to each other

rotate directionPerpN through 3 angles {0,120,240}

Find 'positive' angle

Calculate Normal

Reimplemented from olb::IndicatorF3D< S >.

Definition at line 155 of file indicatorBaseF3D.h.

155 {
156 return _indicatorF.normal(normal, origin, direction, iC);
157 }
bool normal(Vector< S, 3 > &normal, const Vector< S, 3 > &origin, const Vector< S, 3 > &direction, int iC=-1) override
returns true and the normal if there was one found for an given origin and direction

References olb::IndicatorF3D< S >::normal(), and olb::RegularCachedIndicatorF3D< S >::normal().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ operator()()

template<typename S >
bool olb::RegularCachedIndicatorF3D< S >::operator() ( bool output[1],
const S input[3] )
inlineoverridevirtual

Returns true if input is inside the indicator.

Reimplemented from olb::IndicatorF3D< S >.

Definition at line 108 of file indicatorBaseF3D.h.

108 {
109 Vector<int,3> latticeR{};
110 if (_cacheCuboid.getLatticeR(input, latticeR)) {
111 std::size_t iCell = _cacheBlock.getCellId(latticeR);
112 if (_cache[iCell] == 0) {
113 bool result;
114 _indicatorF(&result, input);
115 _cache[iCell] = result ? 1 : 2;
116 output[0] = result;
117 return true;
118 } else {
119 output[0] = _cache[iCell] == 1;
120 return true;
121 }
122 } else {
123 return _indicatorF(output, input);
124 }
125 }
CellID getCellId(LatticeR< D > latticeR) const
Get 1D cell ID.
bool getLatticeR(Vector< T, 3 > physR, Vector< int, 3 > &latticeR, T eps=1e-5)
Definition cuboid3D.h:128

References olb::BlockStructureD< D >::getCellId(), and olb::Cuboid3D< T >::getLatticeR().

+ Here is the call graph for this function:

◆ rotOnAxis()

template<typename S >
bool olb::RegularCachedIndicatorF3D< S >::rotOnAxis ( Vector< S, 3 > & vec_rot,
const Vector< S, 3 > & vec,
const Vector< S, 3 > & axis,
S & theta )
inlineoverridevirtual

Rotate vector around axis by angle theta.

http://mathworld.wolfram.com/RodriguesRotationFormula.html https://en.wikipedia.org/wiki/Rodrigues%27_rotation_formula

Reimplemented from olb::IndicatorF3D< S >.

Definition at line 158 of file indicatorBaseF3D.h.

158 {
159 return _indicatorF.rotOnAxis(vec_rot, vec, axis, theta);
160 }

References olb::IndicatorF3D< S >::rotOnAxis().

+ Here is the call graph for this function:

◆ save()

template<typename S >
bool olb::RegularCachedIndicatorF3D< S >::save ( std::string fileName)
inline

Definition at line 127 of file indicatorBaseF3D.h.

127 {
128 return _cache.save(fileName);
129 }

References olb::Serializable::save().

+ Here is the call graph for this function:

◆ signedDistance()

template<typename S >
S olb::RegularCachedIndicatorF3D< S >::signedDistance ( const Vector< S, 3 > & input)
inlineoverridevirtual

Returns signed distance to the nearest point on the indicator surface.

Reimplemented from olb::IndicatorF3D< S >.

Definition at line 162 of file indicatorBaseF3D.h.

162 {
163 return _indicatorF.signedDistance(input);
164 }

References olb::IndicatorF3D< S >::signedDistance().

+ Here is the call graph for this function:

◆ surfaceNormal()

template<typename S >
Vector< S, 3 > olb::RegularCachedIndicatorF3D< S >::surfaceNormal ( const Vector< S, 3 > & pos,
const S meshSize )
inlineoverridevirtual

Return surface normal.

Reimplemented from olb::IndicatorF3D< S >.

Definition at line 165 of file indicatorBaseF3D.h.

165 {
166 return _indicatorF.surfaceNormal(pos, meshSize);
167 }

References olb::IndicatorF3D< S >::surfaceNormal().

+ Here is the call graph for this function:

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