\section*{Archimedes}

At Carnegie Mellon we have built Archimedes, an automated
system for solving partial differential equations
over complex domains using distributed memory supercomputers.
Archimedes is intended to allow
researchers in engineering and science to solve real problems
on unstructured meshes.

\begin{figure}
\ifcolor
  \centerline{\epsfbox{archimedes.color.ps}}
\else
  \centerline{\epsfbox{archimedes.ps}}
\fi
\caption{\label{archimedes} Structure of Archimedes.}
\end{figure}

Figure \ref{archimedes} diagrams the structure of Archimedes.  A user
provides two things:  a description of the geometry of the problem domain,
and an algorithm for performing finite
element calculations that solve some physical problem.

The problem geometry is the shape of the domain that will be
modeled.  In modeling earthquake ground motion, this would be the
shape of a valley and the surrounding rock.
In flight vehicle aerodynamics, this would be the shape of the surface
of the vehicle and surrounding air.
Archimedes generates a mesh that fills the
region of interest.  Once a mesh is provided, Archimedes performs
the partitioning, placement, and routing steps as necessary for
a given architecture, using algorithms that will be described in the
next few sections.

Along with the problem geometry, the user writes a sequential algorithm for
constructing and solving the finite element system
for a specific problem.  For instance,
to solve our heat conduction problem,
a user would write an algorithm to compute ${\bf K}$ and ${\bf f}$,
and solve for ${\bf u}$.  The algorithm
is written in a C-like syntax with built-in primitive operations tailored
for finite element methods.  This algorithm
is machine-independent, and can be written without knowledge of the
parallel machine's underlying communication mechanisms.  Archimedes
compiles the algorithm into code for a specific machine.
