Computational Fluid Dynamics

advertisement
Real-time animation of low-Reynolds-number flow
using Smoothed Particle Hydrodynamics
presentation by
薛德明
Dominik Seifert
B97902122
Visualization of my results
http://csie.ntu.edu.tw/~b97122/archive/fluid_dynamics/capt
ure.mp4
My code
http://csie.ntu.edu.tw/~b97122/archive/fluid_dynamics/Ope
nTissue_backup.rar
My motivation: From Dust
http://www.youtube.com/watch?v=CfKQCAxizrA
The framework
OpenTissue
 OpenTissue is an open source simulation framework
with a simple, working SPH implementation
 I added some features to their implementation
 Their original implementation is described in this 88
page document:
 “Lagrangian Fluid Dynamics Using Smoothed Particle
Hydrodynamics”
Smoothed Particle Hydrodynamics
Quick review
 Note: SPH particles are not actual particles!
 They are really fluid samples of constant mass
 Particles are placed inside a container to represent a
fluid
 Every particle is then assigned a set of initial
properties
 After every time step (a few milliseconds), update
the properties of all particles
 Use interpolation methods to solve the NavierStokes equation to find force contributions, then
integrate to find new velocity and position
SPH
Particle Properties
 Support Radius (constant)
 Minimum interaction distance between particles
 Mass (constant; ensures Conservation of Mass
explicitly)
 Position (varying)
 Surface normal (varying)
 Velocity (varying)
 Acceleration (varying)
 Sum of external forces (varying)
 Density (varying due to constant mass and varying
volume)
 Pressure (varying)
 Viscosity (constant)
Smoothed Particle Hydrodynamics
Solver pseudocode
Smoothed Particle Hydrodynamics
The pressure problem
 Fluids cannot be accurately incompressible
 Pressure value approximated by Ideal Gas Law:
