Programs
--------
oned: Solve the 2-d Poisson problem using 1-d decomposition and the exchange
code in exchng1.f (see below)

onedsync: Solve the 2-d Poisson problem using 1-d decomposition and the 
exchange code in exsync1d.f (see below)

onedsandr: Solve the 2-d Poisson problem using 1-d decomposition and the 
exchange code in exsandr1d.f (see below)

onedpair: Solve the 2-d Poisson problem using 1-d decomposition and the 
exchange code in expair1d.f (see below)

onednb: Solve the 2-d Poisson problem using 1-d decomposition, the 
exchange code in exchng1nb.f (see below), and the sweep code in sweep.f

onedovlp: Solve the 2-d Poisson problem using 1-d decomposition, the 
exchange code in nbexchng.f (see below), and the sweep code in nbsweep.f .
Overlaps computation with communication.

twod: Solve the 2-d Poisson problem using 2-d decomposition and the
code in exchng2.f (see below)

Versions of the programs with "pr" at the end (e.g., onedpr) are linked with
the MPE profiling libraries.

Scripts
-------
runprogs:
Example script to run the programs (and the profiling versions) using mpirun

runtab1:
Example script to run the programs used to generate Table 4.7 (Timings for
variants of the 1-D decomposition of the Poisson problem)

Source Files
------------
Makefile.in:
This is a makefile template that is compatible with the makefile templates
used by the MPICH model MPI implementation.  

Makefile:
SAMPLE Makefile generated from Makefile.in.  You will almost certainly need
to modify this for your MPI version

base.f:
Example of a Jacobi sweep; used in text.  This is a code fragment

decomp.f
A Fortran version of MPE_DECOMP1D; used in several routines

diff.f
Computes the difference between two successive approximate solutions,
assuming a 1-d decomposition of a 2-d domain

diff2d.f
Computes the difference between two successive approximate solutions,
assuming a 2-d decomposition of a 2-d domain

exbsend.f
Exchange data with neighbors for a 1-d decomposition of a 2-d domain,
using send and receive up, then down.  Uses buffered sends.

exchng1.f
Version of exbsend.f that uses the MPI_SENDRECV call

exchng1nb.f
Version of exbsend.f that used nonblocking send and receive (MPI_ISEND,
MPI_IRECV, and MPI_WAITALL)

exchng2.f
Exchange data with neighbors for a 2-d decomposition of a 2-d domain, using
MPI_SENDRECV and a "strided" data-type.

expair1d.f
Version of exbsend.f that uses "pair" blocking sends and receives.

exsandr1d.f
Version of exbsend.f that uses MPI_SEND instead of MPI_BSEND.

exsync1d.f
Version of exbsend.f that uses MPI_SSEND instead of MPI_BSEND.  Used to
show behavior of MPI_SEND when no internal buffering is provided.

fndnbr2d.f
Compute the neighbors and decomposition for a 2-d decomposition of a 2-d 
domain.

nbexchng.f
Non-blocking exchange.  This is similar to exchng1nb.f, except that the
MPI_WAITALL is called depending on an input argument (allowing the 
communication to overlap computation).

nbsweep.f
Special sweep for use with non-blocking exchange.  This has two parts; the
first does not involve any of the elements that are being exchanged and the
second involves only those elements, allowing communication and computation
to overlap.

oned.f
Main program for the solution to the Poisson problem using Jacobi 
interation on a 1-d decomposition of a 2-d domain.  

onedbase.f
Support routines for oned.f.  Contains routine to initialize data.

onedcenter.f
Code fragment for kernel of Poisson solver example

onednb.f
Version of oned.f that uses the nonblocking exchange routine (nbexchng.f)

sweep.f
Routine to perform a Jacobi sweep for a 1-d decomposition decomposition
of a 2-d domain

sweep2.f
Routine to perform a Jacobi sweep for a 2-d decomposition decomposition
of a 2-d domain

twod.f
Main program for the solution to the Poisson problem using Jacobi 
interation on a 2-d decomposition of a 2-d domain.  

twodbase.f
Support routines for twod.f.  Contains routine to initialize data.

Building Programs:
You may need to add a link for 'mpif.h' to this directory.  To use the MPICH
configure to construct the Makefile for this directory, do

    ln -s <path to MPICH>/config.status 
    ( setenv CONFIG_FILES Makefile ; ./config.status )

(This assumes that you are using csh as your shell).
