24#ifndef SMOOTH_INDICATOR_F_2D_H
25#define SMOOTH_INDICATOR_F_2D_H
51template <
typename T,
typename S,
bool PARTICLE=false>
67template <
typename T,
typename S,
bool PARTICLE=false>
83template <
typename T,
typename S,
bool PARTICLE=false>
100template <typename T, typename S, bool PARTICLE=false>
101class SmoothIndicatorTriangle2D final : public SmoothIndicatorF2D<T,S,PARTICLE> {
104 Vector<S, 2> _PointA, _PointB, _PointC;
106 Vector<S, 2> _ab, _bc, _ca;
108 S _ab_d, _bc_d, _ca_d;
110 SmoothIndicatorTriangle2D(Vector<S,2> center, S radius, S epsilon, S theta=0, S density=0, Vector<S,2> vel = Vector<S,2> (0.,0.), S omega = 0);
111 bool operator() (T output[], const S input[]) override;
115template <
typename T,
typename W>
117template <
typename T,
typename BaseType>
122template <
typename T,
typename S,
bool PARTICLE=false>
125 std::shared_ptr<IndicatorF2D<T>> _indPtr;
127 const T _latticeSpacing;
131 std::unique_ptr<Cuboid2D<T>> _cuboid;
133 std::unique_ptr<BlockData<2,T,BaseType<T>>> _blockData;
135 std::unique_ptr<BlockDataF2D<T,BaseType<T>>> _cacheFunctor;
137 std::unique_ptr<AnalyticalFfromBlockF2D<T,T>> _interpolateCache;
144 void calcCircumRadius();
157 bool operator()(T output[],
const S input[])
override;
162template <
typename T,
typename S,
bool PARTICLE=false>
168 bool operator() (T output[],
const S input[])
override;
173template <
typename T,
typename S,
bool PARTICLE=false>
179 SmoothIndicatorFactoredCircle2D(
Vector<S,2> center, S radius, S epsilon, S density=0,
Vector<S,2> vel =
Vector<S,2> (0.,0.), S omega = 0, S factor = 1.);
180 bool operator() (T output[],
const S input[])
override;
185template <
typename T,
typename S,
bool PARTICLE=false>
192 SmoothIndicatorFactoredCuboid2D(
Vector<S,2> center, S xLength, S yLength, S epsilon, S density=0,
Vector<S,2> vel =
Vector<S,2> (0.,0.), S omega = 0, S factor = 1.);
193 bool operator() (T output[],
const S input[])
override;
Converts block functors to analytical functors.
BlockDataF2D can store data of any BlockFunctor2D.
indicator function for a 2D circle
indicator function for a 2D-cuboid, parallel to the planes x=0, y=0; theta rotates cuboid around its ...
indicator function for a 2D equilateral triangle
IndicatorF2D is an application from .
implements a smooth circle in 2D with an _epsilon sector
Vector< S, 2 > surfaceNormal(const Vector< S, 2 > &pos, const S meshSize) override
IndicatorCircle2D< S > & getIndicator()
Vector< S, 2 > calcMofiAndMass(const S density) override
SmoothIndicatorCircle2D(IndicatorCircle2D< S > &indPtr, S epsilon)
const S signedDistance(const Vector< S, 2 > input) override
bool distance(S &distance, const Vector< S, 2 > &origin, const Vector< S, 2 > &direction, S precision, S pitch) override
implements a smooth cuboid in 2D with an _epsilon sector.
bool distance(S &distance, const Vector< S, 2 > &origin, const Vector< S, 2 > &direction, S precision, S pitch) override
IndicatorCuboid2D< S > & getIndicator()
Vector< S, 2 > surfaceNormal(const Vector< S, 2 > &pos, const S meshSize) override
const S signedDistance(const Vector< S, 2 > input) override
Vector< S, 2 > calcMofiAndMass(const S density) override
SmoothIndicatorCuboid2D(IndicatorCuboid2D< S > &ind, S epsilon, S theta=0)
bool regardCell(int input[2])
Vector< S, 2 > surfaceNormal(const Vector< S, 2 > &pos, const S meshSize) override
Vector< T, 2 > getLocalCenter()
bool operator()(T output[], const S input[]) override
SmoothIndicatorCustom2D(T latticeSpacing, std::shared_ptr< IndicatorF2D< T > > indPtr, Vector< T, 2 > pos, T epsilon, T theta=0.)
const S signedDistance(const Vector< S, 2 > input) override
Vector< T, 2 > calcMofiAndMass(T rhoP) override
calculates and returns mofi and mass of the particle (mofi is at index 0 and mass at index 1)
factorizable output smooth circle in 2D with a tangiant or ramp epsilon sector
Vector< S, 2 > calcMofiAndMass(const S density) override
SmoothIndicatorFactoredCircle2D(Vector< S, 2 > center, S radius, S epsilon, S density=0, Vector< S, 2 > vel=Vector< S, 2 >(0., 0.), S omega=0, S factor=1.)
bool operator()(T output[], const S input[]) override
factorizable output smooth cuboid in 2D with a tangiant or ramp epsilon sector
Vector< S, 2 > calcMofiAndMass(const S density) override
SmoothIndicatorFactoredCuboid2D(Vector< S, 2 > center, S xLength, S yLength, S epsilon, S density=0, Vector< S, 2 > vel=Vector< S, 2 >(0., 0.), S omega=0, S factor=1.)
bool operator()(T output[], const S input[]) override
implements a smooth circle in 2D with an tangiant _epsilon sector
Vector< S, 2 > calcMofiAndMass(const S density) override
SmoothIndicatorHTCircle2D(Vector< S, 2 > center, S radius, S epsilon, S density=0, Vector< S, 2 > vel=Vector< S, 2 >(0., 0.), S omega=0)
bool operator()(T output[], const S input[]) override
implements a smooth triangle in 2D with an _epsilon sector
Vector< S, 2 > surfaceNormal(const Vector< S, 2 > &pos, const S meshSize) override
IndicatorEquiTriangle2D< S > & getIndicator()
SmoothIndicatorTriangle2D(IndicatorEquiTriangle2D< S > &indPtr, S epsilon, S theta=0)
Vector< S, 2 > calcMofiAndMass(const S density) override
bool distance(S &distance, const Vector< S, 2 > &origin, const Vector< S, 2 > &direction, S precision, S pitch) override
const S signedDistance(const Vector< S, 2 > input) override
This file contains indicator functions.
Top level namespace for all of OpenLB.
Unit conversion handling – header file.
Input/Output in XML format – header file.