
Fluid Simulation using Navier-Stokes Equations
Explore the theory and application of fluid simulation through Navier-Stokes equations, covering topics like advection, diffusion, pressure, and forces. Learn how real-time fluid simulation is made possible with current hardware advancements.
Download Presentation

Please find below an Image/Link to download the presentation.
The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author. If you encounter any issues during the download, it is possible that the publisher has removed the file from their server.
You are allowed to download the files provided on this website for personal or commercial use, subject to the condition that they are used lawfully. All files are the property of their respective owners.
The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author.
E N D
Presentation Transcript
Simulation of Fluids using the Navier-Stokes Equations Kartik Ramakrishnan
Presentation Scope Introduction Theory Adaptation to CPU and GPU Results Optimizations and Future Work
Introduction Physically based simulation of fluids produces very good visual effects Computationally expensive process In the past,usually done offline and not in real time Real time fluid simulation was done using particle systems Current hardware makes physically based fluid simulation possible in real time
Navier-Stokes Theory The fluid being rendered is assumed to be incompressible (fluid volume remains constant over time) The fluid being rendered is assumed to be homogeneous (fluid density remains constant in space)
Navier-Stokes Theory RHS of the equation, proceeding left to right, Advection/velocity term Pressure term Diffusion term Force term
Navier-Stokes Theory Advection - Describes the transport mechanism of the fluid - Also describes the transport mechanism of any material the fluid may be carrying - For example , ink in water, the advection term describes the movement of both the water and the ink
Navier-Stokes Theory Diffusion - Describes the resistance of the fluid to flow - Viscosity of the fluid is a factor in this term - More viscous the fluid, the more resistant it is to flow - Impedes the velocity of the fluid
Navier-Stokes Theory Pressure - Describes the behavior of the fluid due to pressure induced among fluid particles - Think fluid particles squished against each other due to the application of force - Pressure leads to increase in the velocity
Navier-Stokes Theory Force - Describes the behavior the fluid due to any externally applied force or any bodily force (gravity) - Application of force causes an increase in the fluid velocity
Adaptation to CPU and GPU The NS equation is not in a finite form Need to reduce each of the above RHS terms to a discrete representation that can be implemented on the CPU and the GPU
Adaptation to CPU and GPU Finite representation of the NS Equation
Adaptation to CPU and GPU Discrete NS algorithm - Assume a 2D bounding grid for the fluid - Assume one such grid for each fluid property of interest (velocity, pressure, force, dye etc.) - Assume that velocity and pressure are 0 at time t = 0 - Assume that velocity is negative and that pressure is 0 at the grid boundaries
Adaptation to CPU and GPU Algorithm steps - Apply force: w1 = u + Force* timestep - Advect: w2 = w1(x timestep*w1) - Diffuse term: del2 w3 = w2 - Pressure term: del2 p = w3 - Subtract pressure gradient: w4 = w3 del p
Adaptation to CPU and GPU void Fluids::Simulate() { //Advect Advect((); SwapVelocityGrid(); SwapColorGrid(); //Add force AddForce(); SwapVelocityGrid(); //Diffuse Diffuse(); SwapVelocityGrid(); //Compute Pressure ComputePressure(); SwapPressureGrid(); //Project Project(); SwapVelocityGrid(); SetBounds(); } timestep++;
Results AMD Athalon 3200+ 2.19 GHz, 2GB RAM AMD Radeon 4870 1GB Brook+ 64x64 fluid grid, 50 frames and 70 jacobian iterations CPU (averaged over 50 frames) = 0.83 sec GPU (averaged over 50 frames) = 0.035 sec
Optimizations and Future Work Use float 4 for the pressure computation instead of float Pinned memory, new to Brook+1.4 Shared memory, supposed to be implemented, but think its not GPU version still glitchy needs a few tweaks Other fluid grid sizes
Distant future Better visuals Port to DirectX 10 : dedicated texture hardware support available, bilinear interpolation available for free