The Azimuth Project
Lattice Boltzmann method (Rev #1)



Wikipedia says:

Lattice Boltzmann methods (LBM) (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.

This Azimuth page will only treat the former LBM and focus on computational methods, available software for now. If you want to see more of where it originates and also mathematical derivation, see the Wikipedia article in the References section.


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 of microscopic interactions, and parallelization of the algorithm. 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(x,t+δ t)=f i t(x,t)+1Τ f(f i eqf i))f_i^t(\vec x,t+\delta_t) = f_i^t(\vec x,t) + \frac{1}{\Tau_f}(f_i^eq - f_i))

Streaming step: f i(x+δ t,t+δ t)=f i t(x,t+δ t)f_i(\vec x + \vec\delta_t,t+\delta_t) = f_i^t(\vec x,t + \delta_t)




Open Source

Open Source

  • 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 (GPL) lattice Boltzmann code

  • Sailfish: Open Source LBM code (LGPL) for Graphics Processing Units (CUDA/OpenCL/Python)

  • 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.