OpenLB 1.7
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Static Public Attributes | List of all members
olb::dynamics::Tuple< T, DESCRIPTOR, MOMENTA, EQUILIBRIUM, COLLISION, COMBINATION_RULE > Struct Template Referencefinal

Dynamics constructed as a tuple of momenta, equilibrium and collision. More...

#include <interface.h>

+ Inheritance diagram for olb::dynamics::Tuple< T, DESCRIPTOR, MOMENTA, EQUILIBRIUM, COLLISION, COMBINATION_RULE >:
+ Collaboration diagram for olb::dynamics::Tuple< T, DESCRIPTOR, MOMENTA, EQUILIBRIUM, COLLISION, COMBINATION_RULE >:

Public Types

using MomentaF = typename COMBINATION_RULE::template combined_momenta<DESCRIPTOR,MOMENTA>
 
using EquilibriumF = typename COMBINATION_RULE::template combined_equilibrium<DESCRIPTOR,MOMENTA,EQUILIBRIUM>
 
using CollisionO = typename COMBINATION_RULE::template combined_collision<DESCRIPTOR,MOMENTA,EQUILIBRIUM,COLLISION>
 
using parameters = typename COMBINATION_RULE::template combined_parameters<DESCRIPTOR,MOMENTA,EQUILIBRIUM,COLLISION>
 
template<typename NEW_MOMENTA >
using exchange_momenta
 
template<typename NEW_RULE >
using exchange_combination_rule
 
template<template< typename > typename WRAPPER>
using wrap_collision
 
- Public Types inherited from olb::Dynamics< T, DESCRIPTOR >
using value_t = T
 
using descriptor_t = DESCRIPTOR
 

Public Member Functions

std::type_index id () override
 Expose unique type-identifier for RTTI.
 
std::string getName () const override
 Return human-readable name.
 
template<typename FIELD >
constexpr bool hasParameter () const
 Return true iff FIELD is a parameter.
 
AbstractParameters< T, DESCRIPTOR > & getParameters (BlockLattice< T, DESCRIPTOR > &block) override
 Interim workaround for accessing dynamics parameters in legacy post processors.
 
void initialize (Cell< T, DESCRIPTOR > &cell) override
 Initialize MOMENTA-specific data for cell.
 
template<CONCEPT(MinimalCell) CELL, typename PARAMETERS , typename V = typename CELL::value_t>
CellStatistic< V > apply (CELL &cell, PARAMETERS &parameters) any_platform
 Apply purely-local collision step to a generic CELL.
 
computeEquilibrium (int iPop, T rho, const T u[DESCRIPTOR::d]) const override any_platform
 Return iPop equilibrium for given first and second momenta.
 
computeRho (ConstCell< T, DESCRIPTOR > &cell) const override
 Compute particle density.
 
void computeU (ConstCell< T, DESCRIPTOR > &cell, T u[DESCRIPTOR::d]) const override
 Compute fluid velocity.
 
void computeJ (ConstCell< T, DESCRIPTOR > &cell, T j[DESCRIPTOR::d]) const override
 Compute fluid momentum.
 
void computeStress (ConstCell< T, DESCRIPTOR > &cell, T rho, const T u[DESCRIPTOR::d], T pi[util::TensorVal< DESCRIPTOR >::n]) const override
 Compute stress tensor.
 
void computeRhoU (ConstCell< T, DESCRIPTOR > &cell, T &rho, T u[DESCRIPTOR::d]) const override
 Compute fluid velocity and particle density.
 
void computeAllMomenta (ConstCell< T, DESCRIPTOR > &cell, T &rho, T u[DESCRIPTOR::d], T pi[util::TensorVal< DESCRIPTOR >::n]) const override
 Compute all momenta up to second order.
 
void defineRho (Cell< T, DESCRIPTOR > &cell, T rho) override
 Set particle density.
 
void defineU (Cell< T, DESCRIPTOR > &cell, const T u[DESCRIPTOR::d]) override
 Set fluid velocity.
 
void defineRhoU (Cell< T, DESCRIPTOR > &cell, T rho, const T u[DESCRIPTOR::d]) override
 Define fluid velocity and particle density.
 
