# Lattice Boltzmann methods

Lattice Boltzmann methods (LBM) (or Thermal Lattice Boltzmann methods (TLBM)) is a class of computational fluid dynamics (CFD) methods for fluid simulation. Instead of solving the Navier–Stokes equations, the discrete Boltzmann equation is solved to simulate the flow of a Newtonian fluid with collision models such as Bhatnagar-Gross-Krook (BGK). By simulating streaming and collision processes across a limited number of particles, the intrinsic particle interactions evince a microcosm of viscous flow behavior applicable across the greater mass.

## Algorithm

LBM is a relatively new simulation technique for complex fluid systems and has attracted interest from researchers in computational physics. Unlike the traditional CFD methods, which solve the conservation equations of macroscopic properties (i.e., mass, momentum, and energy) numerically, LBM models the fluid consisting of fictive particles, and such particles perform consecutive propagation and collision processes over a discrete lattice mesh. Due to its particulate nature and local dynamics, LBM has several advantages over other conventional CFD methods, especially in dealing with complex boundaries, incorporating microscopic interactions, and parallelization of the algorithm.[citation needed] A different interpretation of the lattice Boltzmann equation is that of a discrete-velocity Boltzmann equation. The numerical methods of solution of the system of partial differential equations then gives rise to a discrete map, which can be interpreted as the propagation and collision of fictitious particles.

In the computer algorithm, the collision and streaming step are defined as follows:

Collision step: $f_i^t(\vec{x},t+\delta_t) = f_i(\vec{x},t) + \frac{1}{\tau_f} (f_i^{eq}-f_i)\,\!$

Streaming step: $f_i(\vec{x}+\vec{e}_i\delta_t,t+\delta_t) =f_i^t(\vec{x},t+\delta_t) \,\!$

Here i are the directions of momentum.

## Development from the LGA method

LBM originated from the lattice gas automata (LGA) method, which can be considered as a simplified fictitious molecular dynamics model in which space, time, and particle velocities are all discrete. For example, in the 2-dimensional FHP Model each lattice node is connected to its neighbors by 6 lattice velocities on a triangular lattice; there can be either 0 or 1 particles at a lattice node moving with a given lattice velocity. After a time interval, each particle will move to the neighboring node in its direction; this process is called the propagation or streaming step. When more than one particle arrives at the same node from different directions, they collide and change their velocities according to a set of collision rules. Streaming steps and collision steps alternate. Suitable collision rules should conserve the particle number (mass), momentum, and energy before and after the collision. LGA suffer from several innate defects for use in hydrodynamic simulations: lack of Galilean invariance for fast flows, statistical noise and poor Reynolds number scaling with lattice size. LGA are, however, well suited to simplify and extend the reach of reaction diffusion and molecular dynamics models.

The main motivation for the transition from LGA to LBM was the desire to remove the statistical noise by replacing the Boolean particle number in a lattice direction with its ensemble average, the so-called density distribution function. Accompanying this replacement, the discrete collision rule is also replaced by a continuous function known as the collision operator. In the LBM development, an important simplification is to approximate the collision operator with the Bhatnagar-Gross-Krook (BGK) relaxation term. This lattice BGK (LBGK) model makes simulations more efficient and allows flexibility of the transport coefficients. On the other hand, it has been shown that the LBM scheme can also be considered as a special discretized form of the continuous Boltzmann equation. From Chapman-Enskog theory, one can recover the governing continuity and Navier–Stokes equations from the LBM algorithm. In addition, the pressure field is also directly available from the density distributions and hence there is no extra Poisson equation to be solved as in traditional CFD methods.

## Lattices and the DnQm classification

Lattice Boltzmann models can be operated on a number of different lattices, both cubic and triangular, and with or without rest particles in the discrete distribution function.

A popular way of classifying the different methods by lattice is the DnQm scheme. Here "Dn" stands for "n dimensions" while "Qm" stands for "m speeds". For example, D3Q15 is a three-dimensional Lattice Boltzmann model on a cubic grid, with rest particles present. Each node has a crystal shape, and can deliver particles to each of the six neighboring nodes which share a surface, the eight neighboring nodes sharing a corner, and itself.[1] (The D3Q15 model does not contain particles moving to the twelve neighboring nodes which share an edge; adding those would create a "D3Q27" model.)

