* E04MZF Example Program Text. * Mark 18 Release. NAG Copyright 1997. * .. Parameters .. INTEGER NIN, NOUT PARAMETER (NIN=5,NOUT=6) INTEGER MAXN, MAXM, MAXNNZ, LENIZ, LENZ PARAMETER (MAXN=10000,MAXM=10000,MAXNNZ=100000,LENIZ=50000, + LENZ=100000) DOUBLE PRECISION ZERO, XBLDEF, XBUDEF PARAMETER (ZERO=0.0D+0,XBLDEF=ZERO,XBUDEF=1.0D+20) * .. Local Scalars .. DOUBLE PRECISION OBJ, SINF INTEGER I, IFAIL, INFILE, INFORM, IOBJ, M, MINIZ, MINZ, + N, NCOLH, NINF, NNAME, NNZ, NS LOGICAL MPSLST CHARACTER START CHARACTER*8 KBLANK * .. Local Arrays .. DOUBLE PRECISION A(MAXNNZ), BL(MAXN+MAXM), BU(MAXN+MAXM), + CLAMDA(MAXN+MAXM), XS(MAXN+MAXM), Z(LENZ) INTEGER HA(MAXNNZ), ISTATE(MAXN+MAXM), IZ(LENIZ), + KA(MAXN+1) CHARACTER*8 CRNAME(MAXN+MAXM), NAMES(5) * .. External Subroutines .. EXTERNAL E04MZF, E04NKF, E04NLF, E04NMF, QPHX, X04ABF * .. Data statements .. DATA KBLANK/' '/ * .. Executable Statements .. WRITE (NOUT,*) 'E04MZF Example Program Results' * Skip heading in data file. READ (NIN,*) * * Initialize parameters. * INFILE = NIN MPSLST = .FALSE. DO 20 I = 1, 5 NAMES(I) = KBLANK 20 CONTINUE * * Convert the MPSX data file for use by E04NKF. * IFAIL = 0 * CALL E04MZF(INFILE,MAXN,MAXM,MAXNNZ,XBLDEF,XBUDEF,MPSLST,N,M,NNZ, + IOBJ,NCOLH,A,HA,KA,BL,BU,START,NAMES,NNAME,CRNAME,XS, + ISTATE,IFAIL) * * IF (IFAIL.EQ.0) THEN * * Set two options using E04NMF. * CALL E04NMF(' Check Frequency = 10 ') * CALL E04NMF(' Crash Tolerance = 0.05 ') * * Set the unit number for advisory messages to NOUT. * CALL X04ABF(1,NOUT) * * Read the options file. * CALL E04NLF(NIN,INFORM) * IF (INFORM.NE.0) THEN WRITE (NOUT,99999) 'E04NLF terminated with INFORM = ', + INFORM STOP END IF * * Reset the value of NCOLH. * NCOLH = 5 * * Solve the QP problem. * IFAIL = -1 * CALL E04NKF(N,M,NNZ,IOBJ,NCOLH,QPHX,A,HA,KA,BL,BU,START,NAMES, + NNAME,CRNAME,NS,XS,ISTATE,MINIZ,MINZ,NINF,SINF,OBJ, + CLAMDA,IZ,LENIZ,Z,LENZ,IFAIL) * END IF * STOP * 99999 FORMAT (1X,A,I3) END * SUBROUTINE QPHX(NSTATE,NCOLH,X,HX) * * Routine to compute H*x. (In this version of QPHX, the Hessian * matrix H is not referenced explicitly.) * * .. Parameters .. INTEGER NOUT PARAMETER (NOUT=6) DOUBLE PRECISION TWO PARAMETER (TWO=2.0D+0) * .. Scalar Arguments .. INTEGER NCOLH, NSTATE * .. Array Arguments .. DOUBLE PRECISION HX(NCOLH), X(NCOLH) * .. Executable Statements .. IF (NSTATE.EQ.1) THEN * * First entry. * WRITE (NOUT,99999) NCOLH * END IF * * Normal entry. * HX(1) = TWO*X(1) + X(2) + X(3) + X(4) + X(5) HX(2) = X(1) + TWO*X(2) + X(3) + X(4) + X(5) HX(3) = X(1) + X(2) + TWO*X(3) + X(4) + X(5) HX(4) = X(1) + X(2) + X(3) + TWO*X(4) + X(5) HX(5) = X(1) + X(2) + X(3) + X(4) + TWO*X(5) * IF (NSTATE.GE.2) THEN * * Final entry. * WRITE (NOUT,99998) * END IF * RETURN 99999 FORMAT (/' This is the E04NDF example. NCOLH =',I4,'.') 99998 FORMAT (/' Finished the E04NDF example.') END