void defineAllMomenta (Cell< T, DESCRIPTOR > &cell, T rho, const T u[DESCRIPTOR::d], const T pi[util::TensorVal< DESCRIPTOR >::n]) override
 Define all momenta up to second order.
 
void inverseShiftRhoU (ConstCell< T, DESCRIPTOR > &cell, T &rho, T u[DESCRIPTOR::d]) const override
 Calculate population momenta s.t. the physical momenta are reproduced by the computeRhoU.
 
- Public Member Functions inherited from olb::Dynamics< T, DESCRIPTOR >
virtual ~Dynamics () any_platform
 
virtual CellStatistic< T > collide (Cell< T, DESCRIPTOR > &cell)
 Perform purely-local collision step on Cell interface (legacy, to be deprecated)
 
void iniEquilibrium (Cell< T, DESCRIPTOR > &cell, T rho, const T u[DESCRIPTOR::d])
 Initialize to equilibrium distribution.
 
void iniRegularized (Cell< T, DESCRIPTOR > &cell, T rho, const T u[DESCRIPTOR::d], const T pi[util::TensorVal< DESCRIPTOR >::n])
 Initialize cell to equilibrium and non-equilibrum part.
 

Static Public Attributes

static constexpr bool is_vectorizable = is_vectorizable_v<CollisionO>
 

Detailed Description

template<typename T, typename DESCRIPTOR, typename MOMENTA, typename EQUILIBRIUM, typename COLLISION, typename COMBINATION_RULE = DefaultCombination>
struct olb::dynamics::Tuple< T, DESCRIPTOR, MOMENTA, EQUILIBRIUM, COLLISION, COMBINATION_RULE >

Dynamics constructed as a tuple of momenta, equilibrium and collision.

Optionally also a combination rule thereof (e.g. a forcing scheme)

Definition at line 182 of file interface.h.

Member Typedef Documentation

◆ CollisionO

template<typename T , typename DESCRIPTOR , typename MOMENTA , typename EQUILIBRIUM , typename COLLISION , typename COMBINATION_RULE = DefaultCombination>
using olb::dynamics::Tuple< T, DESCRIPTOR, MOMENTA, EQUILIBRIUM, COLLISION, COMBINATION_RULE >::CollisionO = typename COMBINATION_RULE::template combined_collision<DESCRIPTOR,MOMENTA,EQUILIBRIUM,COLLISION>

Definition at line 185 of file interface.h.

◆ EquilibriumF

template<typename T , typename DESCRIPTOR , typename MOMENTA , typename EQUILIBRIUM , typename COLLISION , typename COMBINATION_RULE = DefaultCombination>
using olb::dynamics::Tuple< T, DESCRIPTOR, MOMENTA, EQUILIBRIUM, COLLISION, COMBINATION_RULE >::EquilibriumF = typename COMBINATION_RULE::template combined_equilibrium<DESCRIPTOR,MOMENTA,EQUILIBRIUM>

Definition at line 184 of file interface.h.

◆ exchange_combination_rule

template<typename T , typename DESCRIPTOR , typename MOMENTA , typename EQUILIBRIUM , typename COLLISION , typename COMBINATION_RULE = DefaultCombination>
template<typename NEW_RULE >
using olb::dynamics::Tuple< T, DESCRIPTOR, MOMENTA, EQUILIBRIUM, COLLISION, COMBINATION_RULE >::exchange_combination_rule
Initial value:
Tuple<
T, DESCRIPTOR,
MOMENTA, EQUILIBRIUM, COLLISION,
NEW_RULE
>

Definition at line 199 of file interface.h.

◆ exchange_momenta

template<typename T , typename DESCRIPTOR , typename MOMENTA , typename EQUILIBRIUM , typename COLLISION , typename COMBINATION_RULE = DefaultCombination>
template<typename NEW_MOMENTA >
using olb::dynamics::Tuple< T, DESCRIPTOR, MOMENTA, EQUILIBRIUM, COLLISION, COMBINATION_RULE >::exchange_momenta
Initial value:
Tuple<
T, DESCRIPTOR,
NEW_MOMENTA, EQUILIBRIUM, COLLISION,
COMBINATION_RULE
>

