\section{Future Directions}

The ultimate goal for this project is a fully automatic code generator
for finite element problems, which as discussed earlier, will take as
input a finite element mesh and a high-level machine-independent description
of the algorithm, and will automatically partition the problem and generate
code which it will place and route on the target machine.  (The problem
of generating finite element meshes from the PDEs in question is an 
interesting problem as well, but we do not address it here.)

Many of the tools needed for such a code generator currently exist, at least
in preliminary form: Programs for graph partitioning, automated placement and
routing, and parallel computation of sparse matrix-vector product on
iWarp processors. The next step is to continue to integrate these tools and 
improve them.

We are reimplementing the graph partitioning algorithm in C, to improve its
portability and to allow better integration with our other modules. 
We are also considering a data-parallel implementation in NESL \cite{NESL}, 
for possible use with exceedingly large meshes.

Regarding placement and routing on iWarp systems, we must either develop
methods for code generation which can orchestrate communication in graphs
which are not statically routable, or modify our partitioning code to
guarantee that the resulting minor graphs will be statically routable.
Another possibility is to implement statically routable subgraphs of the
needed communication graphs.  Then, some messages will need to be routed over
two consecutive pathways in order to reach their destinations. This approach
seems particularly promising.


