C       MAIN PROGRAM TO TEST FIXPQS, FIXPNS, AND FIXPDS
C
C       THIS PROGRAM TESTS THE HOMPACK ROUTINES FIXPNS, FIXPQS, AND
C       FIXPDS.  THE USER MAY INSERT CALLS TO A SYSTEM TIMER AT THE
C       DESIGNATED LOCATIONS IN ORDER TO GET EXECUTION TIME FOR THESE
C       ROUTINES.
C
C       THE MODIFICATIONS TO BE MADE FOR THE SYSTEM TIMER ARE INDICATED
C       BY A LINE OF M'S, E.G.
CMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
C
C
C       THE OUTPUT FROM THIS ROUTINE SHOULD BE AS FOLLOWS, WITH THE
C       EXECUTION TIMES CORRESPONDING TO A VAX 11/785.
C
C       TESTING FIXPQS
C
C LAMBDA = 1.00000000  FLAG = 1      33 JACOBIAN EVALUATIONS
C ARC LENGTH =   1.274   EXECUTION TIME(SECS) =      2.31
C   4.00864019E-01  2.65454893E-01  8.40421103E-02  4.83042527E-01
C   3.01797132E-01  2.32508994E-01  4.96639853E-01  3.00908894E-01
C
C       TESTING FIXPNS
C
C LAMBDA = 1.00000000  FLAG = 1      20 JACOBIAN EVALUATIONS
C ARC LENGTH =   1.275   EXECUTION TIME(SECS) =      1.04
C   4.00864019E-01  2.65454893E-01  8.40421103E-02  4.83042527E-01
C   3.01797132E-01  2.32508994E-01  4.96639853E-01  3.00908894E-01
C
C       TESTING FIXPDS
C
C LAMBDA = 1.00000000  FLAG = 1      70 JACOBIAN EVALUATIONS
C ARC LENGTH =   1.281   EXECUTION TIME(SECS) =      1.78
C   4.00864019E-01  2.65454893E-01  8.40421103E-02  4.83042527E-01
C   3.01797132E-01  2.32508994E-01  4.96639853E-01  3.00908894E-01
C
C
        PROGRAM TEST1
        IMPLICIT DOUBLE PRECISION(A-H,O-Z)
        DOUBLE PRECISION Y(9),
     +  YP(9),YOLD(9),YPOLD(9),A(8),QR(18),WORK(200),
     +  SSPAR(8),PAR(1),PP(8),RHOVEC(9),Z0(9),DZ(9),T(9),
     +  WT(9),PHI(9,16),P(9)
        INTEGER PIVOT(10),IPAR(1)
        INTEGER IFLAG,II,J,LENQR,N,NFE,NP1,NDIMA,TRACE
        DOUBLE PRECISION ARCRE,ARCAE,ANSRE,ANSAE,ARCLEN
        CHARACTER*6 NAME
        INTEGER TIME,CODE
        REAL DTIME
C
C TEST EACH OF THE THREE ALGORITHMS.
C
        DO 60 II=1,3
C
C INITIALIZE TIMER VARIABLES.
C
           CODE=2
           TIME=0
           DTIME=0.0
C
C DFEFINE ARGUMENTS FOR CALL TO HOMPACK PROCEDURE.
C
           N=8
           DO 7 J=1,8
7             SSPAR(J)=0.0D0
           ARCRE=.5D-4
           ARCAE=.5D-4
           ANSRE=1.0D-12
           ANSAE=1.0D-12
	   TRACE=0
           IFLAG=-1
           LENQR=18
           NP1=N+1
           DO 40 J=1,N
40            Y(J)=0.5D0
C
CMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
C
C INSERT CALL TO INITIALIZE SYSTEM TIMER HERE.  FOR EXAMPLE, FOR
C THE VAX, THE FOLLOWING STATEMENT IS USED.
C
C         CALL LIB$INIT_TIMER
C
CMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
C
C CALL TO HOMPACK ROUTINE.
C
C
          IF (II .EQ. 1) THEN
             NAME='FIXPQS'
             CALL FIXPQS(N,Y,IFLAG,ARCRE,ARCAE,ANSRE,ANSAE,TRACE,
     +         A,NFE,ARCLEN,YP,YOLD,YPOLD,QR,LENQR,PIVOT,PP,RHOVEC,
     +         Z0,DZ,T,WORK,SSPAR,PAR,IPAR)
          ELSE IF (II .EQ. 2) THEN
             NAME='FIXPNS'
             CALL FIXPNS(N,Y,IFLAG,ARCRE,ARCAE,ANSRE,ANSAE,TRACE,A,
     +         NFE,ARCLEN,YP,YOLD,YPOLD,QR,LENQR,PIVOT,WORK,
     +         SSPAR,PAR,IPAR)
          ELSE
             NAME='FIXPDS'
             CALL FIXPDS(N,Y,IFLAG,ARCRE,ANSRE,TRACE,A,NDIMA,NFE,
     +         ARCLEN,YP,YPOLD,QR,LENQR,PIVOT,PP,WORK,WT,PHI,P,
     +         PAR,IPAR)
          END IF
