The Azimuth Project
Lattice Boltzmann method (Rev #2)



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)

Environmental applications




Open Source

Open Source

  • LIMBES: Open source (GPL) code in 2D based on Gauss-Hermite quadrature, parallel (openmp), fortran 90

LIMBES is the recursive acronym for LIMBES Is May be a Boltzmann Equation Solver. Version 1.0 solves numerically by a Lattice Boltzmann like method the BGK-Boltzmann equation for gas in two dimensions. The attribute May be refers to the fact that this is not the full collision term derived by Boltzmann but the BGK model conventionally used in kinetic theory is considered here. The number of discrete velocities can be chosen between 9 and 400. LIMBES can be considered as a parallel code (openmp) or as a library written in Fortran 90 can be implemented in other codes for solving kinetic equations. LIMBES should not be considered as a microfluidics flow solver but must rather be seen as an academic numerical tool `easy to use' based on kinetic models for typical situations encountered in microfluidics.

  • OpenLB: Open source (GPLv2) library based on LBM, parallel, C++

The OpenLB project provides a C++ package for the implementation of lattice Boltzmann simulations that is general enough to address a vast range of problems in computational fluid dynamics. The package is mainly intended as a programming support for researchers and engineers who simulate fluid flows by means of a lattice Boltzmann method. The source code is publicly available and constructed in a well readable, modular way. This enables for a fast implementation of both simple applications and advanced CFD problems. It is also easily extensible to include new physical content.

  • Palabos: Open source (GPL) lattice Boltzmann code.

Can be used to simulate physical phenomena, with emphasis on fluids. The kernel is based on a variety of lattice Boltzmann models. The source code is modular and can easily be extended by application programmers. A framework for high performance computing. The library is optimized for single processor performance. Efficient parallelization is achieved through the MPI extension

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

Sailfish is a general purpose fluid dynamics solver optimized for modern multi-core processors, especially Graphics Processing Units (GPUs). The solver is based on the Lattice Boltzmann Method, which is conceptually quite simple to understand and which scales very well with increasing computational resources. The Sailfish project is also an experiment in scientific computing and software engineering. Unlike the majority of CFD packages, which are written in compiled languages such as C++ or Fortran, Sailfish is implemented in Python and CUDA C/OpenCL. We have found this combination to be a very powerful one, making it possible to significantly shorten development time without sacrificing any computational performance.