pV = nRT ⇒ p= (k ')V = k ρ
k called “gas-stiffness”
Entails assumptions of gas in steady state
Does not consider weight pressure
Causes “pulsing” because of lagging interplay between
gravity and pressure force
 Large gas-stiffness can reduce/eliminate the lag and the
pulsing
 Alternatively, take density to the power of heat capacity
ratio
 But high pressure requires a smaller time-step and thus
makes the simulation more expensive




My contributions I
Fluid-fluid interactions
 In OpenTissue, a system can be comprised of only a single
fluid
 I changed the code to support more than one fluid at a
time
 The math and physics are mostly the same, except for:
 Viscosity
 Kernel support radius
 Still missing:
 Surface tension interfaces between
fluids of different polarity
 But I still spent three days on
changing the framework due to
heavily templated C++ code
My contributions II
Fluid-solid interactions
 In OpenTissue only supports static (immovable)
objects
 I wanted to add the ability to add objects that interact
with the fluid, objects that can float, sink etc.
 Solid dynamics are very complicated! What are…
 Tensile Strength?
 Compressive Strength?
 Young’s modulus?
 I came up with an intuitive but not quite correct
approach
My contributions II
Restoring force
 Place an invisible spring between every two
particles that are close to each other initially
 Store the initial distance between every two
“neighboring” particles
 Add a new spring force component that contributes:
k * abs(current_distance – original_distance)
 Works for very few particles,
but not for many
My contributions III
Control Volumes - Overview
 Control volumes are used in the analysis of fluid flow
phenomena
 They are used to represent the conservation laws in
integral form
 Conservation of mass over a given (control) volume
c.v. with surface area c.s.:
0=
d
ρ dV + ∮ ρ(u⋅ ̂n)dA
∫
dt c.v.
c.s.
 𝜌 = density; u = velocity; n = surface normal
My contributions III
Control Volumes in SPH
 Volume integrators are easy: Simply accumulate all
contributions of all particles in volume
 Area integrators are trickier
 Time derivative can be obtained via difference
η −η
quotients: dd ηt ≈ ΔΔ ηt = T0+Δ1 t T0 for any property η
 Fluid properties at some point in the field can be
obtained by interpolation
My contributions III
Field evaluator function
 This required me to change the spatial partioning grid to
support queries at arbitrary locations
 After that, I only had to implement the famous SPH field
evaluation template for some property A:
 Translates to:
A( x)= ∑
j∈Ω
mj
A j V j W (x− x j , h)= ∑ A j
W (x − x j , h)
ρ
j∈Ω
j
ValueType evaluate(vector pos, real radius, ParticleProperty A):
ParticleContainer particles;
search(pos, radius, particles);
ValueType res = ValueType(0);
foreach particle p in particles:
real W = DefaultKernel.evaluate(pos - p.position);
res += (p.*A)() * p.mass/p.density * W;
return res;
My contributions III
Area Integrator
D ̄ f = ∫ f ( A)dA
D
 Goal: Find average of property at discretely sampled
points
 I went for an evenly distributing sampler
 Aliasing is not an issue, don’t need random sampling
 # of samples ns should be proportional to # of particles
that can fit into the surface:
 So we get:
ns= ceil
̂
AC
∮ ρ(u⋅ n)dA≈
c.s.
ns
()
1
∑
ns j
AC
Ap
AC ns
q j=
ρ j (u j⋅ n̂ j )
∑
ns j
My contributions III
Disk Integrator
 In this approach, every kind of surface needs their own
integrator
 I only have to consider disks in my pipe flow example
 The disk integrator iterates over the cells of an
imaginary grid that we lay over the disk to find the
average of fluid property f
real integrateDiskXZ(real ns, vector2 p_center, real r, field_evalutor f):
real q_total = 0
π( 2 r )2=
real ds = sqrt(PI / ns) * r
//
A
C=
int samples_in_diameter = sqrt(ns * 4/PI)
//
4
vector2 min = p_center – r
for (int i = 0; i < samples_in_diameter; i++)
for (int j = 0; j < samples_in_diameter; j++)
vector2 pos = (min.x + i * ds, min.z + j * ds)
if (length(pos - p_center) > r) continue
q_total += f(pos)
return q_total / ns
ns⋅ ds 2 ⇒
√
2r
4
=
ns
ds
π
My contributions III
Area Integrator - Considerations
 No need to sample over an already sampled set
 Can use spatial selection instead:
 Find all particles in distance d from the surface
 Use scaled smoothing kernel to add up contributions
 I was not quite sure how to mathematically scale the
kernel, so I went for the sampling approach
 I also used the integrator to place the cylindrically-
shaped fluid inside the pipe
My contributions III
Conservation of mass
 The integral form:
 Becomes:
d
0= ∫ ρ dV + ∮ ρ(u⋅ ̂n)dA
dt c.v.
c.s.
M T0+ 1− M T0 AC ns
+
ρ j (u j⋅ n̂ j)
∑
Δt
ns j
 The first term is the time derivative of Mass inside
the c.v.
 The second term is the mass flux through the c.v.’s
surface area
Particle boundary deficiency,
Holes in the fluid and
Control Volume - Correctness
 Boundary deficiency:
 Since atmosphere and structure are not represented in this
model, computations have to cope with a pseudo-vacuum
(真空)
 Governing equations are adjusted to cope with the deficiency
 e.g. Level set function for surface tension considers:


Inside fluid = 1
Outside fluid = 0
 C.v.’s must always be completely filled!
 Fluid volume is never correct which causes “holes” in the
fluid
 Think: What is the space between the particles/samples?
 C.v. computations can also never be 100% correct!
Bibliography
 [1] OpenTissue @ http://www.opentissue.org/
“OpenTissue is a collection of generic algorithms and
data structures for rapid development of interactive
modeling and simulation.”
 [2] Smoothed Particle Hydrodynamics – A Meshfree
Particle Method (book)
 [3] Lagrangian Fluid Dynamics Using Smoothed
Particle Hydrodynamics
 [4] Particle-Based Fluid-Fluid Interaction
Summary
 Given high enough gas stiffness, SPH model is OK to
simulate visually appealing real-time flow but is quite
inaccurate
 OpenTissue SPH implementation is not very mature,
lacks a lot of features
 I really miss:
 Accurate pressure values
 Correct fluid-solid interaction
 Arbitrary geometry
 I still cannot create real-time interactive applications
involving fluid flow but it was still an insightful
endeavour.
What’s next?
 Surface rendering until next week
 Then choose one from the list…
 Improve SPH implementation



Add generic surfaces (currently only supports implicit primitives)
Make it adaptive (choose sample size dynamically)
Learn solid dynamics and work on Fluid-Structure interaction
 More work on surface rendering

Optimized OpenGL/DX/XNA implementation that runs on the GPU
 Work on Computational Galactic Dynamics (計算星系動力學)


with professor 闕志鴻 from the Institute of Astronomy (天文所)
Simulation of dark matter & fluid during galaxy formation
 Work on level sets and the level set method in CFD

with professor Yi-Ju 周 from the Institute of Applied Mechanics (應力所)
Download