Cover
Half Title
Title Page
Copyright Page
Dedication
Contents
Preface
List of Figures
1 Basics
1.1 Hello, Fluid Simulator
1.1.1 Defining State
1.1.2 Computing Motion
1.1.3 Boundary Handling
1.1.4 Visualization
1.1.5 Final Result
1.2 How to Read This Book
1.2.1 Getting the Codes
1.2.2 Reading Codes
1.2.2.1 Languages
1.2.2.2 Source Code Structure
1.2.2.3 Naming Conventions
1.2.2.4 Constants
1.2.2.5 Arrays
1.2.3 Reading Math Expressions
1.2.3.1 Scalar, Vector, and Matrix
1.3 Math
1.3.1 Coordinate System
1.3.2 Vector
1.3.2.1 Basic Operations
1.3.2.2 Dot and Cross Product
1.3.2.3 More Operations
1.3.3 Matrix
1.3.3.1 Basic Matrix Operations
1.3.3.2 Sparse Matrix
1.3.4 System of Linear Equations
1.3.4.1 Direct Methods
1.3.4.2 Indirect Methods
1.3.5 Field
1.3.5.1 Partial Derivative
1.3.5.2 Gradient
1.3.5.3 Divergence
1.3.5.4 Curl
1.3.5.5 Laplacian
1.3.6 Interpolation
1.3.6.1 Nearest Point
1.3.6.2 Linear Interpolation
1.3.6.3 Catmull–Rom Spline Interpolation
1.4 Geometry
1.4.1 Surface
1.4.2 Implicit Surface
1.4.3 Implicit Surface to Explicit Surface
1.4.4 Explicit Surface to Implicit Surface
1.5 Animation
1.6 Physics-Based Animation
1.6.1 Getting Started
1.6.2 Physics Animation with Example
1.6.2.1 Choosinga Model
1.6.2.2 Simulation State
1.6.2.3 Force and Motion
1.6.2.4 Time Integration
1.6.2.5 Constraints and Collisions
1.7 Fluid Animation
1.7.1 Gravity
1.7.2 Pressure
1.7.3 Viscosity
1.7.4 Density Constraint
2 Particle-Based Simulation
2.1 Seeing the World Like Seurat
2.2 Data Structures
2.2.1 Particle System Data
2.2.2 Particle System Example
2.2.3 Neighbor Search
2.2.3.1 Searching Nearby Particles
2.2.3.2 Caching Neighbors
2.3 Smoothed Particles
2.3.1 Basics
2.3.1.1 Kernel
2.3.1.2 Data Model
2.3.1.3 Interpolation
2.3.1.4 Density
2.3.1.5 Differential Operators
2.3.2 Dynamics
2.3.2.1 Solver Overview
2.3.2.2 Pressure Gradient Force
2.3.2.3 Viscosity
2.3.2.4 Gravity and Drag Forces
2.3.3 Results and Limitations
2.4 Incompressible SPH with Larger Time-Step
2.4.1 Predict and Correct
2.4.2 Implementation
2.4.3 Results
2.5 Collision Handling
2.5.1 Defining Colliders
2.6 Discussion and Further Reading
3 Grid-Based Simulation
3.1 Pixelating the World
3.2 Data Structures
3.2.1 Types of Grids
3.2.2 Grid System Data
3.3 Differential Operators
3.3.1 Finite Difference
3.3.2 Gradient
3.3.3 Divergence
3.3.4 Curl
3.3.5 Laplacian
3.4 Fluid Simulation
3.4.1 Collision Handling
3.4.1.1 Collider to Signed-Distance Field
3.4.1.2 Boundary Conditions
3.4.2 Advection
3.4.2.1 Semi-Lagrangian Method
3.4.2.2 Improving Back-Tracing Accuracy
3.4.2.3 Improving Interpolation Accuracy
3.4.2.4 Boundary Handling
3.4.3 Gravity
3.4.4 Viscosity
3.4.4.1 Solving Diffusion with Forward Euler
3.4.4.2 Stability of Diffusion Solver
3.4.4.3 Solving Diffusion with Backward Euler
3.4.4.4 Boundary Handling
3.4.5 Pressure and Incompressibility
3.4.5.1 Building Matrix
3.5 Smoke Simulation
3.5.1 Buoyancy Force
3.5.2 Advection and Diffusion
3.6 Fluid with Surface
3.6.1 Defining Surface on Grids
3.6.1.1 Tracking the Surface under the Flow
3.6.1.2 Reinitializing Signed-Distance Field
3.6.2 Free-Surface Flow
3.6.3 Results
3.7 Discussion and Further Reading
4 Hybrid Solvers
4.1 Why Hybrid?
4.2 Particle-in-Cell Method
4.2.1 Particle-to-Grid Transfer
4.2.2 Grid-to-Particle Transfer
4.2.3 Moving Particles
4.2.4 Results
4.3 Fluid-Implicit-Particle Method
4.3.1 Results
4.4 Other Methods
4.4.1 Particle Level Set Method
4.4.2 Vortex Particle Method
4.5 Discussion and Further Reading
Appendices
A More on Basics
A.1 CG and PCG Implementation
A.2 Adaptive Time Stepping
B More on Particles
B.1 SPH Kernel Functions
B.2 PCISPH Derivation
C More on Grids
C.1 Vector and Matrix for Grids
C.2 Iterative System Solver
C.2.1 Jacobi Method
C.2.2 Gauss–Seidel Method
C.2.3 Conjugate Gradient Method
References
Index