OpenLB 1.7
Loading...
Searching...
No Matches
Public Member Functions | Static Public Attributes | List of all members
olb::OuterVelocityEdgeProcessor3D< T, DESCRIPTOR, plane, normal1, normal2 > Class Template Reference

This class computes the skordos BC on a convex edge wall in 3D but with a limited number of terms added to the equilibrium distributions (i.e. More...

#include <boundaryPostProcessors3D.h>

+ Collaboration diagram for olb::OuterVelocityEdgeProcessor3D< T, DESCRIPTOR, plane, normal1, normal2 >:

Public Member Functions

int getPriority () const
 
template<CONCEPT(Cell) CELL>
void apply (CELL &cell) any_platform
 

Static Public Attributes

static constexpr OperatorScope scope = OperatorScope::PerCell
 

Detailed Description

template<typename T, typename DESCRIPTOR, int plane, int normal1, int normal2>
class olb::OuterVelocityEdgeProcessor3D< T, DESCRIPTOR, plane, normal1, normal2 >

This class computes the skordos BC on a convex edge wall in 3D but with a limited number of terms added to the equilibrium distributions (i.e.

only the Q_i : Pi term)

Definition at line 88 of file boundaryPostProcessors3D.h.

Member Function Documentation

◆ apply()

template<typename T , typename DESCRIPTOR , int plane, int normal1, int normal2>
template<CONCEPT(Cell) CELL>
void olb::OuterVelocityEdgeProcessor3D< T, DESCRIPTOR, plane, normal1, normal2 >::apply ( CELL & cell)

Definition at line 166 of file boundaryPostProcessors3D.hh.

167{
168 using namespace olb::util::tensorIndices3D;
169
170 constexpr auto direction1 = (plane+1)%3;
171 constexpr auto direction2 = (plane+2)%3;
172
173 auto& dynamics = cell.getDynamics();
174
175 T rho10 = getNeighborRho(cell, 1,0);
176 T rho01 = getNeighborRho(cell, 0,1);
177 T rho20 = getNeighborRho(cell, 2,0);
178 T rho02 = getNeighborRho(cell, 0,2);
179 T rho = (T)2/(T)3*(rho01+rho10)-(T)1/(T)6*(rho02+rho20);
180
181 T dA_uB_[3][3];
182
183 interpolateGradients<plane,0> (cell, dA_uB_[0]);
184 interpolateGradients<direction1,normal1>(cell, dA_uB_[1]);
185 interpolateGradients<direction2,normal2>(cell, dA_uB_[2]);
186
187 T dA_uB[3][3];
188 for (int iBeta=0; iBeta<3; ++iBeta) {
189 dA_uB[plane][iBeta] = dA_uB_[0][iBeta];
190 dA_uB[direction1][iBeta] = dA_uB_[1][iBeta];
191 dA_uB[direction2][iBeta] = dA_uB_[2][iBeta];
192 }
193 T omega = dynamics.getOmegaOrFallback(std::numeric_limits<T>::signaling_NaN());
194 T sToPi = - rho / descriptors::invCs2<T,DESCRIPTOR>() / omega;
196 pi[xx] = (T)2 * dA_uB[0][0] * sToPi;
197 pi[yy] = (T)2 * dA_uB[1][1] * sToPi;
198 pi[zz] = (T)2 * dA_uB[2][2] * sToPi;
199 pi[xy] = (dA_uB[0][1]+dA_uB[1][0]) * sToPi;
200 pi[xz] = (dA_uB[0][2]+dA_uB[2][0]) * sToPi;
201 pi[yz] = (dA_uB[1][2]+dA_uB[2][1]) * sToPi;
202
203 // Computation of the particle distribution functions
204 // according to the regularized formula
205 T u[DESCRIPTOR::d];
206 cell.computeU(u);
207
208 for (int iPop = 0; iPop < DESCRIPTOR::q; ++iPop) {
209 cell[iPop] = dynamics.computeEquilibrium(iPop,rho,u)
210 + equilibrium<DESCRIPTOR>::template fromPiToFneq<T>(iPop, pi);
211 }
212}
Compute number of elements of a symmetric d-dimensional tensor.
Definition util.h:210

◆ getPriority()

template<typename T , typename DESCRIPTOR , int plane, int normal1, int normal2>
int olb::OuterVelocityEdgeProcessor3D< T, DESCRIPTOR, plane, normal1, normal2 >::getPriority ( ) const
inline

Definition at line 92 of file boundaryPostProcessors3D.h.

92 {
93 return 0;
94 }

Member Data Documentation

◆ scope

template<typename T , typename DESCRIPTOR , int plane, int normal1, int normal2>
constexpr OperatorScope olb::OuterVelocityEdgeProcessor3D< T, DESCRIPTOR, plane, normal1, normal2 >::scope = OperatorScope::PerCell
staticconstexpr

Definition at line 90 of file boundaryPostProcessors3D.h.


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