OpenLB 1.8.1
Loading...
Searching...
No Matches
olb::SmoothIndicatorCylinder3D< T, S, PARTICLE > Class Template Referencefinal

implements a smooth particle cylinder in 3D with an _epsilon sector. More...

#include <smoothIndicatorF3D.h>

+ Inheritance diagram for olb::SmoothIndicatorCylinder3D< T, S, PARTICLE >:
+ Collaboration diagram for olb::SmoothIndicatorCylinder3D< T, S, PARTICLE >:

Public Member Functions

 SmoothIndicatorCylinder3D (IndicatorCylinder3D< S > &ind, S epsilon, Vector< S, 3 > theta=Vector< S, 3 >(0., 0., 0.))
 
 SmoothIndicatorCylinder3D (Vector< S, 3 > center1, Vector< S, 3 > center2, S radius, S epsilon, Vector< S, 3 > theta=Vector< S, 3 >(0., 0., 0.))
 
 SmoothIndicatorCylinder3D (Vector< S, 3 > center, Vector< S, 3 > normal, S radius, S height, S epsilon, Vector< S, 3 > theta=Vector< S, 3 >(0., 0., 0.))
 
IndicatorCylinder3D< S > & getIndicator ()
 
Vector< S, 3 > surfaceNormal (const Vector< S, 3 > &pos, const S meshSize) override
 
const S signedDistance (const PhysR< S, 3 > input) override
 
getVolume () override
 
Vector< S, 4 > calcMofiAndMass (const S density) override
 
- Public Member Functions inherited from olb::SmoothIndicatorF3D< T, S, false >
void init ()
 
const Vector< S, 3 > & getMin () const
 
const Vector< S, 3 > & getMax () const
 
const Vector< S, 3 > & getPos () const
 
const Vector< S, 9 > & getRotationMatrix () const
 
const Vector< S, 3 > & getTheta () const
 
const S & getCircumRadius () const
 
const S & getEpsilon () const
 
std::string name ()
 
void setPos (Vector< S, 3 > pos)
 
void setTheta (Vector< S, 3 > theta)
 
void setEpsilon (S epsilon)
 
virtual Vector< S, 3 > calcCenterOfMass ()
 
virtual Vector< S, 3 > surfaceNormal (const Vector< S, 3 > &pos, const S meshSize, std::function< Vector< S, 3 >(const Vector< S, 3 > &)> transformPos)
 
virtual const S signedDistance (const PhysR< T, 3 > input)
 
virtual bool distance (S &distance, const Vector< S, 3 > &origin, const Vector< S, 3 > &direction, S precision, S pitch)
 
virtual bool operator() (T output[], const S input[])
 has to be implemented for 'every' derived class
 
bool isInsideCircumRadius (const PhysR< S, 3 > &input)
 
SmoothIndicatorF3D< T, S, false > & operator+ (SmoothIndicatorF3D< T, S, false > &rhs)
 
- Public Member Functions inherited from olb::AnalyticalF< D, T, S >
AnalyticalF< D, T, S > & operator- (AnalyticalF< D, T, S > &rhs)
 
AnalyticalF< D, T, S > & operator+ (AnalyticalF< D, T, S > &rhs)
 
AnalyticalF< D, T, S > & operator* (AnalyticalF< D, T, S > &rhs)
 
AnalyticalF< D, T, S > & operator/ (AnalyticalF< D, T, S > &rhs)
 
- 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
 
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::AnalyticalF< D, T, S >
using identity_functor_type = AnalyticalIdentity<D,T,S>
 
- 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::AnalyticalF< D, T, S >
static constexpr unsigned dim = D
 
- Protected Member Functions inherited from olb::SmoothIndicatorF3D< T, S, false >
 SmoothIndicatorF3D ()
 
- Protected Member Functions inherited from olb::AnalyticalF< D, T, S >
 AnalyticalF (int n)
 