Definition at line 192 of file interface.h.

◆ MomentaF

template<typename T , typename DESCRIPTOR , typename MOMENTA , typename EQUILIBRIUM , typename COLLISION , typename COMBINATION_RULE = DefaultCombination>
using olb::dynamics::Tuple< T, DESCRIPTOR, MOMENTA, EQUILIBRIUM, COLLISION, COMBINATION_RULE >::MomentaF = typename COMBINATION_RULE::template combined_momenta<DESCRIPTOR,MOMENTA>

Definition at line 183 of file interface.h.

◆ parameters

template<typename T , typename DESCRIPTOR , typename MOMENTA , typename EQUILIBRIUM , typename COLLISION , typename COMBINATION_RULE = DefaultCombination>
using olb::dynamics::Tuple< T, DESCRIPTOR, MOMENTA, EQUILIBRIUM, COLLISION, COMBINATION_RULE >::parameters = typename COMBINATION_RULE::template combined_parameters<DESCRIPTOR,MOMENTA,EQUILIBRIUM,COLLISION>

Definition at line 187 of file interface.h.

◆ wrap_collision

template<typename T , typename DESCRIPTOR , typename MOMENTA , typename EQUILIBRIUM , typename COLLISION , typename COMBINATION_RULE = DefaultCombination>
template<template< typename > typename WRAPPER>
using olb::dynamics::Tuple< T, DESCRIPTOR, MOMENTA, EQUILIBRIUM, COLLISION, COMBINATION_RULE >::wrap_collision
Initial value:
Tuple<
T, DESCRIPTOR,
MOMENTA, EQUILIBRIUM, WRAPPER<COLLISION>,
COMBINATION_RULE
>

Definition at line 206 of file interface.h.

Member Function Documentation

◆ apply()

template<typename T , typename DESCRIPTOR , typename MOMENTA , typename EQUILIBRIUM , typename COLLISION , typename COMBINATION_RULE = DefaultCombination>
template<CONCEPT(MinimalCell) CELL, typename PARAMETERS , typename V = typename CELL::value_t>
CellStatistic< V > olb::dynamics::Tuple< T, DESCRIPTOR, MOMENTA, EQUILIBRIUM, COLLISION, COMBINATION_RULE >::apply ( CELL & cell,
PARAMETERS & parameters )
inline

Apply purely-local collision step to a generic CELL.

Definition at line 243 of file interface.h.

243 {
244 // Copy parameters to enable changes in composed dynamics
245 auto params = static_cast<
246 ParametersOfOperatorD<T,DESCRIPTOR,Tuple>&
247 >(parameters).template copyAs<V>();
248 return CollisionO().apply(cell, params);
249 };
typename COMBINATION_RULE::template combined_parameters< DESCRIPTOR, MOMENTA, EQUILIBRIUM, COLLISION > parameters
Definition interface.h:187
typename COMBINATION_RULE::template combined_collision< DESCRIPTOR, MOMENTA, EQUILIBRIUM, COLLISION > CollisionO
Definition interface.h:185

◆ computeAllMomenta()

template<typename T , typename DESCRIPTOR , typename MOMENTA , typename EQUILIBRIUM , typename COLLISION , typename COMBINATION_RULE = DefaultCombination>
void olb::dynamics::Tuple< T, DESCRIPTOR, MOMENTA, EQUILIBRIUM, COLLISION, COMBINATION_RULE >::computeAllMomenta ( ConstCell< T, DESCRIPTOR > & cell,
T & rho,
T u[DESCRIPTOR::d],
T pi[util::TensorVal< DESCRIPTOR >::n] ) const
inlineoverridevirtual

Compute all momenta up to second order.

Implements olb::Dynamics< T, DESCRIPTOR >.

Definition at line 271 of file interface.h.

272 {
273 MomentaF().computeAllMomenta(cell, rho, u, pi);
274 };
typename COMBINATION_RULE::template combined_momenta< DESCRIPTOR, MOMENTA > MomentaF
Definition interface.h:183

