OpenLB 1.8.1
Loading...
Searching...
No Matches
olb::collision::PSM< COLLISION >::type< DESCRIPTOR, MOMENTA, EQUILIBRIUM > Struct Template Reference

#include <porousBGKdynamics.h>

+ Collaboration diagram for olb::collision::PSM< COLLISION >::type< DESCRIPTOR, MOMENTA, EQUILIBRIUM >:

Public Types

using MomentaF = typename MOMENTA::template type<DESCRIPTOR>
 
using EquilibriumF = typename EQUILIBRIUM::template type<DESCRIPTOR,MOMENTA>
 
using CollisionO = typename COLLISION::template type<DESCRIPTOR,MOMENTA,EQUILIBRIUM>
 

Public Member Functions

template<typename CELL , typename PARAMETERS , typename V = typename CELL::value_t>
CellStatistic< V > apply (CELL &cell, PARAMETERS &parameters)
 

Detailed Description

template<typename COLLISION>
template<typename DESCRIPTOR, typename MOMENTA, typename EQUILIBRIUM>
struct olb::collision::PSM< COLLISION >::type< DESCRIPTOR, MOMENTA, EQUILIBRIUM >

Definition at line 224 of file porousBGKdynamics.h.

Member Typedef Documentation

◆ CollisionO

template<typename COLLISION >
template<typename DESCRIPTOR , typename MOMENTA , typename EQUILIBRIUM >
using olb::collision::PSM< COLLISION >::type< DESCRIPTOR, MOMENTA, EQUILIBRIUM >::CollisionO = typename COLLISION::template type<DESCRIPTOR,MOMENTA,EQUILIBRIUM>

Definition at line 227 of file porousBGKdynamics.h.

◆ EquilibriumF

template<typename COLLISION >
template<typename DESCRIPTOR , typename MOMENTA , typename EQUILIBRIUM >
using olb::collision::PSM< COLLISION >::type< DESCRIPTOR, MOMENTA, EQUILIBRIUM >::EquilibriumF = typename EQUILIBRIUM::template type<DESCRIPTOR,MOMENTA>

Definition at line 226 of file porousBGKdynamics.h.

◆ MomentaF

template<typename COLLISION >
template<typename DESCRIPTOR , typename MOMENTA , typename EQUILIBRIUM >
using olb::collision::PSM< COLLISION >::type< DESCRIPTOR, MOMENTA, EQUILIBRIUM >::MomentaF = typename MOMENTA::template type<DESCRIPTOR>

Definition at line 225 of file porousBGKdynamics.h.

Member Function Documentation

◆ apply()

template<typename COLLISION >
template<typename DESCRIPTOR , typename MOMENTA , typename EQUILIBRIUM >
template<typename CELL , typename PARAMETERS , typename V = typename CELL::value_t>
CellStatistic< V > olb::collision::PSM< COLLISION >::type< DESCRIPTOR, MOMENTA, EQUILIBRIUM >::apply ( CELL & cell,
PARAMETERS & parameters )
inline

Definition at line 230 of file porousBGKdynamics.h.

230 {
231 V rho, u[DESCRIPTOR::d];
232 const V epsilon = 1. - cell.template getField<descriptors::POROSITY>();
233 const V omega = parameters.template get<descriptors::OMEGA>();
234 const V paramA = V{1.} / omega - V{0.5};
235 MomentaF().computeRhoU(cell, rho, u);
236 // velocity at the boundary
237 auto u_s = cell.template getField<descriptors::VELOCITY_SOLID>();
238 if (epsilon < 1e-5) {
239 return CollisionO().apply(cell, parameters);
240 }
241 else {
242 // speed up paramB
243 V paramB = (epsilon * paramA) / ((1. - epsilon) + paramA);
244 // speed up paramC
245 V paramC = (1. - paramB);
246 V omega_s[DESCRIPTOR::q];
247 V cell_tmp[DESCRIPTOR::q];
248
249 V fEq[DESCRIPTOR::q] { };
250 V fEq_s[DESCRIPTOR::q] { };
251 EquilibriumF().compute(cell, rho, u, fEq);
252 EquilibriumF().compute(cell, rho, u_s, fEq_s);
253 for (int iPop=0; iPop < DESCRIPTOR::q; ++iPop) {
254 cell_tmp[iPop] = cell[iPop];
256 //if constexpr (MODE == 2) {
257 omega_s[iPop] = (fEq_s[iPop] - cell[iPop]) + (V{1} - omega) * (cell[iPop] - fEq[iPop]);
258 //} else if constexpr (MODE == 3) {
259 // omega_s[iPop] = (cell[descriptors::opposite<DESCRIPTOR>(iPop)] - fEq_s[descriptors::opposite<DESCRIPTOR>(iPop)])
260 // - (cell[iPop] - fEq_s[iPop]);
261 //}
262 }
263 CollisionO().apply(cell, parameters);
264 for (int iPop=0; iPop < DESCRIPTOR::q; ++iPop) {
265 cell[iPop] = cell_tmp[iPop] + paramC * (cell[iPop] - cell_tmp[iPop]);
266 cell[iPop] += paramB * omega_s[iPop];
267 }
268 for (int iVel=0; iVel<DESCRIPTOR::d; ++iVel) {
269 u[iVel] = paramC * u[iVel] + paramB * u_s[iVel];
270 }
271 }
272
273 return {rho, util::normSqr<V,DESCRIPTOR::d>(u)};
274 }
auto normSqr(const ARRAY_LIKE &u) any_platform
Compute norm square of a d-dimensional vector.
Definition util.h:145
typename MOMENTA::template type< DESCRIPTOR > MomentaF
typename EQUILIBRIUM::template type< DESCRIPTOR, MOMENTA > EquilibriumF
typename COLLISION::template type< DESCRIPTOR, MOMENTA, EQUILIBRIUM > CollisionO
typename meta::list< descriptors::OMEGA > parameters

References olb::util::normSqr().

+ Here is the call graph for this function:

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