Real quantities as space and time need to be converted to lattice units prior to simulation. Nondimensional quantities as the Reynolds number remain the same.

## Lattice units conversion

In most lattice Boltzmann simulations $\delta_x\,\!$ is the basic unit for lattice spacing, so if the domain of length $L\,\!$ has $N\,\!$ lattice units along its entire length, the space unit is simply defined as $\delta_x=L/N\,\!$. Speeds in lattice Boltzmann simulations are typically given in terms of the speed of sound. The discrete time unit can therefore be given as $\delta_t = \frac{\delta_x}{C_s}\,\!$, where the denominator $C_s$ is the physical speed of sound.[2]

For small-scale flows (such as those seen in porous media mechanics), operating with the true speed of sound can lead to unacceptably short time steps. It is therefore common to raise the lattice Mach number to something much larger than the real Mach number, and compensating for this by raising the viscosity as well in order to preserve the Reynolds number.[3]

## Simulation of mixtures

Simulating multiphase/multicomponent flows has always been a challenge to conventional CFD because of the moving and deformable interfaces. More fundamentally, the interfaces between different phases (liquid and vapor) or components (e.g., oil and water) originate from the specific interactions among fluid molecules. Therefore it is difficult to implement such microscopic interactions into the macroscopic Navier–Stokes equation. However, in LBM, the particulate kinetics provides a relatively easy and consistent way to incorporate the underlying microscopic interactions by modifying the collision operator. Several LBM multiphase/multicomponent models have been developed. Here phase separations are generated automatically from the particle dynamics and no special treatment is needed to manipulate the interfaces as in traditional CFD methods. Successful applications of multiphase/multicomponent LBM models can be found in various complex fluid systems, including interface instability, bubble/droplet dynamics, wetting on solid surfaces, interfacial slip, and droplet electrohydrodynamic deformations.

## Thermal Lattice-Boltzmann Method

Currently (2009), a thermal lattice-Boltzmann method (TLBM) falls into one of three categories: the multi-speed approach,[4] the passive scalar approach,[5] and the thermal energy distribution.[6]

## Limitations

Despite the increasing popularity of LBM in simulating complex fluid systems, this novel approach has some limitations. At present, high-Mach number flows in aerodynamics are still difficult for LBM, and a consistent thermo-hydrodynamic scheme is absent. However, as with Navier–Stokes based CFD, LBM methods have been successfully coupled to thermal-specific solutions to enable heat transfer (solids-based conduction, convection and radiation) simulation capability. For multiphase/multicomponent models, the interface thickness is usually large and the density ratio across the interface is small when compared with real fluids. Recently this problem has been resolved by Yuan and Schaefer who improved on models by Shan and Chen, Swift, and He, Chen, and Zhang. They were able to reach density ratios of 1000:1 by simply changing the equation of state.

Nevertheless, the wide applications and fast advancements of this method during the past twenty years have proven its potential in computational physics, including microfluidics: LBM demonstrates promising results in the area of high Knudsen number flows.

## Derivation of Navier–Stokes equation from Discrete LBE

Starting with the discrete lattice Boltzmann equation (also referred to as LBGK equation due to the collision operator used). We first do a $2^{nd}\,\!$ order Taylor series expansion about the left side of the LBE. This is chosen over a simpler $1^{st}\,\!$ order Taylor expansion as the discrete LBE cannot be recovered. When doing the $2^{nd}\,\!$ order Taylor series expansion, the zero derivative term and the first term on the right will cancel leaving only the first and second derivative terms of the Taylor expansion and the collision operator.

$f_i(\vec{x}+\vec{e}_i\delta_t,t+\delta_t) = f_i(\vec{x},t) + \frac{1}{\tau_f} (f_i^{eq}-f_i)$

For simplicity, write $f_i(\vec{x},t)$ as $f_i\,\!$. The slightly simplified Taylor series expansion is then as follows where ":" is the colon product between dyads.

