* 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