DAVID LOUISE // INGÉNIEUR R&D

Calcul scientifique / WebGL / Temps réel · 2026

AeroCliff : simulateur CFD 2D dans le navigateur

Simulateur CFD 2D interactif de l’écoulement de l’air autour d’un profil de terrain : dessinez un relief, envoyez le vent, observez immédiatement comment l’écoulement se déforme. Résolution de Navier–Stokes par Lattice Boltzmann, 100 % côté navigateur.

TypeScriptReactFront-endWebGL2Web WorkerLattice Boltzmann (LBM)Navier–StokesVitest
Capture d’AeroCliff : carte d’ascendance au-dessus d’un profil de falaise, avec particules et lignes de courant Image réelle du projet
Simulation en cours : carte d’ascendance au-dessus d’une falaise

Contexte & problème

Rendre l’écoulement de l’air autour d’un relief visible et manipulable par tous, sans serveur ni installation : montrer concrètement l’accélération au sommet, le décrochage, la recirculation et le sillage, pour comprendre où et pourquoi ça porte.

Contraintes

Tout le calcul doit tenir dans un navigateur : résoudre les équations en temps réel sans jamais bloquer l’interface, rester fluide sur une machine ordinaire, ne dépendre d’aucun serveur et permettre de partager une simulation exacte sans compte utilisateur.

Rôle

Conception, développement, guide technique et mise en production.

Approche & architecture

Solveur de Navier–Stokes incompressibles par Lattice Boltzmann D2Q9-BGK, exécuté dans un Web Worker et découplé du rendu (les champs sont transférés au thread principal sans copie). Rendu WebGL2 : cartes colorimétriques (vitesse, pression, ascendance), particules, lignes de courant, vorticité. Au-dessus : un éditeur de relief en polyligne (ajout, suppression, déplacement des points, annuler/rétablir incrémental) et une persistance sans serveur ; l’état complet d’une simulation tient dans une URL compressée, ou dans IndexedDB pour les profils enregistrés.

Difficultés techniques

  • Convergence et stabilité du solveur LBM : viscosité, paramètre de relaxation, pas de divergence sur de longues exécutions
  • Conditions aux limites : vitesse imposée à l’entrée, sortie ouverte, paroi libre en haut, rebond (bounce-back) sur le relief et le fond
  • Rendu découplé du solveur (requestAnimationFrame) : 60 images/s à l’écran avec des champs résolus à ~25 Hz hors du thread principal
  • Transfert des champs entre le Worker et le thread principal sans copie
  • État complet d’une simulation encodé en URL (JSON → DEFLATE → Base64) sans serveur

Résultat

Application en ligne sur aerocliff.fr, accompagnée d’un guide technique complet (équations, conditions aux limites et limites du modèle). Le champ peut être exporté en GIF animé, encodé dans un Web Worker.

Limites / état

Simulateur CFD 2D volontairement simplifié : écoulement bidimensionnel, fluide incompressible, propriétés constantes, sans température ni stratification atmosphérique et sans turbulence résolue. Il visualise des structures d’écoulement ; ce n’est pas un modèle météorologique et il ne sert pas à une décision opérationnelle.

Médias