!
! HOMPACK90 is a suite of FORTRAN 90 subroutines for solving nonlinear
! systems of equations by homotopy methods. There are subroutines for
! fixed point, zero finding, and general homotopy curve tracking problems,
! utilizing both dense and sparse Jacobian matrices, and implementing
! three different algorithms: ODE-based, normal flow, and augmented
! Jacobian. The (driver) subroutines called by the user are given in the
! table below, and are well documented internally. The user need not
! be concerned with any other subroutines in HOMPACK90.
!
!
! Problem type
! --------|--------|--------|--------|--------|--------|
! x = f(x) | F(x) = 0 |rho(a,lambda,x)=0|
! --------|--------|--------|--------|--------|--------|
! dense | sparse | dense | sparse | dense | sparse | Algorithm
! --------|--------|--------|--------|--------|--------|---------------------
! FIXPDF | FIXPDS | FIXPDF | FIXPDS | FIXPDF | FIXPDS | ODE based
! --------|--------|--------|--------|--------|--------|---------------------
! FIXPNF | FIXPNS | FIXPNF | FIXPNS | FIXPNF | FIXPNS | normal flow
! --------|--------|--------|--------|--------|--------|---------------------
! FIXPQF | FIXPQS | FIXPQF | FIXPQS | FIXPQF | FIXPQS | augmented Jacobian
! --------|--------|--------|--------|--------|--------|---------------------
!
!
! The sparse subroutines use either the packed skyline storage scheme
! standard in structural mechanics or the compressed sparse row storage
! format, but any sparse storage scheme can be used by replacing some of
! the low-level HOMPACK90 routines with user-written routines. The
! stepping subroutines STEP?? or the reverse call subroutines STEPNX and
! ROOTNX may be of interest to some users with special curve tracking
! needs.
!
! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
! ORGANIZATIONAL DETAILS. HOMPACK90 is organized in two different ways: by
! algorithm/problem type and by subroutine level. There are three levels
! of subroutines. The top level consists of drivers, one for each problem
! type and algorithm type. Normally these drivers are called by the user,
! and the user need know nothing beyond them. They allocate storage for
! the lower level routines, and all the arrays are variable dimension, so
! there is no limit on problem size. The second subroutine level
! implements the major components of the algorithms such as stepping
! along the homotopy zero curve, computing tangents, and the end game for
! the solution at lambda = 1 . A sophisticated user might call these
! routines directly to have complete control of the algorithm, or for
! some other task such as tracking an arbitrary parametrized curve over
! an arbitrary parameter range. The lowest subroutine level handles the
! numerical linear algebra, and includes some LAPACK and BLAS routines.
! All the linear algebra and associated data structure handling are
! concentrated in these routines, so a user could incorporate his own
! data structures by writing his own versions of these low level routines.
!
! The organization of HOMPACK90 by algorithm/problem type is shown in the
! above table, which lists the driver name for each algorithm and problem
! type. Using brackets to indicate the three subroutine levels described
! above, the natural grouping of the HOMPACK90 routines is:
!
! [FIXPDF] [FODE, ROOT, SINTRP, STEPS] [DGEQPF]
!
! [FIXPDS] [FODEDS, ROOT, SINTRP, STEPDS] [GMFADS, GMRES,
! GMRILUDS, ILUFDS, ILUSOLVDS, MULTDS, MULT2DS, PCGDS, SOLVDS]
!
! [FIXPNF] [ROOTNF, STEPNF, TANGNF] [DGEQPF, DORMQR, ROOT]
!
! [FIXPNS] [ROOTNS, STEPNS, TANGNS] [GMFADS, GMRES, GMRILUDS,
! ILUFDS, ILUSOLVDS, MULTDS, MULT2DS, PCGDS, ROOT, SOLVDS]
!
! [FIXPQF] [ROOTQF, STEPQF, TANGQF] [DGEQRF, DORGQR, UPQRQF]
!
! [FIXPQS] [ROOTNS, STEPQS, TANGNS] [GMFADS, GMRES, GMRILUDS,
! ILUFDS, ILUSOLVDS, MULTDS, MULT2DS, PCGDS, ROOT, SOLVDS]
!
! [POLSYS1H] [FIXPNF, ROOTNF, STEPNF, TANGNF]
! [DGEQPF, DGEQRF, DORMQR, DIVP, FFUNP, GFUNP, HFUNP, HFUN1P,
! INITP, MULP, OTPUTP, POWP, RHO, RHOJAC, ROOT, SCLGNP, STRPTP]
!
! The LAPACK and BLAS subroutines used by HOMPACK90 are
! DCOPY, DDOT, DGEMM, DGEMV, DGEQPF, DGEQR2, DGEQRF, DGER, DLAIC1,
! DLAMCH, DLAPY2, DLARF, DLARFB, DLARFG, DLARFT, DNRM2, DORG2R, DORGQR,
! DORM2R, DORMQR, DSCAL, DSWAP, DTPMV, DTPSV, DTRMM, DTRMV, DTRSV,
! IDAMAX, ILAENV, LSAME, XERBLA.
!
! The user written subroutines, of which exactly two must be supplied
! depending on the driver chosen, are F, FJAC, FJACS, RHO, RHOA, RHOJAC,
! and RHOJS. These external subroutines must conform to the interfaces
! contained in the module HOMOTOPY. The module REAL_PRECISION contains
! machine dependent constants, which must be changed appropriately before
! compilation. The module HOMPACK90_GLOBAL contains global storage, and
! must be used by the user written subroutines.
!
! Testing and installation: HOMPACK90 consists of 4 modules---HOMOTOPY
! (contains interfaces for the user written external subroutines),
! HOMPACK90 (encapsulates all the drivers), HOMPACK90_GLOBAL (global
! dynamic storage), REAL_PRECISION (defines precision of all reals)---and
! external subroutines, all contained in two files HOMPACK90.f and
! LAPACK.f. The file template.f contains templates for the user written
! subroutines. There are three main programs MAIN[FPS].f for testing,
! with sample output given in the files MAIN[FPS].out. MAINF.f and
! MAINS.f have no input files; MAINP.f reads a data file INNHP.DAT and
! writes the solution in a file OUTHP.DAT (for post-processing), since
! this is normally how the polynomial system driver POLSYS1H would be used.
!
! To test the dense (F), sparse (S), polynomial system (P) algorithms
! respectively in HOMPACK90, compile and link in order the files
! HOMPACK90.f LAPACK.f MAINF.f (MAINS.f, MAINP.f respectively).
! The modules and external subroutines in HOMPACK90.f and LAPACK.f
! (BLAS and LAPACK routines) can be kept in module and object libraries
! and need not be recompiled.
!
!
! Inquiries should be directed to Layne T. Watson, Departments of Computer
! Science and Mathematics, Virginia Polytechnic Institute & State
! University, Blacksburg, VA 24061-0106; (540) 231-7540; ltw@cs.vt.edu .
!