◆ computeEquilibrium()

template<typename T , typename DESCRIPTOR , typename MOMENTA , typename EQUILIBRIUM , typename COLLISION , typename COMBINATION_RULE = DefaultCombination>
T olb::dynamics::Tuple< T, DESCRIPTOR, MOMENTA, EQUILIBRIUM, COLLISION, COMBINATION_RULE >::computeEquilibrium ( int iPop,
T rho,
const T u[DESCRIPTOR::d] ) const
inlineoverridevirtual

Return iPop equilibrium for given first and second momenta.

Implements olb::Dynamics< T, DESCRIPTOR >.

Definition at line 251 of file interface.h.

251 {
252 return EquilibriumF().compute(iPop, rho, u);
253 };
typename COMBINATION_RULE::template combined_equilibrium< DESCRIPTOR, MOMENTA, EQUILIBRIUM > EquilibriumF
Definition interface.h:184

◆ computeJ()

template<typename T , typename DESCRIPTOR , typename MOMENTA , typename EQUILIBRIUM , typename COLLISION , typename COMBINATION_RULE = DefaultCombination>
void olb::dynamics::Tuple< T, DESCRIPTOR, MOMENTA, EQUILIBRIUM, COLLISION, COMBINATION_RULE >::computeJ ( ConstCell< T, DESCRIPTOR > & cell,
T j[DESCRIPTOR::d] ) const
inlineoverridevirtual

Compute fluid momentum.

Implements olb::Dynamics< T, DESCRIPTOR >.

Definition at line 261 of file interface.h.

261 {
262 MomentaF().computeJ(cell, j);
263 };

◆ computeRho()

template<typename T , typename DESCRIPTOR , typename MOMENTA , typename EQUILIBRIUM , typename COLLISION , typename COMBINATION_RULE = DefaultCombination>
T olb::dynamics::Tuple< T, DESCRIPTOR, MOMENTA, EQUILIBRIUM, COLLISION, COMBINATION_RULE >::computeRho ( ConstCell< T, DESCRIPTOR > & cell) const
inlineoverridevirtual

Compute particle density.

Implements olb::Dynamics< T, DESCRIPTOR >.

Definition at line 255 of file interface.h.

255 {
256 return MomentaF().computeRho(cell);
257 };

◆ computeRhoU()

template<typename T , typename DESCRIPTOR , typename MOMENTA , typename EQUILIBRIUM , typename COLLISION , typename COMBINATION_RULE = DefaultCombination>
void olb::dynamics::Tuple< T, DESCRIPTOR, MOMENTA, EQUILIBRIUM, COLLISION, COMBINATION_RULE >::computeRhoU ( ConstCell< T, DESCRIPTOR > & cell,
T & rho,
T u[DESCRIPTOR::d] ) const
inlineoverridevirtual

Compute fluid velocity and particle density.

Implements olb::Dynamics< T, DESCRIPTOR >.

Definition at line 268 of file interface.h.

268 {
269 MomentaF().computeRhoU(cell, rho, u);
270 };
+ Here is the caller graph for this function:

◆ computeStress()

template<typename T , typename DESCRIPTOR , typename MOMENTA , typename EQUILIBRIUM , typename COLLISION , typename COMBINATION_RULE = DefaultCombination>
void olb::dynamics::Tuple< T, DESCRIPTOR, MOMENTA, EQUILIBRIUM, COLLISION, COMBINATION_RULE >::computeStress ( ConstCell< T, DESCRIPTOR > & cell,
T rho,
const T u[DESCRIPTOR::d],
T pi[util::TensorVal< DESCRIPTOR >::n] ) const
inlineoverridevirtual

Compute stress tensor.

Implements olb::Dynamics< T, DESCRIPTOR >.

Definition at line 264 of file interface.h.

265 {
266 MomentaF().computeStress(cell, rho, u, pi);
267 };

◆ computeU()

