Projet LBM

Composante horizontale du champ de vitesse d'un écoulement (gauche vers droite) autour du logo LBM. La couleur bleue désigne des zones de recirculation.

Présentation

L'objectif du projet LBM est d'aboutir à la simulation d'un écoulement fluide en deux dimensions sur mobile (Android uniquement). J'ai choisi d'employer la Méthode Lattice Boltzmann (LBM) qui permet de simuler un écoulement compressible et visqueux en prenant en compte des conditions limites type mur en tout point du domaine.

Contrairement à la résolution directe des équations de Navier-Stokes à l'aide d'une méthode type différence finie, la méthode LBM est principalement locale et son traitement peut donc être facilement parallélisé. Actuellement, deux implémentations ont été réalisées :

Pour finir, voici un article détaillé (en anglais) décrivant le fonctionnement de la méthode LBM sur un réseau d2q9 (2D, 9 vecteurs vitesse).

Pour aller plus loin

Brève introduction à OpenGL

OpenGL est une librairie graphique permettant de gérer l'affichage d'une scène (2D ou 3D) directement partir de la carte graphique (GPU).
L'affichage d'une scène se déroule en plusieurs étapes :

D'autres types de shaders peuvent être utilisés pour générer une image mais leur utilisation n'est pas obligatoire. On peut ici citer pour l'exemple le geometry shader qui est appelé après le vertex shader et permet d'ajouter dynamiquement d'autres vertex à la géométrie.

En plus des shaders graphique, il est dorénavant possible d'appeler un compute shader qui n'est lié au pipeline graphique. Le compute shader peut être exécuté (en parallèle) directement sur le GPU et peut disposer de plusieurs types d'entrées (en plus de son numéro d'invocation) et de sorties. On peut envoyer un nombre (entier, réel, ...) au compute shader à l'aide d'une variable dite Uniform. De même, on peut aussi envoyer un tableau de données quelconque appelé Shader Storage Buffer Object (SSBO) au compute shader qui pourra ainsi le lire et éventuellement le modifier.

Le SSBO permet aussi de faire le lien entre le compute shader et le pipeline graphique. En effet, ce dernier peut être lu par les vertex/fragment shaders

Conseil pour réaliser une simulation physique avec OpenGL

schema
Vue schématique de la structure du projet