Possible Subprojects:

Everyone is required to participate in the large project somehow.

One way to do this is to pick up one or more subprojects and work on them.  This page lists a number of subprojects that may be appropriate.  (The word "may" here means that they also may not be appropriate, so before starting work on one of these in a serious way, talk to me about it.)  I'll indicate the status of each project as time goes on.

  1. Port Olin Shiver's list library to Gambit-C and use the routines in it rather than the ad-hoc routines in utilities.scm. See http://srfi.schemers.org/srfi-1/srfi-1.html  (Note: There is a link to a reference implementation at the bottom of this page.)
  2. Write routines to test the various routines in linear-element-code.scm to integrate functions on triangles, edges, etc., and construct the linear operator for the Neumann problem.
  3. Reorder the vertices in a triangulation to approximately follow a space-filling curve (change Triangulation-add-indices in geometry.scm); measure the performance of the matrix multiplication code apply-nonzero-coefficients in linear-elements.scm to see if this change increases the speed of matrix multiplication by maintaining better cache coherency.  Test it on several machines with different cache hierarchies and memory bandwidth if you can.
  4. Write code for the conjugate-gradient method for solving linear systems.  (I shall cover this method in class.)
  5. Write the top-level code of a multigrid linear solver  using the grid refinement code already in geometry-code.scm.   (I shall cover this method in class.)
  6. Implement projectors based on local quasi-interpolants for the multigrid code.  (I shall cover this method in class.)
  7. Implement boundary triangles with one curved side.
  8. Implement faster code for triangulating a polygon that does not give long, skinny triangles.
  9. Implement higher-order (quadratic, cubic, etc.) elements.  This will be a lot of work; two people can work together on this project if they wish.
  10. Write time-stepping code for parabolic PDE's.  At least do backward Euler and Crank-Nicholson (spelling?), separately and with C-N following a fixed number of backward Euler steps, together with linear prediction.