$\frac{\part f_i}{\part t} +\vec{e}_i \nabla f_i+ \left (\frac{1}{2}\vec{e}_i\vec{e}_i : \nabla\nabla f_i +\vec{e}_i\cdot\nabla\frac{\part f_i}{\part t} +\frac{1}{2}\frac{\part^2 f_i}{\part t^2} \right ) =\frac{1}{\tau}(f_i^{eq}-f_i)$

By expanding the particle distribution function into equilibrium and non-equilibrium components and using the Chapman-Enskog Expansion where $K\,\!$ is the Knudsen number, the Taylor expanded LBE can be decomposed into different magnitudes of order for the Knudsen number in order to obtain the proper continuum equations.

$f_i=f_i^{eq}+K f_i^{neq}\,\!$
$f_i^{neq}= f_i^{(1)}+K f_i^{(2)}+O(K^2)$

The equilibrium and non-equilibrium distributions satisfy the following relations to their macroscopic variables. These will be used later once the particle distributions are in the 'correct form' in order to scale from the particle to macroscopic level.

$\rho = \sum_i f_i^{eq}$
$\rho \vec{u} = \sum_i f_i^{eq} \vec{e}_i$
$0 = \sum_i f_i^{(k)} \qquad s.t.\ k=1,2\,\!$
$0 = \sum_i f_i^{(k)} \vec{e}_i$

The Chapman-Enskog Expansion is then:

$\frac{\part}{\part t}=K\frac{\part}{\part t_1}+K^2\frac{\part}{\part t_2} \qquad s.t.\ t_2(\text{diffusive time-scale}) \ll t_1(\text{convective time-scale})$
$\frac{\part}{\part x}=K\frac{\part}{\part x_1}$.

By substituting the expanded equilibrium and non-equilibrium into the Taylor expansion and separating into different orders of $K\,\!$, the continuum equations are nearly derived.

For order, $K^0\,\!$:

$\frac{\part f_i^{eq}}{\part t_1} +\vec{e}_i \nabla_1 f_i^{eq} =-\frac{f_i^{(1)}}{\tau}$

For order, $K^1\,\!$:

$\frac{\part f_i^{(1)}}{\part t_1}+\frac{\part f_i^{eq}}{\part t_2} +\vec{e}_i \nabla f_i^{(1)}+ \frac{1}{2}\vec{e}_i\vec{e}_i : \nabla\nabla f_i^{eq} +\vec{e}_i\cdot\nabla\frac{\part f_i^{eq}}{\part t_1} +\frac{1}{2}\frac{\part^2 f_i^{eq}}{\part t_1^2} =-\frac{f_i^{(2)}}{\tau}$

Then, the second equation can be simplified with some algebra and the first equation into the following.

$\frac{\part f_i^{(eq)}}{\part t_2} +\left ( 1-\frac{1}{2 \tau} \right ) \left [ \frac{\part f_i^{(1)}}{\part t_1}+\vec{e}_i \nabla_1 f_i^{(1)}\right ] =-\frac{f_i^{(2)}}{\tau}$

Applying the relations between the particle distribution functions and the macroscopic properties from above, the mass and momentum equations are achieved.

$\frac{\part \rho}{\part t} +\nabla \cdot \rho \vec{u} = 0$
$\frac{\part \rho\vec{u}}{\part t} +\nabla \cdot \Pi = 0$

The momentum flux tensor, $\Pi\,\!$, has the following form then.

$\Pi_{xy} = \sum_{i}\vec{e}_{ix}\vec{e}_{iy}\left[ f_i^{eq} + \left( 1 - \frac{1}{2 \tau} \right) f_i^{(1)} \right] \,\!$

Where $\vec{e}_{ix}\vec{e}_{iy}$ is shorthand for the square of the sum of all the components of $\vec{e}_{i}$ (i.e. $\textstyle\left(\sum_{x}\vec{e}_{ix}\right)^2 = \sum_{x}\sum_{y}\vec{e}_{ix}\vec{e}_{iy}$) and the equilibrium particle distribution with second order in order to be comparable to the Navier Stokes equation is:

$f_i^{eq}=\omega_i\rho \left (1+\frac{3\vec{e}_i\vec{u}}{c^2}+\frac{9(\vec{e}_i\vec{u})^2}{2c^4}- \frac{3(\vec{u})^2}{2c^2} \right)$.

