Proposal from early in the semester
Demo (OS X binary zipped)
For example, if we simulate a tree blowing in the wind, it is reasonable to apply forces to the tree based on a time-varying vector field for the wind, while it would most likely not be necessary to simulate the effect the tree has on the wind field. However, for the simulation of the interaction between a ball and a tub of water, we would like each component to be able to affect the other. Hence, if the water pushes the ball, the ball should push back on the water and affect its motion appropriately.
Currently I am aware of no work in computer graphics, which focuses on the simulation of the interaction between fiber-like deformable solids (such as hair, rope or a myriad of other materials) and fluids. Extensive prior work on the simulation of hair alone in dry environments warrants the interest in simulating its interaction with immersive water.
Instead, I turned to an earlier journal article by Foster and Metaxas (1996), which described in more complete detail their methods for solving the Navier Stokes equations for an incompressible fluid. Their approach differs from Stam's in two significant ways. First, the use finite differences to solve the advection term, whereas Stam uses a more heuristic approach so as to make the solution of the system easier. Presumably, the Foster and Metaxas method is more true to the underlying Navier Stokes equations. Second, instead of using a Poisson solver to do the divergence-free projection step, Foster and Metaxas employ a simple relaxation scheme. While the use of relaxation is slower than the use of a Poisson solver by Stam and also Carlson et al., it is very easy to implement and therefore requires no use of hard to find third party software. The fluid part of my simulator uses these above mentioned methods of Foster and Metaxas.
For the simulation of individual fibers, I use a simple mass-spring particle system (essentially, the one from the first homework assignment with some improvements). The coupling between the fiber simulator and fluid simulator is carried out in a manner very similar to that of Genevaux et al.
When a fluid and a body are interacting, torques are applied by the fluid to the solid object. Conceptually, this occurs because the fluid molecules are colliding with those of the solid. Macroscopically, this results in pushing and friction. Since I assume the fibers are infinitely thin, it is sufficient to model the interaction using dynamic friction. From observation, we know that a stationary solid object lying in a flowing fluid will have forces applied to it by the fluid. However, in the case where a solid object is flowing in a fluid at the same speed as the fluid itself, no force will be exerted. Similarly, a moving object passing through stationary fluid will cause the fluid to begin moving. I couple the fibers and fluids by applying an equal and opposite force proportional to the difference in their velocities. More mathematically, this is,
f = c * (v_f - v_s)
where f is the force that will be applied to the fiber, c is a frictional coefficient, v_f is the velocity of the fluid and v_s is the velocity of the (solid) fiber.
This quantity is computed for every particle in a fiber chain. The particles in the fiber chain should be close enough together that they are found at the furthest from each other in adjacent fluid grid cells. This force is then added into the force accumulator of the particle. An equal and opposite force needs to be applied to the fluid. This is done by applying an external force to the fluid. Because the fluid velocity is sampled on the edges of each cell (the pressure is sampled in the center), the external force is applied to each of these "walls" proportional to the barycentric coordinates of each cubic cell. If a fiber particle should drift outside the simulation volume, an elastic penalty force is applied to push it back in. After all forces have been accumulated for the fluid and particle system simulators, an integration step is performed on each independently.
Finally, the two systems are drawn. The particle system is drawn as a set of spheres (for particles) connected by lines (for springs) as appropriate. Showing the fluid is much more difficult. Most of the computer graphics literature on fluids focuses on simulation of the surface of fluid. Since the focus here is on fluid/fiber interaction, the flow of the fluid is more important. In fact, the simulation does not deal with the fluid surface at all. The simulation takes place in a box filled completely with fluid. To show the flow, massless markers are introduced and shown as points. These markers do not interact with the fluid or fibers at all. They only show the movement of the flow. At simulation initialization, they are placed randomly throughout the simulation volume and advected through the velocity field of the fluid over time. If a tracer passes outside the simulation volume by flowing out a sink or simply overshooting the simulation volume, it is dumped back at any available source.


Nick Foster and Dimitri Metaxas, ``Realistic Animation of Liquids'', Graphical Models and Image Processing, 58(5):471-483, September 1996.
Olivier Genevaux, Arash Habibi and Jean-Michel Dischler. ``Simulating Fluid-Solid Interaction'' in the Proceedings of Graphics Interface 2003.
Matthias Müller, Simon Schirm, Matthias Teschner, Bruno Heidelberger and Markus Gross. ``Interaction of Fluids with Deformable Solids'' in the Proceedings of Computer Animation and Social Agents (CASA) 2004.
Jos Stam, ``Stable Fluids'' in the Proceedings of SIGGRAPH 1999.