34template <
typename T,
typename S>
36 :
AnalyticalF3D<T,S>(12), _wantedVelocity(wantedVelocity), _start(start),
37 _end(end), _direction(direction), _lambdaMax(lambdaMax), _rise(rise),
43template <
typename T,
typename S>
53 if ( _wantedVelocity(output, input) ) {
54 T scaleLambda = lambda(input[_direction]);
55 output[0] = -scaleLambda*output[0];
56 output[1] = -scaleLambda*output[1];
57 output[2] = -scaleLambda*output[2];
58 output[3] = scaleLambda;
59 output[7] = scaleLambda;
60 output[11] = scaleLambda;
74template <
typename T,
typename S>
77 if ( x < std::numeric_limits<T>::epsilon() ) {
80 else if (x > T(1)-std::numeric_limits<T>::epsilon() ) {
84 return T(1)/(T(1) +
util::exp( T(1)/(x - T(1) ) + T(1)/x ) );
88template <
typename T,
typename S>
89T Fringe3D<T,S>::lambda(
const T& x)
const
91 return _lambdaMax*(
s((x - _start)/_rise*(_end - _start) ) -
s((x - _end)/_fall*(_end - _start) + T(1.)) );
AnalyticalF are applications from DD to XD, where X is set by the constructor.
bool operator()(T output[12], const S input[3])
Returns coefficients (a1, a2, a2, B11, B12, B13, B21, B22, B23, B31, B32, B33) for a linear velocity ...
Fringe3D(AnalyticalF3D< T, S > &wantedVelocity, T start, T end, int direction, T lambdaMax=.005, T rise=.4, T fall=.2)
std::string & getName()
read and write access to name
platform_constant Fraction s[Q]
ADf< T, DIM > exp(const ADf< T, DIM > &a)
Top level namespace for all of OpenLB.