210 likes | 409 Views
Computational Fluid Dynamics. 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/capture.mp4. My code.
E N D
Computational Fluid Dynamics 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/capture.mp4 My code http://csie.ntu.edu.tw/~b97122/archive/fluid_dynamics/OpenTissue_backup.rar My motivation: From Dust http://www.youtube.com/watch?v=CfKQCAxizrA
The frameworkOpenTissue • 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 HydrodynamicsQuick review • Note: SPH particles are not actual particles! • They are really fluid samples of constant mass • Particles are placedinside 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 Navier-Stokes equation to find force contributions, then integrate to find new velocity and position
SPHParticle 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 HydrodynamicsThe pressure problem • Fluids cannot be accurately incompressible • Pressure value approximated by Ideal Gas Law: • 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 IFluid-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 templatedC++ code
My contributions IIFluid-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 IIRestoring 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 IIIControl 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.: • = density; u = velocity; n = surface normal
My contributions IIIControl 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: for any property • Fluid properties at some point in the field can be obtained by interpolation
My contributions IIIField evaluator function ValueTypeevaluate(vector pos, real radius, ParticleProperty A): ParticleContainer particles; search(pos, radius, particles); ValueTyperes = ValueType(0); foreach particle p in particles: real W = DefaultKernel.evaluate(pos - p.position); res += (p.*A)() * p.mass/p.density * W; return res; • 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:
My contributions IIIArea Integrator • 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:
My contributions IIIDisk 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_evalutorf): real q_total = 0 real ds = sqrt(PI / ns) * r // intsamples_in_diameter = sqrt(ns * 4/PI) // vector2 min = p_center – r for (inti = 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
My contributions IIIArea Integrator - Considerations • No need to sample over an already sampledset • 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 IIIConservation of mass • The integral form: • Becomes: • 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 andControl 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/“OpenTissueis 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(currentlyonlysupportsimplicitprimitives) • Make it adaptive (choose sample size dynamically) • Learn solid dynamics and work on Fluid-Structure interaction • More work on surface rendering • OptimizedOpenGL/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 (應力所)