The mesh generator, the mesh partitioner, and the parceler are all components of a general-purpose toolset for the efficient mapping of unstructured mesh computations arising from numerical solution of PDEs onto parallel systems. We refer to the toolset as the Archimedes system [7, 22]; it is depicted in Fig. 1. Input to Archimedes includes (i) the problem geometry and material properties and (ii) a sequential program containing an element-level description of the finite element approximation, as well as a high-level description of the solution method.
Figure 1: The Archimedes system.
The input program is written in a special-purpose C-like language augmented with finite element-specific and linear algebraic primitive operations that include element-level vector and matrix assembly, imposition of boundary conditions, sparse matrix-vector products, dot products, and preconditioning. Additional functions are specific to elastic wave propagation, and include absorbing boundaries, damping, and seismic input incorporation. Archimedes programs contain no explicit communication statements, and thus can be written without any knowledge of the parallel machine's underlying communication system. The set of primitives that Archimedes understands is rich enough to express algorithms for solution of linear and nonlinear scalar and vector PDEs, using arbitrary-order finite elements in space and both explicit and implicit methods in time. For implicit methods, the Archimedes language provides for expression of various stationary iterative solvers as well as Krylov subspace methods. Furthermore, users can add new primitives as the need arises.
Once the input program is complete, Author, the code-generator component of Archimedes, creates parallel code. Archimedes' parallelizing compiler will generate code for any parallel system with C and MPI implementations, including networks of workstations (using the Argonne/Mississippi State MPICH implementation), Intel's Paragon (also using MPICH) and the Cray T3D (using the CRI/EPCC MPI implementation).