C
CMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
C
C INSERT CALL TO RETURN EXECUTION TIME IN SECONDS IN DTIME.
C FOR EXAMPLE, THE VAX STATEMENTS ARE AS FOLLOWS.
C      CALL LIB$STAT_TIMER(CODE,TIME)
C      DTIME=TIME/100.0
C
CMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
C
          WRITE (6,45) NAME
45        FORMAT(//,8X,'TESTING',1X,6A)
          WRITE (6,50) Y(NP1),IFLAG,NFE,ARCLEN,DTIME,(Y(J),J=1,N)
50        FORMAT(/' LAMBDA =',F11.8,'  FLAG =',I2,I8,' JACOBIAN ',
     +    'EVALUATIONS',/,1X,'  ARC LENGTH =',F8.3,
     +    '   EXECUTION TIME(SECS) =',F10.2/(1X,1P,4E16.8))
60     CONTINUE
       STOP
       END
       SUBROUTINE F(X,V)
C
C****************************************************************
C
C      SUBROUTINE F(X,V)  --  COMPUTES F AT THE POINT X,
C        RETURNING THE VALUE IN V.
C
C****************************************************************
       DOUBLE PRECISION X(8),V(8)
       V(1)=X(1)**3+6.0*X(2)*X(3)-1+2.0*X(1)
       V(2)=6.0*X(1)*X(3)+X(2)**4*X(5)-1+3.0*X(2)
       V(3)=6.0*X(1)*X(2)+X(3)*X(5)-1+4.0*X(3)
       V(4)=X(4)**3*X(8)-1+2.0*X(4)
       V(5)=X(2)**5/5.0 + X(3)**2/2.0 + X(8)*X(5)-1+3.0*X(5)
       V(6)=X(6)*X(8)-1+4.0*X(6)
       V(7)=X(7)**2*X(8)**3-1+2.0*X(7)
       V(8)=X(4)**4/4.0 + X(5)**2/2.0 + X(6)**2/2.0 + X(7)**3*
     +    X(8)**2-1+3.0*X(8)
       RETURN
       END
       SUBROUTINE FJACS(X,QR,LENQR,PIVOT)
C******************************************************************
C
C      SUBROUTINE FJACS(X,QR,LENQR,PIVOT)
C
C         -- COMPUTES THE JACOBIAN OF F AT THE POINT X, RETURNING
C            THE JACOBIAN MATRIX IN PACKED SKYLINE FORM IN THE
C            ARRAYS QR, AND PIVOT.
C
C*****************************************************************
       DOUBLE PRECISION X(8),QR(LENQR)
       INTEGER LENQR,PIVOT(9)
       PIVOT(1)=1
       PIVOT(2)=2
       PIVOT(3)=4
       PIVOT(4)=7
       PIVOT(5)=8
       PIVOT(6)=12
       PIVOT(7)=13
       PIVOT(8)=14
       PIVOT(9)=19
       QR(1)=3.0*X(1)**2+2.0
       QR(2)=4.0*X(2)**3*X(5)+3.0
       QR(3)=6.0*X(3)
       QR(4)=X(5)+4.0
       QR(5)=6.0*X(1)
       QR(6)=6.0*X(2)
       QR(7)=3.0*X(4)**2*X(8)+2.0
       QR(8)=X(8)+3.0
       QR(9)=.0
       QR(10)=X(3)
       QR(11)=X(2)**4
       QR(12)=X(8)+4.0
       QR(13)=2.0*X(7)*X(8)**3+2.0
       QR(14)=2.0*X(7)**3*X(8)+3.0
       QR(15)=3.0*X(7)**2*X(8)**2
       QR(16)=X(6)
       QR(17)=X(5)
       QR(18)=X(4)**3
       RETURN
       END
