I have implemented a simple fluid solver using finite differences. The approach is based on that presented in [Greibel et al. 1998]. The implementation is fairly straight forward but does have a few disadvantages as compared to other fluid solvers. Finite differencing is prone to instability and thus requires a small time-step. The pressure field is calculated with successive over relaxation (SOR), an iterative method that can take a long time to converge. I would like to try other techniques to improve the efficiency of the computation which would allow for larger grids. I would also like to utilize some of the methods present in [Stam 1999] so that a larger time step may be used.
This screen shot shows an experiment known as the driven cavity. The top wall is moving at 1 unit/s while the other walls are fixed. The moving wall induces a swirling motion in the fluid. To visualize the flow I can display the pressure and velocity magnitude as a scalar field in grayscale and the velocity as a vector field. I need to add the advection of massless particles to get a more "animated" view of the fluid.
I have decided to modify my goals a little bit. Tracking of the free surface is quite complicated. For this reason I am not going to worry about that unless I have time at the end. My current agenda is the following:
Stam, J. Stable fluids. 1999. In Proceedings of SIGGRAPH 99, 121-128.
Tome, M. F. and McKee, S. 1994. GENSMAC: A computational
marker-and-cell method for free surface flows in general
domains. Journal of Computational Physics, 171-186.