Project Suggestions for CS/MA 615

1. (Chosen.) Rewrite code to use barycentric coordinates on triangles. Next, write code that allows you to specify the coefficients of elliptic problems as elements of the finite element space. This is a one-person project. If this is done properly then I will include it in the course project.
2. (Chosen) Rewrite the code for parabolic PDEs to be cleaner. This is one-person project. Again, I would include this in the course project.
3. Rewrite the finite-element matrix operator, finite-element matrix operator construction, etc., to be blocked triangle by triangle. I described this in class on February 27 in the context of arbitrary-order finite element methods on triangles with Lagrangian nodal elements. It is interesting even for linear elements; it will be slower than the current implementation, but then maybe later another student can extend it to arbitrary-order elements. This is a one-person project; if done very well will be included in the code base.
4. Solve an image segmentation problem. Use 1 and 2 to compute solutions to "Threshold dynamics for the piecewise constant Mumford-Shah functional", by Selim Esedoglu and Yen-Hsi Richard Tsai, J. Comput. Phys. 211 (2006), pp. 367--384. This is a three-person project if done together with (1) and (2) and a two-person project otherwise.
5. (Chosen) Apply domain decomposition techniques. (Chosen) Block the matrix operator so that each triangle in the coarse triangulation leads to its own local operator. The object of this project is speed, not functionality---you should be able to cut the solution time by at least 1/3, and perhaps parallelize it. It's a one- or two-person project, depending on how much you want to achieve.
6. (Chosen) Add a reaction term to the parabolic code. There is code in mmoc.scm to solve a convection-diffusion equation using the "modified method of characteristics" of Douglas and Russell; if you're interested in this kind of stuff you can add a reaction term (modelling chemistry, say) to this code.
7. (Chosen) Write time-stepping code for second-order hyperbolic problems. This is a one-person project.
8. Write code to devise a triangulation given a list of boundary points. This can be quite hard; choose this only if you have a real interest in geometrical algorithms and computing, and then make sure that you understand the real scope of this project.
9. Finite difference schemes. This is a multi-step project. It would need to be coordinated among several people. Among the subprojects:
1. Find a way to describe the domains you want to handle; probably just rectangles or unions of rectangles. Discretize these domains; refine the discretizations.
2. Calculate the finite difference spaces; build the matrix multiplication operator based on the coefficients.
3. Build injection and projection operators for multigrid applied to the finite difference problems.