Force models

Get started:

This module offers different models to introduce a body force in the lattice Boltzmann scheme. If you don’t know which model to choose, use lbmpy.forcemodels.Schiller. For incompressible collision models the lbmpy.forcemodels.Buick model can be better.

Detailed information:

Force models add a term \(C_F\) to the collision equation:

\[f(\pmb{x} + c_q \Delta t, t + \Delta t) - f(\pmb{x},t) = \Omega(f, f^{(eq)}) + \underbrace{F_q}_{\mbox{forcing term}}\]

The form of this term depends on the concrete force model: the first moment of this forcing term is equal to the acceleration \(\pmb{a}\) for all force models.

\[\sum_q \pmb{c}_q F_q = \pmb{a}\]

The second order moment is different for the forcing models - if it is zero the model is suited for incompressible flows. For weakly compressible collision operators a force model with a corrected second order moment should be chosen.

\[ \begin{align}\begin{aligned}\sum_q c_{qi} c_{qj} f_q = F_i u_j + F_j u_i \hspace{1cm} \mbox{for Guo, Luo models}\\\sum_q c_{qi} c_{qj} f_q = 0 \hspace{1cm} \mbox{for Simple, Buick}\end{aligned}\end{align} \]

Models with zero second order moment have:

\[F_q = \frac{w_q}{c_s^2} c_{qi} \; a_i\]

Models with nonzero second moment have:

\[F_q = \frac{w_q}{c_s^2} c_{qi} \; a_i + \frac{w_q}{c_s^4} (c_{qi} c_{qj} - c_s^2 \delta_{ij} ) u_j \, a_i\]

For all force models the computation of the macroscopic velocity has to be adapted (shifted) by adding a term \(S_{macro}\) that we call “macroscopic velocity shift”

\[ \begin{align}\begin{aligned}\pmb{u} = \sum_q \pmb{c}_q f_q + S_{macro}\\S_{macro} = \frac{\Delta t}{2} \sum_q F_q\end{aligned}\end{align} \]

Some models also shift the velocity entering the equilibrium distribution.


Force models can be distinguished by 2 options:

Option 1:

\(C_F = 1\) and equilibrium velocity is not shifted, or \(C_F=(1 - \frac{\omega}{2})\) and equilibrum is shifted.

Option 2:

second velocity moment is zero or \(F_i u_j + F_j u_i\)

Option2 \ Option1

no equilibrium shift

equilibrium shift

second moment zero



second moment nonzero



class Simple(force)

A simple force model which introduces the following additional force term in the collision process \(\frac{w_q}{c_s^2} c_{qi} \; a_i\) (often: force = rho * acceleration) Should only be used with constant forces! Shifts the macroscopic velocity by F/2, but does not change the equilibrium velocity.

class Luo(force)

Force model by Luo [Luo93].

Shifts the macroscopic velocity by F/2, but does not change the equilibrium velocity.

class Guo(force)

Force model by Guo [GZS02] Adapts the calculation of the macroscopic velocity as well as the equilibrium velocity (both shifted by F/2)!

class Schiller(force)

Force model by Schiller [Sch08], equation 4.67 Equivalent to Guo but not restricted to SRT.

class Buick(force)

This force model [BG00] has a force term with zero second moment. It is suited for incompressible lattice models.

class EDM(force)

Exact differencing force model