A CPU implementation of Jos Stam's unconditionally-stable Navier–Stokes solver, running on a plain 2D grid of numbers (no shaders). Every frame: diffuse velocity, project (remove divergence via a pressure Poisson solve), advect (semi-Lagrangian backtrace), diffuse dye, advect dye.