home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / eispack-1.0-src.tgz / tar.out / contrib / eispack / tests / rsg.f < prev    next >
Text File  |  1996-09-28  |  16KB  |  464 lines

  1. C
  2. C     THIS DRIVER TESTS  EISPACK  FOR THE REAL SYMMETRIC GENERALIZED
  3. C     EIGENPROBLEM  A*X = (LAMBDA)*B*X  WITH  B  POSITIVE DEFINITE,
  4. C     SUMMARIZING THE FIGURES OF MERIT FOR ALL PATHS.
  5. C
  6. C     THIS DRIVER IS CATALOGUED AS  EISPDRV4(RSGSUMAR).
  7. C
  8. C     THE DIMENSION OF  A,B, AND  Z  SHOULD BE  NM  BY  NM.
  9. C     THE DIMENSION OF  W,D,E,E2,IND,RV1,RV2,RV3,RV4,RV5,RV6,DL,
  10. C     W1, AND  W2  SHOULD BE  NM.
  11. C     THE DIMENSION OF  AHOLD  AND  BHOLD  SHOULD BE  NM  BY  NM.
  12. C     HERE NM = 20.
  13. C
  14. C     4-28-92:  MODIFIED CALL TO TRED1 TO PASS SEPARATE ARRAYS
  15. C               TO THE DUMMY ARGUMENTS E AND E2.  (ECA)
  16. C
  17.       REAL A( 20, 20),Z( 20, 20),W( 20),D( 20),E( 20),
  18.      X        E2( 20),RV1( 20),RV2( 20),RV3( 20),RV4( 20),RV5( 20),
  19.      X        RV6( 20),W1( 20),W2( 20),TCRIT( 8),EPSLON,RESDUL,MAXEIG,
  20.      X        MAXDIF,U,LB,UB,EPS1,B( 20, 20),DL( 20),DFL
  21.       REAL AHOLD( 20, 20),BHOLD( 20, 20) 
  22.       REAL  XLB,XUB
  23.       INTEGER  IND( 20),IERR( 6),ERROR
  24.       DATA IREAD1/1/,IREAD2/2/,IREADC/5/,IWRITE/6/
  25. C
  26.       OPEN(UNIT=IREAD1,FILE='FILE35')
  27.       OPEN(UNIT=IREAD2,FILE='FILE47')
  28.       OPEN(UNIT=IREADC,FILE='FILE36')
  29.       REWIND IREAD1
  30.       REWIND IREAD2
  31.       REWIND IREADC
  32. C
  33.       NM = 20
  34.       LCOUNT = 0
  35.       WRITE(IWRITE,1)
  36.     1 FORMAT(1H1,19X,57H EXPLANATION OF COLUMN ENTRIES FOR THE SUMMARY S
  37.      XTATISTICS//1H ,95(1H-)/96H ORDER TQL2   TQLRAT IMTQL2 IMTQL1    LB
  38.      X      UB    M  IMTQLV   TSTURM   BISECT  M1 NO  TRIDIB  /1H ,95(
  39.      X1H-)//55H UNDER 'ORDER' IS THE ORDER OF EACH TEST MATRIX SYSTEM.//
  40.      X95H UNDER 'TQL2   TQLRAT' ARE THREE NUMBERS.  THE FIRST NUMBER, AN
  41.      X INTEGER, IS THE ABSOLUTE SUM OF/
  42.      X61H THE ERROR FLAGS RETURNED SEPARATELY FROM  TQL2  AND  TQLRAT.,
  43.      X34H  THE SECOND NUMBER IS THE MEASURE/
  44.      X62H OF PERFORMANCE BASED UPON THE RESIDUAL COMPUTED FOR THE  TQL2,
  45.      X25H  PATH.  THE THIRD NUMBER        /
  46.      X62H MEASURES THE AGREEMENT OF THE EIGENVALUES FROM THE  TQL2  AND,
  47.      X16H  TQLRAT  PATHS.  //
  48.      X95H UNDER 'IMTQL2 IMTQL1' ARE THREE NUMBERS WITH MEANING LIKE THOS
  49.      XE UNDER  'TQL2   TQLRAT'.       //
  50.      X95H UNDER 'LB' AND 'UB' ARE THE INPUT VARIABLES SPECIFYING THE INT
  51.      XERVAL TO  BISECT  AND  TSTURM.  //
  52.      X61H UNDER 'M' IS THE NUMBER OF EIGENVALUES DETERMINED BY  BISECT,
  53.      X30H  AND  TSTURM  THAT LIE IN THE    /18H INTERVAL (LB,UB).//
  54.      X95H UNDER EACH OF 'IMTQLV', 'TSTURM', 'BISECT', AND 'TRIDIB' ARE T
  55.      XWO NUMBERS.  THE FIRST NUMBER,       )
  56.       WRITE(IWRITE,2)
  57.     2 FORMAT(
  58.      X95H AN INTEGER, IS THE ABSOLUTE SUM OF THE ERROR FLAGS RETURNED FR
  59.      XOM THE RESPECTIVE PATH.         /
  60.      X95H THE SECOND NUMBER IS THE MEASURE OF PERFORMANCE BASED UPON THE
  61.      X RESIDUAL COMPUTED FOR THE PATH.//
  62.      X95H UNDER 'M1' AND 'NO' ARE THE VARIABLES SPECIFYING THE LOWER BOU
  63.      XNDARY INDEX AND THE NUMBER       /
  64.      X28H OF EIGENVALUES TO  TRIDIB.  //
  65.      X62H -1.0  AS THE MEASURE OF PERFORMANCE IS PRINTED IF AN ERROR IN,
  66.      X27H THE CORRESPONDING PATH HAS      /
  67.      X57H PREVENTED THE COMPUTATION OF THE EIGENVECTORS OR VALUES. //
  68.      X41H THE  TQL2    PATH USES THE EISPACK CODES,
  69.      X30H   REDUC-TRED2-TQL2  -REBAK , /
  70.      X39H AS CALLED FROM DRIVER SUBROUTINE  RSG. /
  71.      X41H THE  TQLRAT  PATH USES THE EISPACK CODES,
  72.      X23H   REDUC-TRED1-TQLRAT, /
  73.      X39H AS CALLED FROM DRIVER SUBROUTINE  RSG. /
  74.      X41H THE  IMTQL2  PATH USES THE EISPACK CODES,
  75.      X30H   REDUC-TRED2-IMTQL2-REBAK . )
  76.       WRITE(IWRITE,3)
  77.     3 FORMAT(
  78.      X41H THE  IMTQL1  PATH USES THE EISPACK CODES,
  79.      X23H   REDUC-TRED1-IMTQL1. /
  80.      X41H THE  IMTQLV  PATH USES THE EISPACK CODES,
  81.      X44H   REDUC-TRED1-IMTQLV-TINVIT-TRBAK1-REBAK.  /
  82.      X41H THE  TSTURM  PATH USES THE EISPACK CODES,
  83.      X37H   REDUC-TRED1-TSTURM-TRBAK1-REBAK . /
  84.      X41H THE  BISECT  PATH USES THE EISPACK CODES,
  85.      X44H   REDUC-TRED1-BISECT-TINVIT-TRBAK1-REBAK.  /
  86.      X41H THE  TRIDIB  PATH USES THE EISPACK CODES,
  87.      X44H   REDUC-TRED1-TRIDIB-TINVIT-TRBAK1-REBAK.  )
  88.       WRITE(IWRITE,15)
  89.    15 FORMAT(1X,21HS.P. VERSION 04/15/83 )
  90.     5 FORMAT( 53H1       TABULATION OF THE ERROR FLAG  ERROR  AND THE ,
  91.      X    31HMEASURE OF PERFORMANCE  Y  FOR / 5X,
  92.      X    56HTHE  EISPACK  CODES.  THIS RUN DISPLAYS THESE STATISTICS,
  93.      X    23H FOR THE REAL SYMMETRIC / 5X,
  94.      X    46HGENERALIZED EIGENPROBLEM  A*X = (LAMBDA)*B*X ./
  95.      X    55H0ORDER TQL2   TQLRAT IMTQL2 IMTQL1    LB      UB    M   ,
  96.      X    40HIMTQLV   TSTURM   BISECT  M1 NO  TRIDIB )
  97.    10 CALL  RMATIN(NM,N,A,B,AHOLD,BHOLD,0)
  98.       READ(IREADC,50) MM,LB,UB,M11,NO
  99.    50 FORMAT(I4,2D24.16,2(4X,I4))
  100. C
  101. C     MM,LB,UB,M11,  AND  NO  ARE READ FROM SYSIN AFTER THE MATRICES
  102. C     ARE GENERATED.  MM,LB,  AND  UB  SPECIFY TO  BISECT  THE MAXIMUM
  103. C     NUMBER OF EIGENVALUES AND THE BOUNDS FOR THE INTERVAL WHICH IS
  104. C     TO BE SEARCHED.  M11  AND  NO  SPECIFY TO  TRIDIB  THE LOWER
  105. C     BOUNDARY INDEX AND THE NUMBER OF DESIRED EIGENVALUES.
  106. C
  107.       DO  230  ICALL = 1,10
  108.          IF( ICALL .NE. 1 )  CALL  RMATIN(NM,N,A,B,AHOLD,BHOLD,1)
  109. C
  110. C     IF  TQLRAT  PATH (LABEL 80) IS TAKEN THEN  TQL2  PATH (LABEL 70)
  111. C     MUST ALSO BE TAKEN IN ORDER THAT THE MEASURE OF PERFORMANCE BE
  112. C     MEANINGFUL.
  113. C     IF  IMTQL1  PATH (LABEL 85) IS TAKEN THEN  IMTQL2  PATH (LABEL 75)
  114. C     MUST ALSO BE TAKEN IN ORDER THAT THE MEASURE OF PERFORMANCE BE
  115. C     MEANINGFUL.
  116. C     IF  TQL2  (IMTQL2)  PATH FAILS, THEN  TQLRAT  (IMTQL1)  PATH IS
  117. C     OMITTED AND PRINTOUT FLAGGED WITH  -1.0.
  118. C
  119.          GO TO  (70,75,80,85,89,90,95,230,110,230),  ICALL
  120. C
  121. C     RSGWZ  USING  TQL2
  122. C     INVOKED FROM DRIVER SUBROUTINE  RSG.
  123. C
  124.    70    ICT = 1
  125.          CALL  RSG(NM,N,A,B,W,1,Z,E,E2,ERROR)
  126.          IERR(ICT) = ERROR
  127.          IF( ERROR .EQ. 7*N + 1 ) GO TO 200
  128.          M = ERROR - 1
  129.          IF( ERROR .NE. 0 ) GO TO 74
  130.          DO 71 I =1,N
  131.             W1(I) = W(I)
  132.    71    CONTINUE
  133.          M = N
  134.    74    GO TO  190
  135. C
  136. C     RSGWZ  USING  IMTQL2
  137. C
  138.    75    ICT = 2
  139.          CALL  REDUC(NM,N,A,B,DL,ERROR)
  140.          IERR(ICT) = ERROR
  141.          IF( ERROR .NE. 0 ) GO TO 200
  142.          CALL  TRED2(NM,N,A,W,E,Z)
  143.          CALL  IMTQL2(NM,N,W,E,Z,ERROR)
  144.          IERR(ICT) = ERROR
  145.          M = ERROR - 1
  146.          IF( ERROR .NE. 0 ) GO TO 79
  147.          DO 78  I=1,N
  148.    78       W2(I) = W(I)
  149.          M = N
  150.    79    CALL  REBAK(NM,N,B,DL,M,Z)
  151.          GO TO  190
  152. C
  153. C     RSGW  USING  TQLRAT
  154. C     INVOKED FROM DRIVER SUBROUTINE  RSG.
  155. C
  156.    80    ICT = 7
  157.          IF( IERR(1) .NE. 0 ) GO TO 200
  158.          CALL  RSG(NM,N,A,B,W,0,A,E,E2,ERROR)
  159.          IERR(1) = ERROR
  160.          IF( ERROR .NE. 0 ) GO TO 200
  161.          MAXEIG = 0.0E0
  162.          MAXDIF = 0.0E0
  163.          DO 81 I = 1,N
  164.             IF( ABS(W(I)) .GT. MAXEIG ) MAXEIG = ABS(W(I))
  165.             U = ABS(W1(I) - W(I))
  166.             IF( U .GT. MAXDIF ) MAXDIF = U
  167.    81    CONTINUE
  168.          IF( MAXEIG .EQ. 0.0E0 ) MAXEIG = 1.0E0
  169.          DFL = 10 * N
  170.          TCRIT(7) = MAXDIF/EPSLON(MAXEIG*DFL)
  171.          GO TO  230
  172. C
  173. C     RSGW  USING  IMTQL1
  174. C
  175.    85    ICT = 8
  176.          IF( IERR(2) .NE. 0 ) GO TO 200
  177.          CALL  REDUC(NM,N,A,B,DL,ERROR)
  178.          CALL  TRED1(NM,N,A,W,E,E2)
  179.          CALL  IMTQL1(N,W,E,ERROR)
  180.          IERR(2) = ERROR
  181.          MAXEIG = 0.0E0
  182.          MAXDIF = 0.0E0
  183.          DO 86 I = 1,N
  184.             IF( ABS(W(I)) .GT. MAXEIG ) MAXEIG = ABS(W(I))
  185.             U = ABS(W2(I) - W(I))
  186.             IF( U .GT. MAXDIF ) MAXDIF = U
  187.    86    CONTINUE
  188.          IF( MAXEIG .EQ. 0.0E0 ) MAXEIG = 1.0E0
  189.          DFL = 10 * N
  190.          TCRIT(8) = MAXDIF/EPSLON(MAXEIG*DFL)
  191.          GO TO  230
  192. C
  193. C     RSGW1Z  ( USAGE HERE COMPUTES ALL THE EIGENVECTORS )
  194. C
  195.    89    ICT = 3
  196.          CALL  REDUC(NM,N,A,B,DL,ERROR)
  197.          IERR(ICT) = ERROR
  198.          IF( ERROR .NE. 0 ) GO TO 200
  199.          CALL  TRED1(NM,N,A,D,E,E2)
  200.          CALL  IMTQLV(N,D,E,E2,W,IND,ERROR,RV1)
  201.          IERR(ICT) = ERROR
  202.          M = N
  203.          IF( ERROR .NE. 0 ) M = ERROR - 1
  204.          CALL  TINVIT(NM,N,D,E,E2,M,W,IND,Z,ERROR,RV1,RV2,RV3,RV4,RV6)
  205.          IERR(ICT) = IERR(ICT) + IABS(ERROR)
  206.          CALL  TRBAK1(NM,N,A,E,M,Z)
  207.          CALL  REBAK(NM,N,B,DL,M,Z)
  208.          GO TO  190
  209. C
  210. C     RSG1W1Z  USING  TSTURM
  211. C
  212.    90    ICT = 4
  213.          EPS1 = 0.0E0
  214.          CALL  REDUC(NM,N,A,B,DL,ERROR)
  215.          IERR(ICT) = ERROR
  216.          IF( ERROR .NE. 0 ) GO TO 200
  217.          CALL  TRED1(NM,N,A,D,E,E2)
  218.          CALL  TSTURM(NM,N,EPS1,D,E,E2,LB,UB,MM,M,W,Z,ERROR,
  219.      X                RV1,RV2,RV3,RV4,RV5,RV6)
  220.          IERR(ICT) = ERROR
  221.          XLB = LB
  222.          XUB = UB
  223.          IF( ERROR .EQ. 3*N + 1 ) GO TO 200
  224.          IF( ERROR .GT. 4*N ) M = ERROR - 4*N - 1
  225.          CALL  TRBAK1(NM,N,A,E,M,Z)
  226.          CALL  REBAK(NM,N,B,DL,M,Z)
  227.          GO TO  190
  228. C
  229. C     RSG1W1Z  USING  BISECT  AND  TINVIT
  230. C
  231.    95    ICT = 5
  232.          EPS1 = 0.0E0
  233.          CALL  REDUC(NM,N,A,B,DL,ERROR)
  234.          IERR(ICT) = ERROR
  235.          IF( ERROR .NE. 0 ) GO TO 200
  236.          CALL  TRED1(NM,N,A,D,E,E2)
  237.          CALL  BISECT(N,EPS1,D,E,E2,LB,UB,MM,M,W,IND,ERROR,RV4,RV5)
  238.          IERR(ICT) = ERROR
  239.          MBISCT = M
  240.          XLB = LB
  241.          XUB = UB
  242.          IF( ERROR .NE. 0 ) GO TO 200
  243.          CALL  TINVIT(NM,N,D,E,E2,M,W,IND,Z,ERROR,RV1,RV2,RV3,RV4,RV6)
  244.          IERR(ICT) = IABS(ERROR)
  245.          CALL  TRBAK1(NM,N,A,E,M,Z)
  246.          CALL  REBAK(NM,N,B,DL,M,Z)
  247.          GO TO  190
  248. C
  249. C     RSG1W1Z  USING  TRIDIB  AND  TINVIT
  250. C
  251.   110    ICT = 6
  252.          EPS1 = 0.0E0
  253.          CALL  REDUC(NM,N,A,B,DL,ERROR)
  254.          IERR(ICT) = ERROR
  255.          IF( ERROR .NE. 0 ) GO TO 200
  256.          CALL  TRED1(NM,N,A,D,E,E2)
  257.          CALL  TRIDIB(N,EPS1,D,E,E2,LB,UB,M11,NO,W,IND,ERROR,RV4,RV5)
  258.          IERR(ICT) = ERROR
  259.          IF( ERROR .NE. 0 ) GO TO 200
  260.          M = NO - M11 + 1
  261.          CALL  TINVIT(NM,N,D,E,E2,M,W,IND,Z,ERROR,RV1,RV2,RV3,RV4,RV6)
  262.          IERR(ICT) = IABS(ERROR)
  263.          CALL  TRBAK1(NM,N,A,E,M,Z)
  264.          CALL  REBAK(NM,N,B,DL,M,Z)
  265. C
  266.   190    IF( M .EQ. 0 .AND. ERROR .NE. 0 ) GO TO 200
  267.          CALL  RMATIN(NM,N,A,B,AHOLD,BHOLD,1)
  268.          CALL  RSGWZR(NM,N,M,A,B,W,Z,RV1,RESDUL)
  269.          DFL = 10 * N
  270.          TCRIT(ICT) = RESDUL/EPSLON(DFL)
  271.          GO TO  230
  272.   200    TCRIT(ICT) = -1.0E0
  273.   230 CONTINUE
  274. C
  275.       IF( MOD(LCOUNT,35) .EQ. 0 ) WRITE(IWRITE,5)
  276.       LCOUNT = LCOUNT + 1
  277.       WRITE(IWRITE,240) N,IERR(1),TCRIT(1),TCRIT(7),IERR(2),TCRIT(2),
  278.      X             TCRIT(8),XLB,XUB,MBISCT,(IERR(I),TCRIT(I),I=3,5),
  279.      X             M11,NO,IERR(6),TCRIT(6)
  280.   240 FORMAT(I4,2(I3,2F6.3),2(1PE8.0),I3,3(I3,0PF6.3),3I3,F6.3)
  281.       GO TO  10
  282.       END
  283.       SUBROUTINE RSGWZR(NM,N,M,A,B,W,Z,NORM,RESDUL)
  284. C
  285.       REAL NORM(M),W(M),A(NM,N),Z(NM,M),NORMA,TNORM,S,SUM,
  286.      X       SUMZ, SUMA, RESDUL, B(NM,N), SUMQ
  287. C
  288. C     THIS SUBROUTINE FORMS THE 1-NORM OF THE RESIDUAL MATRIX
  289. C     A*Z-B*Z*DIAG(W)  WHERE  A  IS A REAL SYMMETRIC MATRIX,
  290. C     B  IS A REAL SYMMETRIC MATRIX ,  W  IS A VECTOR WHICH
  291. C     CONTAINS  M  EIGENVALUES OF THE EIGENPROBLEM  A*Z-B*Z*DIAG(W),
  292. C     AND  Z  IS AN ARRAY WHICH CONTAINS THE  M  CORRESPONDING
  293. C     EIGENVECTORS OF THE EIGENPROBLEM. ALL NORMS APPEARING IN
  294. C     THE COMMENTS BELOW ARE 1-NORMS.
  295. C
  296. C     THIS SUBROUTINE IS CATALOGUED AS EISPDRV4(RSGWZR).
  297. C
  298. C     INPUT.
  299. C
  300. C        NM IS THE ROW DIMENSION OF TWO-DIMENSIONAL ARRAY PARAMETERS
  301. C           AS DECLARED IN THE CALLING PROGRAM DIMENSION STATEMENT;
  302. C
  303. C        M IS THE NUMBER OF EIGENVECTORS FOR WHICH RESIDUALS ARE
  304. C           DESIRED;
  305. C
  306. C        N IS THE ORDER OF THE MATRIX  A;
  307. C
  308. C        A(NM,N) IS A REAL SYMMETRIC MATRIX.  ONLY THE FULL UPPER
  309. C           TRIANGLE NEED BE SUPPLIED;
  310. C
  311. C        B(NM,N) IS A REAL SYMMETRIC MATRIX.  ONLY THE FULL UPPER
  312. C           TRIANGLE NEED BE SUPPLIED;
  313. C
  314. C        Z(NM,M) IS A REAL MATRIX WHOSE FIRST  M  COLUMNS CONTAIN THE
  315. C          APPROXIMATE EIGENVECTORS OF THE EIGENPROBLEM;
  316. C
  317. C        W(M) IS A VECTOR WHOSE FIRST  M   COMPONENTS CONTAIN THE
  318. C           APPROXIMATE EIGENVALUES OF THE EIGENPROBLEM.  W(I) IS
  319. C           ASSOCIATED WITH THE I-TH  COLUMN OF  Z.
  320. C
  321. C     OUTPUT.
  322. C
  323. C        Z(NM,M) IS AN ARRAY WHICH CONTAINS  M  NORMALIZED
  324. C           APPROXIMATE EIGENVECTORS OF THE EIGENPROBLEM. THE EIGEN-
  325. C           VECTORS ARE NORMALIZED USING THE 1-NORM IN SUCH A WAY THAT
  326. C           THE FIRST ELEMENT WHOSE MAGNITUDE IS LARGER THAN THE NORM
  327. C           OF THE EIGENVECTOR DIVIDED BY  N  IS POSITIVE;
  328. C
  329. C        A(NM,N) IS ALTERED BY MAKING THE LOWER TRIANGLE OF  A
  330. C           SYMMETRIC WITH THE UPPER TRIANGLE OF  A;
  331. C
  332. C        B(NM,N) IS ALTERED BY MAKING THE LOWER TRIANGLE OF  B
  333. C           SYMMETRIC WITH THE UPPER TRIANGLE OF  B;
  334. C
  335. C        NORM(M) IS AN ARRAY SUCH THAT FOR EACH  K,
  336. C           NORM(K) = !!A*Z(K)-B*Z(K)*W(K)!!/(!!A!!*!!Z(K)!!)
  337. C           WHERE  Z(K)  IS THE K-TH EIGENVECTOR;
  338. C
  339. C        RESDUL IS THE REAL NUMBER
  340. C           !!A*Z-B*Z*DIAG(W)!!/(!!A!!*!!Z!!).
  341. C
  342. C
  343. C     ----------------------------------------------------------------
  344. C
  345.       RESDUL = 0.0E0
  346.       IF( M .EQ. 0 ) RETURN
  347.       NORMA = 0.0E0
  348. C
  349.       DO 40 I=1,N
  350.          SUMA = 0.0E0
  351.          IF(I .EQ. 1) GO TO 20
  352. C
  353.          DO 10 L=2,I
  354.            A(I,L-1) = A(L-1,I)
  355.    10      SUMA =SUMA + ABS(A(L-1,I))
  356. C
  357.    20    DO 30 L=I,N
  358.    30      SUMA = SUMA + ABS(A(I,L))
  359. C
  360.    40    NORMA = AMAX1(NORMA,SUMA)
  361. C
  362.       IF(NORMA .EQ. 0.0E0) NORMA = 1.0E0
  363. C
  364.       DO 100 I=1,M
  365.          S = 0.0E0
  366.          SUMZ = 0.0E0
  367. C
  368.          DO 60 L=1,N
  369.            SUMZ = SUMZ + ABS(Z(L,I))
  370.            SUMQ = 0.0E0
  371. C
  372.            DO 45 K=1,N
  373.    45        SUMQ = SUMQ + B(L,K)*Z(K,I)
  374. C
  375.            SUM = -W(I)*SUMQ
  376. C
  377.            DO 50 K=1,N
  378.    50        SUM = SUM + A(L,K)*Z(K,I)
  379. C
  380.    60      S =S + ABS(SUM)
  381. C
  382.          NORM(I) = SUMZ
  383.          IF(SUMZ .EQ. 0.0E0) GO TO 100
  384. C        ..........THIS LOOP WILL NEVER BE COMPLETED SINCE THERE
  385. C                  WILL ALWAYS EXIST AN ELEMENT IN THE VECTOR Z(I)
  386. C                  LARGER THAN !!Z(I)!!/N..........
  387.          DO 70 L=1,N
  388.             IF(ABS(Z(L,I)) .GE. NORM(I)/N) GO TO 80
  389.    70       CONTINUE
  390. C
  391.    80    TNORM = SIGN(NORM(I),Z(L,I))
  392. C
  393.          DO 90 L=1,N
  394.    90       Z(L,I) = Z(L,I)/TNORM
  395. C
  396.          NORM(I) = S/(NORM(I)*NORMA)
  397.   100    RESDUL = AMAX1(NORM(I), RESDUL)
  398. C
  399.       RETURN
  400.       END
  401.       SUBROUTINE RMATIN(NM,N,A,B,AHOLD,BHOLD,INITIL)
  402. C
  403. C     THIS INPUT SUBROUTINE READS TWO REAL MATRICES  A  AND  B  FROM
  404. C     SYSIN OF ORDER N.
  405. C     TO GENERATE THE MATRICES INITIALLY,  INITIL  IS TO BE 0.
  406. C     TO REGENERATE THE MATRICES FOR THE PURPOSE OF THE RESIDUAL
  407. C     CALCULATION,  INITIL  IS TO BE  1.
  408. C
  409. C     THIS ROUTINE IS CATALOGUED AS  EISPDRV4(RSGREADI).
  410. C
  411.       REAL A(NM,NM),B(NM,NM),AHOLD(NM,NM),BHOLD(NM,NM) 
  412.       INTEGER  IA( 20), IB( 20)
  413.       DATA IREADA/1/,IREADB/2/,IWRITE/6/
  414. C
  415.       IF( INITIL .EQ. 1 )  GO TO  30
  416.       READ(IREADA,5) N, M
  417.     5 FORMAT(I6,6X,I6)
  418.       IF( N .EQ. 0 )  GO TO  70
  419.       IF (M .NE. 1) GO TO 16
  420.       DO  10  I = 1,N
  421.          READ(IREADA,17) (IA(J), J=I,N)  
  422.          DO   9  J = I,N
  423.            A(I,J) = IA(J)
  424.     9      A(J,I) =  A(I,J)
  425.    10 CONTINUE
  426.    11 CONTINUE
  427.       READ(IREADB,5) N,M
  428.       IF( M .NE. 1 ) GO TO 20
  429.       DO 15 I = 1,N
  430.          READ(IREADB,17) (IB(J), J=I,N)   
  431.          DO 14 J = I,N
  432.             B(I,J)=IB(J)
  433.    14       B(J,I)=B(I,J)
  434.    15 CONTINUE
  435.       GO TO 22
  436.    16 CONTINUE
  437.       DO  18  I = 1,N
  438.          READ(IREADA,17) (IA(J), J=1,N)  
  439.    17    FORMAT(6I12)
  440.          DO  18  J = 1,N
  441.    18      A(I,J) = IA(J)
  442.       GO TO 11
  443.    20 CONTINUE
  444.       DO 25 I = 1,N
  445.          READ(IREADB,17) (IB(J),J=1,N) 
  446.          DO 25 J = 1,N
  447.    25    B(I,J) = IB(J)
  448.    22 CONTINUE
  449.       DO  23  I = 1,N
  450.          DO  23  J = 1,N
  451.            BHOLD(I,J) = B(I,J)
  452.    23      AHOLD(I,J) = A(I,J)
  453.       RETURN
  454.    30 CONTINUE
  455.       DO  40  I = 1,N
  456.          DO  40  J = 1,N
  457.            B(I,J) = BHOLD(I,J)
  458.    40      A(I,J) = AHOLD(I,J)
  459.       RETURN
  460.    70 WRITE(IWRITE,80)
  461.    80 FORMAT(47H0END OF DATA FOR SUBROUTINE  RMATIN(RSGREADI). /1H1)
  462.       STOP
  463.       END
  464.