*     F11DQF Example Program Text
*     Mark 19 Release. NAG Copyright 1999.
*     .. Parameters ..
      INTEGER          NIN, NOUT
      PARAMETER        (NIN=5,NOUT=6)
      INTEGER          NMAX, LA, LIWORK, LWORK
      PARAMETER        (NMAX=1000,LA=10000,LIWORK=7*NMAX+2,LWORK=10000)
*     .. Local Scalars ..
      DOUBLE PRECISION DTOL, RNORM, TOL
      INTEGER          I, IFAIL, ITN, LFILL, LWREQ, M, MAXITN, N, NNZ,
     +                 NNZC, NPIVM
      CHARACTER        MILU, PSTRAT
      CHARACTER*8      METHOD
*     .. Local Arrays ..
      COMPLEX *16      A(LA), B(NMAX), WORK(LWORK), X(NMAX)
      INTEGER          ICOL(LA), IDIAG(NMAX), IPIVP(NMAX), IPIVQ(NMAX),
     +                 IROW(LA), ISTR(NMAX+1), IWORK(LIWORK)
*     .. External Subroutines ..
      EXTERNAL         F11DNF, F11DQF
*     .. Intrinsic Functions ..
      INTRINSIC        MAX
*     .. Executable Statements ..
      WRITE (NOUT,*) 'F11DQF Example Program Results'
      WRITE (NOUT,*)
*     Skip heading in data file
      READ (NIN,*)
*
*     Read algorithmic parameters
*
      READ (NIN,*) N
      IF (N.LE.NMAX) THEN
         READ (NIN,*) NNZ
         READ (NIN,*) METHOD
         READ (NIN,*) LFILL, DTOL
         READ (NIN,*) PSTRAT
         READ (NIN,*) MILU
         READ (NIN,*) M, TOL, MAXITN
*
*        Check size of workspace
*
         LWREQ = MAX(4*N+M*(M+N+5)+121,8*N+120,2*N*(M+3)+M*(M+2)+120,
     +           11*N+120)
*
         IF (LWORK.LT.LWREQ) THEN
            WRITE (NOUT,'(A,I4)') ' LWORK must be at least', LWREQ
            GO TO 60
         END IF
*
*        Read the matrix A
*
         DO 20 I = 1, NNZ
            READ (NIN,*) A(I), IROW(I), ICOL(I)
   20    CONTINUE
*
*        Read rhs vector b and initial approximate solution x
*
         READ (NIN,*) (B(I),I=1,N)
         READ (NIN,*) (X(I),I=1,N)
*
*        Calculate incomplete LU factorization
*
         IFAIL = 1
         CALL F11DNF(N,NNZ,A,LA,IROW,ICOL,LFILL,DTOL,PSTRAT,MILU,IPIVP,
     +               IPIVQ,ISTR,IDIAG,NNZC,NPIVM,IWORK,LIWORK,IFAIL)
         IF (IFAIL.EQ.0) THEN
*
*           Solve Ax = b using F11DQF
*
            IFAIL = 0
            CALL F11DQF(METHOD,N,NNZ,A,LA,IROW,ICOL,IPIVP,IPIVQ,ISTR,
     +                  IDIAG,B,M,TOL,MAXITN,X,RNORM,ITN,WORK,LWORK,
     +                  IFAIL)
*
            WRITE (NOUT,99999) ITN
            WRITE (NOUT,99998) RNORM
            WRITE (NOUT,*)
*
*           Output x
*
            WRITE (NOUT,*) '                   X'
            DO 40 I = 1, N
               WRITE (NOUT,99997) X(I)
   40       CONTINUE
         ELSE
            WRITE (NOUT,99996) IFAIL
         END IF
      END IF
*
   60 CONTINUE
*
99999 FORMAT (1X,'Converged in',I10,' iterations')
99998 FORMAT (1X,'Final residual norm =',1P,E16.3)
99997 FORMAT (1X,'(',1P,E16.4,',',1P,E16.4,')')
99996 FORMAT (1X,/1X,' ** F11DNF returned with IFAIL = ',I5)
      END
