OpenLB 1.7
Loading...
Searching...
No Matches
Public Types | Public Member Functions | List of all members
olb::forcing::LaddVerberg::combined_collision< DESCRIPTOR, MOMENTA, EQUILIBRIUM, COLLISION > Struct Template Reference

#include <collisionMRT.h>

+ Collaboration diagram for olb::forcing::LaddVerberg::combined_collision< DESCRIPTOR, MOMENTA, EQUILIBRIUM, COLLISION >:

Public Types

using MomentaF = typename MOMENTA::template type<DESCRIPTOR>
 
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 DESCRIPTOR, typename MOMENTA, typename EQUILIBRIUM, typename COLLISION>
struct olb::forcing::LaddVerberg::combined_collision< DESCRIPTOR, MOMENTA, EQUILIBRIUM, COLLISION >

Definition at line 101 of file collisionMRT.h.

Member Typedef Documentation

◆ CollisionO

template<typename DESCRIPTOR , typename MOMENTA , typename EQUILIBRIUM , typename COLLISION >
using olb::forcing::LaddVerberg::combined_collision< DESCRIPTOR, MOMENTA, EQUILIBRIUM, COLLISION >::CollisionO = typename COLLISION::template type<DESCRIPTOR,MOMENTA,EQUILIBRIUM>

Definition at line 103 of file collisionMRT.h.

◆ MomentaF

template<typename DESCRIPTOR , typename MOMENTA , typename EQUILIBRIUM , typename COLLISION >
using olb::forcing::LaddVerberg::combined_collision< DESCRIPTOR, MOMENTA, EQUILIBRIUM, COLLISION >::MomentaF = typename MOMENTA::template type<DESCRIPTOR>

Definition at line 102 of file collisionMRT.h.

Member Function Documentation

◆ apply()

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

Definition at line 106 of file collisionMRT.h.

106 {
107 V rho, u[DESCRIPTOR::d];
108 MomentaF().computeRhoU(cell, rho, u);
109 const auto statistic = CollisionO().apply(cell, parameters);
110 const V omega = parameters.template get<descriptors::OMEGA>();
111 // While this duplication can be resolved using CSE it should be extracted into a helper
112 V rt[DESCRIPTOR::q] { }; // relaxation times vector.
113 for (int iPop=0; iPop < DESCRIPTOR::q; ++iPop) {
114 rt[iPop] = descriptors::s<V,DESCRIPTOR>(iPop);
115 }
116 for (int iPop=0; iPop < descriptors::shearIndexes<DESCRIPTOR>(); ++iPop) {
117 rt[descriptors::shearViscIndexes<DESCRIPTOR>(iPop)] = omega;
118 }
119 V invM_S[DESCRIPTOR::q][DESCRIPTOR::q]; // relaxation times matrix
120 for (int iPop = 0; iPop < DESCRIPTOR::q; ++iPop) {
121 for (int jPop = 0; jPop < DESCRIPTOR::q; ++jPop) {
122 invM_S[iPop][jPop] = V{};
123 for (int kPop = 0; kPop < DESCRIPTOR::q; ++kPop) {
124 if (kPop == jPop) {
125 invM_S[iPop][jPop] += descriptors::invM<V,DESCRIPTOR>(iPop,kPop) * rt[kPop];
126 }
127 }
128 }
129 }
130 const auto force = cell.template getField<descriptors::FORCE>();
131 mrt<DESCRIPTOR>::addExternalForce(cell, rho, u, invM_S, force);
132 return statistic;
133 };
typename COLLISION::template type< DESCRIPTOR, MOMENTA, EQUILIBRIUM > CollisionO
typename MOMENTA::template type< DESCRIPTOR > MomentaF
static void addExternalForce(CELL &cell, const RHO &rho, const U &u, const INVM_S &invM_S, const FORCE &force)
Ladd-Verberg-I body force model for MRT A.Ladd, R.
Definition mrt.h:138

References olb::mrt< DESCRIPTOR >::addExternalForce().

+ Here is the call graph for this function:

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