C-----CONVERGENCE TESTS FOR THE SINGULAR VALUE PROGRAMS----------------- C C C THE CONVERGENCE TEST INCORPORATED IN THIS PROGRAM IS C BASED UPON THE ASSUMPTION THAT THOSE T-EIGENVALUES AND C THEIR ASSOCIATED T-EIGENVECTORS THAT CORRESPOND TO C THE SINGULAR VALUES AND VECTORS WHICH WE WISH TO COMPUTE C CONVERGE AS THE T-SIZE IS INCREASED. C C AS CURRENTLY PROGRAMMED, CONVERGENCE IS CHECKED BY EXAMINING C THE SIZES OF ALL OF THE COMPUTED ERROR ESTIMATES ON ALL OF THE C INTERVALS SPECIFIED BY THE USER. IDEALLY CONVERGENCE SHOULD C BE CHECKED ONLY ON THOSE SINGULAR VALUES OF INTEREST AND C ONCE THE SINGULAR VALUES ON SUB-INTERVALS OF THESE INTERVALS C HAVE CONVERGED, ANY SUBSEQUENT SINGULAR VALUE COMPUTATIONS C SHOULD BE MADE ONLY ON THE UNCONVERGED PORTIONS. OBVIOUSLY, C IT WOULD BE DIFFICULT TO INCORPORATE CODE TO DO THE ABOVE C WITHOUT KNOWING A PRIORI PRECISELY WHAT THE USER IS TRYING C TO COMPUTE. THEREFORE, WE DID NOT ATTEMPT TO DO THIS. IF C ONE WISHES TO MAKE SUCH A MODIFICATION THEN ONE MUST ALSO C MODIFY THE PROGRAM SO THAT IT CREATES AN OVERALL LIST OF THE C CONVERGED SINGULAR VALUES AS THEY ARE COMPUTED, SINCE C CONVERGED SINGULAR VALUES OBTAINED AT A PARTICULAR VALUE OF C MEV WOULD NO LONGER BE RECOMPUTED AT LARGER VALUES OF MEV. C C IF ONLY A FEW SINGULAR VALUES ARE TO BE COMPUTED THEN SUCH C CHANGES WOULD NOT MAKE MUCH DIFFERENCE IN THE RUNNING TIME. C C C-----ARRAYS REQUIRED BY THE SINGULAR VALUE PROGRAMS-------------------- C C C BETA(J) = REAL*8 ARRAY. ITS DIMENSION MUST BE AT LEAST KMAX+1. C THE LENGTH OF THE LARGEST T-MATRIX ALLOWED. THIS C ARRAY CONTAINS THE SUBDIAGONAL ENTRIES OF THE C T-MATRICES. THE DIAGONAL ENTRIES ARE ALL ZERO. C C THE BETA VECTOR IS NOT ALTERED DURING THE C CALCULATIONS. IMPORTANT NOTE: ONLY EVEN ORDER C T-MATRICES ARE PERMISSIBLE. C C V1(J),V2(J),VS(J) = REAL*8 ARRAYS. VS MUST BE OF C DIMENSION AT LEAST KMAX. V1 MUST BE C OF DIMENSION AT LEAST MAX(M,KMAX+1). C V2 MUST BE OF DIMENSION AT LEAST C MAX(N,KMAX). M IS THE ROW DIMENSION OF C A, AND N IS THE COLUMN DIMENSION. C HOWEVER, THE DIMENSION C FOR V2 IS VALID ONLY IF NO MORE C THAN KMAX/2 EIGENVALUES OF THE GIVEN C T-MATRICES ARE TO BE COMPUTED IN ANY GIVEN C SUBINTERVAL. V2 IS USED IN THE SUBROUTINE C BISEC TO HOLD THE UPPER AND LOWER C ENDPOINTS OF THE SUBINTERVALS GENERATED C DURING THE BISECTIONS. THEREFORE, ITS C DIMENSION MUST ALWAYS BE AT LEAST 2*Q C WHERE Q IS THE MAXIMUM NUMBER OF C EIGENVALUES OF THE SPECIFIED T-MATRIX IN ANY C ONE OF THE SPECIFIED INTERVALS. C C LB(J),UB(J) = REAL*8 ARRAYS. EACH MUST BE OF DIMENSION AT LEAST C NINT, THE NUMBER OF SUBINTERVALS TO BE CONSIDERED. C LB CONTAINS THE LEFT-END POINTS OF THE INTERVALS C ON WHICH SINGULAR VALUES ARE TO BE COMPUTED. C UB CONTAINS THE RIGHT-END POINTS. C C EXPLAN(J) = REAL*4 ARRAY. ITS DIMENSION IS 20. THIS ARRAY IS C USED TO ALLOW EXPLANATORY COMMENTS IN THE INPUT FILES. C C G(J) = REAL*4 ARRAY. ITS DIMENSION MUST BE >= MAX(2*KMAX,M,N) C IT IS USED FOR HOLDING THE RANDOM VECTORS GENERATED, C HOLDING THE COMPUTED ERROR ESTIMATES AND THE COMPUTED C MINIMAL GAPS FOR THE SINGULAR VALUES. C C MP(J) = INTEGER*4 ARRAY. ITS DIMENSION MUST BE AT LEAST KMAX, C THE MAXIMUM SIZE OF THE T-MATRICES ALLOWED. IT CONTAINS C THE T-MULTIPLICITIES OF THE COMPUTED T-EIGENVALUES OF C THE T-MATRICES. NOTE THAT 'SPURIOUS' EIGENVALUES C OF THE T-MATRICES ARE DENOTED BY A T-MULTIPLICITY OF C 0. T-EIGENVALUES THAT THE SUBROUTINE PRTEST HAS C IDENTIFIED AS 'GOOD' BUT HIDDEN ARE IDENTIFIED BY A C T-MULTIPLICITY OF -10 AND SUBSEQUENTLY ADDED TO THE LIST C OF COMPUTED SINGULAR VALUES. C C NMEV(J) = INTEGER*4 ARRAY. ITS DIMENSION MUST BE AT LEAST THE C NUMBER OF T-MATRICES ALLOWED. IT CONTAINS THE ORDERS C OF THE T-MATRICES TO BE CONSIDERED. C C C OTHER ARRAYS C C THE USER MUST SPECIFY IN THE SUBROUTINE USPEC WHATEVER ARRAYS C ARE REQUIRED TO DEFINE THE MATRIX BEING USED. C C C-----SUBROUTINES INCLUDED---------------------------------------------- C C C LANCZS = COMPUTES THE BETA HISTORY. USES SUBROUTINES C FINPRO, GENRAN, SVMAT AND STRAN. C C BISEC = COMPUTES EIGENVALUES OF THE SPECIFIED T-MATRIX USING C STURM SEQUENCING, ON SEQUENCE OF INTERVALS SPECIFIED C BY THE USER. EACH SUBINTERVAL IS TREATED AS OPEN C ON THE LEFT AND CLOSED ON THE RIGHT. EIGENVALUES C ARE COMPUTED WITH SIMULTANEOUS DETERMINATION OF THE C T-MULTIPLICITIES AND OF WHICH T-EIGENVALUES ARE SPURIOUS. C C INVERR = USES INVERSE ITERATION ON T-MATRICES TO COMPUTE ERROR C ESTIMATES ON COMPUTED SINGULAR VALUES. (USES GENRAN) C C LUMP = 'COMBINES' EIGENVALUES OF T-MATRIX USING THE RELATIVE C TOLERANCE RELTOL. C C ISOEV = CALCULATES GAPS BETWEEN DISTINCT EIGENVALUES OF T-MATRIX C AND THEN USES THESE GAPS TO LABEL THOSE 'GOOD' C T-EIGENVALUES FOR WHICH ERROR ESTIMATES ARE NOT COMPUTED. C C TNORM = COMPUTES THE SCALE TKMAX USED IN DETERMINING THE C TOLERANCES FOR THE SPURIOUS, T-MULTIPLICITY AND PRTESTS. C IT ALSO CHECKS FOR LOCAL ORTHOGONALITY OF THE LANCZOS C VECTORS BY TESTING THE RELATIVE SIZE OF THE BETAS USING C THE RELATIVE TOLERANCE BTOL. C C PRTEST = LOOKS FOR 'GOOD' T-EIGENVALUES THAT HAVE BEEN MISLABELLED C BY THE SPURIOUS TEST BECAUSE THEY HAD 'TOO SMALL' A C PROJECTION ON THE STARTING LANCZOS VECTOR. C (LESS THAN SINGLE PRECISION) C TESTS INDICATE THAT SUCH T-EIGENVALUES ARE RARE. C PRTEST SHOULD BE CALLED ONLY AFTER CONVERGENCE C HAS BEEN ESTABLISHED. C C INVERM = USED TO COMPUTE ERROR ESTIMATES FOR ANY T-EIGENVALUES C WHICH PRTEST INDICATES MAY HAVE BEEN MISLABELLED. C SUCH T-EIGENVALUES ARE RELABELLED ONLY IF THEIR ERROR C ESTIMATES ARE SUFFICIENTLY SMALL. PRIMARY USE OF C INVERM IS IN THE CORRESPONDING SINGULAR VECTOR PROGRAM. C C SAMPLE USPEC, SVMAT AND STRAN SUBROUTINES ARE INCLUDED. C C ALSO INCLUDED IS A STAND-ALONE PROGRAM, LSCOMPAC, THAT C TRANSLATES A MATRIX GIVEN IN THE I,J, A(I,J) FORMAT INTO C THE PARTICULAR SPARSE MATRIX FORMAT USED IN THE SAMPLE USPEC, C SVMAT AND STRAN SUBROUTINES PROVIDED. C C C-----OTHER PROGRAMS PROVIDED------------------------------------------- C C C LSCOMPAC = STAND-ALONE PROGRAM THAT TRANSLATES A SPARSE C RECTANGULAR M X N MATRIX A, GIVEN AS I, J, A(I,J), C INTO THE SPARSE MATRIX FORMAT REQUIRED BY THE SAMPLE C USPEC, STRAN AND SVMAT SUBROUTINES PROVIDED FOR USE C IN THE SINGULAR VALUE/VECTOR PROGRAMS. C THIS PROGRAM ASSUMES THAT THE MATRIX ENTRIES ARE C GIVEN EITHER COLUMN BY COLUMN OR ROW BY ROW. IT C CANNOT HANDLE ANY OTHER ORDERINGS. IN FACT IF C THE ENTRIES ARE GIVEN ROW BY ROW, THE DATA SET C CREATED ON FILE 8 CORRESPONDS TO A-TRANSPOSE AND C NOT TO A. THUS, IN THIS SITUATION, IN ANY C SUBSEQUENT USE OF THE LANCZOS SINGULAR VALUE/VECTOR C PROGRAMS THE USER WILL HAVE TO INTERCHANGE THE C ROLES OF M AND OF N. C C C-----COMMENTS ON THE STORAGE REQUIRED FOR SINGULAR VALUE PROGRAMS------ C C C THE ARRAYS IN THE REAL SINGULAR VALUE PROGRAM REQUIRE C APPROXIMATELY THE EQUIVALENT OF ONE REAL*8 ARRAY OF DIMENSION C C 2.5*KMAX + MAX(KMAX,M) + MAX(KMAX,N) + .5* MAX(2*KMAX,M,N) C C PLUS WHATEVER IS NEEDED TO GENERATE A*X FOR THE GIVEN MATRIX A. C THE ARRAYS BETA, VS AND MP CONSUME 2.5*KMAX*8 BYTES. C THE ARRAY V1 CONSUMES MAXIMUM(KMAX+1,M)*8 BYTES, THE C ARRAY V2 CONSUMES MAXIMUM(KMAX,N)*8 BYTES, WITH THE C QUALIFICATION STATED ABOVE WHERE V2 IS DEFINED. THE G-ARRAY C CONSUMES .5*MAX(2*KMAX,M,N)*8 BYTES. C C C----------------------------------------------------------------------- C C COMMENTS FOR SINGULAR VECTOR COMPUTATIONS C C----------------------------------------------------------------------- C C C THE SINGULAR VALUES WHOSE SINGULAR VECTORS ARE TO BE COMPUTED C MUST HAVE BEEN COMPUTED USING THE CORRESPONDING LANCZOS C SINGULAR VALUE PROGRAMS FOR REAL RECTANGULAR MATRICES BECAUSE C THESE SINGULAR VECTOR PROGRAMS USE THE SAME FAMILY OF LANCZOS C TRIDIAGONAL MATRICES THAT WAS USED IN THE CORRESPONDING C SINGULAR VALUE COMPUTATIONS. C C THESE PROGRAMS ASSUME THAT THE SINGULAR VALUES SUPPLIED TO IT C HAVE BEEN COMPUTED ACCURATELY, AS MEASURED BY THE C ERROR ESTIMATES COMPUTED IN THE CORRESPONDING LANCZOS C SINGULAR VALUE COMPUTATIONS, ALTHOUGH THESE ESTIMATES C ARE TYPICALLY CONSERVATIVE. THE SINGULAR VALUES SUPPLIED C ARE STORED IN THE ARRAY GOODSV(J), J=1,NGOOD. C C FOR EACH GOODSV(J), THE SUBROUTINE STURMI COMPUTES THE C SMALLEST SIZE LANCZOS TRIDIAGONAL MATRIX, T(1,M1(J)), FOR C WHICH GOODSV(J) IS A T-EIGENVALUE TO WITHIN A SPECIFIED C TOLERANCE. IT ALSO ATTEMPTS TO COMPUTE THE SIZE, M2(J), C BY WHICH THE GIVEN SINGULAR VALUE BECOMES A DOUBLE C T-EIGENVALUE TO WITHIN THE GIVEN TOLERANCE. THESE SIZES ARE C USED TO DETERMINE 1ST GUESSES AT SIZES FOR THE T-EIGENVECTORS C THAT WILL BE USED IN THE SINGULAR VECTOR COMPUTATIONS. C SUBROUTINE INVERM SUCCESSIVELY COMPUTES CORRESPONDING C T-EIGENVECTORS OF ENLARGED T-MATRICES UNTIL A SUITABLE C SIZE T-MATRIX IS DETERMINED FOR EACH J. UP TO 10 SUCH C T-EIGENVECTOR COMPUTATIONS ARE ALLOWED FOR EACH SINGULAR C VALUE SUPPLIED. C C AFTER APPROPRIATE T-EIGENVECTORS HAVE BEEN COMPUTED, C RITZ VECTORS FOR THE MATRIX B CORRESPONDING TO THESE C T-EIGENVECTORS ARE THEN COMPUTED. SECTIONS OF THESE C RITZ VECTORS ARE THEN TAKEN AS APPROXIMATE LEFT AND C RIGHT SINGULAR VECTORS CORRESPONDING TO THE GIVEN C SINGULAR VALUES GOODSV(J), J = 1,...,NGOOD. C C THIS IMPLEMENTATION FIRST COMPUTES ALL OF THE RELEVANT C T-EIGENVECTORS OF THE SYMMETRIC TRIDIAGONAL MATRICES C IN THE VECTOR, TVEC. C C THEN, AS EACH OF THE LANCZOS VECTORS IS REGENERATED, ALL C OF THE B-MATRIX RITZ VECTORS CORRESPONDING TO THESE C T-EIGENVECTORS ARE UPDATED USING THE CURRENTLY-GENERATED C LANCZOS VECTOR. LANCZOS VECTORS ARE GENERATED (NOTE C THAT THEY ARE NOT BEING KEPT), UNTIL ENOUGH HAVE C BEEN GENERATED TO MAP THE LONGEST T-EIGENVECTOR INTO ITS C CORRESPONDING B-MATRIX RITZ VECTOR. THE ARRAY RITVEC C CONTAINS THE SUCCESSIVE RITZ VECTORS WHICH ARE THEN C SPLIT INTO APPROXIMATIONS TO THE LEFT AND RIGHT SINGULAR C VECTORS OF THE USER-SUPPLIED MATRIX A. C C C-----PARAMETER CONTROLS FOR SINGULAR VECTOR PROGRAMS------------------- C C C PARAMETER CONTROLS ARE INTRODUCED TO ALLOW SEGMENTATION OF THE C SINGULAR VECTOR COMPUTATIONS AND TO ALLOW VARIOUS COMBINATIONS C OF READ/WRITES. C C THE FLAG MBOUND ALLOWS THE USER TO DETERMINE A FIRST GUESS ON THE C STORAGE THAT WILL BE REQUIRED BY THE T-EIGENVECTORS FOR THE C SINGULAR VALUES WHOSE SINGULAR VECTORS ARE TO BE COMPUTED. C THIS CAN BE USED TO ESTIMATE THE REQUIRED SIZE OF THE TVEC ARRAY. C C MBOUND = (0,1) MEANS C C (0) PROGRAM COMPUTES FIRST GUESSES AT THE SIZES C OF THE T-MATRICES REQUIRED BY EACH OF THE C SINGULAR VALUES SUPPLIED AND THEN CONTINUES C WITH THE CORRESPONDING T-EIGENVECTOR C COMPUTATIONS. C C (1) PROGRAM COMPUTES FIRST GUESSES AT THE SIZES C OF THE T-MATRICES REQUIRED BY EACH OF THE C SINGULAR VALUES SUPPLIED, STORES THESE IN FILE C 10 AND THEN TERMINATES. THE USER CAN USE THESE C SIZES TO ESTIMATE THE SIZE TVEC ARRAY NEEDED C FOR THE DESIRED T-EIGENVECTOR COMPUTATIONS. C C THE FLAGS NTVCON, TVSTOP, LVCONT, AND ERCONT CONTROL THE STOPPING C CRITERIA FOR INTERMEDIATE POINTS IN THE LANCZOS PROCEDURE. THEY C TERMINATE THE PROCEDURE IF VARIOUS SPECIFIED QUANTITIES COULD C NOT BE COMPUTED AS DESIRED. C C NTVCON = (0,1) MEANS C C (0) IF THE ESTIMATED STORAGE FOR THE T-EIGENVECTORS C EXCEEDS THE USER-SPECIFIED DIMENSION OF THE C TVEC ARRAY PROGRAM DOES NOT CONTINUE WITH THE C T-EIGENVECTOR COMPUTATIONS. TERMINATION OCCURS. C C (1) CONTINUE WITH THE T-EIGENVECTOR COMPUTATIONS C EVEN IF THE ESTIMATED STORAGE FOR TVEC EXCEEDS C THE USER-SPECIFIED DIMENSION OF THE TVEC ARRAY. C IN THIS SITUATION THE PROGRAM COMPUTES AS MANY C T-EIGENVECTORS AS IT HAS ROOM FOR, IN THE SAME C ORDER IN WHICH THE SINGULAR VALUES ARE SUPPLIED. C C SVTVEC = (0,1) MEANS C C (0) DO NOT STORE THE COMPUTED T-EIGENVECTORS ON C FILE 11 UNLESS ALSO HAVE THE FLAG TVSTOP = 1, C IN WHICH CASE THE T-EIGENVECTORS ARE ALWAYS C WRITTEN TO FILE 11. C C (1) STORE THE COMPUTED T-EIGENVECTORS ON FILE 11. C C TVSTOP = (0,1) MEANS C C (0) ATTEMPT TO CONTINUE ON TO THE COMPUTATION C OF THE B-MATRIX RITZVECTORS AFTER COMPLETING THE C COMPUTATION OF THE T-EIGENVECTORS. C C (1) TERMINATE AFTER COMPUTING THE C T-EIGENVECTORS AND STORING THEM ON FILE 11. C C LVCONT = (0,1) MEANS C C (0) IF SOME OF THE T-EIGENVECTORS THAT WERE C REQUESTED WERE NOT COMPUTED, EXIT C FROM THE PROGRAM WITHOUT COMPUTING THE C CORRESPONDING RITZ VECTORS. C C (1) CONTINUE ON TO THE RITZ VECTOR COMPUTATIONS C EVEN IF NOT ALL OF THE T-EIGENVECTORS THAT C WERE REQUESTED WERE COMPUTED. C C ERCONT = (0,1) MEANS C C (0) PROGRAM WILL NOT COMPUTE THE RITZ C VECTOR FOR ANY SINGULAR VALUE FOR WHICH NO C T-EIGENVECTOR WHICH SATISFIES THE ERROR C ESTIMATE TEST (ERTOL) HAS BEEN IDENTIFIED. C C (1) A RITZ VECTOR WILL BE COMPUTED FOR EVERY C SINGULAR VALUE FOR WHICH A T-EIGENVECTOR HAS BEEN C COMPUTED REGARDLESS OF WHETHER OR NOT THAT C T-EIGENVECTOR SATISFIES THE ERROR ESTIMATE TEST. C C C-----INPUT/OUTPUT FILES FOR THE SINGULAR VECTOR COMPUTATIONS----------- C C C ANY INPUT DATA OTHER THAN THE T-MATRIX HISTORY FILE AND THE C PREVIOUSLY COMPUTED SINGULAR VALUES AND ERROR ESTIMATES C SHOULD BE STORED ON FILE 5 IN FREE FORMAT. SEE SAMPLE C INPUT/OUTPUT FOR TYPICAL INPUT FILE. C C FILE 6 WAS USED AS THE INTERACTIVE TERMINAL OUTPUT FILE. C THIS FILE PROVIDES A RUNNING ACCOUNT OF THE PROGRESS OF THE C COMPUTATIONS. ADDITIONAL PRINTOUT IS GENERATED WHEN C THE FLAG IWRITE = 1. C C C DESCRIPTION OF OTHER I/O FILES C C FILE (K) CONTAINS: C C (2) INPUT FILE: C PREVIOUSLY-GENERATED T-MATRICES (BETA ARRAY) C AND THE FINAL TWO LANCZOS VECTORS USED ON THAT C COMPUTATION. THIS PROGRAM ALLOWS ENLARGEMENT C OF ANY T-MATRICES PROVIDED ON FILE 2. C C (3) INPUT FILE: C THE SINGULAR VALUES FOR WHICH CORRESPONDING C SINGULAR VECTORS ARE REQUESTED. FILE 3 ALSO C CONTAINS THE T-MULTIPLICITIES OF THESE SINGULAR C VALUES (AS T-EIGENVALUES) AND THEIR COMPUTED GAPS C BOTH THE T-MATRICES AND IN THE USER-SUPPLIED MATRIX. C THIS FILE IS CREATED IN THE LANCZOS SINGULAR C VALUE COMPUTATIONS. C C (4) INPUT FILE: C ERROR ESTIMATES FOR THE ISOLATED SINGULAR VALUES C OF FILE 3. THIS FILE IS CREATED DURING THE LANCZOS C SINGULAR VALUE COMPUTATIONS. C C (8) INPUT FILE: C USPEC SUBROUTINE ASSUMES THAT THE USER- C SUPPLIED MATRIX IS ON FILE 8. C C (9) OUTPUT FILE: C ERROR ESTIMATES FOR THE COMPUTED RITZ VECTORS CONSIDERED C AS EIGENVECTORS OF THE B-MATRIX. THESE ESTIMATES C ARE OF THE FORM C BERROR = || B*RITVEC - SVAL*RITVEC || C WHERE B DENOTES THE M+N ORDER SYMMETRIC MATRIX C ASSOCIATED WITH THE USER-SUPPLIED MATRIX A, SVAL C DENOTES THE SINGULAR VALUE BEING CONSIDERED AND C RITVEC DENOTES THE ASSOCIATED COMPUTED RITZ VECTOR. C C (10) OUTPUT FILE: C GUESSES AT APPROPRIATE SIZE T-MATRICES FOR THE C T-EIGENVECTORS FOR EACH SUPPLIED SINGULAR VALUE C IN THE ARRAY GOODSV(J), J = 1,...,NGOOD. C C (11) OUTPUT FILE: C COMPUTED T-EIGENVECTORS CORRESPONDING TO SINGULAR C VALUES IN THE GOODSV ARRAY. NOTE THAT IT IS POSSIBLE C IN CERTAIN SITUATIONS THAT FOR SOME SINGULAR VALUES C SUPPLIED IN THE GOODSV ARRAY A T-EIGENVECTOR WILL C NOT BE COMPUTED. C C (12) OUTPUT FILE: C CONTAINS COMPUTED RITZ VECTORS CORRESPONDING TO C THE T-EIGENVECTORS ON FILE 11. NOTE THAT IN C SOME SITUATIONS THAT FOR SOME SINGULAR VALUES IN C THE GOODSV ARRAY FOR WHICH T-EIGENVECTORS HAVE C BEEN COMPUTED NO CORRESPONDING RITZ VECTOR WILL C HAVE BEEN COMPUTED. C C (13) OUTPUT FILE: C ADDITIONAL INFORMATION ABOUT THE BOUNDS AND ERROR C ESTIMATES OBTAINED. C C C-----SEEDS FOR SINGULAR VECTOR PROGRAMS-------------------------------- C C SEEDS FOR RANDOM NUMBER GENERATOR GENRAN C (1) SVSEED = INTEGER*4 SCALAR USED IN THE SUBROUTINE C GENRAN TO GENERATE THE STARTING VECTOR FOR C THE REGENERATION OF THE LANCZOS VECTORS. C C (2) RHSEED = INTEGER*4 SCALAR USED IN THE SUBROUTINE C GENRAN TO GENERATE A RANDOM VECTOR FOR C USE IN SUBROUTINE INVERM. C C USER SHOULD NOTE THAT SVSEED MUST BE THE SAME SEED THAT C WAS USED TO GENERATE THE T-MATRICES THAT WERE USED TO C COMPUTE THE SINGULAR VALUES WHOSE SINGULAR VECTORS ARE TO BE C COMPUTED. SVSEED IS READ IN FROM FILE 3. C C C-----USER-SPECIFIED PARAMETERS FOR THE SINGULAR VECTOR PROGRAMS-------- C C C NGOOD = NUMBER OF SINGULAR VALUES READ INTO THE GOODSV ARRAY C READ FROM FILE 3. C C M = ROW ORDER OF THE USER-SUPPLIED MATRIX. C C N = COLUMN ORDER OF THE USER-SUPPLIED MATRIX. C C MEV = SIZE OF THE T-MATRIX THAT WAS USED TO COMPUTE C THE SINGULAR VALUES WHOSE SINGULAR VECTORS ARE C REQUESTED. MEV IS READ IN FROM FILE 3. C C KMAX = SIZE OF THE T-MATRIX PROVIDED ON FILE 2. C C MDIMTV = MAXIMUM CUMULATIVE SIZE OF THE TVEC ARRAY ALLOWED C FOR ALL OF THE T-EIGENVECTORS REQUIRED. MDIMTV C MUST NOT EXCEED THE USER-SPECIFIED DIMENSION OF C THE TVEC ARRAY. PROGRAM CAN BE RUN WITH THE FLAG C MBOUND = 1 TO DETERMINE AN EDUCATED GUESS ON AN C APPROPRIATE DIMENSION FOR THE TVEC ARRAY. C C MDIMRV = MAXIMUM CUMULATIVE SIZE OF THE RITVEC ARRAY ALLOWED C FOR ALL OF THE RITZ VECTORS TO BE COMPUTED. MDIMRV C MUST NOT EXCEED THE USER-SPECIFIED DIMENSION OF C THE RITVEC ARRAY. MUST BE SELECTED SO THAT C THERE IS ENOUGH ROOM FOR A RITZ VECTOR FOR EVERY C GOODEV(J) READ INTO PROGRAM. (>= NGOOD*(M+N)) C C C-----ARRAYS REQUIRED BY THE SINGULAR VECTOR PROGRAMS------------------- C C C BETA(J) = REAL*8 ARRAY. ITS DIMENSION MUST BE AT LEAST C KMAXN+1, WHERE KMAXN IS THE LARGEST SIZE T-MATRIX C CONSIDERED BY THE PROGRAM. NOTE THAT KMAXN IS THE C LARGER OF THE SIZE OF THE BETA HISTORY PROVIDED C ON FILE 2 (IF ANY ) AND THE SIZE WHICH THE PROGRAM C 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 C SINGULAR VALUE COMPUTATIONS. BETA CONTAINS THE C NONZERO ENTRIES OF THE LANCZOS T-MATRICES. C BETA IS NOT DESTROYED IN THE COMPUTATIONS. C THE DIAGONAL ENTRIES OF THE T-MATRICES ARE ALL ZERO. C C RITVEC(J) = REAL*8 ARRAY. IT DIMENSION MUST BE > = NGOOD*(M+N) C WHERE THE USER-SUPPLIED MATRIX IS MXN C AND NGOOD IS THE NUMBER OF SINGULAR VALUES WHOSE C SINGULAR VECTORS ARE TO BE COMPUTED. IT CONTAINS C THE COMPUTED APPROXIMATE SINGULAR VECTORS OF A. C THESE COMPUTED RITZ VECTORS ARE STORED ON FILE 12. C C TVEC(J) = REAL*8 ARRAY. ITS DIMENSION MUST BE AT LEAST C MTOL = |MA(1)| + |MA(2)| + ... + |MA(NGOOD)| C WHERE NGOOD IS THE NUMBER OF SINGULAR VALUES BEING C CONSIDERED AND |MA(J)| IS THE SIZE OF THE C T-MATRIX BEING USED FOR THE B-MATRIX RITZ VECTOR C COMPUTATION FOR GOODSV(J). THESE SIZES C ARE COMPUTED BY THE PROGRAM. AN ESTIMATE OF C MTOL CAN BE OBTAINED BY SETTING MBOUND = 1, C RUNNING THE PROGRAM, AND THEN MULTIPLYING THE C RESULTING TOTAL T-SIZE SPECIFIED BY 5/4. THE TVEC C ARRAY CONTAINS THE COMPUTED T-EIGENVECTORS. IF C THE FLAG SVTVEC = 1 OR THE FLAG TVSTOP = 1, THEN C THESE VECTORS ARE SAVED ON FILE 11. C C V1(J) = REAL*8 ARRAY. ITS DIMENSION MUST BE GREATER C THAN THE MAXIMUM OF KMAX AND M, WHERE M IS C THE ROW ORDER OF THE GIVEN MATRIX. V1 IS USED C IN THE SUBROUTINE INVERM AND IN THE REGENERATION C OF THE LANCZOS VECTORS. C C V2(J) = REAL*8 ARRAY. ITS DIMENSION MUST BE GREATER C THAN MAX(KMAX,N), WHERE N IS THE COLUMN ORDER OF C THE GIVEN MATRIX. IT IS USED IN THE REGENERATION C OF THE LANCZOS VECTORS AND IN SUBROUTINE INVERM. C C GOODSV(J), = REAL*8 ARRAYS EACH OF DIMENSION AT LEAST NGOOD. C SVNEW(J) CONTAIN THE SINGULAR VALUES FOR WHICH C SINGULAR VECTORS ARE REQUESTED. SINGULAR VALUES C IN GOODSV ARE READ IN FROM FILE 3. C C BMINGP(J), = REAL*4 ARRAYS OF DIMENSION AT LEAST NGOOD. C TMINGP(J) CONTAIN, RESPECTIVELY, THE MINIMAL GAPS FOR C CORRESPONDING SINGULAR VALUES IN GOODSV ARRAY IN C B-MATRIX AND IN T-MATRIX. C C TERR(J), ERR(J), = REAL*4 ARRAYS (EXCEPT TLAST WHICH IS C ERRDGP(J), TLAST(J) REAL*8). EACH MUST BE OF DIMENSION C RNORM(J), TBETA(J) AT LEAST NGOOD. USED TO STORE QUANTITIES C GENERATED DURING THE COMPUTATIONS FOR C LATER PRINTOUT. C C G(J) = REAL*4 ARRAY WHOSE DIMENSION MUST BE AT LEAST C MAX(KMAX,M,N). USED IN SUBROUTINE GENRAN TO HOLD C RANDOM NUMBERS NEEDED FOR THE LANCZOS VECTOR C REGENERATION AND FOR THE INVERSE ITERATION C COMPUTATIONS IN THE SUBROUTINE INVERM. C C MP(J) = INTEGER*4 ARRAY WHOSE DIMENSION IS AT LEAST NGOOD. C INITIALLY CONTAINS THE T-MULTIPLICITY OF THE SINGULAR C VALUE GOODSV(J) AS AN EIGENVALUE OF THE T-MATRIX. C USED TO FLAG SINGULAR VALUES FOR WHICH NO T-EIGENVECTOR C OR NO RITZ VECTOR IS TO BE COMPUTED. C C MA(J) = INTEGER*4 ARRAYS EACH OF WHOSE DIMENSIONS C IS AT LEAST NGOOD. USED IN DETERMINING C AN APPROPRIATE T-MATRIX FOR EACH SINGULAR VALUE C IN GOODSV ARRAY. C C MINT(J),MFIN(J) = INTEGER*4 ARRAYS WHOSE DIMENSIONS MUST BE AT C LEAST NGOOD. USED TO POINT TO THE BEGINNINGS C AND THE ENDS OF THE COMPUTED EIGENVECTOR C OF THE T-MATRIX, T(1,|MA(J)|). C C IDELTA(J) = INTEGER*4 ARRAY WHOSE DIMENSION MUST BE AT C LEAST NGOOD. CONTAINS INCREMENTS USED IN LOOPS C ON APPROPRIATE SIZE T-MATRIX FOR THE T-EIGENVECTOR C COMPUTATIONS. C C C-----SUBROUTINES INCLUDED FOR THE SINGULAR VECTOR COMPUTATIONS--------- C C C STURMI = FOR EACH GIVEN SINGULAR VALUE GOODSV(J) DETERMINES C THE SMALLEST SIZE T-MATRIX FOR WHICH GOODSV(J) IS C A T-EIGENVALUE (TO WITHIN A GIVEN TOLERANCE) AND IF C POSSIBLE THE SMALLEST SIZE T-MATRIX FOR WHICH C IT IS A DOUBLE T-EIGENVALUE (TO WITHIN THE SAME C TOLERANCE). THE SIZE T-MATRIX USED IN THE C T-EIGENVECTOR COMPUTATIONS IS THEN DETERMINED BY C STARTING WITH AN INITIAL GUESS BASED ON THE C INFORMATION FROM STURMI, AND THEN LOOPING ON THE C SIZE OF THE T-EIGENVECTOR COMPUTATIONS. C C LBISEC = RECOMPUTES THE VALUE OF THE GIVEN SINGULAR VALUE C AT THE T-SIZE SPECIFIED FOR THE T-EIGENVECTOR C COMPUTATION. LBISEC IS A SIMPLIFICATION OF THE C BISEC SUBROUTINE USED IN THE LANCZOS SINGULAR C VALUE COMPUTATIONS. C C INVERM = FOR THE T-SIZES CONSIDERED BY THE PROGRAM COMPUTES C THE CORRESPONDING EIGENVECTORS OF THESE T-MATRICES C CORRESPONDING TO THE USER-SUPPLIED SINGULAR VALUES C IN THE GOODSV ARRAY. C C LANCZS AND TNORM SUBROUTINES ARE ALSO USED HERE AS WELL AS C IN THE CORRESPONDING SINGULAR VALUE COMPUTATIONS. C C C----------------------------------------------------------------------- .