CS205b / CME 306
Application Track Final Projects

The application track for this course includes a final project. You are free to choose your own project, but your project choice must be approved by the application track course assistant. Below are some suggested projects, which you may choose to use.

The code you submit for this project must be written solely for this course. While you are free to choose your own project, it must be relevant to the topics discussed in class. The suggested projects should give an idea of what is appropriate, but other project ideas may be suitable as well. Even if you choose to do one of the suggested projects below, you should still inform the course assistant of your choice prior to implementing it.

Suggested Projects

Project Suggestion 1: Cloth. Write a simulator that simulates cloth in 3D. The simulator must be implicit (semi-implicit or fully implicit are fine). It must support collisions with fixed or kinematic (motion is input to the system, and the cloth cannot alter its motion) rigid objects. It is sufficient to support an infinite ground plane and spheres for collisions. You do not need to handle collisions between the cloth and itself or other pieces of cloth. Collisions should include friction.

Baraff, Witkin. Large Steps in Cloth Simulation, 1998

Bridson, Marino, Fedkiw. Simulation of Clothing with Folds and Wrinkles, 2003

Project Suggestion 2: Finite elements. Implement a simulator for deformable objects in 2D. The objects should use the isotropic constitutive model and the finite volume method (FVM). (The approach to the finite element method taken in the lectures is called the finite volume method. It is somewhat simpler than other finite element approaches.) The simulator must be implicit (semi-implicit or fully implicit are fine). The simulator should support collisions against a ground (infinite line) and other rigid objects. The rigid objects will be fixed or kinematic (their motion is input to the system, and the deformable objects cannot alter it), and it is sufficient to handle rectangles, circles, and the ground. You do not need to handle collisions between deformable objects (or self-collisions). Collisions should include friction.

Teran, Blemker, Hing, Fedkiw. Finite Volume Methods for the Simulation of Skeletal Muscle, 2003.

Project Suggestion 3: Incompressible fluid. Write a simulator for smoke (incompressible fluid) on a 2D Eulerian grid. The simulator should handle Dirichlet and Neumann boundary conditions as well as sources. The simulator should use a MAC grid.

Fedkiw, Stam, Jensen. Visual Simulation of Smoke, 2001.

Project Suggestion 4: Compressible fluid. Write a simulator for compressible fluid on a 1D Eulerian grid. You should be able to simulate a 1D shock tube using 3rd order ENO-LLF (in space) and 3rd order Runge Kutta (in time). Higher order is fine. You must be able to handle shocks and rarefaction correctly. You may assume the gas is an ideal gas.

General Requirements and Deliverables

All simulators should be written in C++ (C is okay) and should run on Linux. Use of other languages like Matlab or Octave may be useful for prototyping and debugging, but they should not be used in the final submission. Source code should be submitted with all projects, along with a visualization of at least two simulations and instructions and input files for reproducing those simulations. The simulations should demonstrate a working system that is stable, whose results are at least physically plausible, and that exercise the required functionality.

For simulations of solids, the visualizations should be movies of the simulation. Also submit a plot of maximum velocity per frame. For 2D smoke simulations, submit a movie showing the density of smoke in the domain (which can be rendered to look like actual smoke if desired), a movie that shows the velocity field at each frame, a movie showing the pressure profile at each frame, and a movie showing the divergence at each frame. For the 1D compressible project, include a movie showing plots of density, pressure, and velocity. The movies must demonstrate proper handling of a shocks and a rarefactions.

Note that the visualization items were chosen because of their usefulness in determining what is going on in the system and for detecting that things are working properly. You may also find these things useful while debugging. It is recommended that the simulation routines dump their state to file at each frame so that visualization can be performed offline. You may use third-party utilities for debugging, visualization, generating plots and movies, etc. You must obtain approval to use third-party libraries in the simulator. Use of visualization libraries in the simulator is not permitted.

Third Party Libraries

As mentioned earlier, third party software is acceptable in general, except in the program that performs the simulation, where it requires approval. Once libraries gain approval for the projects, they will be listed here along with any restrictions so that others may also choose to use them. Below is a list of third party libraries that you may use along with restrictions. If you would like to use a library that is not mentioned in this section, you should request approval.

Here is a list of libraries that you may not use and tasks for which you may not use third party libraries.

General Advice

Most of the projects will require a sparse solve. You should use CG for this solve. If you are doing a fluids simulation that requires a CG solve, you should use an Incomplete Choleski preconditioner, as it will make things a lot faster. Details (and pseudocode) for both algorithms can be found in the book "Matrix Computations" by Gene Golub and Charles Van Loan.

Submission Instructions

You must submit a Makefile. Visual Studio projects and other forms of build instructions such as cmake files are not acceptible. Please submit the project in the form of a tar.gz file emailed as an attachment or emailed in the form of a URL pointing to such a file.

Valid XHTML 1.1

Valid CSS!