The equilibirum distribution is only valid for small velocities or small Mach numbers. Inserting the equilibrium distribution back into the flux tensor leads to:

$\Pi_{xy}^{(0)} = \sum_{i}\vec{e}_{ix}\vec{e}_{iy} f_i^{eq} =p\delta_{xy}+\rho u_x u_y \,\!$
$\Pi_{xy}^{(1)} =\left( 1 - \frac{1}{2 \tau} \right) \sum_{i}\vec{e}_{ix}\vec{e}_{iy} f_i^{(1)} =\nu\left(\nabla_x \left( \rho \vec{u}_y \right) +\nabla_y \left( \rho \vec{u}_x \right)\right)\,\!$

Finally, the Navier–Stokes equation is recovered under the assumption that density variation is small.

$\rho \left( \frac{\part \vec{u}_{x}}{\part t} + \nabla_{y}\cdot\vec{u}_{x}\vec{u}_{y}\right)= -\nabla_{x}p+\nu\nabla_{y}\cdot\left(\nabla_x \left( \rho \vec{u}_y \right) +\nabla_y \left( \rho \vec{u}_x \right)\right) \,\!$

This derivation follows the work of Chen and Doolen.[7]

## Mathematical Equations for Simulations

The continuous Boltzmann equation is an evolution equation for a single particle probability distribution function $f(\vec{x},\vec{e}_i,t)\,\!$ and the internal energy density distribution function $g(\vec{x},\vec{e}_i,t)\,\!$ (He et al.) are each respectively:

$\partial_t f + (\vec{e}\cdot \nabla) f + F\partial_v f=\Omega(f)$
$\partial_t g + (\vec{e}\cdot \nabla) g + G\partial_v f=\Omega(g)$

where $g(\vec{x},\vec{e}_i,t)\,\!$ is related to $f(\vec{x},\vec{e}_i,t)\,\!$ by:

$g(\vec{x},\vec{e}_i,t) = \frac{(\vec{e}-\vec{u})^2}{2}f(\vec{x},\vec{e}_i,t)$

$F\,\!$ is an external force, $\Omega\,\!$ is a collision integral, and $\vec{e}$ (also labeled by $\vec{\xi}$ in literature) is the microscopic velocity. The external force, $F\,\!$, is related to temperature external force $G\,\!$ by the relation below. A typical test for one's model is the Rayleigh-Bénard convection for $G\,\!$.

$F = \frac{\vec{G}\cdot(\vec{e}-\vec{u})}{RT}f^{eq}$
$\vec{G} = \beta g_0(T-T_{avg})\vec{k}$

Macroscopic variables such as density $\rho\,\!$, velocity $\vec{u}\,\!$, and temperature $T\,\!$ can be calculated as the moments of the density distribution function:

$\rho = \int\ f \, d\vec{e}$
$\rho\vec{u} = \int\ \vec{e}f \, d\vec{e}$
$\frac{\rho DRT}{2} = \rho\epsilon = \int\ g \, d\vec{e}$

The lattice Boltzmann method discretizes this equation by limiting space to a lattice and the velocity space to a discrete set of microscopic velocities (i.e. $\vec{e}_i = (\vec{e}_{ix},\vec{e}_{iy})$). The microscopic velocities in D2Q9, D3Q15, and D3Q19 for example are given as:

$\vec{e}_i = c\times \begin{cases} (0,0) & i = 0 \\ (1,0),(0,1),(-1,0),(0,-1) & i = 1,2,3,4 \\ (1,1),(-1,1),(-1,-1),(1,-1) & i = 5,6,7,8 \\ \end{cases}$

$\vec{e}_i = c\times \begin{cases} (0,0,0) & i = 0 \\ (\plusmn 1,0,0),(0,\plusmn 1,0),(0,0,\plusmn 1) & i = 1,2,...,5,6 \\ (\plusmn1,\plusmn1,\plusmn1) & i = 7,8,...,13,14 \\ \end{cases}$

$\vec{e}_i = c\times \begin{cases} (0,0,0) & i = 0 \\ (\plusmn 1,0,0),(0,\plusmn 1,0),(0,0,\plusmn 1) & i = 1,2,...,5,6 \\ (\plusmn1,\plusmn1,0),(\plusmn1,0,\plusmn1),(0,\plusmn1,\plusmn1) & i = 7,8,...,17,18 \\ \end{cases}$

