Why�Simulate�Fluids?
• Feature�film�special�effects• Computer�games• Medicine (e g blood flow in heart)• Medicine�(e.g.�blood�flow�in�heart)• Because�it’s�fun
Fluid�Simulation
• Called�Computational�Fluid�Dynamics(CFD)
• Many approaches from math andMany�approaches�from�math�and�engineeringG hi f fi it diff• Graphics�favors�finite�differences
• Jos Stam introduced fast and stableJos�Stam�introduced�fast�and�stable�methods�to�graphics�[Stam�1999]
Navier Stokes EquationsNavier-Stokes�Equations
u=0 Incompressibility
u k2u (u )u + fut= k2u –(u)u – p + f
AdvectionDiffusion
d
Pressure
Change in VelocityAdvection
Body Forces
Navier Stokes EquationsNavier-Stokes�Equations
u=0 Incompressibility
u k2u (u )u + fut= k2u–(u)u – p + f
AdvectionDiffusion Pressure
dChange in Velocity
AdvectionBody Forces
Finite�Differences�Grids
• All�values�live�on�regular�grids• Need�scalar and�vector fields• Scalar fields: amount of smoke or• Scalar�fields:�amount�of�smoke�or�
dye• Vector�fields:�fluid�velocity• Subtract adjacent quantities to• Subtract�adjacent�quantities�to�
approximate�derivatives
DiffusionDiffusion
11c = k2c
1 1-4ct =�k c
1 1-4change�invalue
value�relativeto neighbors
1value to�neighbors
c new c + k t (c + c + c + ccijnew =�cij +�k�t�(ci-1j +�ci+1j +�cij-1 +�cij+1
Vector Field DiffusionVector�Field�Diffusion
k2ut= k2uviscosity
Two�separate�diffusions:viscosity
ux = k2ux
p
u t k uuyt= k2uy
blur the x-velocity and the y-velocity
u t k u…�blur�the�x-velocity�and�the�y-velocity
Navier Stokes EquationsNavier-Stokes�Equations
u=0 Incompressibility
u k2u (u )u + fut= k2u –(u)u – p + f
AdvectionDiffusion Pressure
dChange in Velocity
AdvectionBody Forces
V t Fi ld Ad tiVector�Field�Advection
ut=–(u)ut ( )Two separate advections:
ux = (u)ux
Two�separate�advections:
u t=–(u)uy ( ) yuyt=–(u)uy
…�push�around�x-velocity�and�y-velocity
Advection
• Easy�to�code• Method�stable�even�at�large�time�
stepssteps• Problem:�numerical�inaccuracy�
diff fldiffuses�flow
Diffusion/dissipationDiffusion/dissipationin�first�order�advection
Original Image After 360 degree rotationusing first order advection
Navier Stokes EquationsNavier-Stokes�Equations
u=0 Incompressibility
u k2u (u )u + fut= k2u –(u)u– p + f
AdvectionDiffusion Pressure
dChange in Velocity
AdvectionBody Forces
Divergence: Difference between incoming and outgoing flowincoming and outgoing flow
High divergence Low divergenceHigh�divergence Low�divergence
Zero�divergence
Enforcing�Incompressibility
• First�do�velocity�diffusion�and�advection
• Find “closest” vector field that isFind� closest �vector�field�that�is�divergence-freeN d t l l t di• Need�to�calculate�divergence
• Need to find and use pressureNeed�to�find�and�use�pressure
M i DiMeasuring�Divergence
u=? uyij+1
?
ij 1
?-uxi-1j ux
i+1j
-uyij-1
( x x ) + ( y y )
ij 1
uij=(uxi+1j - ux
i-1j) + (uyij+1-uy
ij-1)
Pressure TermPressure�Term u = 2p u p
1known unknown 1
pnew =�p +�( u - 2p) 1 1-4
Let�dij =� uij1
pnewij =�pij +�(dij - (pi 1j +�pi+1j +�pij 1 +�pij+1 - 4p ij pij (dij (pi-1j pi+1j pij-1 pij+1
Pressure�Term
unew= u punew= u – p
…and�velocity�is�now�divergence-free
Found�“nearest”�divergence-free�vefield to originalfield�to�original.
Fluid�Simulator
1)Diffuse velocity1)Diffuse�velocity2)Advect�velocity3)Add b d f ( it )3)Add�body�forces�(e.g.�gravity)4)Pressure�projection) p j5)Diffuse�dye/smoke6)Advect dye/smoke6)Advect�dye/smoke
“Real-Time Fluid Dynamics for GamesReal-Time�Fluid�Dynamics�for�GamesJosStam,�March�2003
l k d(CDROM�link�is�to�source�code)
www.dgp.toronto.edu/people/stam/reality/Research/p