				POLSYS_GLP

POLSYS_GLP is Fortran 95 parallel code for solving N complex coefficient
polynomial systems of equations in N unknowns by a probability-one,
globally convergent homotopy method.  The package is fully portable across
various distributed and parallel computing platforms since it uses the
Message Passing Interface (MPI) communication library.  POLSYS_GLP
consists of two modules:  GLOBAL_GLP and POLSYS2.  The module GLOBAL_GLP
contains the derived data types that define the polynomial system, the
system covering, and the start system of the homotopy; the module POLSYS2
contains the actual solver POLSYS_GLP and its internal routines, CHECK_GLP
that verifies the input set covering structure, and the routines
responsible for root counting, BEZOUT_GLP and SINGSYS_GLP.  POLSYS_GLP
uses the HOMPACK90 modules HOMOTOPY, HOMPACK90_GLOBAL, and REAL_PRECISION,
the HOMPACK90 path tracking routine STEPNX, and numerous BLAS and LAPACK
routines.

The physical organization into files is:  the file polsys_glp.f90 contains
(in order) REAL_PRECISION, GLOBAL_GLP, POLSYS2, HOMPACK90_GLOBAL, HOMOTOPY,
and STEPNX; the file lapack_glp.f contains all the necessary BLAS and
LAPACK routines.  A sample calling program MAIN_TEMPLATE and a template for
a hand-crafted function/Jacobian matrix evaluation program
TARGET_SYSTEM_USER are contained in the file main_template.f90.  All
processors execute MAIN_TEMPLATE and read the data file INPUT.DAT.
MAIN_TEMPLATE writes the solutions to the file OUTPUT.DAT only by the
master processor. The included files INPUT.DAT and OUTPUT.DAT contain
sample input and output data for several test polynomial systems.  Similar
to POLSYS_PLP (Algorithm 801), POLSYS_GLP can batch process multiple
systems and tasks from one input file.  The file test_install.f90 contains
a main program TEST_INSTALL to verify the installation.  It reads
INPUT.DAT, solves a problem defined there, compares the computed results to
known answers, and prints a message indicating whether the installation was
apparently successful.

To test the package, the file makefile.in must be edited to invoke the
user's Fortran 95 compiler. Two files,  makefile.inPGI  and
makefile.inXLF , are provided for the PGI and XLF compilers, respectively.
These files may be copied directly into the file  makefile.in .  Next, type
   make polsys_glp
to build the driver MAIN_TEMPLATE or type
   make test_install
to build TEST_INSTALL.  Executing TEST_INSTALL provides a simple test of the
installation.  Note that an implementation of MPI has to be installed to
compile POLSYS_GLP.  Since both polsys_glp.f90 and main_template.f90 contain
MPI primitives, it is advisable to compile these two files with compilers
provided by the given MPI implementation. For example, if MPICH
(http://www-unix.mcs.anl.gov/mpi/mpich) is installed, use mpif90 for
compilation and linking, since it already has all the necessary include and
link paths resolved.  To run the created executable file <program_name> on
four processors of a Beowulf cluster, issue the following command:
   mpirun -np 4 program_name

There must be at least two processors to obtain solutions.  One processor
is the master processor that distributes the homotopy paths and collects
the zeros, and the remaining processors track the paths.  For the sample
input file INPUT.DAT, the results should match those in the sample output
file OUTPUT.DAT, although the zeros may be listed in a different order due
to compiler/machine differences.

For a Beowulf cluster, a sample PBS script file is:

#!/bin/csh
#PBS -N polsys_glp
#PBS -l nodes=4:ppn=2
#PBS -l walltime=10:00:00
#
# Edit the next line to reflect your working directory.
cd ~
#
mpirun -np 4 program_name >& glp.out
# End of example script.

The modules and external subroutines in polsys_glp.f90 and lapack_glp.f can
be stored in module and object libraries and need not be recompiled.  The
subroutine TARGET_SYSTEM_USER defines the polynomial system and its
Jacobian matrix, or a dummy subroutine, and must be supplied on every call
to POLSYS_GLP.  However, if the user does not wish to change
TARGET_SYSTEM_USER, its object code can be stored in the aforementioned
object library.

-------------------------------------------------------------------------------

Inquiries should be directed to Hai-Jun Su (suh@uci.eng.edu), J. Michael 
McCarthy (jmmccart@uci.edu), Department of Mechanical and Aerospace 
Engineering, UCI, Irvine, CA 92697, (949) 824-8051;  or Layne T. Watson 
(ltw@cs.vt.edu), Departments of Computer Science and Mathematics,
VPI & SU, Blacksburg, VA 24061, (540) 231-7540.