- Protected Member Functions inherited from olb::GenericF< T, S >
 GenericF (int targetDim, int sourceDim)
 
- Protected Attributes inherited from olb::SmoothIndicatorF3D< T, S, false >
Vector< S, 3 > _myMin
 
Vector< S, 3 > _myMax
 
Vector< S, 3 > _pos
 
Vector< S, 9 > _rotMat
 
_circumRadius
 
Vector< S, 3 > _theta
 
_epsilon
 
std::string _name = "smoothIndicator3D"
 

Detailed Description

template<typename T, typename S, bool PARTICLE = false>
class olb::SmoothIndicatorCylinder3D< T, S, PARTICLE >

implements a smooth particle cylinder in 3D with an _epsilon sector.

Definition at line 112 of file smoothIndicatorF3D.h.

Constructor & Destructor Documentation

◆ SmoothIndicatorCylinder3D() [1/3]

template<typename T , typename S , bool PARTICLE>
olb::SmoothIndicatorCylinder3D< T, S, PARTICLE >::SmoothIndicatorCylinder3D ( IndicatorCylinder3D< S > & ind,
S epsilon,
Vector< S, 3 > theta = Vector<S,3> (0.,0.,0.) )

Definition at line 489 of file smoothIndicatorF3D.hh.

490 : SmoothIndicatorCylinder3D(ind.getCenter1(), ind.getCenter2(), ind.getRadius(), epsilon, theta)
491{ }
SmoothIndicatorCylinder3D(IndicatorCylinder3D< S > &ind, S epsilon, Vector< S, 3 > theta=Vector< S, 3 >(0., 0., 0.))

◆ SmoothIndicatorCylinder3D() [2/3]

template<typename T , typename S , bool PARTICLE>
olb::SmoothIndicatorCylinder3D< T, S, PARTICLE >::SmoothIndicatorCylinder3D ( Vector< S, 3 > center1,
Vector< S, 3 > center2,
S radius,
S epsilon,
Vector< S, 3 > theta = Vector<S,3> (0.,0.,0.) )

Definition at line 494 of file smoothIndicatorF3D.hh.

495 : _ind(center1, center2, radius)
496{
497 this->_epsilon = epsilon;
498 if constexpr (!PARTICLE) {
499 this->_pos = 0.5 * (_ind.getCenter1() + _ind.getCenter2());
500 this->_theta = util::degreeToRadian(theta);
501 }
502 Vector<T,3> dist = _ind.getCenter2() - _ind.getCenter1();
503 S const length = norm(dist);
504 if constexpr (!PARTICLE) {
505 initIndicatorCylinder3D(this->_theta, length);
506 }
507 else {
508 initIndicatorCylinder3D(Vector<T,3>(0.), length);
509 }
510
511}
decltype(Vector< decltype(util::sqrt(T())), D >()) degreeToRadian(const Vector< T, D > &angle)
constexpr T norm(const ScalarVector< T, D, IMPL > &a) any_platform
Euclidean vector norm.

References olb::SmoothIndicatorF3D< T, S, false >::_epsilon, olb::SmoothIndicatorF3D< T, S, false >::_pos, olb::SmoothIndicatorF3D< T, S, false >::_theta, olb::util::degreeToRadian(), and olb::norm().

+ Here is the call graph for this function:

◆ SmoothIndicatorCylinder3D() [3/3]

template<typename T , typename S , bool PARTICLE>
olb::SmoothIndicatorCylinder3D< T, S, PARTICLE >::SmoothIndicatorCylinder3D ( Vector< S, 3 > center,
Vector< S, 3 > normal,
S radius,
S height,
S epsilon,
Vector< S, 3 > theta = Vector<S,3> (0.,0.,0.) )

Definition at line 514 of file smoothIndicatorF3D.hh.

