Completed a Semi-Lagrangian smoke system for my Physically-Based Simulation course. The system was written in C++ and uses an OpenGL display and renderer. As part of the system I implemented advection of velocity, temperature, and density, Poisson pressure projection, cubic interpolation, RK2 integration, a modified incomplete Cholesky preconditioner for the conjugate gradient, buoyancy forces, and vorticity confinement.

The above simulation was run on a 100x100x40 grid in order to achieve detailed results and high-resolution quality. It contains 600 frames rendered in just over 30 hours. The below video shows an additional simulation with mixing hot and cold smoke run on a 40x40x10 grid.