template<typename T , typename DESCRIPTOR , typename MOMENTA , typename EQUILIBRIUM , typename COLLISION , typename COMBINATION_RULE = DefaultCombination>
void olb::dynamics::Tuple< T, DESCRIPTOR, MOMENTA, EQUILIBRIUM, COLLISION, COMBINATION_RULE >::computeU ( ConstCell< T, DESCRIPTOR > & cell,
T u[DESCRIPTOR::d] ) const
inlineoverridevirtual

Compute fluid velocity.

Implements olb::Dynamics< T, DESCRIPTOR >.

Definition at line 258 of file interface.h.

258 {
259 MomentaF().computeU(cell, u);
260 };

◆ defineAllMomenta()

template<typename T , typename DESCRIPTOR , typename MOMENTA , typename EQUILIBRIUM , typename COLLISION , typename COMBINATION_RULE = DefaultCombination>
void olb::dynamics::Tuple< T, DESCRIPTOR, MOMENTA, EQUILIBRIUM, COLLISION, COMBINATION_RULE >::defineAllMomenta ( Cell< T, DESCRIPTOR > & cell,
T rho,
const T u[DESCRIPTOR::d],
const T pi[util::TensorVal< DESCRIPTOR >::n] )
inlineoverridevirtual

Define all momenta up to second order.

Implements olb::Dynamics< T, DESCRIPTOR >.

Definition at line 285 of file interface.h.

286 {
287 MomentaF().defineAllMomenta(cell, rho, u, pi);
288 };

◆ defineRho()

template<typename T , typename DESCRIPTOR , typename MOMENTA , typename EQUILIBRIUM , typename COLLISION , typename COMBINATION_RULE = DefaultCombination>
void olb::dynamics::Tuple< T, DESCRIPTOR, MOMENTA, EQUILIBRIUM, COLLISION, COMBINATION_RULE >::defineRho ( Cell< T, DESCRIPTOR > & cell,
T rho )
inlineoverridevirtual

Set particle density.

Implements olb::Dynamics< T, DESCRIPTOR >.

Definition at line 276 of file interface.h.

276 {
277 MomentaF().defineRho(cell, rho);
278 };

◆ defineRhoU()

template<typename T , typename DESCRIPTOR , typename MOMENTA , typename EQUILIBRIUM , typename COLLISION , typename COMBINATION_RULE = DefaultCombination>
void olb::dynamics::Tuple< T, DESCRIPTOR, MOMENTA, EQUILIBRIUM, COLLISION, COMBINATION_RULE >::defineRhoU ( Cell< T, DESCRIPTOR > & cell,
T rho,
const T u[DESCRIPTOR::d] )
inlineoverridevirtual

Define fluid velocity and particle density.

Implements olb::Dynamics< T, DESCRIPTOR >.

Definition at line 282 of file interface.h.

282 {
283 MomentaF().defineRhoU(cell, rho, u);
284 };

◆ defineU()

template<typename T , typename DESCRIPTOR , typename MOMENTA , typename EQUILIBRIUM , typename COLLISION , typename COMBINATION_RULE = DefaultCombination>
void olb::dynamics::Tuple< T, DESCRIPTOR, MOMENTA, EQUILIBRIUM, COLLISION, COMBINATION_RULE >::defineU ( Cell< T, DESCRIPTOR > & cell,
const T u[DESCRIPTOR::d] )
inlineoverridevirtual

Set fluid velocity.

Implements olb::Dynamics< T, DESCRIPTOR >.

Definition at line 279 of file interface.h.

279 {
280 MomentaF().defineU(cell, u);
281 };

◆ getName()

template<typename T , typename DESCRIPTOR , typename MOMENTA , typename EQUILIBRIUM , typename COLLISION , typename COMBINATION_RULE = DefaultCombination>
std::string olb::dynamics::Tuple< T, DESCRIPTOR, MOMENTA, EQUILIBRIUM, COLLISION, COMBINATION_RULE >::getName ( ) const
inlineoverridevirtual

Return human-readable name.

Reimplemented from olb::Dynamics< T, DESCRIPTOR >.

Definition at line 216 of file interface.h.

216 {
217 return "dynamics::Tuple<"
218 + MomentaF().getName() + ","
219 + EQUILIBRIUM::getName() + ","
220 + COLLISION::getName() + ","
221 + COMBINATION_RULE::getName() +
222 ">";
223 };

