Traditional smoke simulators model smoke on a 2D plane. We plan to explore creating simulating smoke on a torus, klein bottle, and curved space (e.g. hyperbolic space).

**Problem:** Our problem is how to do physically accurate smoke simulations on manifolds, which are surfaces like the plane, in three dimensions.

** Why is it important:** It’s a step in the direction of allowing people to do physical simulations on more exotic spaces in 3 dimensions. Some applications could be making games which utilize exotic geometries in their mechanics.

** Where it is challenging:** This project is challenging because in order to simulate smoke efficiently we need to be able to solve the navier stokes equations quickly. Furthermore, we need to render the smoke in 3 dimensions on surfaces with nontrivial geometries.

**How we are going to solve it:** Simulate the physics in two dimensions and map the resulting 2d positions onto the manifold in 3d space with the natural smooth map.

**Main Deliverable:** Our goal is to create an interactive smoke simulator system, where the user can define several parameters, and simulate smoke by dragging and clicking their mouse. Clicking the mouse defines where the smoke originates from, and dragging the mouse affects the velocity of the smoke. The parameters specific to the smoke being simulated include density and temperature. For our geometric extension, we will have an additional parameter indicating the manifold that the smoke simulator will be simulated over. The options will be torus, klein bottle, mobius strip, and hyperbolic space.

**Measuring performance:** We hope that our simulator will perform at real-time speeds, because it is interactive. We will run tests on our system for how fast we can compute the outputs for different inputs to test the speed. We will make qualitative analyses based on how the smoke simulations look for each manifold.

In addition to our main deliverable, we have several interesting extensions in mind. First, we can add an additional 3D visualization of each of the geometries alongside the 2D plane visualization. This will show the non-embedded view of the manifold from an outside camera view (for example, a torus filled with smoke). Second, we can add extra sliders that will change parameters that define each manifold’s geometry (e.g. the radius or curvature).

- Set up the infrastructure for our codebase.
- Implement all of the Navier Stokes approximation equations.

- Successfully visualize the smoke simulator in the normal, flat plane.
- Implement the modifications to our physics simulation for circulating smoke inside a torus.

- Implement the modifications to our physics simulation for circulating smoke inside the rest of the manifolds.
- Begin collecting demonstrations and visualizations.
- Begin the writeup.

- Finish collecting the demonstrations and visualizations.
- Finish the writeup.

- https://gamedevelopment.tutsplus.com/tutorials/how-to-write-a-smoke-shader--cms-25587
- Elements of Differential Geometry- Millman
- http://developer.download.nvidia.com/books/HTML/gpugems/gpugems_ch38.html
- https://developer.nvidia.com/gpugems/gpugems3/part-v-physics-simulation/chapter-30-real-time-simulation-and-rendering-3d-fluids
- https://web.stanford.edu/class/cs237d/smoke.pdf