The single phase discretized Boltzmann equation for mass density and internal energy density are:

$f_i(\vec{x}+\vec{e}_i\delta_t,t+\delta_t)-f_i(\vec{x},t) + F_i=\Omega(f)$
$g_i(\vec{x}+\vec{e}_i\delta_t,t+\delta_t)-g_i(\vec{x},t) + G_i=\Omega(g)$

The collision operator is often approximated by a BGK collision operator under the condition it also satisfies the conservation laws.

$\Omega(f) = \frac{1}{\tau_f} (f_i^{eq}-f_i)$
$\Omega(g) = \frac{1}{\tau_g} (g_i^{eq}-g_i)$

In the collision operator, $f_i^{eq}$ is the discrete, equilibrium particle probability distribution function. In D2Q9 and D3Q19, it is shown below for an incompressible flow in continuous and discrete form where D, R, and T are the dimension, universal gas constant, and absolute temperature respectively. The partial derivation for the continuous to discrete form is provided through a simple derivation to second order accuracy.

$f^{eq}=\frac{\rho}{(2 \pi RT)^{D/2}}e^{-\frac{(\vec{e}-\vec{u})^2}{2RT}}$
$=\frac{\rho}{(2 \pi RT)^{D/2}}e^{-\frac{(\vec{e})^2}{2RT}}e^{\frac{\vec{e}\vec{u}}{RT}-\frac{\vec{u}^2}{2RT}}$
$=\frac{\rho}{(2 \pi RT)^{D/2}}e^{-\frac{(\vec{e})^2}{2RT}}(1+\frac{\vec{e}\vec{u}}{RT}+\frac{(\vec{e}\vec{u})^2}{2(RT)^2}-\frac{\vec{u}^2}{2RT}+...)$

Letting $c=\sqrt{3RT}\,\!$ yields the final result.

$f_i^{eq}=\omega_i\rho \left (1+\frac{3\vec{e}_i\vec{u}}{c^2}+\frac{9(\vec{e}_i\vec{u})^2}{2c^4}- \frac{3(\vec{u})^2}{2c^2} \right)$
$g^{eq}=\frac{\rho(\vec{e}-\vec{u})^2}{2(2 \pi RT)^{D/2}}e^{-\frac{(\vec{e}-\vec{u})^2}{2RT}}$

$\omega_i = \begin{cases} 4/9 & i = 0 \\ 1/9 & i = 1,2,3,4 \\ 1/36 & i = 5,6,7,8 \\ \end{cases}$

$\omega_i = \begin{cases} 1/3 & i = 0 \\ 1/18 & i = 1,2,...,5,6 \\ 1/36 & i = 7,8,...,17,18 \\ \end{cases}$

As much work has already been done on a single component flow, the following TLBM will be discussed. The multicomponent/multiphase TLBM is also more intriguing and useful than simply one component. To be in line with current research, define the set of all components of the system (i.e. walls of porous media, multiple fluids/gases, etc.) $\Psi\,\!$ with elements $\sigma_j\,\!$.

$f_i^{\sigma}(\vec{x}+\vec{e}_i\delta_t,t+\delta_t)-f_i^{\sigma}(\vec{x},t) + F_i=\frac{1}{\tau_f^{\sigma}} (f_i^{\sigma,eq}(\rho^{\sigma},v^{\sigma})-f_i^{\sigma})$

The relaxation parameter,$\tau_f^{\sigma_j}\,\!$, is related to the kinematic viscosity,$\nu_f^{\sigma_j}\,\!$, by the following relationship.

$\nu_f^{\sigma_j} = (\tau_f^{\sigma_j}-0.5)c_s^2\delta_t$

The moments of the $f_i\,\!$ give the local conserved quantities. The density is given by

$\rho=\sum_{\sigma}\sum_i f_i\,\!$
$\rho\epsilon =\sum_i g_i\,\!$
$\rho^{\sigma}=\sum_i f_i^{\sigma}\,\!$

