We present a general adjoint solver for Lattice Boltzmann Method (LBM), which can be used for efficient optimization of fluid flow features, like drag, lift or heat exchange. It is valid for a wide range of applications, including both stationary and non-stationary cases. The code is available as an opensource package with many 2D and 3D LBM models implemented.
Lattice Boltzmann Method (LBM) is gaining a wide recognition as an efficient and precise method for computational fluid dynamics (CFD). It is used for problems ranging from turbulent flows, multi-phase flows, coupled heat-fluid flows and even shallow water equation. LBM, with its' simple communication pattern and explicit iteration scheme, can be efficiently implemented for massively parallel platforms, both CPU based and hybrid GPU-CPU. The Adjoint method is an useful algebraic trick allowing for efficient calculation of gradient of desired objective function, with respect to a high number of design variables. In recent years it was applied in many fields, like solid mechanics, CFD, or even finance. The gradient information (sometimes called the sensitivity information) is used for directing the optimization algorithm. These algorithms can include strictly gradient-based algorithms like steepest descent, L-BFGS-B, gradient-assisted genetic algorithms or surrogate models. All of these can greatly gain from the use of the gradient information. The presented adjoint solver preserves the parallel properties of the primal LBM solver, and together with the primal, it is executed on multi-node multi-GPU HPC platforms.
The examples of application include optimization of mixing in a micro-channel, low-Reynolds number 3D heat exchange, optimal shallow water wave propagation, 2D wing flapping and others.