◆ getParameters()

template<typename T , typename DESCRIPTOR , typename MOMENTA , typename EQUILIBRIUM , typename COLLISION , typename COMBINATION_RULE = DefaultCombination>
AbstractParameters< T, DESCRIPTOR > & olb::dynamics::Tuple< T, DESCRIPTOR, MOMENTA, EQUILIBRIUM, COLLISION, COMBINATION_RULE >::getParameters ( BlockLattice< T, DESCRIPTOR > & block)
inlineoverridevirtual

Interim workaround for accessing dynamics parameters in legacy post processors.

Implements olb::Dynamics< T, DESCRIPTOR >.

Definition at line 232 of file interface.h.

232 {
233 return block.template getData<OperatorParameters<Tuple>>();
234 }

◆ hasParameter()

template<typename T , typename DESCRIPTOR , typename MOMENTA , typename EQUILIBRIUM , typename COLLISION , typename COMBINATION_RULE = DefaultCombination>
template<typename FIELD >
constexpr bool olb::dynamics::Tuple< T, DESCRIPTOR, MOMENTA, EQUILIBRIUM, COLLISION, COMBINATION_RULE >::hasParameter ( ) const
inlineconstexpr

Return true iff FIELD is a parameter.

Definition at line 227 of file interface.h.

227 {
228 return parameters::template contains<FIELD>();
229 };

◆ id()

template<typename T , typename DESCRIPTOR , typename MOMENTA , typename EQUILIBRIUM , typename COLLISION , typename COMBINATION_RULE = DefaultCombination>
std::type_index olb::dynamics::Tuple< T, DESCRIPTOR, MOMENTA, EQUILIBRIUM, COLLISION, COMBINATION_RULE >::id ( )
inlineoverridevirtual

Expose unique type-identifier for RTTI.

Implements olb::Dynamics< T, DESCRIPTOR >.

Definition at line 212 of file interface.h.

212 {
213 return typeid(Tuple);
214 }

◆ initialize()

template<typename T , typename DESCRIPTOR , typename MOMENTA , typename EQUILIBRIUM , typename COLLISION , typename COMBINATION_RULE = DefaultCombination>
void olb::dynamics::Tuple< T, DESCRIPTOR, MOMENTA, EQUILIBRIUM, COLLISION, COMBINATION_RULE >::initialize ( Cell< T, DESCRIPTOR > & cell)
inlineoverridevirtual

Initialize MOMENTA-specific data for cell.

Reimplemented from olb::Dynamics< T, DESCRIPTOR >.

Definition at line 237 of file interface.h.

237 {
238 MomentaF().initialize(cell);
239 };

◆ inverseShiftRhoU()

template<typename T , typename DESCRIPTOR , typename MOMENTA , typename EQUILIBRIUM , typename COLLISION , typename COMBINATION_RULE = DefaultCombination>
void olb::dynamics::Tuple< T, DESCRIPTOR, MOMENTA, EQUILIBRIUM, COLLISION, COMBINATION_RULE >::inverseShiftRhoU ( ConstCell< T, DESCRIPTOR > & cell,
T & rho,
T u[DESCRIPTOR::d] ) const
inlineoverridevirtual

Calculate population momenta s.t. the physical momenta are reproduced by the computeRhoU.

Reimplemented from olb::Dynamics< T, DESCRIPTOR >.

Definition at line 289 of file interface.h.

289 {
290 MomentaF().inverseShiftRhoU(cell, rho, u);
291 }

Member Data Documentation

◆ is_vectorizable

template<typename T , typename DESCRIPTOR , typename MOMENTA , typename EQUILIBRIUM , typename COLLISION , typename COMBINATION_RULE = DefaultCombination>
constexpr bool olb::dynamics::Tuple< T, DESCRIPTOR, MOMENTA, EQUILIBRIUM, COLLISION, COMBINATION_RULE >::is_vectorizable = is_vectorizable_v<CollisionO>
staticconstexpr

Definition at line 189 of file interface.h.


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