* F01BVF Example Program Text * Mark 18 Revised. NAG Copyright 1997. * .. Parameters .. INTEGER NMAX, MA1MAX, MB1MAX, M3, LDA, LDB, LDV PARAMETER (NMAX=20,MA1MAX=8,MB1MAX=8,M3=3*MA1MAX+MB1MAX-4, + LDA=MA1MAX,LDB=MB1MAX,LDV=MA1MAX+MB1MAX-2) INTEGER NIN, NOUT PARAMETER (NIN=5,NOUT=6) * .. Local Scalars .. DOUBLE PRECISION ABSTOL INTEGER I, IFAIL, INFO, J, K, M, M1, M2, MA1, MB1, N, + NSPLIT * .. Local Arrays .. DOUBLE PRECISION A(LDA,NMAX), B(LDB,NMAX), D(NMAX), E(NMAX), + R(NMAX), V(LDV,M3), W(M3), WORK(4*NMAX) INTEGER IBLOCK(NMAX), ISPLIT(NMAX), IWORK(3*NMAX) * .. External Subroutines .. EXTERNAL DSBTRD, DSTEBZ, F01BUF, F01BVF * .. Intrinsic Functions .. INTRINSIC MAX * .. Executable Statements .. WRITE (NOUT,*) 'F01BVF Example Program Results' * Skip heading in data file READ (NIN,*) READ (NIN,*) N, MA1, MB1 IF (N.GT.0 .AND. N.LE.NMAX .AND. MA1.GE.0 .AND. MA1.LE. + MA1MAX .AND. MB1.GE.0 .AND. MB1.LE.MB1MAX) THEN READ (NIN,*) ((A(J,I),J=MAX(1,MA1+1-I),MA1),I=1,N) READ (NIN,*) ((B(J,I),J=MAX(1,MB1+1-I),MB1),I=1,N) K = N/2 IFAIL = 1 * CALL F01BUF(N,MB1,K,B,LDB,W,IFAIL) IF (IFAIL.EQ.0) THEN IFAIL = 1 CALL F01BVF(N,MA1,MB1,M3,K,A,LDA,B,LDB,V,LDV,W,IFAIL) IF (IFAIL.EQ.0) THEN CALL DSBTRD('N','U',N,MA1-1,A,LDA,D,E,W,1,WORK,INFO) IF (INFO.EQ.0) THEN * ABSTOL = 0.0D0 READ (NIN,*) M1, M2 * CALL DSTEBZ('I','E',N,0.0D0,0.0D0,M1,M2,ABSTOL,D,E,M, + NSPLIT,R,IBLOCK,ISPLIT,WORK,IWORK,INFO) * IF (INFO.EQ.0) THEN WRITE (NOUT,*) WRITE (NOUT,*) 'Selected eigenvalues' WRITE (NOUT,99999) (R(I),I=1,M) ELSE WRITE (NOUT,99998) 'DSTEBZ', INFO END IF ELSE WRITE (NOUT,99998) 'DSBTRD', INFO END IF ELSE WRITE (NOUT,99996) IFAIL END IF ELSE WRITE (NOUT,99997) IFAIL END IF END IF * 99999 FORMAT (1X,8F9.4) 99998 FORMAT (1X,'INFO from ',A6,' = ',I3) 99997 FORMAT (1X,/1X,' ** F01BVF returned with IFAIL = ',I5) 99996 FORMAT (1X,/1X,' ** F01BUF returned with IFAIL = ',I5) END