and the weighted average velocity, $\vec{u'} \,\!$, and the local momentum are given by

$\vec{u'}=\left (\sum_{\sigma}\frac{\rho^{\sigma}\vec{u^{\sigma}}}{\tau_f^{\sigma}}\right)/\left(\sum_{\sigma}\frac{\rho^{\sigma}}{\tau_f^{\sigma}}\right)$
$\rho^{\sigma} \vec{u^{\sigma}} = \sum_i f_i^{\sigma} \vec{e}_i.$
$v^{\sigma} = \vec{u'}+ \frac{\tau_f^{\sigma}}{\rho^{\sigma}}\vec{F}^{\sigma}$

In the above equation for the equilibrium velocity $v^{\sigma}\,\!$, the $\vec{F}^{\sigma}\,\!$ term is the interaction force between a component and the other components. It is still the subject of much discussion as it is typically a tuning parameter that determines how fluid-fluid, fluid-gas, and etc. interact. Frank et al. list current models for this force term. The commonly used derivations are Gunstensen chromodynamic model, Swift's free energy-based approach for both liquid/vapor systems and binary fluids, He's intermolecular interaction-based model, the Inamuro approach, and the Lee and Lin approach.[8]

The following is the general description for $\vec{F}^{\sigma}\,\!$ as given by several authors.[9][10]

$\vec{F}^{\sigma} = -\psi^{\sigma}(\vec{x})\sum_{\sigma_j}H^{\sigma\sigma_j}(\vec{x},\vec{x}')\sum_i\psi^{\sigma_j}(\vec{x}+\vec{e}_i)\vec{e}_i \,\!$

$\psi(\vec{x})\,\!$ is the effective mass and $H(\vec{x},\vec{x}')\,\!$ is Green's function representing the interparticle interaction with $\vec{x}'\,\!$ as the neighboring site. Satisfying $H(\vec{x},\vec{x}')=H(\vec{x}',\vec{x})\,\!$ and where $H(\vec{x},\vec{x}')>0\,\!$ represents repulsive forces. For D2Q9 and D3Q19, this leads to

$H^{\sigma\sigma_j}(\vec{x},\vec{x}') = \begin{cases} h^{\sigma\sigma_j} & \left | \vec{x}-\vec{x}' \right | \le c \\ 0 & \left | \vec{x}-\vec{x}' \right | > c \\ \end{cases}$

$H^{\sigma\sigma_j}(\vec{x},\vec{x}') = \begin{cases} h^{\sigma\sigma_j} & \left | \vec{x}-\vec{x}' \right | = c \\ h^{\sigma\sigma_j}/2 & \left | \vec{x}-\vec{x}' \right | =\sqrt{2c} \\ 0 & \text{otherwise} \\ \end{cases}$

The effective mass as proposed by Shan and Chen uses the following effective mass for a single-component, multiphase system. The equation of state is also given under the condition of a single component and multiphase.

$\psi(\vec{x})=\psi(\rho^{\sigma})=\rho_0^{\sigma}\left[1-e^{(-\rho^{\sigma}/\rho_0^{\sigma})} \right]\,\!$
$p=c_s^2 \rho+c_0h[\psi(\vec{x})]^2\,\!$

So far, it appears that $\rho_0^{\sigma}\,\!$ and $h^{\sigma \sigma_j}\,\!$ are free constants to tune but once plugged into the system's equation of state(EOS), they must satisfy the thermodynamic relationships at the critical point such that $(\part P / \part {\rho})_T=(\part^2 P / \part {\rho^2})_T=0\,\!$ and $p=p_c\,\!$. For the EOS, $c_0\,\!$ is 3.0 for D2Q9 and D3Q19 while it equals 10.0 for D3Q15.[11]

It was later shown by Yuan and Schaefer[12] that the effective mass density needs to be changed to simulate multiphase flow more accurately. They compared the Shan and Chen (SC), Carnahan-Starling (C–S), van der Waals (vdW), Redlich–Kwong (R–K), Redlich–Kwong Soave (RKS), and Peng–Robinson (P–R) EOS. Their results revealed that the SC EOS was insufficient and that C–S, P–R, R–K, and RKS EOS are all more accurate in modeling multiphase flow of a single component.

For the popular isothermal lattice Boltzmann methods these are the only conserved quantities. Thermal models also conserve energy and therefore have an additional conserved quantity:

$\rho \theta + \rho u u =\sum_i f_i \vec{e}_i \vec{e}_i.$

## Software

### Open Source / free software

• Taxila LBM: Open source (LGPL) lattice Boltzmann code from Los Alamos Natl. Lab, parallel, F90, multi-component/multi-phase/2D & 3D.
• LIMBES: Open source (GPL) code in 2D based on Gauss-Hermite quadrature, parallel (openmp), fortran 90
• OpenLB: Open source (GPLv2) library based on LBM, parallel, C++
• Palabos: Open source (AGPL) parallel C++ code with a large spectrum of lattice Boltzmann models, including thermal, multi-phase, free-surface, and embedded particles.
• Sailfish: Open Source LBM code (LGPL) for Graphics Processing Units (CUDA/OpenCL), with support for distributed multi-GPU simulations and various lattice Boltzmann models (multi-component, turbulence modeling)
• El'Beem: free CFD code (GPL) which uses LBM
• J-Lattice-Boltzmann: interactive Java applet for experimenting with LBM
• C examples: Some simple example LBM code in C (GPL).
• LBM-C: Open Source (GPLv2) CUDA code

### Freeware

• LBSim: software written in C++, freely available

### Commercial

• LaBS: LaBS or Lattice Boltzmann Solver is a commercial CFD code based on the lattice Boltzmann Method. It is developed within the framework of a consortium including Renault, Airbus and CS Communication et Systèmes. CS Communication et Systèmes is in charge of distributing the software.
• LBHydra: LBHydra is a modular, extensible Lattice-Boltzmann simulation package capable of modeling laminar and turbulent flows, heat and mass transport, and multiple phase and multiple component fluids in complex and changing fluid flow 2D & 3D geometries. Parallel, C++/CUDA code. University of Minnesota.
• PowerFLOW: commercial CFD code which uses LBM, created and distributed by Exa Corp.
• FlowKit: Professional support for the open-source software Palabos.
• XFlow: recent commercial CFD code based on LBM, released by Next Limit Technologies
• ultraFluidX: commercial CFD code based on LBM with multi-GPU support, released by FluiDyna GmbH FluiDyna.

## Notes

1. ^ Succi, p 68
2. ^ Succi, Appendix D (p. 261-262)
3. ^ Succi, chapter 8.3, p. 117-119
4. ^ McNamara, G., Garcia, A., and Alder, B., "A hydrodynamically correct thermal lattice boltzmann model", Journal of Statistical Physics, vol. 87, no. 5, pp. 1111-1121, 1997.
5. ^ Shan, X., "Simulation of rayleigh-b'enard convection using a lattice boltzmann method", Physical Review E, vol. 55, pp. 2780-2788, The American Physical Society, 1997.
6. ^ He, X., Chen, S., and Doolen, G.D., "A novel thermal model for the lattice boltzmann method in incompressible limit", Journal of Computational Physics, vol. 146, pp. 282-300, 1998.
7. ^ Chen, S., and Doolen, G.D., "Lattice Boltzmann Method for Fluid Flows", Annual Review of Fluid Mechanics, vol. 30, pp. 329-364, 1998.
8. ^ Frank, X., Almeida, G., Perre, P., "Multiphase flow in the vascular system of wood: From microscopic exploration to 3-D Lattice Boltzmann experiments", International Journal of Multiphase Flow, vol. 36, pp. 599-607, 2010.
9. ^ Yuan, P., Schaefer, L., "Equations of State in a lattice Boltzmann model", Physics of Fluids, vol. 18, 2006.
10. ^ Harting, J., Chin, J., Maddalena, V., Coveney, P., "Large-scale lattice Boltzmann simulations of complex fluids: advances through the advent of computational Grids", Philosophical Transactions of the Royal Society A, vol. 363, pp. 1895–1915 2005.
11. ^ Yuan, P., Schaefer, L., "A Thermal Lattice Boltzmann Two-Phase Flow Model and its Application to Heat Transfer Problems-Part 1. Theoretical Foundation", Journal of Fluid Engineering 142-150, vol. 128, 2006.
12. ^ Yuan, P., Schaefer, L., "Equations of State in a lattice Boltzmann model", Physics of Fluids, vol. 18, 2006.