
The Bernoulli project is building tools for constructing problem solving environments (PSEs) for computational science and engineering. Many of these applications involve the numerical solution of partial differential equations like the Navier-Stokes equations and the equations of elasticity. Commonly used solution methods like the finite element and finite difference methods convert the problem of solving differential equations to that of solving systems of algebraic equations, using a process called disctrization. The algebraic equations themselves can be solved using numerical techniques like Gaussian elimination, Krylov space methods and Newton's method.
The Bernoulli project integrates breakthroughs in three areas: discretization tools, restructuring compiler technology and runtime systems .
The discretization tools are being implemented by Rich Zippel using his Weyl symbolic algebra substrate. Weyl extends the data structures available in Common Lisp to include objects like matrices, vectors, rational functions, rings etc. The discretization toolkit implements the weighted residual method which subsumes the finite-element, finite-volume and spectral methods. Finite-difference schemes are also being implemented.
The systems of equations produced by discretization can be written in the form Ax = b where A is a large, sparse matrix, b is a known vector, and x is a vector of unknowns. Such large systems of equations can be solved on parallel machines like the IBM SP-2, using solvers that exploit the sparsity of matrix A to reduce computation and communication requirements. We are developing restructuring compiler technology to transform specifications of these solvers (expressed as sequential programs operating on dense matrices) to parallel codes that exploit sparsity.
The target of the compiler is a runtime substrate for parallel machines that conforms to the PORTS specification for portability. The runtime substrate provides low-latency message passing and a global address space on distributed-memory platforms like the IBM SP-2. We are experimenting with versions based on MPI and on active messages.