/metaLBM

High Performance C++ Turbulent flow Lattice Boltzmann code

Primary LanguageC++MIT LicenseMIT

Description

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

Overview

As of October 2018, metaLBM support the following features:

Supported lattices

  • D1Q3
  • D2Q5
  • D2Q9
  • D2Q13
  • D2Q17
  • D2Q21
  • D3Q15
  • D3Q19
  • D3Q27
  • D3Q33
  • ... potentially any rectangular-shaped lattice

Supported LBM algorithm

  • Fused collide and stream pull

Single-node performance optimization

  • SoA and AoS memory layout
  • Automatic OpenMP vectorization (upcoming)
  • OpenMP multi-threading

Multi-node performance optimization

  • 1D domain partionning
  • 2D and 3D domain partitionning (upcoming)

Supported collision operators

  • SRT BGK
  • SRT Entropic

Supported forcing schemes

  • Shan-Chen
  • Guo
  • Exact-Difference Method

Supported forces

  • Constant
  • Sinusoidal
  • Kolmogorov
  • Spectral forcing on a shell of wavenumbers with time-independent phase (upcoming)
  • Spectral forcing on a shell of wavenumbers with time-dependent phase (upcoming)

Supported boundary conditions

  • Periodic BC
  • Half-way bounceback (upcoming)
  • Entropic bounceback (upcoming)

Supported I/O

  • Paralell HDF5

Supported On-line analysis

  • Total energy, enstrophy, mach number
  • Energy and forcing spectra
  • Performances observables

Project Organisation

The project structure follows a common C++ layout within the solver directory.

  • The test directory contains source code for unit tests.
  • The include directory contains headers-only library dependencies.
  • The src directory contains all source files.
  • The doc directory contains documentation generating code with doxygen.

Building metaLBM

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

License

Please see LICENSE.

Contributing

Please see CONTRIBUTING.md