515 : SmoothIndicatorCylinder3D(center-.5*height*normalize(normal), center+.5*height*normalize(normal), radius, epsilon, theta)
516{ }
constexpr Vector< T, D > normalize(const ScalarVector< T, D, IMPL > &a, T scale=T{1})
Definition vector.h:284

Member Function Documentation

◆ calcMofiAndMass()

template<typename T , typename S , bool PARTICLE>
Vector< S, 4 > olb::SmoothIndicatorCylinder3D< T, S, PARTICLE >::calcMofiAndMass ( const S density)
overridevirtual

Reimplemented from olb::SmoothIndicatorF3D< T, S, false >.

Definition at line 527 of file smoothIndicatorF3D.hh.

528{
529 Vector<T,3> dist = _ind.getCenter2() - _ind.getCenter1();
530 S const length = norm(dist);
531 T const radius2 = _ind.getRadius() * _ind.getRadius();
532 T const mass = getVolume()*density;
533 Vector<S,3> mofi;
534 mofi[0] = 0.5*mass*radius2;
535 mofi[1] = 1/12.*mass*(length*length+3.*radius2);
536 mofi[2] = 1/12.*mass*(length*length+3.*radius2);
537 return Vector<S,4>(mofi[0], mofi[1], mofi[2], mass);
538}

References olb::norm().

+ Here is the call graph for this function:

◆ getIndicator()

template<typename T , typename S , bool PARTICLE>
IndicatorCylinder3D< S > & olb::SmoothIndicatorCylinder3D< T, S, PARTICLE >::getIndicator ( )

Definition at line 484 of file smoothIndicatorF3D.hh.

484 {
485 return _ind;
486}

◆ getVolume()

template<typename T , typename S , bool PARTICLE>
S olb::SmoothIndicatorCylinder3D< T, S, PARTICLE >::getVolume ( )
overridevirtual

Reimplemented from olb::SmoothIndicatorF3D< T, S, false >.

Definition at line 519 of file smoothIndicatorF3D.hh.

520{
521 const Vector<T,3> dist = _ind.getCenter2() - _ind.getCenter1();
522 S const length = norm(dist);
523 return M_PI*_ind.getRadius()*_ind.getRadius()*length;
524}
#define M_PI

References M_PI, and olb::norm().

+ Here is the call graph for this function:

◆ signedDistance()

template<typename T , typename S , bool PARTICLE>
const S olb::SmoothIndicatorCylinder3D< T, S, PARTICLE >::signedDistance ( const PhysR< S, 3 > input)
override

Definition at line 547 of file smoothIndicatorF3D.hh.

548{
549 Vector<S,3> p;
550 if constexpr(!PARTICLE) {
551 // counter-clockwise rotation by _theta=-theta around the current position of the center of mass & translation
552 p = util::executeRotation<S,3,true>(input, this->_rotMat, this->getPos());
553 }
554 else {
555 p = input;
556 }
557
558 // moving to indicator coordinate system by adding start position coordinate
559 return _ind.signedDistance(p + 0.5 * (_ind.getCenter2() + _ind.getCenter1()));
560}
Vector< T, D > executeRotation(const Vector< T, D > &input, const Vector< T, utilities::dimensions::convert< D >::matrix > &rotationMatrix, const Vector< T, D > &rotationCenter=Vector< T, D >(0.))
Rotates the input around the rotationCenter with a given rotationMatrix.

References olb::util::executeRotation().

+ Here is the call graph for this function:

◆ surfaceNormal()

template<typename T , typename S , bool PARTICLE>
Vector< S, 3 > olb::SmoothIndicatorCylinder3D< T, S, PARTICLE >::surfaceNormal ( const Vector< S, 3 > & pos,
const S meshSize )
overridevirtual

Reimplemented from olb::SmoothIndicatorF3D< T, S, false >.

Definition at line 541 of file smoothIndicatorF3D.hh.

542{
543 return _ind.surfaceNormal(pos, meshSize);
544}

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