C-----LEVEC (EIGENVECTORS OF REAL SYMMETRIC MATRICES)------------------- C C CONTAINS MAIN PROGRAM FOR COMPUTING AN EIGENVECTOR CORRESPONDING C TO EACH OF A SET OF EIGENVALUES WHICH HAVE BEEN COMPUTED C ACCURATELY BY THE CORRESPONDING LANCZOS EIGENVALUE PROGRAM C (LEVAL) FOR REAL SYMMETRIC MATRICES. THIS PROGRAM COULD BE C MODIFIED TO COMPUTE ADDITIONAL EIGENVECTORS FOR ANY EIGENVALUE C WHICH IS A MULTIPLE EIGENVALUE OF THE GIVEN A-MATRIX. THE C AMOUNT OF ADDITIONAL COMPUTATION REQUIRED WOULD DEPEND UPON C THE GIVEN A-MATRIX AND UPON WHAT PART OF THE SPECTRUM OF C A IS INVOLVED. C C THE LANCZOS EIGENVECTOR COMPUTATIONS ASSUME THAT EACH C EIGENVALUE THAT IS BEING CONSIDERED HAS CONVERGED AS AN C EIGENVALUE OF THE LANCZOS TRIDIAGONAL MATRICES. C C PFORT VERIFIER IDENTIFIED THE FOLLOWING NONPORTABLE C CONSTRUCTIONS C C 1. DATA/MACHEP/ STATEMENT C 2. ALL READ(5,*) STATEMENTS (FREE FORMAT) C 3. FORMAT(20A4) USED WITH THE EXPLANATORY HEADER, EXPLAN C 4. HEXADECIMAL FORMAT (4Z20) USED IN ALPHA/BETA FILES 1 AND 2. C C IMPORTANT NOTE: THIS PROGRAM ALLOWS ENLARGEMENT OF THE ALPHA, C BETA ARRAYS. IN PARTICULAR, IF ANY ONE OF THE EIGENVALUES C SUPPLIED IS T-SIMPLE AND NOT CLOSE TO A SPURIOUS EIGENVALUE, C THE PROGRAM REQUIRES THAT KMAX BE AT LEAST 11*MEV/8 + 12. IF C KMAX IS NOT THIS LARGE, THEN THE PROGRAM RESETS KMAX TO THIS C SIZE AND EXTENDS THE ALPHA, BETA HISTORY IF REQUIRED. C THUS, THE DIMENSIONS OF THE ALPHA AND BETA ARRAYS MUST BE C LARGE ENOUGH TO ALLOW FOR THIS POSSIBILITY. C REMEMBER THAT THE BETA ARRAY, BETA(J), IS SUCH THAT C J = 1,..., KMAX+1. SO IF THE KMAX USED BY THE PROGRAM C IS TO BE 3000, THEN BETA MUST BE OF LENGTH AT LEAST 3001. C C----------------------------------------------------------------------- DOUBLE PRECISION ALPHA(5000),BETA(5001) DOUBLE PRECISION V1(5000),V2(5000) DOUBLE PRECISION RITVEC(30000),TVEC(30000),GOODEV(50),EVNEW(50) DOUBLE PRECISION EVAL,EVALN,TOLN,TTOL,ERTOL,ALFA,BATA DOUBLE PRECISION MULTOL,SCALE0,STUTOL,BTOL,LB,UB DOUBLE PRECISION ONE,ZERO,MACHEP,EPSM,TEMP,SUM,ERRMIN,BKMIN DOUBLE PRECISION RELTOL,ERROR,TERROR,TLAST(50) REAL G(10000),AMINGP(50),TMINGP(50),EXPLAN(20) REAL TERR(50),ERR(50),ERRDGP(50),RNORM(50),TBETA(50) INTEGER MP(50),M1(50),M2(50),MA(50),ML(50),MINT(50),MFIN(50) INTEGER SVSEED,SVSOLD,RHSEED,IDELTA(50) INTEGER MBOUND,NTVCON,SVTVEC,TVSTOP,LVCONT,ERCONT,TFLAG DOUBLE PRECISION FINPRO DOUBLE PRECISION DABS, DMAX1, DSQRT, DFLOAT REAL ABS INTEGER IABS C----------------------------------------------------------------------- EXTERNAL CMATV DATA MACHEP/Z3410000000000000/ EPSM = 2.D0*MACHEP C----------------------------------------------------------------------- C C ARRAYS MUST BE DIMENSIONED AS FOLLOWS: C 1. ALPHA: >= KMAXN, BETA: >= (KMAXN+1) WHERE KMAXN, THE C LARGEST SIZE T-MATRIX CONSIDERED BY THE PROGRAM, C IS THE LARGER OF THE SIZE OF THE ALPHA, BETA HISTORY C PROVIDED ON FILE 2 (IF ANY ) AND THE SIZE WHICH THE C PROGRAM SPECIFIES INTERNALLY, THIS LATTER IS ALWAYS C < = 11*MEV / 8 + 12, WHERE MEV IS THE SIZE C T-MATRIX THAT WAS USED IN THE CORRESPONDING EIGENVALUE C COMPUTATIONS. C 2. V1: >= MAX(N,KMAX) C 3. V2: >= N C 4. G: >= MAX(N,KMAX) C 5. RITVEC: >= N*NGOOD, WHERE NGOOD IS NUMBER OF EIGENVALUES C SUPPLIED TO THIS PROGRAM. C 6. TVEC: >= CUMULATIVE LENGTH OF ALL THE T-EIGENVECTORS C NEEDED TO GENERATE THE DESIRED RITZ VECTORS. AN EDUCATED C GUESS AT AN APPROPRIATE LENGTH CAN BE OBTAINED BY RUNNING THE C PROGRAM WITH THE FLAG MBOUND = 1 AND MULTIPLYING THE C RESULTING SIZE BY 5/4. C 7. GOODEV, AMINGP, TMINGP, TERR, ERR, ERRGDP, RNORM, TBETA, C TLAST, EVNEW, MP, MA, M1, M2, MINT, MFIN AND IDELTA ALL MUST C BE >= NGOOD. C C----------------------------------------------------------------------- C OUTPUT HEADER WRITE(6,10) 10 FORMAT(/' LANCZOS EIGENVECTOR PROCEDURE FOR REAL SYMMETRIC MATRICE 1S'/) C C SET PROGRAM PARAMETERS C USER MUST NOT MODIFY SCALE0 SCALE0 = 5.0D0 ZERO = 0.0D0 ONE = 1.0D0 MPMIN = -1000 C SET CONVERGENCE CRITERION FOR T-EIGENVECTORS. ERTOL = 1.D-10 C C READ USER-SPECIFIED PARAMETER FROM INPUT FILE 5 (FREE FORMAT) C C READ USER-PROVIDED HEADER FOR RUN READ(5,20) EXPLAN WRITE(6,20) EXPLAN 20 FORMAT(20A4) C C READ IN THE MAXIMUM PERMISSIBLE DIMENSIONS FOR THE TVEC ARRAY C (MDIMTV), FOR THE RITVEC ARRAY (MDIMRV), AND FOR THE BETA C ARRAY (MBETA). READ(5,20) EXPLAN READ(5,*) MDIMTV, MDIMRV, MBETA C C READ IN RELATIVE TOLERANCE (RELTOL) USED IN DETERMINING C APPROPRIATE SIZES FOR THE T-MATRICES TO BE USED IN THE RITZ C VECTOR COMPUTATIONS. READ(5,20) EXPLAN READ(5,*) RELTOL C C SET FLAGS TO 0 OR 1: C MBOUND = 1: PROGRAM TERMINATES AFTER COMPUTING 1ST GUESSES C ON APPROPRIATE T-SIZES FOR USE IN THE RITZ VECTOR C COMPUTATIONS C NTVCON = 0: PROGRAM TERMINATES IF THE TVEC ARRAY IS NOT C LARGE ENOUGH TO HOLD ALL THE T-EIGENVECTORS REQUIRED. C SVTVEC = 0: THE T-EIGENVECTORS ARE NOT WRITTEN TO FILE 11 C UNLESS TVSTOP = 1 C SVTVEC = 1: WRITE THE T-EIGENVECTORS TO FILE 11. C TVSTOP = 1: PROGRAM TERMINATES AFTER COMPUTING THE C T-EIGENVECTORS C LVCONT = 0: PROGRAM TERMINATES IF THE NUMBER OF T-EIGENVECTORS C COMPUTED IS NOT EQUAL TO THE NUMBER OF RITZ C VECTORS REQUESTED. C ERCONT = 0: MEANS FOR ANY GIVEN EIGENVALUE, A RITZ VECTOR C WILL NOT BE COMPUTED FOR THAT EIGENVALUE UNLESS C A T-EIGENVECTOR HAS BEEN IDENTIFIED WITH A LAST C COMPONENT WHICH SATISFIES THE SPECIFIED C CONVERGENCE CRITERION. C ERCONT = 1: MEANS FOR ANY GIVEN EIGENVALUE, A RITZ VECTOR C WILL BE COMPUTED. IF A T-EIGENVECTOR CANNOT C BE IDENTIFIED WHICH SATISFIES THE LAST C COMPONENT CRITERION, THEN THE PROGRAM WILL C USE THE T-VECTOR THAT CAME CLOSEST TO C SATISFYING THE CRITERION. C IWRITE = 1: EXTENDED OUTPUT OF INTERMEDIATE COMPUTATIONS C IS WRITTEN TO FILE 6 C IREAD = 0: ALPHA/BETA FILE IS REGENERATED. C IREAD = 1: ALPHA/BETA FILE USED IN EIGENVALUE COMPUTATIONS C IS READ IN AND EXTENDED IF NECESSARY. IN BOTH C CASES IREAD = 0 OR 1, THE LANCZOS VECTORS ARE C ALWAYS REGENERATED FOR THE RITZ VECTOR C COMPUTATIONS C READ(5,20) EXPLAN READ(5,*) MBOUND,NTVCON,SVTVEC,IREAD C READ(5,20) EXPLAN READ(5,*) TVSTOP,LVCONT,ERCONT,IWRITE IF (TVSTOP.EQ.1) SVTVEC = 1 C C READ IN SEED (RHSEED) FOR GENERATING RANDOM STARTING VECTOR C FOR INVERSE ITERATION ON THE T-MATRICES. READ(5,20) EXPLAN READ(5,*) RHSEED C C READ IN MATNO = MATRIX/RUN IDENTIFICATION NUMBER AND C N = ORDER OF A-MATRIX READ(5,20) EXPLAN READ(5,*) MATNO,N C C----------------------------------------------------------------------- C INITIALIZE THE ARRAYS FOR THE USER-SPECIFIED MATRIX C AND PASS THE STORAGE LOCATIONS OF THESE ARRAYS TO THE C MATRIX-VECTOR MULTIPLY SUBROUTINE CMATV. C CALL USPEC(N,MATNO) C C----------------------------------------------------------------------- C MASK UNDERFLOW AND OVERFLOW CALL MASK C C----------------------------------------------------------------------- C WRITE RUN PARAMETERS OUT TO FILE 6 C WRITE(6,30) MATNO,N 30 FORMAT(/' MATRIX IDENTIFICATION NO. = ',I10,' ORDER OF A = ',I5) C WRITE(6,40) MBOUND,NTVCON,SVTVEC,IREAD 40 FORMAT(/3X,'MBOUND',3X,'NTVCON',3X,'SVTVEC',3X,'IREAD'/3I9,I8) C WRITE(6,50) TVSTOP,LVCONT,ERCONT,IWRITE 50 FORMAT(/3X,'TVSTOP',3X,'LVCONT',3X,'ERCONT',3X,'IWRITE'/4I9) C WRITE(6,60) MDIMTV,MDIMRV,MBETA 60 FORMAT(/3X,'MDIMTV',3X,'MDIMRV',3X,'MBETA'/2I9,I8) C WRITE(6,70) RELTOL,RHSEED 70 FORMAT(/7X,'RELTOL',3X,'RHSEED'/E13.4,I9) C C C FROM FILE 3 READ IN THE NUMBER OF EIGENVALUES (NGOOD) FOR WHICH C EIGENVECTORS ARE REQUESTED, THE ORDER (MEV) OF THE LANCZOS C TRIDIAGONAL MATRIX USED IN COMPUTING THESE EIGENVALUES, THE C ORDER (NOLD) OF THE USER-SPECIFIED MATRIX USED IN THE EIGENVALUE C COMPUTATIONS, THE SEED (SVSEED) USED FOR GENERATING THE STARTING C VECTOR THAT WAS USED IN THOSE LANCZOS EIGENVALUE COMPUTATIONS, C AND THE MATRIX/RUN IDENTIFICATION NUMBER (MATOLD) USED IN THOSE C COMPUTATIONS. ALSO READ IN THE NUMBER (NDIS) OF DISTINCT C EIGENVALUES OF T(1,MEV) THAT WERE COMPUTED BUT THIS VALUE IS C NOT USED IN THE EIGENVECTOR COMPUTATIONS. C READ(3,80) NGOOD,NDIS,MEV,NOLD,SVSEED,MATOLD 80 FORMAT(4I6,I12,I8) C C READ IN THE T-MULTIPLICITY TOLERANCE USED IN THE BISEC SUBROUTINE C DURING THE COMPUTATION OF THE GIVEN EIGENVALUES. C ALSO READ IN THE FLAG IB. IF IB < 0, THEN SOME BETA(I) IN THE C T-MATRIX FILE PROVIDED ON FILE 2 FAILED THE ORTHOGONALITY C TEST IN THE TNORM SUBROUTINE. USER SHOULD NOTE THAT THIS VECTOR C PROGRAM PROCEEDS INDEPENDENTLY OF THE SIZE OF THE BETA USED. C READ(3,90) MULTOL,IB,BTOL 90 FORMAT(E20.12,I6,E13.4) C TEMP = DFLOAT(MEV+1000) TTOL = MULTOL/TEMP WRITE(6,100) MULTOL,TTOL 100 FORMAT(/' T-MULTIPLICITY TOLERANCE USED IN THE EIGENVALUE COMPUTAT 1IONS WAS',E13.4/' SCALED MACHINE EPSILON IS',E13.4) C C CONTINUE WRITE TO FILE 6 OF THE PARAMETERS FOR THIS RUN C WRITE(6,110)NGOOD,NDIS,MEV,NOLD,MATOLD,SVSEED,MULTOL,IB,BTOL 110 FORMAT(/' EIGENVALUES SUPPLIED ARE READ IN FROM FILE 3'/' FILE 3 1HEADER IS'/4X,'NG',2X,'NDIS',3X,'MEV',2X,'NOLD',2X,'MATOLD',4X, 1'SVSEED',6X,'MULTOL',6X,'IB',9X,'BTOL'/4I6,I8,I10,E12.3,I8,E13.4/) C C IS THE ARRAY RITVEC LONG ENOUGH TO HOLD ALL OF THE DESIRED C RITZ VECTORS (APPROXIMATE EIGENVECTORS)? NMAX = NGOOD*N IF(MBOUND.NE.0) GO TO 120 IF(TVSTOP.NE.1.AND.NMAX.GT.MDIMRV) GO TO 1310 C C CHECK THAT THE ORDER N AND THE MATRIX IDENTIFICATION NUMBER C MATNO SPECIFIED BY THE USER AGREE WITH THOSE READ IN FROM C FILE 3. 120 ITEMP = (NOLD-N)**2+(MATOLD-MATNO)**2 IF (ITEMP.NE.0) GO TO 1330 C C READ IN FROM FILE 3, THE T-MULTIPLICITIES OF THE EIGENVALUES C WHOSE EIGENVECTORS ARE TO BE COMPUTED, THE VALUES OF THESE C EIGENVALUES AND THEIR MINIMAL GAPS AS EIGENVALUES OF THE C USER-SPECIFIED MATRIX AND AS EIGENVALUES OF THE T-MATRIX. C READ(3,20) EXPLAN READ(3,130) (MP(J),GOODEV(J),TMINGP(J),AMINGP(J), J=1,NGOOD) 130 FORMAT(6X,I6,E25.16,2E14.3) C WRITE(6,140) (J,GOODEV(J),MP(J),TMINGP(J),AMINGP(J), J=1,NGOOD) 140 FORMAT(/' EIGENVALUES READ IN, T-MULTIPLICITIES, T-GAPS AND A-GAPS 1 '/4X,' J ',5X,'GOOD EIGENVALUE',5X,'MULT',4X,' TMINGAP ',4X, 1' AMINGAP '/(I6,E25.16,I4,2E15.4)) C C READ IN ERROR ESTIMATES WRITE(6,150) MEV,SVSEED 150 FORMAT(/' THESE EIGENVALUES WERE COMPUTED USING A T-MATRIX OF 1ORDER ',I5/' AND SEED FOR RANDOM NUMBER GENERATOR =',I12) C CHECK WHETHER OR NOT THERE ARE ANY T-ISOLATED EIGENVALUES IN C THE EIGENVALUES PROVIDED DO 160 J=1,NGOOD IF(MP(J).EQ.1) GO TO 170 160 CONTINUE GO TO 190 170 READ(4,20) EXPLAN READ(4,20) EXPLAN READ(4,20) EXPLAN READ(4,180) NISO 180 FORMAT(18X,I6) READ(4,20) EXPLAN READ(4,20) EXPLAN READ(4,20) EXPLAN 190 DO 220 J=1,NGOOD ERR(J) = 0.D0 IF(MP(J).NE.1) GO TO 220 READ(4,200) EVAL, ERR(J) 200 FORMAT(10X,E25.16,E14.3) IF(DABS(EVAL - GOODEV(J)).LT.1.D-10) GO TO 220 WRITE(6,210) EVAL,GOODEV(J) 210 FORMAT(' PROBLEM WITH READ IN OF ERROR ESTIMATES'/' EIGENVALUE REA 1D IN',E20.12,' DOES NOT MATCH GOODEV(J) ='/E20.12) GO TO 1550 C 220 CONTINUE C WRITE(6,230) (J,GOODEV(J),ERR(J), J=1,NGOOD) 230 FORMAT(' ERROR ESTMATES ='/4X,' J',5X,'EIGENVALUE',10X,' ESTIMATE 1'/(I6,E20.12,E14.3)) C IF(IREAD.EQ.0) GO TO 330 C C READ IN THE SIZE OF THE T-MATRIX PROVIDED ON FILE 2. READ IN C THE ORDER OF THE USER-SPECIFIED MATRIX , THE SEED FOR THE C RANDOM NUMBER GENERATOR, AND THE MATRIX/TEST IDENTIFICATION C NUMBER THAT WERE USED IN THE LANCZOS EIGENVALUE COMPUTATIONS. C THESE ARE USED IN A CONSISTENCY CHECK C IF FLAG IREAD = 0 REGENERATE ALPHA, BETA C READ(2,240) KMAX,NOLD,SVSOLD,MATOLD 240 FORMAT(2I6,I12,I8) C WRITE(6,250) KMAX,NOLD,SVSOLD,MATOLD 250 FORMAT(/' READ IN THE T-MATRICES STORED ON FILE 2'/' FILE 2 HEADER 1 IS'/2X,'KMAX',2X,'NOLD',6X,'SVSOLD',2X,'MATOLD'/2I6,I12,I8/) C C CHECK THAT THE ORDER, THE MATRIX/TEST IDENTIFICATION NUMBER C AND THE SEED FOR THE RANDOM NUMBER GENERATOR USED IN THE C LANCZOS COMPUTATIONS THAT GENERATED THE ALPHA,BETA FILE C BEING USED AGREE WITH WHAT THE USER HAS SPECIFIED. IF (NOLD.NE.N.OR.MATOLD.NE.MATNO.OR.SVSOLD.NE.SVSEED) GO TO 1350 C KMAX1 = KMAX + 1 C C READ IN THE T-MATRICES FROM FILE 2. THESE ARE USED TO GENERATE C THE T-EIGENVECTORS THAT WILL BE USED IN THE RITZ VECTOR C COMPUTATIONS. HISTORY MUST BE STORED IN MACHINE FORMAT C ((4Z20) FOR IBM/3081) C READ(2,260) (ALPHA(J), J=1,KMAX) READ(2,260) (BETA(J), J=1,KMAX1) 260 FORMAT(4Z20) C READ(2,260) (V1(J), J=1,N) READ(2,260) (V2(J), J=1,N) C C KMAX MAY BE ENLARGED IF THE SIZE AT WHICH THE EIGENVALUE C COMPUTATIONS WERE PERFORMED IS ESSENTIALLY KMAX AND C THERE IS AT LEAST ONE EIGENVALUE THAT IS T-SIMPLE AND C T-ISOLATED, IN THE SENSE THAT IF ITS NEAREST NEIGHBOR IS TOO C CLOSE THAT NEIGHBOR IS A 'GOOD' T-EIGENVALUE. DO 270 J = 1,NGOOD IF(MP(J).EQ.1) GO TO 290 270 CONTINUE WRITE(6,280) 280 FORMAT(/' ALL EIGENVALUES USED ARE T-MULTIPLE OR CLOSE TO SPURIOUS 1 T-EIGENVALUES'/' SO KMAX IS NOT INCREASED') IF(KMAX.LT.MEV) GO TO 1370 GO TO 310 C 290 KMAXN= 11*MEV/8 + 12 IF(MBETA.LE.KMAXN) GO TO 1530 IF(KMAX.GE.KMAXN ) GO TO 310 WRITE(6,300) KMAX, KMAXN 300 FORMAT(' ENLARGE KMAX FROM ',I6,' TO ',I6) MOLD1 = KMAX + 1 KMAX = KMAXN GO TO 380 C 310 WRITE(6,320) KMAX 320 FORMAT(/' T-MATRICES HAVE BEEN READ IN FROM FILE 2'/' THE LARGEST 1SIZE T-MATRIX ALLOWED IS',I6/) C IF(IREAD.EQ.1) GO TO 400 C C REGENERATE THE ALPHA AND BETA C 330 MOLD1 = 1 C DO 340 J = 1,NGOOD IF(MP(J).EQ.1) GO TO 360 340 CONTINUE KMAX = MEV + 12 WRITE(6,350) KMAX 350 FORMAT(/' ALL EIGENVALUES FOR WHICH EIGENVECTORS ARE TO BE COMPUTE 1D ARE EITHER T-MULTIPLE OR CLOSE TO'/' A SPURIOUS T-EIGENVALUE. TH 1EREFORE SET KMAX = MEV + 12 = ',I7) GO TO 380 C 360 KMAXN = 11*MEV/8 + 12 IF(MBETA.LE.KMAXN) GO TO 1530 WRITE(6,370) KMAXN 370 FORMAT(' SET KMAX EQUAL TO ',I6) KMAX = KMAXN C 380 WRITE(6,390) MOLD1,KMAX 390 FORMAT(/' LANCZS SUBROUTINE GENERATES ALPHA(J), BETA(J+1), J =', 1 I6,' TO ', I6/) C C----------------------------------------------------------------------- C IIX = SVSEED CALL LANCZS(CMATV,ALPHA,BETA,V1,V2,G,KMAX,MOLD1,N,IIX) C C----------------------------------------------------------------------- C 400 CONTINUE C C THE SUBROUTINE STURMI DETERMINES THE SMALLEST SIZE T-MATRIX FOR C WHICH THE EIGENVALUE IN QUESTION IS A T-EIGENVALUE (TO WITHIN A C GIVEN TOLERANCE) AND IF POSSIBLE THE SMALLEST SIZE T-MATRIX C FOR WHICH IT IS A DOUBLE T-EIGENVALUE (TO WITHIN THE SAME C TOLERANCE). THE SIZE T-MATRIX USED IN THE RITZ VECTOR C COMPUTATIONS IS THEN DETERMINED BY LOOPING ON SIZE OF THE C T-EIGENVECTORS STARTING WITH A T-SIZE DETERMINED FROM THE C OUTPUT FROM STURMI. C C STUTOL = SCALE0*MULTOL IF(IWRITE.EQ.1) WRITE(6,410) 410 FORMAT(' FROM STURMI') DO 450 J = 1,NGOOD EVAL = GOODEV(J) C COMPUTE THE TOLERANCES USED BY STURMI TO DETERMINE AN INTERVAL C CONTAINING THE EIGENVALUE EVAL. TEMP = DABS(EVAL)*RELTOL TOLN = DMAX1(TEMP,STUTOL) C C----------------------------------------------------------------------- C CALL STURMI(ALPHA,BETA,EVAL,TOLN,EPSM,KMAX,MK1,MK2,IC,IWRITE) C C----------------------------------------------------------------------- C C STORE THE COMPUTED ORDERS OF T-MATRICES FOR LATER PRINTOUT M1(J) = MK1 M2(J) = MK2 ML(J) = (MK1 + 3*MK2)/4 IF(MK2.EQ.KMAX) ML(J) = KMAX C IF(IC.GT.0) GO TO 430 C IC = 0 MEANS THERE WAS NO EIGENVALUE IN THE DESIGNATED INTERVAL C BY T-SIZE KMAX. THIS MEANS THAT THE EIGENVALUE PROVIDED HAS C NOT YET CONVERGED SO ITS EIGENVECTOR WILL NOT BE COMPUTED. WRITE(6,420) J,GOODEV(J),MK1,MK2 420 FORMAT(I6,'TH EIGENVALUE',E20.12,' HAS NOT CONVERGED '/ 1' SO DO NOT COMPUTE ANY T-EIGENVECTOR OR RITZ VECTOR FOR IT' 1/' MK1 AND MK2 FOR THIS EIGENVALUE WERE',2I6) MP(J) = MPMIN MA(J) = -2*KMAX GO TO 450 C COMPUTE AN APPROPRIATE SIZE T-MATRIX FOR THE GIVEN EIGENVALUE. 430 IF(M2(J).EQ.KMAX) GO TO 440 C M1 AND M2 WERE BOTH DETERMINED MA(J) = (3*M1(J) + M2(J))/4 + 1 GO TO 450 C M2 NOT DETERMINED 440 MA(J) = (5*M1(J))/4 + 1 C 450 CONTINUE C IF (IWRITE.EQ.1) WRITE(6,460) (MA(JJ), JJ=1,NGOOD) 460 FORMAT(/' 1ST GUESS AT APPROPRIATE SIZE T-MATRICES'/ 1 ' ACTUAL VALUES WILL PROBABLY BE 1/4 AGAIN AS MUCH'/(13I6)) C C PRINT OUT TO FILE 10 1ST GUESSES AT SIZES OF THE T-MATRICES TO C BE USED IN THE EIGENVECTOR COMPUTATIONS. C PROGRAM LOOPS ON T-SIZE TO DETERMINE APPROPRIATE SIZE T-MATRIX. WRITE(10,470) N,KMAX 470 FORMAT(2I8,' = ORDER OF USER MATRIX AND MAX ORDER OF T(1,MEV)') C WRITE(10,480) 480 FORMAT(/' 1ST GUESS AT APPROPRIATE SIZE T-MATRICES'/ 1 ' ACTUAL VALUES WILL PROBABLY BE 1/4 AGAIN AS MUCH'/) C WRITE(10,490) 490 FORMAT(4X,'J',4X,'A-EIGENVALUE',4X,'M1(J)',1X,'M2(J)',1X,'MA(J)') C WRITE(10,500) (J,GOODEV(J),M1(J),M2(J), MA(J), J=1,NGOOD) 500 FORMAT(I5,E19.12,3I6) C IF(MBOUND.EQ.1) WRITE(10,510) 510 FORMAT(/' EV = GOODEV(J) IS A GOOD EIGENVALUE OF T(1,MEV)'/ 1' M1 = SMALLEST VALUE OF M SUCH THAT T(1,M) HAS AT LEAST'/ 1 ' ONE EIGENVALUE IN THE INTERVAL (EV-TOLN,EV+TOLN)'/ 1 ' TOLN(J) = DMAX1(GOODEV(J)*RELTOL, SCALE0*MULTOL)'/ 1 ' M2 = SMALLEST M (IF ANY) SUCH THAT IN THE ABOVE INTERVAL'/ 1 ' T(1,M) HAS AT LEAST TWO EIGENVALUES '/ 1 ' IABS(MA(J)) = APPROPRIATE SIZE T-MATRIX FOR GOODEV(J)'/ 1 ' INITIAL VALUE OF MA(J) IS CHOSEN HEURISTICALLY'/ 1 ' PROGRAM LOOPS ON SIZE OF T-MATRIX TO GET BETTER SIZE'/ 1 ' END OF SIZES OF T-MATRICES FILE 10'///) C C TERMINATE AFTER COMPUTING 1ST GUESSES AT SIZES OF THE C T-MATRICES REQUIRED FOR THE GIVEN EIGENVALUES? IF(MBOUND.EQ.1) GO TO 1390 C C IS THERE ROOM FOR ALL OF THE REQUESTED T-EIGENVECTORS? MTOL = 0 DO 520 J = 1,NGOOD IF(MP(J).EQ.MPMIN) GO TO 520 MTOL = MTOL + IABS(MA(J)) 520 CONTINUE MTOL = (5*MTOL)/4 IF(MTOL.GT.MDIMTV.AND.NTVCON.EQ.0) GO TO 1410 C C----------------------------------------------------------------------- C GENERATE A RANDOM VECTOR TO BE USED REPEATEDLY BY C SUBROUTINE INVERM C CALL GENRAN(RHSEED,G,KMAX) C C--------------------------------------------------------------------- C C LOOP ON GIVEN EIGENVALUES TO COMPUTE THE CORRESPONDING C T-EIGENVECTOR. C MTOL = 0 NTVEC = 0 ILBIS = 0 DO 710 J = 1,NGOOD ICOUNT = 0 ERRMIN = 10.D0 MABEST = MPMIN IF(MP(J).EQ.MPMIN) GO TO 710 TFLAG = 0 EVAL = GOODEV(J) TEMP = DABS(EVAL)*RELTOL UB = EVAL + DMAX1(STUTOL,TEMP) LB = EVAL - DMAX1(STUTOL,TEMP) 530 KMAXU = IABS(MA(J)) C C SELECT A SUITABLE INCREMENT FOR THE ORDERS OF THE T-MATRICES C TO BE CONSIDERED IN DETERMINING APPROPRIATE SIZES FOR THE RITZ C VECTOR COMPUTATIONS. IF(ICOUNT.GT.0) GO TO 550 C SELECT IDELTA(J) BASED UPON THE T-MULTIPLICITY OBTAINED IF(M2(J).EQ.KMAX) GO TO 540 C M2 DETERMINED IDELTA(J) = ((3*M1(J) + 5*M2(J))/8 + 1 - IABS(MA(J)))/10 + 1 GO TO 550 C M2 NOT DETERMINED 540 MAMAX = MIN0((11*MEV)/8 + 12, (13*M1(J))/8 + 1) IDELTA(J) = (MAMAX - IABS(MA(J)))/10 + 1 550 ICOUNT = ICOUNT + 1 C C----------------------------------------------------------------------- C TO MIMIMIZE THE EFFECT OF THE ONE-SIDED ACCEPTANCE TEST FOR C EIGENVALUES IN THE BISEC SUBROUTINE, RECOMPUTE THE GIVEN C EIGENVALUE AT THE SPECIFIED KMAXU C CALL LBISEC(ALPHA,BETA,EPSM,EVAL,EVALN,LB,UB,TTOL,KMAXU,NEVT) C C----------------------------------------------------------------------- C C CHECK WHETHER OR NOT GIVEN T-MATRIX HAS AN EIGENVALUE IN THE C SPECIFIED INTERVAL AND IF SO WHAT ITS T-MULTIPLICITY IS. C IF(NEVT.EQ.1) GO TO 590 IF(NEVT.NE.0) GO TO 570 ILBIS = 1 WRITE(6,560) EVAL,KMAXU 560 FORMAT(/' PROBLEM ENCOUNTERED IN RECOMPUTATION OF USER-SUPPLIED EI 1GENVALUE',E20.12/' THE SIZE T-MATRIX SPECIFIED',I6,' DOES NOT 1HAVE AN EIGENVALUE IN THE INTERVAL SPECIFIED'/' THEREFORE NO EIGEN 1VECTOR WILL BE COMPUTED FOR THIS PARTICULAR EIGENVALUE'/) GO TO 610 C 570 IF(NEVT.GT.1) WRITE(6,580) EVAL,KMAXU 580 FORMAT(/' PROBLEM ENCOUNTERED IN RECOMPUTATION OF USER-SUPPLIED 1EIGENVALUE',E20.12/' FOR THE SIZE T-MATRIX SPECIFIED =',I6,' THE 1GIVEN EIGENVALUE IS T-MULTIPLE IN THE INTERVAL SPECIFIED'/' SOMETH 1ING IS WRONG, THEREFORE NO EIGENVECTOR WILL BE COMPUTED FOR THIS E 1IGENVALUE'/) C MP(J) = MPMIN MA(J) = -2*KMAX GO TO 710 C 590 CONTINUE ILBIS = 0 C EVNEW(J) = EVALN EVAL = EVALN MTOL = MTOL+KMAXU C C IS THERE ROOM IN TVEC ARRAY FOR THE NEXT T-EIGENVECTOR? C IF NOT, SKIP TO RITZ VECTOR COMPUTATIONS. IF (MTOL.GT.MDIMTV) GO TO 720 C IT = 3 KINT = MTOL - KMAXU +1 C C RECORD THE BEGINNING AND END OF THE T-EIGENVECTOR BEING COMPUTED MINT(J) = KINT MFIN(J) = MTOL C C----------------------------------------------------------------------- C SUBROUTINE INVERM DOES INVERSE ITERATION, I.E. SOLVES C (T(1,KMAXU) - EVAL)*U = RHS FOR EACH EIGENVALUE TO OBTAIN THE C DESIRED T-EIGENVECTOR. C IF(IWRITE.EQ.1) WRITE(6,600) J 600 FORMAT(/I6,'TH EIGENVALUE') C CALL INVERM(ALPHA,BETA,V1,TVEC(KINT),EVAL,ERROR,TERROR,EPSM, 1 G,KMAXU,IT,IWRITE) C C----------------------------------------------------------------------- C TERR(J) = TERROR TLAST(J) = ERROR KMAXU1 = KMAXU + 1 TBETA(J) = BETA(KMAXU1)*ERROR C C AFTER EACH OF THE T-EIGENVECTORS IS COMPUTED, THE C SIZE OF THE ERROR ESTIMATE, ERROR IS CHECKED. C IF THIS ESTIMATE IS NOT AS SMALL AS DESIRED AND C |MA(J)| < ML(J), PROGRAM ATTEMPTS TO INCREASE THE SIZE OF |MA(J)| C AND REPEAT THE T-EIGENVECTOR COMPUTATIONS. C IF(ERROR.LT.ERTOL.OR.TFLAG.EQ.1) GO TO 700 C IF(ERROR.GE.ERRMIN) GO TO 610 C LAST COMPONENT IS LESS THAN MINIMAL TO DATE ERRMIN = ERROR MABEST = MA(J) 610 CONTINUE C IF(MA(J).GT.0) ITEST = MA(J) + IDELTA(J) IF(MA(J).LT.0) ITEST = -(IABS(MA(J)) + IDELTA(J)) IF(IABS(ITEST).LE.ML(J).AND.ICOUNT.LE.10) GO TO 630 C NEW MA(J) IS GREATER THAN MAXIMUM ALLOWED. IF(ERCONT.EQ.0.OR.MABEST.EQ.MPMIN) GO TO 650 TFLAG = 1 MA(J) = MABEST IF(ILBIS.EQ.0) MTOL = MTOL - KMAXU WRITE(6,620) MA(J) 620 FORMAT(' 10 ORDERS WERE CONSIDERED. NONE SATISFIED THE ERROR TEST 1'/' THEREFORE USE THE BEST ORDER OBTAINED FOR THE EIGENVECTORS' 1,I6) GO TO 530 C 630 MA(J) = ITEST C MT = IABS(MA(J)) IF(IWRITE.EQ.1) WRITE(6,640) MT 640 FORMAT(/' CHANGE SIZE OF T-MATRIX TO ',I6,' RECOMPUTE T-EIGENVECTO 1R') C IF(ILBIS.EQ.0) MTOL = MTOL - KMAXU C GO TO 530 C C APPROPRIATE SIZE T-MATRIX WAS NOT OBTAINED 650 CONTINUE WRITE(10,660) J,EVAL,MP(J) 660 FORMAT(/' ON 10 INCREMENTS NOT ABLE TO IDENTIFY APPROPRIATE SIZE 1T-MATRIX FOR'/ 1' EIGENVALUE(',I4,') = ',E20.12,' T-MULTIPLICITY =',I4/) IF(M2(J).EQ.KMAX) WRITE(10,670) IF(M2(J).LT.KMAX) WRITE(10,680) 670 FORMAT(/' ORDERS TESTED RANGED FROM 5*M1(J)/4 TO APPROXIMATELY 1 '/' MIN(11*MEV/8,13*M1(J)/8)'/) 680 FORMAT(/' ORDERS TESTED RANGED FROM (3*M1(J)+M2(J))/4 TO APPROXIMA 1TELY'/' (3*M1(J) + 5*M2(J))/8.'/) WRITE(10,690) 690 FORMAT(' ALLOWING LARGER ORDERS FOR THE T-MATRICES MAY RESULT IN 1 SUCCESS'/' BUT PROBABLY WILL NOT. PROBLEM IS PROBABLY DUE TO' 1 /' LACK OF CONVERGENCE OF GIVEN EIGENVALUE, CHECK THE ERROR ESTIM 1ATE'/) MP(J) = MPMIN IF(ILBIS.EQ.0) MTOL = MTOL - KMAXU GO TO 710 700 NTVEC = NTVEC + 1 C 710 CONTINUE NGOODC = NGOOD GO TO 740 C C COME HERE IF THERE IS NOT ENOUGH ROOM FOR ALL OF T-EIGENVECTORS 720 NGOODC = J-1 WRITE(6,730) J, MTOL, MDIMTV 730 FORMAT(/' NOT ENOUGH ROOM IN TVEC FOR ',I4,'TH T-VECTOR'/' T-DIM 1ENSION REQUESTED = ',I6,' BUT TVEC HAS DIMENSION = ',I6/) IF(NGOODC.EQ.0) GO TO 1430 MTOL = MTOL-KMAXU C 740 CONTINUE C C THE LOOP ON T-EIGENVECTOR COMPUTATIONS IS COMPLETE. C WRITE OUT THE SIZE T-MATRICES THAT WILL BE USED FOR C THE RITZ VECTOR COMPUTATIONS. C WRITE(10,750) 750 FORMAT(/' SIZES OF T-MATRICES THAT WILL BE USED IN THE RITZ COMPUT 1ATIONS'/5X,'J',16X,'GOODEV(J)',1X,'MA(J)') C WRITE(10,760) (J,GOODEV(J),MA(J), J=1,NGOOD) 760 FORMAT(I6,E25.14,I6) WRITE(10,510) C WRITE(6,770) MTOL 770 FORMAT(/' THE CUMULATIVE LENGTH OF THE T-EIGENVECTORS IS',I18) C WRITE(6,780) NTVEC,NGOOD 780 FORMAT(/I6,' T-EIGENVECTORS OUT OF',I6,' REQUESTED WERE COMPUTED') C C SAVE THE T-EIGENVECTORS ON FILE 11? IF(TVSTOP.NE.1.AND.SVTVEC.EQ.0) GO TO 840 C WRITE(11,790) NTVEC,MTOL,MATNO,SVSEED 790 FORMAT(I6,3I12,' = NTVEC,MTOL,MATNO,SVSEED') C DO 820 J=1,NGOODC C IF MP(J) = MPMIN THEN NO SUITABLE T-EIGENVECTOR IS AVAILABLE C FOR THAT EIGENVALUE. IF(MP(J).EQ.MPMIN) WRITE(11,800) J,MA(J),GOODEV(J),MP(J) 800 FORMAT(2I6,E20.12,I6/' TH EIGVAL,T-SIZE,EVALUE,FLAG,NO EIGVEC') IF(MP(J).NE.MPMIN) WRITE(11,810) J,MA(J),GOODEV(J),MP(J) 810 FORMAT(I6,I6,E20.12,I6/' T-EIGVEC,SIZE T,EVALUE OF A,MP(J)') IF(MP(J).EQ.MPMIN) GO TO 820 KI = MINT(J) KF = MFIN(J) C WRITE(11,260) (TVEC(K), K=KI,KF) C 820 CONTINUE C IF(TVSTOP.NE.1) GO TO 840 C WRITE(6,830) TVSTOP, NTVEC,NGOOD 830 FORMAT(/' USER SET TVSTOP = ',I1/ 1' THEREFORE PROGRAM TERMINATES AFTER T-EIGENVECTOR COMPUTATIONS'/ 1' T-EIGENVECTORS THAT WERE COMPUTED ARE SAVED ON FILE 11'/ 1I8,' T-EIGENVECTORS WERE COMPUTED OUT OF',I7,' REQUESTED'/) C GO TO 1550 C 840 CONTINUE C IF NOT ABLE TO COMPUTE ALL THE REQUESTED T-EIGENVECTORS, C CONTINUE WITH THE LANCZOS VECTOR COMPUTATIONS ANYWAY? IF(NTVEC.NE.NGOOD.AND.LVCONT.EQ.0) GO TO 1450 C C COMPUTE THE MAXIMUM SIZE OF THE T-MATRIX USED FOR THOSE C EIGENVALUES WITH GOOD ERROR ESTIMATES. C KMAXU = 0 DO 850 J = 1,NGOODC MT = IABS(MA(J)) IF(MT.LT.KMAXU.OR.MP(J).EQ.MPMIN) GO TO 850 KMAXU = MT 850 CONTINUE C IF(KMAXU.EQ.0) GO TO 1490 C WRITE(6,860) KMAXU 860 FORMAT(/I6,' = LARGEST SIZE T-MATRIX TO BE USED IN THE RITZ VECTOR 1 COMPUTATIONS') C C COUNT THE NUMBER OF RITZ VECTORS NOT BEING COMPUTED MREJEC = 0 DO 870 J=1,NGOODC 870 IF(MP(J).EQ.MPMIN) MREJEC = MREJEC + 1 MREJET = MREJEC + (NGOOD-NGOODC) IF(MREJET.NE.0) WRITE(6,880) MREJET 880 FORMAT(/' RITZ VECTORS ARE NOT COMPUTED FOR',I6,' OF THE EIGENVALU 1ES'/) NACT = NGOODC - MREJEC WRITE(6,890) NGOOD,NTVEC,NACT 890 FORMAT(/I6,' RITZ VECTORS WERE REQUESTED'/I6,' T-EIGENVECTORS WERE 1 COMPUTED'/I6,' RITZ VECTORS WILL BE COMPUTED'/) C CHECK IF THERE ARE ANY RITZ VECTORS TO COMPUTE IF(MREJEC.EQ.NGOODC) GO TO 1470 C C CONTINUE WITH THE LANCZOS VECTOR COMPUTATIONS? IF(LVCONT.EQ.0.AND.MREJEC.NE.0) GO TO 1450 C C NOW COMPUTE THE RITZ VECTORS. REGENERATE THE C LANCZOS VECTORS. C DO 900 I = 1,NMAX 900 RITVEC(I) = ZERO C C----------------------------------------------------------------------- C REGENERATE THE STARTING VECTOR. THIS MUST BE GENERATED AND C NORMALIZED PRECISELY THE WAY IT WAS DONE IN THE EIGENVALUE C COMPUTATIONS, OTHERWISE THERE WILL BE A MISMATCH BETWEEN C THE T-EIGENVECTORS THAT HAVE BEEN COMPUTED FROM THE T-MATRICES C READ IN FROM FILE 2 AND THE LANCZOS VECTORS THAT ARE C BEING REGENERATED. C IIL = SVSEED CALL GENRAN(IIL,G,N) C C----------------------------------------------------------------------- C DO 910 J = 1,N 910 V2(J) = G(J) C SUM = FINPRO(N,V2(1),1,V2(1),1) SUM = ONE/DSQRT(SUM) C DO 920 J = 1,N V1(J) = ZERO 920 V2(J) = V2(J)*SUM C C LOOP FOR GENERATING RITZ VECTORS (IVEC = 1,KMAXU) IVEC = 1 BATA = ZERO C GO TO 980 C 930 CONTINUE C C COMPUTE V1 = A*V2 - BATA*V1 C C----------------------------------------------------------------------- C CALL CMATV(V2,V1,BATA) C C----------------------------------------------------------------------- C ALFA = FINPRO(N,V1(1),1,V2(1),1) C DO 940 J = 1,N 940 V1(J) = V1(J)-ALFA*V2(J) C BATA = FINPRO(N,V1(1),1,V1(1),1) BATA = DSQRT(BATA) SUM = ONE/BATA C TEMP = BETA(IVEC) TEMP = DABS(BATA - TEMP)/TEMP IF (TEMP.LT.1.0D-10)GO TO 960 C C THE BETA BEING REGENERATED DO NOT MATCH THE BETA IN FILE 2. C SOMETHING IS WRONG IN THE LANCZOS VECTOR GENERATION. C PROGRAM TERMINATES FOR USER TO CORRECT THE PROBLEM C WHICH MUST BE IN THE STARTING VECTOR GENERATION OR IN C THE MATRIX-VECTOR MULTIPLY SUBROUTINE CMATV SUPPLIED. C THIS SUBROUTINE MUST BE THE SAME ONE USED IN THE C EIGENVALUE COMPUTATIONS OR A MISMATCH WILL ENSUE. C WRITE(6,950) IVEC,BATA,BETA(IVEC),TEMP 950 FORMAT(/2X,'IVEC',16X,'BATA',10X,'BETA(IVEC)',14X,'RELDIF'/I6, 13E20.12/' IN LANCZOS VECTOR REGENERATION THE ENTRIES OF THE TRIDIA 1GONAL MATRICES BEING'/' GENERATED ARE NOT THE SAME AS THOSE IN THE 1 MATRIX SUPPLIED ON FILE 2.'/' THEREFORE SOMETHING IS BEING INITIA 1LIZED OR COMPUTED DIFFERENTLY FROM THE WAY'/' IT WAS COMPUTED IN T 1HE EIGENVALUE COMPUTATIONS'/' THE PROGRAM TERMINATES FOR THE USER 1TO DETERMINE WHAT THE PROBLEM IS'/) GO TO 1550 C C 960 CONTINUE DO 970 J = 1,N TEMP = SUM*V1(J) V1(J) = V2(J) 970 V2(J) = TEMP C 980 CONTINUE C LFIN = 0 DO 1000 J = 1,NGOODC LL = LFIN LFIN = LFIN + N C IF(IABS(MA(J)).LT.IVEC.OR.MP(J).EQ.MPMIN) GO TO 1000 II = IVEC + MINT(J) - 1 TEMP = TVEC(II) C II IS THE (IVEC)TH COMPONENT OF THE T-EIGENVECTOR CONTAINED C IN TVEC(MINT(J)). C DO 990 K = 1,N LL = LL + 1 990 RITVEC(LL) = TEMP*V2(K) + RITVEC(LL) C 1000 CONTINUE C IVEC = IVEC + 1 IF (IVEC.LE.KMAXU) GO TO 930 C C C RITZVECTOR GENERATION IS COMPLETE. NORMALIZE EACH RITZVECTOR. C NOTE THAT IF CERTAIN RITZ VECTORS WERE NOT COMPUTED THEN THAT C PORTION OF THE RITVEC ARRAY WAS NOT UTILIZED. C LFIN = 0 DO 1050 J = 1,NGOODC C KK = LFIN LFIN = LFIN + N IF(MP(J).EQ.MPMIN) GO TO 1050 C DO 1010 K = 1,N KK = KK + 1 1010 V2(K) = RITVEC(KK) C SUM = FINPRO(N,V2(1),1,V2(1),1) SUM = DSQRT(SUM) RNORM(J) = SUM TEMP = DABS(ONE-SUM) SUM = ONE/SUM C KK = LFIN - N DO 1020 K = 1,N KK = KK + 1 V2(K) = SUM*V2(K) 1020 RITVEC(KK) = V2(K) C IF (IWRITE.NE.0) WRITE(6,1030) J,GOODEV(J) 1030 FORMAT(/I5,' TH EIGENVALUE CONSIDERED = ',E20.12/) C IF (IWRITE.NE.0) WRITE(6,1040) TERR(J),TBETA(J),TEMP 1040 FORMAT(' NORM OF ERROR IN T-EIGENVECTOR = ',E14.3/ 1 ' BETA(MA(J)+1)*U(MA(J)) = ',E14.3/ 1 ' ABS(NORM(RITVEC) - 1.0) = ',E14.3/) C LINT = LFIN - N + 1 EVAL = EVNEW(J) C C----------------------------------------------------------------------- C CALL CMATV(RITVEC(LINT),V2,EVAL) C C----------------------------------------------------------------------- C C COMPUTE ERROR IN RITZ VECTOR CONSIDERED AS A EIGENVECTOR OF A. C V2 = A*RITVEC - EVAL*RITVEC C SUM = FINPRO(N,V2(1),1,V2(1),1) SUM = DSQRT(SUM) ERR(J) = SUM GAP = ABS(AMINGP(J)) ERRDGP(J) = SUM/GAP C 1050 CONTINUE C C C RITZVECTORS ARE NORMALIZED AND ERROR ESTIMATES ARE IN ERR ARRAY C AND IN ERRDGP ARRAY. STORE EVERYTHING C C WRITE(9,1060) 1060 FORMAT(3X,'A-EIGENVALUE',2X,'MA(J)',3X,'A-MINGAP',6X,'AERROR',2X, 1 'AERROR/GAP',6X,'TERROR') C WRITE(13,1070) 1070 FORMAT(16X,'GOODEV(J)',5X,'RITZNORM',6X,'AMINGAP',5X, 1 'TBETA(J)',5X,'TLAST(J)') C DO 1100 J=1,NGOODC C IF(MP(J).EQ.MPMIN) GO TO 1100 C WRITE(9,1080)EVNEW(J),MA(J),AMINGP(J),ERR(J),ERRDGP(J),TERR(J) 1080 FORMAT(E15.8,I6,4E12.4) C WRITE(13,1090) EVNEW(J),RNORM(J),AMINGP(J),TBETA(J),TLAST(J) 1090 FORMAT(E25.14,4E13.5) C 1100 CONTINUE C IF(MREJEC.EQ.0) GO TO 1180 WRITE(9,1110) 1110 FORMAT(/' RITZ VECTORS WERE NOT COMPUTED FOR THE FOLLOWING EIGENVA 1LUES'/' EITHER BECAUSE THEY HAD NOT CONVERGED OR BECAUSE THE ERROR 1 ESTIMATE'/' WAS NOT AS SMALL AS DESIRED'/) C DO 1170 J = 1,NGOODC IF(MP(J).NE.MPMIN) GO TO 1170 C WRITE OUT MESSAGE FOR EACH EIGENVALUE FOR WHICH NO EIGENVECTOR C WAS COMPUTED. C WRITE(9,1120) 1120 FORMAT(6X,'GOODEV(J)',3X,'MA(J)',5X,'AMINGP(J)',6X,'TLAST(J)',3X, 1'MP(J)') WRITE(9,1130) GOODEV(J),MA(J),AMINGP(J),TBETA(J),MP(J) 1130 FORMAT(E15.8,I8,2E14.4,I8) C WRITE(13,1140) 1140 FORMAT(/' RITZ VECTORS WERE NOT COMPUTED FOR THE FOLLOWING EIGENVA 1LUES'/' BECAUSE THEY HAD NOT CONVERGED'/) C WRITE(13,1150) 1150 FORMAT(6X,'GOODEV(J)',3X,'MA(J)',3X,'M1(J)',3X,'M2(J)',3X,'MP(J)' 1/) WRITE(13,1160) GOODEV(J),MA(J),M1(J),M2(J),MP(J) 1160 FORMAT(E15.8,4I8) C 1170 CONTINUE 1180 CONTINUE C WRITE(9,1190) 1190 FORMAT(/' ABOVE ARE ERROR ESTIMATES FOR THE A AND T EIGENVECTORS'/ 1 ' ASSOCIATED WITH THE GOODEV LISTED IN COLUMN 1'/ 1 ' AERROR = NORM(A*X - EV*X) TERROR = NORM(T*Y - EV*Y) '/ 1 ' WHERE T = T(1,MA(J)) X = RITZ VECTOR = V*Y V = SUCCESSIVE'/ 1 ' LANCZOS VECTORS. AMINGAP = GAP TO NEAREST A-EIGENVALUE'//) C WRITE(13,1200) 1200 FORMAT(/' ABOVE ARE ERROR ESTIMATES ASSOCIATED WITH THE GOODEV'/ 1 ' RITZNORM = NORM(COMPUTED RITZ VECTOR)'/ 1 ' TBETA(J) = BETA(MA(J)+1)*Y(MA(J)), T*Y = EVAL*Y'/ 1 ' TLAST(J) = Y(MA(J))'/ 1 ' AMINGAP = GAP TO NEAREST A-EIGENVALUE'/) C C NUMBER OF RITZ VECTORS COMPUTED NCOMPU = NGOODC - MREJEC WRITE(12,1210) N,NCOMPU,NGOODC,MATNO 1210 FORMAT(3I6,I12,' SIZE A, NO.RITZVECS, NO.EVALUES,MATNO') C LFIN = 0 DO 1270 J = 1,NGOODC LINT = LFIN + 1 LFIN = LFIN + N C IF(MP(J).EQ.MPMIN) GO TO 1250 C RITZ VECTOR WAS COMPUTED WRITE(12,1220) J, GOODEV(J), MP(J) 1220 FORMAT(I6,4X,E20.12,I6,' J, EIGENVAL, MP(J)') C WRITE(12,1230) ERR(J),ERRDGP(J) 1230 FORMAT(2E15.5,' = NORM(A*Z-EVAL*Z) AND NORM(A*Z-EVAL*Z)/MINGAP') C WRITE(12,1240) (RITVEC(LL), LL=LINT,LFIN) 1240 FORMAT(4E20.12) GO TO 1270 C NO RITZ VECTOR WAS COMPUTED FOR THIS EIGENVALUE 1250 WRITE(12,1260) J,GOODEV(J),MP(J) 1260 FORMAT(I6,4X,E20.12,I6,' J,EIGVALUE,NO RITZ VECTOR COMPUTED') C 1270 CONTINUE C C DID ANY T-MATRICES INCLUDE OFF-DIAGONAL ENTRIES SMALLER THAN C DESIRED, AS SPECIFIED BY BTOL? C IF(IB.GT.0) GO TO 1300 C WRITE(6,1280) KMAXU 1280 FORMAT(/' FOR LARGEST T-MATRIX CONSIDERED',I7,' CHECK THE SIZE OF 1BETAS') C C----------------------------------------------------------------------- C CALL TNORM(ALPHA,BETA,BKMIN,TEMP,KMAXU,IBMT) C C----------------------------------------------------------------------- C IF(IBMT.LT.0) WRITE (6,1290) 1290 FORMAT(/' WARNING THE T-MATRICES FOR ONE OR MORE OF THE EIGENVALUE 1S CONSIDERED'/' HAD AN OFF-DIAGONAL ENTRY THAT WAS SMALLER THAN TH 1E BETA TOLERANCE THAT WAS SPECIFIED'/) 1300 CONTINUE C GO TO 1550 C 1310 WRITE(6,1320) NGOOD,NMAX,MDIMRV 1320 FORMAT(/I4,' RITZ VECTORS WERE REQUESTED BUT THE REQUIRED DIMENSIO 1N',I6/' IS LARGER THAN THE USER-SPECIFIED DIMENSION OF RITVEC',I6 1/' THEREFORE, THE EIGENVECTOR PROCEDURE TERMINATES FOR THE USER TO 1 INTERVENE') C GO TO 1550 C 1330 WRITE(6,1340) NOLD,N,MATOLD,MATNO 1340 FORMAT(//' PARAMETERS READ FROM FILE 3 DO NOT AGREE WITH THOSE SPE 1CIFIED BY THE USER'/' N,NOLD,MATOLD,MATNO = ',2I6,2I12/' PROGRAM T 1ERMINATES FOR USER TO RESOLVE PROBLEM'/) C GO TO 1550 C 1350 WRITE(6,1360) 1360 FORMAT(//' PARAMETERS IN THE ALPHA,BETA FILE HEADER DO NOT AGREE W 1ITH PARAMTERS'/' SPECIFIED BY THE USER. THEREFORE THE PROGRAM TER 1MINATES FOR THE USER'/' TO RESOLVE THE PROBLEM'/) C GO TO 1550 C 1370 WRITE(6,1380) KMAX,MEV 1380 FORMAT(/' ALPHA,BETA FILE HEADER GIVES KMAX =',I6/ 1' BUT EIGENVALUES WERE COMPUTED AT MEV = ',I6,' PROGRAM STOPS'/) C GO TO 1550 C 1390 WRITE(6,1400) 1400 FORMAT(//' PROGRAM COMPUTED 1ST GUESSES AT T-MATRIX SIZES AND READ 1 THEM TO'/' FILE 10, THEN TERMINATED AS REQUESTED.') GO TO 1550 C 1410 WRITE(6,1420) MTOL, MDIMTV 1420 FORMAT(/' PROGRAM TERMINATES BECAUSE THE TVEC DIMENSION ANTICIPATE 1D',I7/' IS LARGER THAN THE TVEC DIMENSION',I7,' SPECIFIED BY THE 1USER.'/' USER MAY RESET THE TVEC DIMENSION AND RESTART THE PROGRA 1M') GO TO 1550 C 1430 WRITE(6,1440) 1440 FORMAT(/' PROGRAM TERMINATES BECAUSE NO SUITABLE T-EIGENVECTORS WE 1RE IDENTIFIED'/' FOR ANY OF THE EIGENVALUES SUPPLIED. PROBLEM CO 1ULD BE CAUSED'/' BY TOO SMALL A TVEC DIMENSION OR SIMPLY THAT SUI 1TABLE T-VECTORS COULD'/' NOT BE IDENTIFIED. USER SHOULD CHECK OU 1TPUT'/) GO TO 1550 C 1450 WRITE(6,1460) LVCONT,NTVEC,NGOOD 1460 FORMAT(/' LVCONT FLAG =',I2,' AND NUMBER ',I5,' OF T-EIGENVECTORS 1 COMPUTED N.E.'/' NUMBER',I5,' REQUESTED SO PROGRAM TERMINATES'/) GO TO 1550 C 1470 WRITE(6,1480) 1480 FORMAT(//' PROGRAM TERMINATES WITHOUT COMPUTING RITZ VECTORS'/ 1' BECAUSE ALL T-EIGENVECTORS WERE REJECTED AS NOT SUITABLE FOR THE 1 RITZ VECTOR'/' COMPUTATIONS. PROBABLE CAUSE IS LACK OF CONVERGEN 1CE OF THE EIGENVALUES SUPPLIED'/) GO TO 1550 C 1490 WRITE(6,1500) 1500 FORMAT(/' PROGRAM INDICATES THAT IT IS NOT POSSIBLE TO COMPUTE ANY 1 OF THE'/' REQUESTED EIGENVECTORS. THEREFORE PROGRAM TERMINATES') DO 1510 J=1,NGOODC 1510 WRITE(6,1520) J,GOODEV(J),MP(J) 1520 FORMAT(/4X,' J',11X,'GOODEV(J)',4X,'MP(J)'/I6,E20.12,I9) GO TO 1550 C 1530 WRITE(6,1540) MBETA,KMAXN 1540 FORMAT(/' PROGRAM TERMINATES BECAUSE THE STORAGE ALLOTTED FOR THE 1BETA ARRAY',I8/' IS NOT SUFFICIENT FOR THE ENLARGED KMAX =',I8,' T 1HAT THE PROGRAM WANTS'/' USER CAN ENLARGE THE DIMENSIONS OF THE AL 1PHA AND BETA ARRAYS'/' AND RERUN THE PROGRAM'/) C 1550 CONTINUE C STOP C-----END OF MAIN PROGRAM FOR LANCZOS EIGENVECTORS--------------------- END .