High Performance C++ Turbulent flow Lattice Boltzmann code
MIT License
metaLBM is a C++11 header-only template Computational Fluid Dynamic software based on the Lattice Boltzmann Method (LBM) that is addapted to both multi-CPUs and multi-GPUs architectures. metaLBM is meant to support multiple lattices and hile it can be used to perform various kind of flow simulations, it has been developped with the aim of exploring turbulent flow simulation and turbulence modelling within LBM.The library is hybrid parallel with MPI for distributed memory and OpenMP threads for shared memory on multi-CPUs. It has been ported on multi-GPUs using CUDA and using the new NVSHMEM library for P2P communications (in collaboration with NVIDIA). It is under active development as of October 2018.
The Lattice Boltzmann Method is a meso-scale approach to the simulation of fluid dynamics. 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.
metaLBM is to its authors knowledge, the only LBM code in full synergy with a FFT library. As turbulence is a multi-scale phenomenon, this allows to force, filter, and conduct analysis in Fourier space, which is based on FFTW library and therefore you will need a working installation.
The project provides a general framework for experimentation with simulations of turbulent flows. It has an easy mechanism allowing to use various forcing schemes, forces, and boundary conditions. The code currently runs on several medium size clusters Stromboli at Bergische Universitaet Wuppertal (BUW) and Newturb at Università degli Studi di Roma "Tor Vergata" and on larger supercomputers such as Galileo at CINECA in Bologna. It is expected to run soon on JURECA and JURON at the Juelich Supercomputing Center (JSC).
As of October 2018, metaLBM support the following features:
Supported lattices
Supported LBM algorithm
Single-node performance optimization
Multi-node performance optimization
Supported collision operators
Supported forcing schemes
Supported forces
Supported boundary conditions
Supported I/O
Supported On-line analysis
The project structure follows a common C++ layout within the solver directory.
Building metaLBM requires a working installation of CMake(>= 3.9) (upcomming description).
To build tests, you will need a working intallation of GoogleTest (upcomming).
If you want to add unit tests, just add a source file in test/,
edit the correspondng CMakeLists.txt
files to include your new targets and rebuild the
project cmake ..
from your build directory. There are
predeclared functions which make it easy to add new targets.
To generate documentation for the project, you need a working doxygen
installation.
Documentation will be generated in a subfolder doc and the webpage can be found in doc/html/index.html (upcomming).
Check the Wiki for additional tips on how to build, compile, and run a simulation (upcomming).
Please see LICENSE.
Please see CONTRIBUTING.md