home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / eispack-1.0-src.tgz / tar.out / contrib / eispack / double / source < prev   
Text File  |  1996-09-28  |  356KB  |  11,445 lines

  1.       SUBROUTINE CDIV(AR,AI,BR,BI,CR,CI)
  2.       DOUBLE PRECISION AR,AI,BR,BI,CR,CI
  3. C
  4. C     COMPLEX DIVISION, (CR,CI) = (AR,AI)/(BR,BI)
  5. C
  6.       DOUBLE PRECISION S,ARS,AIS,BRS,BIS
  7.       S = DABS(BR) + DABS(BI)
  8.       ARS = AR/S
  9.       AIS = AI/S
  10.       BRS = BR/S
  11.       BIS = BI/S
  12.       S = BRS**2 + BIS**2
  13.       CR = (ARS*BRS + AIS*BIS)/S
  14.       CI = (AIS*BRS - ARS*BIS)/S
  15.       RETURN
  16.       END
  17.       SUBROUTINE CSROOT(XR,XI,YR,YI)
  18.       DOUBLE PRECISION XR,XI,YR,YI
  19. C
  20. C     (YR,YI) = COMPLEX DSQRT(XR,XI) 
  21. C     BRANCH CHOSEN SO THAT YR .GE. 0.0 AND SIGN(YI) .EQ. SIGN(XI)
  22. C
  23.       DOUBLE PRECISION S,TR,TI,PYTHAG
  24.       TR = XR
  25.       TI = XI
  26.       S = DSQRT(0.5D0*(PYTHAG(TR,TI) + DABS(TR)))
  27.       IF (TR .GE. 0.0D0) YR = S
  28.       IF (TI .LT. 0.0D0) S = -S
  29.       IF (TR .LE. 0.0D0) YI = S
  30.       IF (TR .LT. 0.0D0) YR = 0.5D0*(TI/YI)
  31.       IF (TR .GT. 0.0D0) YI = 0.5D0*(TI/YR)
  32.       RETURN
  33.       END
  34.       DOUBLE PRECISION FUNCTION EPSLON (X)
  35.       DOUBLE PRECISION X
  36. C
  37. C     ESTIMATE UNIT ROUNDOFF IN QUANTITIES OF SIZE X.
  38. C
  39.       DOUBLE PRECISION A,B,C,EPS
  40. C
  41. C     THIS PROGRAM SHOULD FUNCTION PROPERLY ON ALL SYSTEMS
  42. C     SATISFYING THE FOLLOWING TWO ASSUMPTIONS,
  43. C        1.  THE BASE USED IN REPRESENTING FLOATING POINT
  44. C            NUMBERS IS NOT A POWER OF THREE.
  45. C        2.  THE QUANTITY  A  IN STATEMENT 10 IS REPRESENTED TO 
  46. C            THE ACCURACY USED IN FLOATING POINT VARIABLES
  47. C            THAT ARE STORED IN MEMORY.
  48. C     THE STATEMENT NUMBER 10 AND THE GO TO 10 ARE INTENDED TO
  49. C     FORCE OPTIMIZING COMPILERS TO GENERATE CODE SATISFYING 
  50. C     ASSUMPTION 2.
  51. C     UNDER THESE ASSUMPTIONS, IT SHOULD BE TRUE THAT,
  52. C            A  IS NOT EXACTLY EQUAL TO FOUR-THIRDS,
  53. C            B  HAS A ZERO FOR ITS LAST BIT OR DIGIT,
  54. C            C  IS NOT EXACTLY EQUAL TO ONE,
  55. C            EPS  MEASURES THE SEPARATION OF 1.0 FROM
  56. C                 THE NEXT LARGER FLOATING POINT NUMBER.
  57. C     THE DEVELOPERS OF EISPACK WOULD APPRECIATE BEING INFORMED
  58. C     ABOUT ANY SYSTEMS WHERE THESE ASSUMPTIONS DO NOT HOLD.
  59. C
  60. C     THIS VERSION DATED 4/6/83.
  61. C
  62.       A = 4.0D0/3.0D0
  63.    10 B = A - 1.0D0
  64.       C = B + B + B
  65.       EPS = DABS(C-1.0D0)
  66.       IF (EPS .EQ. 0.0D0) GO TO 10
  67.       EPSLON = EPS*DABS(X)
  68.       RETURN
  69.       END
  70.       DOUBLE PRECISION FUNCTION PYTHAG(A,B)
  71.       DOUBLE PRECISION A,B
  72. C
  73. C     FINDS DSQRT(A**2+B**2) WITHOUT OVERFLOW OR DESTRUCTIVE UNDERFLOW
  74. C
  75.       DOUBLE PRECISION P,R,S,T,U
  76.       P = DMAX1(DABS(A),DABS(B))
  77.       IF (P .EQ. 0.0D0) GO TO 20
  78.       R = (DMIN1(DABS(A),DABS(B))/P)**2
  79.    10 CONTINUE
  80.          T = 4.0D0 + R
  81.          IF (T .EQ. 4.0D0) GO TO 20
  82.          S = R/T
  83.          U = 1.0D0 + 2.0D0*S
  84.          P = U*P
  85.          R = (S/U)**2 * R
  86.       GO TO 10
  87.    20 PYTHAG = P
  88.       RETURN
  89.       END
  90.       SUBROUTINE BAKVEC(NM,N,T,E,M,Z,IERR)
  91. C
  92.       INTEGER I,J,M,N,NM,IERR
  93.       DOUBLE PRECISION T(NM,3),E(N),Z(NM,M)
  94. C
  95. C     THIS SUBROUTINE FORMS THE EIGENVECTORS OF A NONSYMMETRIC
  96. C     TRIDIAGONAL MATRIX BY BACK TRANSFORMING THOSE OF THE
  97. C     CORRESPONDING SYMMETRIC MATRIX DETERMINED BY  FIGI.
  98. C
  99. C     ON INPUT
  100. C
  101. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  102. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  103. C          DIMENSION STATEMENT.
  104. C
  105. C        N IS THE ORDER OF THE MATRIX.
  106. C
  107. C        T CONTAINS THE NONSYMMETRIC MATRIX.  ITS SUBDIAGONAL IS
  108. C          STORED IN THE LAST N-1 POSITIONS OF THE FIRST COLUMN,
  109. C          ITS DIAGONAL IN THE N POSITIONS OF THE SECOND COLUMN,
  110. C          AND ITS SUPERDIAGONAL IN THE FIRST N-1 POSITIONS OF
  111. C          THE THIRD COLUMN.  T(1,1) AND T(N,3) ARE ARBITRARY.
  112. C
  113. C        E CONTAINS THE SUBDIAGONAL ELEMENTS OF THE SYMMETRIC
  114. C          MATRIX IN ITS LAST N-1 POSITIONS.  E(1) IS ARBITRARY.
  115. C
  116. C        M IS THE NUMBER OF EIGENVECTORS TO BE BACK TRANSFORMED.
  117. C
  118. C        Z CONTAINS THE EIGENVECTORS TO BE BACK TRANSFORMED
  119. C          IN ITS FIRST M COLUMNS.
  120. C
  121. C     ON OUTPUT
  122. C
  123. C        T IS UNALTERED.
  124. C
  125. C        E IS DESTROYED.
  126. C
  127. C        Z CONTAINS THE TRANSFORMED EIGENVECTORS
  128. C          IN ITS FIRST M COLUMNS.
  129. C
  130. C        IERR IS SET TO
  131. C          ZERO       FOR NORMAL RETURN,
  132. C          2*N+I      IF E(I) IS ZERO WITH T(I,1) OR T(I-1,3) NON-ZERO.
  133. C                     IN THIS CASE, THE SYMMETRIC MATRIX IS NOT SIMILAR
  134. C                     TO THE ORIGINAL MATRIX, AND THE EIGENVECTORS
  135. C                     CANNOT BE FOUND BY THIS PROGRAM.
  136. C
  137. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  138. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  139. C
  140. C     THIS VERSION DATED AUGUST 1983.
  141. C
  142. C     ------------------------------------------------------------------
  143. C
  144.       IERR = 0
  145.       IF (M .EQ. 0) GO TO 1001
  146.       E(1) = 1.0D0
  147.       IF (N .EQ. 1) GO TO 1001
  148. C
  149.       DO 100 I = 2, N
  150.          IF (E(I) .NE. 0.0D0) GO TO 80
  151.          IF (T(I,1) .NE. 0.0D0 .OR. T(I-1,3) .NE. 0.0D0) GO TO 1000
  152.          E(I) = 1.0D0
  153.          GO TO 100
  154.    80    E(I) = E(I-1) * E(I) / T(I-1,3)
  155.   100 CONTINUE
  156. C
  157.       DO 120 J = 1, M
  158. C
  159.          DO 120 I = 2, N
  160.          Z(I,J) = Z(I,J) * E(I)
  161.   120 CONTINUE
  162. C
  163.       GO TO 1001
  164. C     .......... SET ERROR -- EIGENVECTORS CANNOT BE
  165. C                FOUND BY THIS PROGRAM ..........
  166.  1000 IERR = 2 * N + I
  167.  1001 RETURN
  168.       END
  169.       SUBROUTINE BALANC(NM,N,A,LOW,IGH,SCALE)
  170. C
  171.       INTEGER I,J,K,L,M,N,JJ,NM,IGH,LOW,IEXC
  172.       DOUBLE PRECISION A(NM,N),SCALE(N)
  173.       DOUBLE PRECISION C,F,G,R,S,B2,RADIX
  174.       LOGICAL NOCONV
  175. C
  176. C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE BALANCE,
  177. C     NUM. MATH. 13, 293-304(1969) BY PARLETT AND REINSCH.
  178. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 315-326(1971).
  179. C
  180. C     THIS SUBROUTINE BALANCES A REAL MATRIX AND ISOLATES
  181. C     EIGENVALUES WHENEVER POSSIBLE.
  182. C
  183. C     ON INPUT
  184. C
  185. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  186. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  187. C          DIMENSION STATEMENT.
  188. C
  189. C        N IS THE ORDER OF THE MATRIX.
  190. C
  191. C        A CONTAINS THE INPUT MATRIX TO BE BALANCED.
  192. C
  193. C     ON OUTPUT
  194. C
  195. C        A CONTAINS THE BALANCED MATRIX.
  196. C
  197. C        LOW AND IGH ARE TWO INTEGERS SUCH THAT A(I,J)
  198. C          IS EQUAL TO ZERO IF
  199. C           (1) I IS GREATER THAN J AND
  200. C           (2) J=1,...,LOW-1 OR I=IGH+1,...,N.
  201. C
  202. C        SCALE CONTAINS INFORMATION DETERMINING THE
  203. C           PERMUTATIONS AND SCALING FACTORS USED.
  204. C
  205. C     SUPPOSE THAT THE PRINCIPAL SUBMATRIX IN ROWS LOW THROUGH IGH
  206. C     HAS BEEN BALANCED, THAT P(J) DENOTES THE INDEX INTERCHANGED
  207. C     WITH J DURING THE PERMUTATION STEP, AND THAT THE ELEMENTS
  208. C     OF THE DIAGONAL MATRIX USED ARE DENOTED BY D(I,J).  THEN
  209. C        SCALE(J) = P(J),    FOR J = 1,...,LOW-1
  210. C                 = D(J,J),      J = LOW,...,IGH
  211. C                 = P(J)         J = IGH+1,...,N.
  212. C     THE ORDER IN WHICH THE INTERCHANGES ARE MADE IS N TO IGH+1,
  213. C     THEN 1 TO LOW-1.
  214. C
  215. C     NOTE THAT 1 IS RETURNED FOR IGH IF IGH IS ZERO FORMALLY.
  216. C
  217. C     THE ALGOL PROCEDURE EXC CONTAINED IN BALANCE APPEARS IN
  218. C     BALANC  IN LINE.  (NOTE THAT THE ALGOL ROLES OF IDENTIFIERS
  219. C     K,L HAVE BEEN REVERSED.)
  220. C
  221. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  222. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  223. C
  224. C     THIS VERSION DATED AUGUST 1983.
  225. C
  226. C     ------------------------------------------------------------------
  227. C
  228.       RADIX = 16.0D0
  229. C
  230.       B2 = RADIX * RADIX
  231.       K = 1
  232.       L = N
  233.       GO TO 100
  234. C     .......... IN-LINE PROCEDURE FOR ROW AND
  235. C                COLUMN EXCHANGE ..........
  236.    20 SCALE(M) = J
  237.       IF (J .EQ. M) GO TO 50
  238. C
  239.       DO 30 I = 1, L
  240.          F = A(I,J)
  241.          A(I,J) = A(I,M)
  242.          A(I,M) = F
  243.    30 CONTINUE
  244. C
  245.       DO 40 I = K, N
  246.          F = A(J,I)
  247.          A(J,I) = A(M,I)
  248.          A(M,I) = F
  249.    40 CONTINUE
  250. C
  251.    50 GO TO (80,130), IEXC
  252. C     .......... SEARCH FOR ROWS ISOLATING AN EIGENVALUE
  253. C                AND PUSH THEM DOWN ..........
  254.    80 IF (L .EQ. 1) GO TO 280
  255.       L = L - 1
  256. C     .......... FOR J=L STEP -1 UNTIL 1 DO -- ..........
  257.   100 DO 120 JJ = 1, L
  258.          J = L + 1 - JJ
  259. C
  260.          DO 110 I = 1, L
  261.             IF (I .EQ. J) GO TO 110
  262.             IF (A(J,I) .NE. 0.0D0) GO TO 120
  263.   110    CONTINUE
  264. C
  265.          M = L
  266.          IEXC = 1
  267.          GO TO 20
  268.   120 CONTINUE
  269. C
  270.       GO TO 140
  271. C     .......... SEARCH FOR COLUMNS ISOLATING AN EIGENVALUE
  272. C                AND PUSH THEM LEFT ..........
  273.   130 K = K + 1
  274. C
  275.   140 DO 170 J = K, L
  276. C
  277.          DO 150 I = K, L
  278.             IF (I .EQ. J) GO TO 150
  279.             IF (A(I,J) .NE. 0.0D0) GO TO 170
  280.   150    CONTINUE
  281. C
  282.          M = K
  283.          IEXC = 2
  284.          GO TO 20
  285.   170 CONTINUE
  286. C     .......... NOW BALANCE THE SUBMATRIX IN ROWS K TO L ..........
  287.       DO 180 I = K, L
  288.   180 SCALE(I) = 1.0D0
  289. C     .......... ITERATIVE LOOP FOR NORM REDUCTION ..........
  290.   190 NOCONV = .FALSE.
  291. C
  292.       DO 270 I = K, L
  293.          C = 0.0D0
  294.          R = 0.0D0
  295. C
  296.          DO 200 J = K, L
  297.             IF (J .EQ. I) GO TO 200
  298.             C = C + DABS(A(J,I))
  299.             R = R + DABS(A(I,J))
  300.   200    CONTINUE
  301. C     .......... GUARD AGAINST ZERO C OR R DUE TO UNDERFLOW ..........
  302.          IF (C .EQ. 0.0D0 .OR. R .EQ. 0.0D0) GO TO 270
  303.          G = R / RADIX
  304.          F = 1.0D0
  305.          S = C + R
  306.   210    IF (C .GE. G) GO TO 220
  307.          F = F * RADIX
  308.          C = C * B2
  309.          GO TO 210
  310.   220    G = R * RADIX
  311.   230    IF (C .LT. G) GO TO 240
  312.          F = F / RADIX
  313.          C = C / B2
  314.          GO TO 230
  315. C     .......... NOW BALANCE ..........
  316.   240    IF ((C + R) / F .GE. 0.95D0 * S) GO TO 270
  317.          G = 1.0D0 / F
  318.          SCALE(I) = SCALE(I) * F
  319.          NOCONV = .TRUE.
  320. C
  321.          DO 250 J = K, N
  322.   250    A(I,J) = A(I,J) * G
  323. C
  324.          DO 260 J = 1, L
  325.   260    A(J,I) = A(J,I) * F
  326. C
  327.   270 CONTINUE
  328. C
  329.       IF (NOCONV) GO TO 190
  330. C
  331.   280 LOW = K
  332.       IGH = L
  333.       RETURN
  334.       END
  335.       SUBROUTINE BALBAK(NM,N,LOW,IGH,SCALE,M,Z)
  336. C
  337.       INTEGER I,J,K,M,N,II,NM,IGH,LOW
  338.       DOUBLE PRECISION SCALE(N),Z(NM,M)
  339.       DOUBLE PRECISION S
  340. C
  341. C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE BALBAK,
  342. C     NUM. MATH. 13, 293-304(1969) BY PARLETT AND REINSCH.
  343. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 315-326(1971).
  344. C
  345. C     THIS SUBROUTINE FORMS THE EIGENVECTORS OF A REAL GENERAL
  346. C     MATRIX BY BACK TRANSFORMING THOSE OF THE CORRESPONDING
  347. C     BALANCED MATRIX DETERMINED BY  BALANC.
  348. C
  349. C     ON INPUT
  350. C
  351. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  352. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  353. C          DIMENSION STATEMENT.
  354. C
  355. C        N IS THE ORDER OF THE MATRIX.
  356. C
  357. C        LOW AND IGH ARE INTEGERS DETERMINED BY  BALANC.
  358. C
  359. C        SCALE CONTAINS INFORMATION DETERMINING THE PERMUTATIONS
  360. C          AND SCALING FACTORS USED BY  BALANC.
  361. C
  362. C        M IS THE NUMBER OF COLUMNS OF Z TO BE BACK TRANSFORMED.
  363. C
  364. C        Z CONTAINS THE REAL AND IMAGINARY PARTS OF THE EIGEN-
  365. C          VECTORS TO BE BACK TRANSFORMED IN ITS FIRST M COLUMNS.
  366. C
  367. C     ON OUTPUT
  368. C
  369. C        Z CONTAINS THE REAL AND IMAGINARY PARTS OF THE
  370. C          TRANSFORMED EIGENVECTORS IN ITS FIRST M COLUMNS.
  371. C
  372. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  373. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  374. C
  375. C     THIS VERSION DATED AUGUST 1983.
  376. C
  377. C     ------------------------------------------------------------------
  378. C
  379.       IF (M .EQ. 0) GO TO 200
  380.       IF (IGH .EQ. LOW) GO TO 120
  381. C
  382.       DO 110 I = LOW, IGH
  383.          S = SCALE(I)
  384. C     .......... LEFT HAND EIGENVECTORS ARE BACK TRANSFORMED
  385. C                IF THE FOREGOING STATEMENT IS REPLACED BY
  386. C                S=1.0D0/SCALE(I). ..........
  387.          DO 100 J = 1, M
  388.   100    Z(I,J) = Z(I,J) * S
  389. C
  390.   110 CONTINUE
  391. C     ......... FOR I=LOW-1 STEP -1 UNTIL 1,
  392. C               IGH+1 STEP 1 UNTIL N DO -- ..........
  393.   120 DO 140 II = 1, N
  394.          I = II
  395.          IF (I .GE. LOW .AND. I .LE. IGH) GO TO 140
  396.          IF (I .LT. LOW) I = LOW - II
  397.          K = SCALE(I)
  398.          IF (K .EQ. I) GO TO 140
  399. C
  400.          DO 130 J = 1, M
  401.             S = Z(I,J)
  402.             Z(I,J) = Z(K,J)
  403.             Z(K,J) = S
  404.   130    CONTINUE
  405. C
  406.   140 CONTINUE
  407. C
  408.   200 RETURN
  409.       END
  410.       SUBROUTINE BANDR(NM,N,MB,A,D,E,E2,MATZ,Z)
  411. C
  412.       INTEGER J,K,L,N,R,I1,I2,J1,J2,KR,MB,MR,M1,NM,N2,R1,UGL,MAXL,MAXR
  413.       DOUBLE PRECISION A(NM,MB),D(N),E(N),E2(N),Z(NM,N)
  414.       DOUBLE PRECISION G,U,B1,B2,C2,F1,F2,S2,DMIN,DMINRT
  415.       LOGICAL MATZ
  416. C
  417. C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE BANDRD,
  418. C     NUM. MATH. 12, 231-241(1968) BY SCHWARZ.
  419. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 273-283(1971).
  420. C
  421. C     THIS SUBROUTINE REDUCES A REAL SYMMETRIC BAND MATRIX
  422. C     TO A SYMMETRIC TRIDIAGONAL MATRIX USING AND OPTIONALLY
  423. C     ACCUMULATING ORTHOGONAL SIMILARITY TRANSFORMATIONS.
  424. C
  425. C     ON INPUT
  426. C
  427. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  428. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  429. C          DIMENSION STATEMENT.
  430. C
  431. C        N IS THE ORDER OF THE MATRIX.
  432. C
  433. C        MB IS THE (HALF) BAND WIDTH OF THE MATRIX, DEFINED AS THE
  434. C          NUMBER OF ADJACENT DIAGONALS, INCLUDING THE PRINCIPAL
  435. C          DIAGONAL, REQUIRED TO SPECIFY THE NON-ZERO PORTION OF THE
  436. C          LOWER TRIANGLE OF THE MATRIX.
  437. C
  438. C        A CONTAINS THE LOWER TRIANGLE OF THE SYMMETRIC BAND INPUT
  439. C          MATRIX STORED AS AN N BY MB ARRAY.  ITS LOWEST SUBDIAGONAL
  440. C          IS STORED IN THE LAST N+1-MB POSITIONS OF THE FIRST COLUMN,
  441. C          ITS NEXT SUBDIAGONAL IN THE LAST N+2-MB POSITIONS OF THE
  442. C          SECOND COLUMN, FURTHER SUBDIAGONALS SIMILARLY, AND FINALLY
  443. C          ITS PRINCIPAL DIAGONAL IN THE N POSITIONS OF THE LAST COLUMN.
  444. C          CONTENTS OF STORAGES NOT PART OF THE MATRIX ARE ARBITRARY.
  445. C
  446. C        MATZ SHOULD BE SET TO .TRUE. IF THE TRANSFORMATION MATRIX IS
  447. C          TO BE ACCUMULATED, AND TO .FALSE. OTHERWISE.
  448. C
  449. C     ON OUTPUT
  450. C
  451. C        A HAS BEEN DESTROYED, EXCEPT FOR ITS LAST TWO COLUMNS WHICH
  452. C          CONTAIN A COPY OF THE TRIDIAGONAL MATRIX.
  453. C
  454. C        D CONTAINS THE DIAGONAL ELEMENTS OF THE TRIDIAGONAL MATRIX.
  455. C
  456. C        E CONTAINS THE SUBDIAGONAL ELEMENTS OF THE TRIDIAGONAL
  457. C          MATRIX IN ITS LAST N-1 POSITIONS.  E(1) IS SET TO ZERO.
  458. C
  459. C        E2 CONTAINS THE SQUARES OF THE CORRESPONDING ELEMENTS OF E.
  460. C          E2 MAY COINCIDE WITH E IF THE SQUARES ARE NOT NEEDED.
  461. C
  462. C        Z CONTAINS THE ORTHOGONAL TRANSFORMATION MATRIX PRODUCED IN
  463. C          THE REDUCTION IF MATZ HAS BEEN SET TO .TRUE.  OTHERWISE, Z
  464. C          IS NOT REFERENCED.
  465. C
  466. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  467. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  468. C
  469. C     THIS VERSION DATED AUGUST 1983.
  470. C
  471. C     ------------------------------------------------------------------
  472. C
  473.       DMIN = 2.0D0**(-64)
  474.       DMINRT = 2.0D0**(-32)
  475. C     .......... INITIALIZE DIAGONAL SCALING MATRIX ..........
  476.       DO 30 J = 1, N
  477.    30 D(J) = 1.0D0
  478. C
  479.       IF (.NOT. MATZ) GO TO 60
  480. C
  481.       DO 50 J = 1, N
  482. C
  483.          DO 40 K = 1, N
  484.    40    Z(J,K) = 0.0D0
  485. C
  486.          Z(J,J) = 1.0D0
  487.    50 CONTINUE
  488. C
  489.    60 M1 = MB - 1
  490.       IF (M1 - 1) 900, 800, 70
  491.    70 N2 = N - 2
  492. C
  493.       DO 700 K = 1, N2
  494.          MAXR = MIN0(M1,N-K)
  495. C     .......... FOR R=MAXR STEP -1 UNTIL 2 DO -- ..........
  496.          DO 600 R1 = 2, MAXR
  497.             R = MAXR + 2 - R1
  498.             KR = K + R
  499.             MR = MB - R
  500.             G = A(KR,MR)
  501.             A(KR-1,1) = A(KR-1,MR+1)
  502.             UGL = K
  503. C
  504.             DO 500 J = KR, N, M1
  505.                J1 = J - 1
  506.                J2 = J1 - 1
  507.                IF (G .EQ. 0.0D0) GO TO 600
  508.                B1 = A(J1,1) / G
  509.                B2 = B1 * D(J1) / D(J)
  510.                S2 = 1.0D0 / (1.0D0 + B1 * B2)
  511.                IF (S2 .GE. 0.5D0 ) GO TO 450
  512.                B1 = G / A(J1,1)
  513.                B2 = B1 * D(J) / D(J1)
  514.                C2 = 1.0D0 - S2
  515.                D(J1) = C2 * D(J1)
  516.                D(J) = C2 * D(J)
  517.                F1 = 2.0D0 * A(J,M1)
  518.                F2 = B1 * A(J1,MB)
  519.                A(J,M1) = -B2 * (B1 * A(J,M1) - A(J,MB)) - F2 + A(J,M1)
  520.                A(J1,MB) = B2 * (B2 * A(J,MB) + F1) + A(J1,MB)
  521.                A(J,MB) = B1 * (F2 - F1) + A(J,MB)
  522. C
  523.                DO 200 L = UGL, J2
  524.                   I2 = MB - J + L
  525.                   U = A(J1,I2+1) + B2 * A(J,I2)
  526.                   A(J,I2) = -B1 * A(J1,I2+1) + A(J,I2)
  527.                   A(J1,I2+1) = U
  528.   200          CONTINUE
  529. C
  530.                UGL = J
  531.                A(J1,1) = A(J1,1) + B2 * G
  532.                IF (J .EQ. N) GO TO 350
  533.                MAXL = MIN0(M1,N-J1)
  534. C
  535.                DO 300 L = 2, MAXL
  536.                   I1 = J1 + L
  537.                   I2 = MB - L
  538.                   U = A(I1,I2) + B2 * A(I1,I2+1)
  539.                   A(I1,I2+1) = -B1 * A(I1,I2) + A(I1,I2+1)
  540.                   A(I1,I2) = U
  541.   300          CONTINUE
  542. C
  543.                I1 = J + M1
  544.                IF (I1 .GT. N) GO TO 350
  545.                G = B2 * A(I1,1)
  546.   350          IF (.NOT. MATZ) GO TO 500
  547. C
  548.                DO 400 L = 1, N
  549.                   U = Z(L,J1) + B2 * Z(L,J)
  550.                   Z(L,J) = -B1 * Z(L,J1) + Z(L,J)
  551.                   Z(L,J1) = U
  552.   400          CONTINUE
  553. C
  554.                GO TO 500
  555. C
  556.   450          U = D(J1)
  557.                D(J1) = S2 * D(J)
  558.                D(J) = S2 * U
  559.                F1 = 2.0D0 * A(J,M1)
  560.                F2 = B1 * A(J,MB)
  561.                U = B1 * (F2 - F1) + A(J1,MB)
  562.                A(J,M1) = B2 * (B1 * A(J,M1) - A(J1,MB)) + F2 - A(J,M1)
  563.                A(J1,MB) = B2 * (B2 * A(J1,MB) + F1) + A(J,MB)
  564.                A(J,MB) = U
  565. C
  566.                DO 460 L = UGL, J2
  567.                   I2 = MB - J + L
  568.                   U = B2 * A(J1,I2+1) + A(J,I2)
  569.                   A(J,I2) = -A(J1,I2+1) + B1 * A(J,I2)
  570.                   A(J1,I2+1) = U
  571.   460          CONTINUE
  572. C
  573.                UGL = J
  574.                A(J1,1) = B2 * A(J1,1) + G
  575.                IF (J .EQ. N) GO TO 480
  576.                MAXL = MIN0(M1,N-J1)
  577. C
  578.                DO 470 L = 2, MAXL
  579.                   I1 = J1 + L
  580.                   I2 = MB - L
  581.                   U = B2 * A(I1,I2) + A(I1,I2+1)
  582.                   A(I1,I2+1) = -A(I1,I2) + B1 * A(I1,I2+1)
  583.                   A(I1,I2) = U
  584.   470          CONTINUE
  585. C
  586.                I1 = J + M1
  587.                IF (I1 .GT. N) GO TO 480
  588.                G = A(I1,1)
  589.                A(I1,1) = B1 * A(I1,1)
  590.   480          IF (.NOT. MATZ) GO TO 500
  591. C
  592.                DO 490 L = 1, N
  593.                   U = B2 * Z(L,J1) + Z(L,J)
  594.                   Z(L,J) = -Z(L,J1) + B1 * Z(L,J)
  595.                   Z(L,J1) = U
  596.   490          CONTINUE
  597. C
  598.   500       CONTINUE
  599. C
  600.   600    CONTINUE
  601. C
  602.          IF (MOD(K,64) .NE. 0) GO TO 700
  603. C     .......... RESCALE TO AVOID UNDERFLOW OR OVERFLOW ..........
  604.          DO 650 J = K, N
  605.             IF (D(J) .GE. DMIN) GO TO 650
  606.             MAXL = MAX0(1,MB+1-J)
  607. C
  608.             DO 610 L = MAXL, M1
  609.   610       A(J,L) = DMINRT * A(J,L)
  610. C
  611.             IF (J .EQ. N) GO TO 630
  612.             MAXL = MIN0(M1,N-J)
  613. C
  614.             DO 620 L = 1, MAXL
  615.                I1 = J + L
  616.                I2 = MB - L
  617.                A(I1,I2) = DMINRT * A(I1,I2)
  618.   620       CONTINUE
  619. C
  620.   630       IF (.NOT. MATZ) GO TO 645
  621. C
  622.             DO 640 L = 1, N
  623.   640       Z(L,J) = DMINRT * Z(L,J)
  624. C
  625.   645       A(J,MB) = DMIN * A(J,MB)
  626.             D(J) = D(J) / DMIN
  627.   650    CONTINUE
  628. C
  629.   700 CONTINUE
  630. C     .......... FORM SQUARE ROOT OF SCALING MATRIX ..........
  631.   800 DO 810 J = 2, N
  632.   810 E(J) = DSQRT(D(J))
  633. C
  634.       IF (.NOT. MATZ) GO TO 840
  635. C
  636.       DO 830 J = 1, N
  637. C
  638.          DO 820 K = 2, N
  639.   820    Z(J,K) = E(K) * Z(J,K)
  640. C
  641.   830 CONTINUE
  642. C
  643.   840 U = 1.0D0
  644. C
  645.       DO 850 J = 2, N
  646.          A(J,M1) = U * E(J) * A(J,M1)
  647.          U = E(J)
  648.          E2(J) = A(J,M1) ** 2
  649.          A(J,MB) = D(J) * A(J,MB)
  650.          D(J) = A(J,MB)
  651.          E(J) = A(J,M1)
  652.   850 CONTINUE
  653. C
  654.       D(1) = A(1,MB)
  655.       E(1) = 0.0D0
  656.       E2(1) = 0.0D0
  657.       GO TO 1001
  658. C
  659.   900 DO 950 J = 1, N
  660.          D(J) = A(J,MB)
  661.          E(J) = 0.0D0
  662.          E2(J) = 0.0D0
  663.   950 CONTINUE
  664. C
  665.  1001 RETURN
  666.       END
  667.       SUBROUTINE BANDV(NM,N,MBW,A,E21,M,W,Z,IERR,NV,RV,RV6)
  668. C
  669.       INTEGER I,J,K,M,N,R,II,IJ,JJ,KJ,MB,M1,NM,NV,IJ1,ITS,KJ1,MBW,M21,
  670.      X        IERR,MAXJ,MAXK,GROUP
  671.       DOUBLE PRECISION A(NM,MBW),W(M),Z(NM,M),RV(NV),RV6(N)
  672.       DOUBLE PRECISION U,V,UK,XU,X0,X1,E21,EPS2,EPS3,EPS4,NORM,ORDER,
  673.      X       EPSLON,PYTHAG
  674. C
  675. C     THIS SUBROUTINE FINDS THOSE EIGENVECTORS OF A REAL SYMMETRIC
  676. C     BAND MATRIX CORRESPONDING TO SPECIFIED EIGENVALUES, USING INVERSE
  677. C     ITERATION.  THE SUBROUTINE MAY ALSO BE USED TO SOLVE SYSTEMS
  678. C     OF LINEAR EQUATIONS WITH A SYMMETRIC OR NON-SYMMETRIC BAND
  679. C     COEFFICIENT MATRIX.
  680. C
  681. C     ON INPUT
  682. C
  683. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  684. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  685. C          DIMENSION STATEMENT.
  686. C
  687. C        N IS THE ORDER OF THE MATRIX.
  688. C
  689. C        MBW IS THE NUMBER OF COLUMNS OF THE ARRAY A USED TO STORE THE
  690. C          BAND MATRIX.  IF THE MATRIX IS SYMMETRIC, MBW IS ITS (HALF)
  691. C          BAND WIDTH, DENOTED MB AND DEFINED AS THE NUMBER OF ADJACENT
  692. C          DIAGONALS, INCLUDING THE PRINCIPAL DIAGONAL, REQUIRED TO
  693. C          SPECIFY THE NON-ZERO PORTION OF THE LOWER TRIANGLE OF THE
  694. C          MATRIX.  IF THE SUBROUTINE IS BEING USED TO SOLVE SYSTEMS
  695. C          OF LINEAR EQUATIONS AND THE COEFFICIENT MATRIX IS NOT
  696. C          SYMMETRIC, IT MUST HOWEVER HAVE THE SAME NUMBER OF ADJACENT
  697. C          DIAGONALS ABOVE THE MAIN DIAGONAL AS BELOW, AND IN THIS
  698. C          CASE, MBW=2*MB-1.
  699. C
  700. C        A CONTAINS THE LOWER TRIANGLE OF THE SYMMETRIC BAND INPUT
  701. C          MATRIX STORED AS AN N BY MB ARRAY.  ITS LOWEST SUBDIAGONAL
  702. C          IS STORED IN THE LAST N+1-MB POSITIONS OF THE FIRST COLUMN,
  703. C          ITS NEXT SUBDIAGONAL IN THE LAST N+2-MB POSITIONS OF THE
  704. C          SECOND COLUMN, FURTHER SUBDIAGONALS SIMILARLY, AND FINALLY
  705. C          ITS PRINCIPAL DIAGONAL IN THE N POSITIONS OF COLUMN MB.
  706. C          IF THE SUBROUTINE IS BEING USED TO SOLVE SYSTEMS OF LINEAR
  707. C          EQUATIONS AND THE COEFFICIENT MATRIX IS NOT SYMMETRIC, A IS
  708. C          N BY 2*MB-1 INSTEAD WITH LOWER TRIANGLE AS ABOVE AND WITH
  709. C          ITS FIRST SUPERDIAGONAL STORED IN THE FIRST N-1 POSITIONS OF
  710. C          COLUMN MB+1, ITS SECOND SUPERDIAGONAL IN THE FIRST N-2
  711. C          POSITIONS OF COLUMN MB+2, FURTHER SUPERDIAGONALS SIMILARLY,
  712. C          AND FINALLY ITS HIGHEST SUPERDIAGONAL IN THE FIRST N+1-MB
  713. C          POSITIONS OF THE LAST COLUMN.
  714. C          CONTENTS OF STORAGES NOT PART OF THE MATRIX ARE ARBITRARY.
  715. C
  716. C        E21 SPECIFIES THE ORDERING OF THE EIGENVALUES AND CONTAINS
  717. C            0.0D0 IF THE EIGENVALUES ARE IN ASCENDING ORDER, OR
  718. C            2.0D0 IF THE EIGENVALUES ARE IN DESCENDING ORDER.
  719. C          IF THE SUBROUTINE IS BEING USED TO SOLVE SYSTEMS OF LINEAR
  720. C          EQUATIONS, E21 SHOULD BE SET TO 1.0D0 IF THE COEFFICIENT
  721. C          MATRIX IS SYMMETRIC AND TO -1.0D0 IF NOT.
  722. C
  723. C        M IS THE NUMBER OF SPECIFIED EIGENVALUES OR THE NUMBER OF
  724. C          SYSTEMS OF LINEAR EQUATIONS.
  725. C
  726. C        W CONTAINS THE M EIGENVALUES IN ASCENDING OR DESCENDING ORDER.
  727. C          IF THE SUBROUTINE IS BEING USED TO SOLVE SYSTEMS OF LINEAR
  728. C          EQUATIONS (A-W(R)*I)*X(R)=B(R), WHERE I IS THE IDENTITY
  729. C          MATRIX, W(R) SHOULD BE SET ACCORDINGLY, FOR R=1,2,...,M.
  730. C
  731. C        Z CONTAINS THE CONSTANT MATRIX COLUMNS (B(R),R=1,2,...,M), IF
  732. C          THE SUBROUTINE IS USED TO SOLVE SYSTEMS OF LINEAR EQUATIONS.
  733. C
  734. C        NV MUST BE SET TO THE DIMENSION OF THE ARRAY PARAMETER RV
  735. C          AS DECLARED IN THE CALLING PROGRAM DIMENSION STATEMENT.
  736. C
  737. C     ON OUTPUT
  738. C
  739. C        A AND W ARE UNALTERED.
  740. C
  741. C        Z CONTAINS THE ASSOCIATED SET OF ORTHOGONAL EIGENVECTORS.
  742. C          ANY VECTOR WHICH FAILS TO CONVERGE IS SET TO ZERO.  IF THE
  743. C          SUBROUTINE IS USED TO SOLVE SYSTEMS OF LINEAR EQUATIONS,
  744. C          Z CONTAINS THE SOLUTION MATRIX COLUMNS (X(R),R=1,2,...,M).
  745. C
  746. C        IERR IS SET TO
  747. C          ZERO       FOR NORMAL RETURN,
  748. C          -R         IF THE EIGENVECTOR CORRESPONDING TO THE R-TH
  749. C                     EIGENVALUE FAILS TO CONVERGE, OR IF THE R-TH
  750. C                     SYSTEM OF LINEAR EQUATIONS IS NEARLY SINGULAR.
  751. C
  752. C        RV AND RV6 ARE TEMPORARY STORAGE ARRAYS.  NOTE THAT RV IS
  753. C          OF DIMENSION AT LEAST N*(2*MB-1).  IF THE SUBROUTINE
  754. C          IS BEING USED TO SOLVE SYSTEMS OF LINEAR EQUATIONS, THE
  755. C          DETERMINANT (UP TO SIGN) OF A-W(M)*I IS AVAILABLE, UPON
  756. C          RETURN, AS THE PRODUCT OF THE FIRST N ELEMENTS OF RV.
  757. C
  758. C     CALLS PYTHAG FOR  DSQRT(A*A + B*B) .
  759. C
  760. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  761. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  762. C
  763. C     THIS VERSION DATED AUGUST 1983.
  764. C
  765. C     ------------------------------------------------------------------
  766. C
  767.       IERR = 0
  768.       IF (M .EQ. 0) GO TO 1001
  769.       MB = MBW
  770.       IF (E21 .LT. 0.0D0) MB = (MBW + 1) / 2
  771.       M1 = MB - 1
  772.       M21 = M1 + MB
  773.       ORDER = 1.0D0 - DABS(E21)
  774. C     .......... FIND VECTORS BY INVERSE ITERATION ..........
  775.       DO 920 R = 1, M
  776.          ITS = 1
  777.          X1 = W(R)
  778.          IF (R .NE. 1) GO TO 100
  779. C     .......... COMPUTE NORM OF MATRIX ..........
  780.          NORM = 0.0D0
  781. C
  782.          DO 60 J = 1, MB
  783.             JJ = MB + 1 - J
  784.             KJ = JJ + M1
  785.             IJ = 1
  786.             V = 0.0D0
  787. C
  788.             DO 40 I = JJ, N
  789.                V = V + DABS(A(I,J))
  790.                IF (E21 .GE. 0.0D0) GO TO 40
  791.                V = V + DABS(A(IJ,KJ))
  792.                IJ = IJ + 1
  793.    40       CONTINUE
  794. C
  795.             NORM = DMAX1(NORM,V)
  796.    60    CONTINUE
  797. C
  798.          IF (E21 .LT. 0.0D0) NORM = 0.5D0 * NORM
  799. C     .......... EPS2 IS THE CRITERION FOR GROUPING,
  800. C                EPS3 REPLACES ZERO PIVOTS AND EQUAL
  801. C                ROOTS ARE MODIFIED BY EPS3,
  802. C                EPS4 IS TAKEN VERY SMALL TO AVOID OVERFLOW ..........
  803.          IF (NORM .EQ. 0.0D0) NORM = 1.0D0
  804.          EPS2 = 1.0D-3 * NORM * DABS(ORDER)
  805.          EPS3 = EPSLON(NORM)
  806.          UK = N
  807.          UK = DSQRT(UK)
  808.          EPS4 = UK * EPS3
  809.    80    GROUP = 0
  810.          GO TO 120
  811. C     .......... LOOK FOR CLOSE OR COINCIDENT ROOTS ..........
  812.   100    IF (DABS(X1-X0) .GE. EPS2) GO TO 80
  813.          GROUP = GROUP + 1
  814.          IF (ORDER * (X1 - X0) .LE. 0.0D0) X1 = X0 + ORDER * EPS3
  815. C     .......... EXPAND MATRIX, SUBTRACT EIGENVALUE,
  816. C                AND INITIALIZE VECTOR ..........
  817.   120    DO 200 I = 1, N
  818.             IJ = I + MIN0(0,I-M1) * N
  819.             KJ = IJ + MB * N
  820.             IJ1 = KJ + M1 * N
  821.             IF (M1 .EQ. 0) GO TO 180
  822. C
  823.             DO 150 J = 1, M1
  824.                IF (IJ .GT. M1) GO TO 125
  825.                IF (IJ .GT. 0) GO TO 130
  826.                RV(IJ1) = 0.0D0
  827.                IJ1 = IJ1 + N
  828.                GO TO 130
  829.   125          RV(IJ) = A(I,J)
  830.   130          IJ = IJ + N
  831.                II = I + J
  832.                IF (II .GT. N) GO TO 150
  833.                JJ = MB - J
  834.                IF (E21 .GE. 0.0D0) GO TO 140
  835.                II = I
  836.                JJ = MB + J
  837.   140          RV(KJ) = A(II,JJ)
  838.                KJ = KJ + N
  839.   150       CONTINUE
  840. C
  841.   180       RV(IJ) = A(I,MB) - X1
  842.             RV6(I) = EPS4
  843.             IF (ORDER .EQ. 0.0D0) RV6(I) = Z(I,R)
  844.   200    CONTINUE
  845. C
  846.          IF (M1 .EQ. 0) GO TO 600
  847. C     .......... ELIMINATION WITH INTERCHANGES ..........
  848.          DO 580 I = 1, N
  849.             II = I + 1
  850.             MAXK = MIN0(I+M1-1,N)
  851.             MAXJ = MIN0(N-I,M21-2) * N
  852. C
  853.             DO 360 K = I, MAXK
  854.                KJ1 = K
  855.                J = KJ1 + N
  856.                JJ = J + MAXJ
  857. C
  858.                DO 340 KJ = J, JJ, N
  859.                   RV(KJ1) = RV(KJ)
  860.                   KJ1 = KJ
  861.   340          CONTINUE
  862. C
  863.                RV(KJ1) = 0.0D0
  864.   360       CONTINUE
  865. C
  866.             IF (I .EQ. N) GO TO 580
  867.             U = 0.0D0
  868.             MAXK = MIN0(I+M1,N)
  869.             MAXJ = MIN0(N-II,M21-2) * N
  870. C
  871.             DO 450 J = I, MAXK
  872.                IF (DABS(RV(J)) .LT. DABS(U)) GO TO 450
  873.                U = RV(J)
  874.                K = J
  875.   450       CONTINUE
  876. C
  877.             J = I + N
  878.             JJ = J + MAXJ
  879.             IF (K .EQ. I) GO TO 520
  880.             KJ = K
  881. C
  882.             DO 500 IJ = I, JJ, N
  883.                V = RV(IJ)
  884.                RV(IJ) = RV(KJ)
  885.                RV(KJ) = V
  886.                KJ = KJ + N
  887.   500       CONTINUE
  888. C
  889.             IF (ORDER .NE. 0.0D0) GO TO 520
  890.             V = RV6(I)
  891.             RV6(I) = RV6(K)
  892.             RV6(K) = V
  893.   520       IF (U .EQ. 0.0D0) GO TO 580
  894. C
  895.             DO 560 K = II, MAXK
  896.                V = RV(K) / U
  897.                KJ = K
  898. C
  899.                DO 540 IJ = J, JJ, N
  900.                   KJ = KJ + N
  901.                   RV(KJ) = RV(KJ) - V * RV(IJ)
  902.   540          CONTINUE
  903. C
  904.                IF (ORDER .EQ. 0.0D0) RV6(K) = RV6(K) - V * RV6(I)
  905.   560       CONTINUE
  906. C
  907.   580    CONTINUE
  908. C     .......... BACK SUBSTITUTION
  909. C                FOR I=N STEP -1 UNTIL 1 DO -- ..........
  910.   600    DO 630 II = 1, N
  911.             I = N + 1 - II
  912.             MAXJ = MIN0(II,M21)
  913.             IF (MAXJ .EQ. 1) GO TO 620
  914.             IJ1 = I
  915.             J = IJ1 + N
  916.             JJ = J + (MAXJ - 2) * N
  917. C
  918.             DO 610 IJ = J, JJ, N
  919.                IJ1 = IJ1 + 1
  920.                RV6(I) = RV6(I) - RV(IJ) * RV6(IJ1)
  921.   610       CONTINUE
  922. C
  923.   620       V = RV(I)
  924.             IF (DABS(V) .GE. EPS3) GO TO 625
  925. C     .......... SET ERROR -- NEARLY SINGULAR LINEAR SYSTEM ..........
  926.             IF (ORDER .EQ. 0.0D0) IERR = -R
  927.             V = DSIGN(EPS3,V)
  928.   625       RV6(I) = RV6(I) / V
  929.   630    CONTINUE
  930. C
  931.          XU = 1.0D0
  932.          IF (ORDER .EQ. 0.0D0) GO TO 870
  933. C     .......... ORTHOGONALIZE WITH RESPECT TO PREVIOUS
  934. C                MEMBERS OF GROUP ..........
  935.          IF (GROUP .EQ. 0) GO TO 700
  936. C
  937.          DO 680 JJ = 1, GROUP
  938.             J = R - GROUP - 1 + JJ
  939.             XU = 0.0D0
  940. C
  941.             DO 640 I = 1, N
  942.   640       XU = XU + RV6(I) * Z(I,J)
  943. C
  944.             DO 660 I = 1, N
  945.   660       RV6(I) = RV6(I) - XU * Z(I,J)
  946. C
  947.   680    CONTINUE
  948. C
  949.   700    NORM = 0.0D0
  950. C
  951.          DO 720 I = 1, N
  952.   720    NORM = NORM + DABS(RV6(I))
  953. C
  954.          IF (NORM .GE. 0.1D0) GO TO 840
  955. C     .......... IN-LINE PROCEDURE FOR CHOOSING
  956. C                A NEW STARTING VECTOR ..........
  957.          IF (ITS .GE. N) GO TO 830
  958.          ITS = ITS + 1
  959.          XU = EPS4 / (UK + 1.0D0)
  960.          RV6(1) = EPS4
  961. C
  962.          DO 760 I = 2, N
  963.   760    RV6(I) = XU
  964. C
  965.          RV6(ITS) = RV6(ITS) - EPS4 * UK
  966.          GO TO 600
  967. C     .......... SET ERROR -- NON-CONVERGED EIGENVECTOR ..........
  968.   830    IERR = -R
  969.          XU = 0.0D0
  970.          GO TO 870
  971. C     .......... NORMALIZE SO THAT SUM OF SQUARES IS
  972. C                1 AND EXPAND TO FULL ORDER ..........
  973.   840    U = 0.0D0
  974. C
  975.          DO 860 I = 1, N
  976.   860    U = PYTHAG(U,RV6(I))
  977. C
  978.          XU = 1.0D0 / U
  979. C
  980.   870    DO 900 I = 1, N
  981.   900    Z(I,R) = RV6(I) * XU
  982. C
  983.          X0 = X1
  984.   920 CONTINUE
  985. C
  986.  1001 RETURN
  987.       END
  988.       SUBROUTINE BISECT(N,EPS1,D,E,E2,LB,UB,MM,M,W,IND,IERR,RV4,RV5)
  989. C
  990.       INTEGER I,J,K,L,M,N,P,Q,R,S,II,MM,M1,M2,TAG,IERR,ISTURM
  991.       DOUBLE PRECISION D(N),E(N),E2(N),W(MM),RV4(N),RV5(N)
  992.       DOUBLE PRECISION U,V,LB,T1,T2,UB,XU,X0,X1,EPS1,TST1,TST2,EPSLON
  993.       INTEGER IND(MM)
  994. C
  995. C     THIS SUBROUTINE IS A TRANSLATION OF THE BISECTION TECHNIQUE
  996. C     IN THE ALGOL PROCEDURE TRISTURM BY PETERS AND WILKINSON.
  997. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 418-439(1971).
  998. C
  999. C     THIS SUBROUTINE FINDS THOSE EIGENVALUES OF A TRIDIAGONAL
  1000. C     SYMMETRIC MATRIX WHICH LIE IN A SPECIFIED INTERVAL,
  1001. C     USING BISECTION.
  1002. C
  1003. C     ON INPUT
  1004. C
  1005. C        N IS THE ORDER OF THE MATRIX.
  1006. C
  1007. C        EPS1 IS AN ABSOLUTE ERROR TOLERANCE FOR THE COMPUTED
  1008. C          EIGENVALUES.  IF THE INPUT EPS1 IS NON-POSITIVE,
  1009. C          IT IS RESET FOR EACH SUBMATRIX TO A DEFAULT VALUE,
  1010. C          NAMELY, MINUS THE PRODUCT OF THE RELATIVE MACHINE
  1011. C          PRECISION AND THE 1-NORM OF THE SUBMATRIX.
  1012. C
  1013. C        D CONTAINS THE DIAGONAL ELEMENTS OF THE INPUT MATRIX.
  1014. C
  1015. C        E CONTAINS THE SUBDIAGONAL ELEMENTS OF THE INPUT MATRIX
  1016. C          IN ITS LAST N-1 POSITIONS.  E(1) IS ARBITRARY.
  1017. C
  1018. C        E2 CONTAINS THE SQUARES OF THE CORRESPONDING ELEMENTS OF E.
  1019. C          E2(1) IS ARBITRARY.
  1020. C
  1021. C        LB AND UB DEFINE THE INTERVAL TO BE SEARCHED FOR EIGENVALUES.
  1022. C          IF LB IS NOT LESS THAN UB, NO EIGENVALUES WILL BE FOUND.
  1023. C
  1024. C        MM SHOULD BE SET TO AN UPPER BOUND FOR THE NUMBER OF
  1025. C          EIGENVALUES IN THE INTERVAL.  WARNING. IF MORE THAN
  1026. C          MM EIGENVALUES ARE DETERMINED TO LIE IN THE INTERVAL,
  1027. C          AN ERROR RETURN IS MADE WITH NO EIGENVALUES FOUND.
  1028. C
  1029. C     ON OUTPUT
  1030. C
  1031. C        EPS1 IS UNALTERED UNLESS IT HAS BEEN RESET TO ITS
  1032. C          (LAST) DEFAULT VALUE.
  1033. C
  1034. C        D AND E ARE UNALTERED.
  1035. C
  1036. C        ELEMENTS OF E2, CORRESPONDING TO ELEMENTS OF E REGARDED
  1037. C          AS NEGLIGIBLE, HAVE BEEN REPLACED BY ZERO CAUSING THE
  1038. C          MATRIX TO SPLIT INTO A DIRECT SUM OF SUBMATRICES.
  1039. C          E2(1) IS ALSO SET TO ZERO.
  1040. C
  1041. C        M IS THE NUMBER OF EIGENVALUES DETERMINED TO LIE IN (LB,UB).
  1042. C
  1043. C        W CONTAINS THE M EIGENVALUES IN ASCENDING ORDER.
  1044. C
  1045. C        IND CONTAINS IN ITS FIRST M POSITIONS THE SUBMATRIX INDICES
  1046. C          ASSOCIATED WITH THE CORRESPONDING EIGENVALUES IN W --
  1047. C          1 FOR EIGENVALUES BELONGING TO THE FIRST SUBMATRIX FROM
  1048. C          THE TOP, 2 FOR THOSE BELONGING TO THE SECOND SUBMATRIX, ETC..
  1049. C
  1050. C        IERR IS SET TO
  1051. C          ZERO       FOR NORMAL RETURN,
  1052. C          3*N+1      IF M EXCEEDS MM.
  1053. C
  1054. C        RV4 AND RV5 ARE TEMPORARY STORAGE ARRAYS.
  1055. C
  1056. C     THE ALGOL PROCEDURE STURMCNT CONTAINED IN TRISTURM
  1057. C     APPEARS IN BISECT IN-LINE.
  1058. C
  1059. C     NOTE THAT SUBROUTINE TQL1 OR IMTQL1 IS GENERALLY FASTER THAN
  1060. C     BISECT, IF MORE THAN N/4 EIGENVALUES ARE TO BE FOUND.
  1061. C
  1062. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  1063. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  1064. C
  1065. C     THIS VERSION DATED AUGUST 1983.
  1066. C
  1067. C     ------------------------------------------------------------------
  1068. C
  1069.       IERR = 0
  1070.       TAG = 0
  1071.       T1 = LB
  1072.       T2 = UB
  1073. C     .......... LOOK FOR SMALL SUB-DIAGONAL ENTRIES ..........
  1074.       DO 40 I = 1, N
  1075.          IF (I .EQ. 1) GO TO 20
  1076.          TST1 = DABS(D(I)) + DABS(D(I-1))
  1077.          TST2 = TST1 + DABS(E(I))
  1078.          IF (TST2 .GT. TST1) GO TO 40
  1079.    20    E2(I) = 0.0D0
  1080.    40 CONTINUE
  1081. C     .......... DETERMINE THE NUMBER OF EIGENVALUES
  1082. C                IN THE INTERVAL ..........
  1083.       P = 1
  1084.       Q = N
  1085.       X1 = UB
  1086.       ISTURM = 1
  1087.       GO TO 320
  1088.    60 M = S
  1089.       X1 = LB
  1090.       ISTURM = 2
  1091.       GO TO 320
  1092.    80 M = M - S
  1093.       IF (M .GT. MM) GO TO 980
  1094.       Q = 0
  1095.       R = 0
  1096. C     .......... ESTABLISH AND PROCESS NEXT SUBMATRIX, REFINING
  1097. C                INTERVAL BY THE GERSCHGORIN BOUNDS ..........
  1098.   100 IF (R .EQ. M) GO TO 1001
  1099.       TAG = TAG + 1
  1100.       P = Q + 1
  1101.       XU = D(P)
  1102.       X0 = D(P)
  1103.       U = 0.0D0
  1104. C
  1105.       DO 120 Q = P, N
  1106.          X1 = U
  1107.          U = 0.0D0
  1108.          V = 0.0D0
  1109.          IF (Q .EQ. N) GO TO 110
  1110.          U = DABS(E(Q+1))
  1111.          V = E2(Q+1)
  1112.   110    XU = DMIN1(D(Q)-(X1+U),XU)
  1113.          X0 = DMAX1(D(Q)+(X1+U),X0)
  1114.          IF (V .EQ. 0.0D0) GO TO 140
  1115.   120 CONTINUE
  1116. C
  1117.   140 X1 = EPSLON(DMAX1(DABS(XU),DABS(X0)))
  1118.       IF (EPS1 .LE. 0.0D0) EPS1 = -X1
  1119.       IF (P .NE. Q) GO TO 180
  1120. C     .......... CHECK FOR ISOLATED ROOT WITHIN INTERVAL ..........
  1121.       IF (T1 .GT. D(P) .OR. D(P) .GE. T2) GO TO 940
  1122.       M1 = P
  1123.       M2 = P
  1124.       RV5(P) = D(P)
  1125.       GO TO 900
  1126.   180 X1 = X1 * (Q - P + 1)
  1127.       LB = DMAX1(T1,XU-X1)
  1128.       UB = DMIN1(T2,X0+X1)
  1129.       X1 = LB
  1130.       ISTURM = 3
  1131.       GO TO 320
  1132.   200 M1 = S + 1
  1133.       X1 = UB
  1134.       ISTURM = 4
  1135.       GO TO 320
  1136.   220 M2 = S
  1137.       IF (M1 .GT. M2) GO TO 940
  1138. C     .......... FIND ROOTS BY BISECTION ..........
  1139.       X0 = UB
  1140.       ISTURM = 5
  1141. C
  1142.       DO 240 I = M1, M2
  1143.          RV5(I) = UB
  1144.          RV4(I) = LB
  1145.   240 CONTINUE
  1146. C     .......... LOOP FOR K-TH EIGENVALUE
  1147. C                FOR K=M2 STEP -1 UNTIL M1 DO --
  1148. C                (-DO- NOT USED TO LEGALIZE -COMPUTED GO TO-) ..........
  1149.       K = M2
  1150.   250    XU = LB
  1151. C     .......... FOR I=K STEP -1 UNTIL M1 DO -- ..........
  1152.          DO 260 II = M1, K
  1153.             I = M1 + K - II
  1154.             IF (XU .GE. RV4(I)) GO TO 260
  1155.             XU = RV4(I)
  1156.             GO TO 280
  1157.   260    CONTINUE
  1158. C
  1159.   280    IF (X0 .GT. RV5(K)) X0 = RV5(K)
  1160. C     .......... NEXT BISECTION STEP ..........
  1161.   300    X1 = (XU + X0) * 0.5D0
  1162.          IF ((X0 - XU) .LE. DABS(EPS1)) GO TO 420
  1163.          TST1 = 2.0D0 * (DABS(XU) + DABS(X0))
  1164.          TST2 = TST1 + (X0 - XU)
  1165.          IF (TST2 .EQ. TST1) GO TO 420
  1166. C     .......... IN-LINE PROCEDURE FOR STURM SEQUENCE ..........
  1167.   320    S = P - 1
  1168.          U = 1.0D0
  1169. C
  1170.          DO 340 I = P, Q
  1171.             IF (U .NE. 0.0D0) GO TO 325
  1172.             V = DABS(E(I)) / EPSLON(1.0D0)
  1173.             IF (E2(I) .EQ. 0.0D0) V = 0.0D0
  1174.             GO TO 330
  1175.   325       V = E2(I) / U
  1176.   330       U = D(I) - X1 - V
  1177.             IF (U .LT. 0.0D0) S = S + 1
  1178.   340    CONTINUE
  1179. C
  1180.          GO TO (60,80,200,220,360), ISTURM
  1181. C     .......... REFINE INTERVALS ..........
  1182.   360    IF (S .GE. K) GO TO 400
  1183.          XU = X1
  1184.          IF (S .GE. M1) GO TO 380
  1185.          RV4(M1) = X1
  1186.          GO TO 300
  1187.   380    RV4(S+1) = X1
  1188.          IF (RV5(S) .GT. X1) RV5(S) = X1
  1189.          GO TO 300
  1190.   400    X0 = X1
  1191.          GO TO 300
  1192. C     .......... K-TH EIGENVALUE FOUND ..........
  1193.   420    RV5(K) = X1
  1194.       K = K - 1
  1195.       IF (K .GE. M1) GO TO 250
  1196. C     .......... ORDER EIGENVALUES TAGGED WITH THEIR
  1197. C                SUBMATRIX ASSOCIATIONS ..........
  1198.   900 S = R
  1199.       R = R + M2 - M1 + 1
  1200.       J = 1
  1201.       K = M1
  1202. C
  1203.       DO 920 L = 1, R
  1204.          IF (J .GT. S) GO TO 910
  1205.          IF (K .GT. M2) GO TO 940
  1206.          IF (RV5(K) .GE. W(L)) GO TO 915
  1207. C
  1208.          DO 905 II = J, S
  1209.             I = L + S - II
  1210.             W(I+1) = W(I)
  1211.             IND(I+1) = IND(I)
  1212.   905    CONTINUE
  1213. C
  1214.   910    W(L) = RV5(K)
  1215.          IND(L) = TAG
  1216.          K = K + 1
  1217.          GO TO 920
  1218.   915    J = J + 1
  1219.   920 CONTINUE
  1220. C
  1221.   940 IF (Q .LT. N) GO TO 100
  1222.       GO TO 1001
  1223. C     .......... SET ERROR -- UNDERESTIMATE OF NUMBER OF
  1224. C                EIGENVALUES IN INTERVAL ..........
  1225.   980 IERR = 3 * N + 1
  1226.  1001 LB = T1
  1227.       UB = T2
  1228.       RETURN
  1229.       END
  1230.       SUBROUTINE BQR(NM,N,MB,A,T,R,IERR,NV,RV)
  1231. C
  1232.       INTEGER I,J,K,L,M,N,II,IK,JK,JM,KJ,KK,KM,LL,MB,MK,MN,MZ,
  1233.      X        M1,M2,M3,M4,NI,NM,NV,ITS,KJ1,M21,M31,IERR,IMULT
  1234.       DOUBLE PRECISION A(NM,MB),RV(NV)
  1235.       DOUBLE PRECISION F,G,Q,R,S,T,TST1,TST2,SCALE,PYTHAG
  1236. C
  1237. C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE BQR,
  1238. C     NUM. MATH. 16, 85-92(1970) BY MARTIN, REINSCH, AND WILKINSON.
  1239. C     HANDBOOK FOR AUTO. COMP., VOL II-LINEAR ALGEBRA, 266-272(1971).
  1240. C
  1241. C     THIS SUBROUTINE FINDS THE EIGENVALUE OF SMALLEST (USUALLY)
  1242. C     MAGNITUDE OF A REAL SYMMETRIC BAND MATRIX USING THE
  1243. C     QR ALGORITHM WITH SHIFTS OF ORIGIN.  CONSECUTIVE CALLS
  1244. C     CAN BE MADE TO FIND FURTHER EIGENVALUES.
  1245. C
  1246. C     ON INPUT
  1247. C
  1248. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  1249. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  1250. C          DIMENSION STATEMENT.
  1251. C
  1252. C        N IS THE ORDER OF THE MATRIX.
  1253. C
  1254. C        MB IS THE (HALF) BAND WIDTH OF THE MATRIX, DEFINED AS THE
  1255. C          NUMBER OF ADJACENT DIAGONALS, INCLUDING THE PRINCIPAL
  1256. C          DIAGONAL, REQUIRED TO SPECIFY THE NON-ZERO PORTION OF THE
  1257. C          LOWER TRIANGLE OF THE MATRIX.
  1258. C
  1259. C        A CONTAINS THE LOWER TRIANGLE OF THE SYMMETRIC BAND INPUT
  1260. C          MATRIX STORED AS AN N BY MB ARRAY.  ITS LOWEST SUBDIAGONAL
  1261. C          IS STORED IN THE LAST N+1-MB POSITIONS OF THE FIRST COLUMN,
  1262. C          ITS NEXT SUBDIAGONAL IN THE LAST N+2-MB POSITIONS OF THE
  1263. C          SECOND COLUMN, FURTHER SUBDIAGONALS SIMILARLY, AND FINALLY
  1264. C          ITS PRINCIPAL DIAGONAL IN THE N POSITIONS OF THE LAST COLUMN.
  1265. C          CONTENTS OF STORAGES NOT PART OF THE MATRIX ARE ARBITRARY.
  1266. C          ON A SUBSEQUENT CALL, ITS OUTPUT CONTENTS FROM THE PREVIOUS
  1267. C          CALL SHOULD BE PASSED.
  1268. C
  1269. C        T SPECIFIES THE SHIFT (OF EIGENVALUES) APPLIED TO THE DIAGONAL
  1270. C          OF A IN FORMING THE INPUT MATRIX. WHAT IS ACTUALLY DETERMINED
  1271. C          IS THE EIGENVALUE OF A+TI (I IS THE IDENTITY MATRIX) NEAREST
  1272. C          TO T.  ON A SUBSEQUENT CALL, THE OUTPUT VALUE OF T FROM THE
  1273. C          PREVIOUS CALL SHOULD BE PASSED IF THE NEXT NEAREST EIGENVALUE
  1274. C          IS SOUGHT.
  1275. C
  1276. C        R SHOULD BE SPECIFIED AS ZERO ON THE FIRST CALL, AND AS ITS
  1277. C          OUTPUT VALUE FROM THE PREVIOUS CALL ON A SUBSEQUENT CALL.
  1278. C          IT IS USED TO DETERMINE WHEN THE LAST ROW AND COLUMN OF
  1279. C          THE TRANSFORMED BAND MATRIX CAN BE REGARDED AS NEGLIGIBLE.
  1280. C
  1281. C        NV MUST BE SET TO THE DIMENSION OF THE ARRAY PARAMETER RV
  1282. C          AS DECLARED IN THE CALLING PROGRAM DIMENSION STATEMENT.
  1283. C
  1284. C     ON OUTPUT
  1285. C
  1286. C        A CONTAINS THE TRANSFORMED BAND MATRIX.  THE MATRIX A+TI
  1287. C          DERIVED FROM THE OUTPUT PARAMETERS IS SIMILAR TO THE
  1288. C          INPUT A+TI TO WITHIN ROUNDING ERRORS.  ITS LAST ROW AND
  1289. C          COLUMN ARE NULL (IF IERR IS ZERO).
  1290. C
  1291. C        T CONTAINS THE COMPUTED EIGENVALUE OF A+TI (IF IERR IS ZERO).
  1292. C
  1293. C        R CONTAINS THE MAXIMUM OF ITS INPUT VALUE AND THE NORM OF THE
  1294. C          LAST COLUMN OF THE INPUT MATRIX A.
  1295. C
  1296. C        IERR IS SET TO
  1297. C          ZERO       FOR NORMAL RETURN,
  1298. C          N          IF THE EIGENVALUE HAS NOT BEEN
  1299. C                     DETERMINED AFTER 30 ITERATIONS.
  1300. C
  1301. C        RV IS A TEMPORARY STORAGE ARRAY OF DIMENSION AT LEAST
  1302. C          (2*MB**2+4*MB-3).  THE FIRST (3*MB-2) LOCATIONS CORRESPOND
  1303. C          TO THE ALGOL ARRAY B, THE NEXT (2*MB-1) LOCATIONS CORRESPOND
  1304. C          TO THE ALGOL ARRAY H, AND THE FINAL (2*MB**2-MB) LOCATIONS
  1305. C          CORRESPOND TO THE MB BY (2*MB-1) ALGOL ARRAY U.
  1306. C
  1307. C     NOTE. FOR A SUBSEQUENT CALL, N SHOULD BE REPLACED BY N-1, BUT
  1308. C     MB SHOULD NOT BE ALTERED EVEN WHEN IT EXCEEDS THE CURRENT N.
  1309. C
  1310. C     CALLS PYTHAG FOR  DSQRT(A*A + B*B) .
  1311. C
  1312. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  1313. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  1314. C
  1315. C     THIS VERSION DATED AUGUST 1983.
  1316. C
  1317. C     ------------------------------------------------------------------
  1318. C
  1319.       IERR = 0
  1320.       M1 = MIN0(MB,N)
  1321.       M = M1 - 1
  1322.       M2 = M + M
  1323.       M21 = M2 + 1
  1324.       M3 = M21 + M
  1325.       M31 = M3 + 1
  1326.       M4 = M31 + M2
  1327.       MN = M + N
  1328.       MZ = MB - M1
  1329.       ITS = 0
  1330. C     .......... TEST FOR CONVERGENCE ..........
  1331.    40 G = A(N,MB)
  1332.       IF (M .EQ. 0) GO TO 360
  1333.       F = 0.0D0
  1334. C
  1335.       DO 50 K = 1, M
  1336.          MK = K + MZ
  1337.          F = F + DABS(A(N,MK))
  1338.    50 CONTINUE
  1339. C
  1340.       IF (ITS .EQ. 0 .AND. F .GT. R) R = F
  1341.       TST1 = R
  1342.       TST2 = TST1 + F
  1343.       IF (TST2 .LE. TST1) GO TO 360
  1344.       IF (ITS .EQ. 30) GO TO 1000
  1345.       ITS = ITS + 1
  1346. C     .......... FORM SHIFT FROM BOTTOM 2 BY 2 MINOR ..........
  1347.       IF (F .GT. 0.25D0 * R .AND. ITS .LT. 5) GO TO 90
  1348.       F = A(N,MB-1)
  1349.       IF (F .EQ. 0.0D0) GO TO 70
  1350.       Q = (A(N-1,MB) - G) / (2.0D0 * F)
  1351.       S = PYTHAG(Q,1.0D0)
  1352.       G = G - F / (Q + DSIGN(S,Q))
  1353.    70 T = T + G
  1354. C
  1355.       DO 80 I = 1, N
  1356.    80 A(I,MB) = A(I,MB) - G
  1357. C
  1358.    90 DO 100 K = M31, M4
  1359.   100 RV(K) = 0.0D0
  1360. C
  1361.       DO 350 II = 1, MN
  1362.          I = II - M
  1363.          NI = N - II
  1364.          IF (NI .LT. 0) GO TO 230
  1365. C     .......... FORM COLUMN OF SHIFTED MATRIX A-G*I ..........
  1366.          L = MAX0(1,2-I)
  1367. C
  1368.          DO 110 K = 1, M3
  1369.   110    RV(K) = 0.0D0
  1370. C
  1371.          DO 120 K = L, M1
  1372.             KM = K + M
  1373.             MK = K + MZ
  1374.             RV(KM) = A(II,MK)
  1375.   120    CONTINUE
  1376. C
  1377.          LL = MIN0(M,NI)
  1378.          IF (LL .EQ. 0) GO TO 135
  1379. C
  1380.          DO 130 K = 1, LL
  1381.             KM = K + M21
  1382.             IK = II + K
  1383.             MK = MB - K
  1384.             RV(KM) = A(IK,MK)
  1385.   130    CONTINUE
  1386. C     .......... PRE-MULTIPLY WITH HOUSEHOLDER REFLECTIONS ..........
  1387.   135    LL = M2
  1388.          IMULT = 0
  1389. C     .......... MULTIPLICATION PROCEDURE ..........
  1390.   140    KJ = M4 - M1
  1391. C
  1392.          DO 170 J = 1, LL
  1393.             KJ = KJ + M1
  1394.             JM = J + M3
  1395.             IF (RV(JM) .EQ. 0.0D0) GO TO 170
  1396.             F = 0.0D0
  1397. C
  1398.             DO 150 K = 1, M1
  1399.                KJ = KJ + 1
  1400.                JK = J + K - 1
  1401.                F = F + RV(KJ) * RV(JK)
  1402.   150       CONTINUE
  1403. C
  1404.             F = F / RV(JM)
  1405.             KJ = KJ - M1
  1406. C
  1407.             DO 160 K = 1, M1
  1408.                KJ = KJ + 1
  1409.                JK = J + K - 1
  1410.                RV(JK) = RV(JK) - RV(KJ) * F
  1411.   160       CONTINUE
  1412. C
  1413.             KJ = KJ - M1
  1414.   170    CONTINUE
  1415. C
  1416.          IF (IMULT .NE. 0) GO TO 280
  1417. C     .......... HOUSEHOLDER REFLECTION ..........
  1418.          F = RV(M21)
  1419.          S = 0.0D0
  1420.          RV(M4) = 0.0D0
  1421.          SCALE = 0.0D0
  1422. C
  1423.          DO 180 K = M21, M3
  1424.   180    SCALE = SCALE + DABS(RV(K))
  1425. C
  1426.          IF (SCALE .EQ. 0.0D0) GO TO 210
  1427. C
  1428.          DO 190 K = M21, M3
  1429.   190    S = S + (RV(K)/SCALE)**2
  1430. C
  1431.          S = SCALE * SCALE * S
  1432.          G = -DSIGN(DSQRT(S),F)
  1433.          RV(M21) = G
  1434.          RV(M4) = S - F * G
  1435.          KJ = M4 + M2 * M1 + 1
  1436.          RV(KJ) = F - G
  1437. C
  1438.          DO 200 K = 2, M1
  1439.             KJ = KJ + 1
  1440.             KM = K + M2
  1441.             RV(KJ) = RV(KM)
  1442.   200    CONTINUE
  1443. C     .......... SAVE COLUMN OF TRIANGULAR FACTOR R ..........
  1444.   210    DO 220 K = L, M1
  1445.             KM = K + M
  1446.             MK = K + MZ
  1447.             A(II,MK) = RV(KM)
  1448.   220    CONTINUE
  1449. C
  1450.   230    L = MAX0(1,M1+1-I)
  1451.          IF (I .LE. 0) GO TO 300
  1452. C     .......... PERFORM ADDITIONAL STEPS ..........
  1453.          DO 240 K = 1, M21
  1454.   240    RV(K) = 0.0D0
  1455. C
  1456.          LL = MIN0(M1,NI+M1)
  1457. C     .......... GET ROW OF TRIANGULAR FACTOR R ..........
  1458.          DO 250 KK = 1, LL
  1459.             K = KK - 1
  1460.             KM = K + M1
  1461.             IK = I + K
  1462.             MK = MB - K
  1463.             RV(KM) = A(IK,MK)
  1464.   250    CONTINUE
  1465. C     .......... POST-MULTIPLY WITH HOUSEHOLDER REFLECTIONS ..........
  1466.          LL = M1
  1467.          IMULT = 1
  1468.          GO TO 140
  1469. C     .......... STORE COLUMN OF NEW A MATRIX ..........
  1470.   280    DO 290 K = L, M1
  1471.             MK = K + MZ
  1472.             A(I,MK) = RV(K)
  1473.   290    CONTINUE
  1474. C     .......... UPDATE HOUSEHOLDER REFLECTIONS ..........
  1475.   300    IF (L .GT. 1) L = L - 1
  1476.          KJ1 = M4 + L * M1
  1477. C
  1478.          DO 320 J = L, M2
  1479.             JM = J + M3
  1480.             RV(JM) = RV(JM+1)
  1481. C
  1482.             DO 320 K = 1, M1
  1483.                KJ1 = KJ1 + 1
  1484.                KJ = KJ1 - M1
  1485.                RV(KJ) = RV(KJ1)
  1486.   320    CONTINUE
  1487. C
  1488.   350 CONTINUE
  1489. C
  1490.       GO TO 40
  1491. C     .......... CONVERGENCE ..........
  1492.   360 T = T + G
  1493. C
  1494.       DO 380 I = 1, N
  1495.   380 A(I,MB) = A(I,MB) - G
  1496. C
  1497.       DO 400 K = 1, M1
  1498.          MK = K + MZ
  1499.          A(N,MK) = 0.0D0
  1500.   400 CONTINUE
  1501. C
  1502.       GO TO 1001
  1503. C     .......... SET ERROR -- NO CONVERGENCE TO
  1504. C                EIGENVALUE AFTER 30 ITERATIONS ..........
  1505.  1000 IERR = N
  1506.  1001 RETURN
  1507.       END
  1508.       SUBROUTINE CBABK2(NM,N,LOW,IGH,SCALE,M,ZR,ZI)
  1509. C
  1510.       INTEGER I,J,K,M,N,II,NM,IGH,LOW
  1511.       DOUBLE PRECISION SCALE(N),ZR(NM,M),ZI(NM,M)
  1512.       DOUBLE PRECISION S
  1513. C
  1514. C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE
  1515. C     CBABK2, WHICH IS A COMPLEX VERSION OF BALBAK,
  1516. C     NUM. MATH. 13, 293-304(1969) BY PARLETT AND REINSCH.
  1517. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 315-326(1971).
  1518. C
  1519. C     THIS SUBROUTINE FORMS THE EIGENVECTORS OF A COMPLEX GENERAL
  1520. C     MATRIX BY BACK TRANSFORMING THOSE OF THE CORRESPONDING
  1521. C     BALANCED MATRIX DETERMINED BY  CBAL.
  1522. C
  1523. C     ON INPUT
  1524. C
  1525. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  1526. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  1527. C          DIMENSION STATEMENT.
  1528. C
  1529. C        N IS THE ORDER OF THE MATRIX.
  1530. C
  1531. C        LOW AND IGH ARE INTEGERS DETERMINED BY  CBAL.
  1532. C
  1533. C        SCALE CONTAINS INFORMATION DETERMINING THE PERMUTATIONS
  1534. C          AND SCALING FACTORS USED BY  CBAL.
  1535. C
  1536. C        M IS THE NUMBER OF EIGENVECTORS TO BE BACK TRANSFORMED.
  1537. C
  1538. C        ZR AND ZI CONTAIN THE REAL AND IMAGINARY PARTS,
  1539. C          RESPECTIVELY, OF THE EIGENVECTORS TO BE
  1540. C          BACK TRANSFORMED IN THEIR FIRST M COLUMNS.
  1541. C
  1542. C     ON OUTPUT
  1543. C
  1544. C        ZR AND ZI CONTAIN THE REAL AND IMAGINARY PARTS,
  1545. C          RESPECTIVELY, OF THE TRANSFORMED EIGENVECTORS
  1546. C          IN THEIR FIRST M COLUMNS.
  1547. C
  1548. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  1549. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  1550. C
  1551. C     THIS VERSION DATED AUGUST 1983.
  1552. C
  1553. C     ------------------------------------------------------------------
  1554. C
  1555.       IF (M .EQ. 0) GO TO 200
  1556.       IF (IGH .EQ. LOW) GO TO 120
  1557. C
  1558.       DO 110 I = LOW, IGH
  1559.          S = SCALE(I)
  1560. C     .......... LEFT HAND EIGENVECTORS ARE BACK TRANSFORMED
  1561. C                IF THE FOREGOING STATEMENT IS REPLACED BY
  1562. C                S=1.0D0/SCALE(I). ..........
  1563.          DO 100 J = 1, M
  1564.             ZR(I,J) = ZR(I,J) * S
  1565.             ZI(I,J) = ZI(I,J) * S
  1566.   100    CONTINUE
  1567. C
  1568.   110 CONTINUE
  1569. C     .......... FOR I=LOW-1 STEP -1 UNTIL 1,
  1570. C                IGH+1 STEP 1 UNTIL N DO -- ..........
  1571.   120 DO 140 II = 1, N
  1572.          I = II
  1573.          IF (I .GE. LOW .AND. I .LE. IGH) GO TO 140
  1574.          IF (I .LT. LOW) I = LOW - II
  1575.          K = SCALE(I)
  1576.          IF (K .EQ. I) GO TO 140
  1577. C
  1578.          DO 130 J = 1, M
  1579.             S = ZR(I,J)
  1580.             ZR(I,J) = ZR(K,J)
  1581.             ZR(K,J) = S
  1582.             S = ZI(I,J)
  1583.             ZI(I,J) = ZI(K,J)
  1584.             ZI(K,J) = S
  1585.   130    CONTINUE
  1586. C
  1587.   140 CONTINUE
  1588. C
  1589.   200 RETURN
  1590.       END
  1591.       SUBROUTINE CBAL(NM,N,AR,AI,LOW,IGH,SCALE)
  1592. C
  1593.       INTEGER I,J,K,L,M,N,JJ,NM,IGH,LOW,IEXC
  1594.       DOUBLE PRECISION AR(NM,N),AI(NM,N),SCALE(N)
  1595.       DOUBLE PRECISION C,F,G,R,S,B2,RADIX
  1596.       LOGICAL NOCONV
  1597. C
  1598. C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE
  1599. C     CBALANCE, WHICH IS A COMPLEX VERSION OF BALANCE,
  1600. C     NUM. MATH. 13, 293-304(1969) BY PARLETT AND REINSCH.
  1601. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 315-326(1971).
  1602. C
  1603. C     THIS SUBROUTINE BALANCES A COMPLEX MATRIX AND ISOLATES
  1604. C     EIGENVALUES WHENEVER POSSIBLE.
  1605. C
  1606. C     ON INPUT
  1607. C
  1608. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  1609. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  1610. C          DIMENSION STATEMENT.
  1611. C
  1612. C        N IS THE ORDER OF THE MATRIX.
  1613. C
  1614. C        AR AND AI CONTAIN THE REAL AND IMAGINARY PARTS,
  1615. C          RESPECTIVELY, OF THE COMPLEX MATRIX TO BE BALANCED.
  1616. C
  1617. C     ON OUTPUT
  1618. C
  1619. C        AR AND AI CONTAIN THE REAL AND IMAGINARY PARTS,
  1620. C          RESPECTIVELY, OF THE BALANCED MATRIX.
  1621. C
  1622. C        LOW AND IGH ARE TWO INTEGERS SUCH THAT AR(I,J) AND AI(I,J)
  1623. C          ARE EQUAL TO ZERO IF
  1624. C           (1) I IS GREATER THAN J AND
  1625. C           (2) J=1,...,LOW-1 OR I=IGH+1,...,N.
  1626. C
  1627. C        SCALE CONTAINS INFORMATION DETERMINING THE
  1628. C           PERMUTATIONS AND SCALING FACTORS USED.
  1629. C
  1630. C     SUPPOSE THAT THE PRINCIPAL SUBMATRIX IN ROWS LOW THROUGH IGH
  1631. C     HAS BEEN BALANCED, THAT P(J) DENOTES THE INDEX INTERCHANGED
  1632. C     WITH J DURING THE PERMUTATION STEP, AND THAT THE ELEMENTS
  1633. C     OF THE DIAGONAL MATRIX USED ARE DENOTED BY D(I,J).  THEN
  1634. C        SCALE(J) = P(J),    FOR J = 1,...,LOW-1
  1635. C                 = D(J,J)       J = LOW,...,IGH
  1636. C                 = P(J)         J = IGH+1,...,N.
  1637. C     THE ORDER IN WHICH THE INTERCHANGES ARE MADE IS N TO IGH+1,
  1638. C     THEN 1 TO LOW-1.
  1639. C
  1640. C     NOTE THAT 1 IS RETURNED FOR IGH IF IGH IS ZERO FORMALLY.
  1641. C
  1642. C     THE ALGOL PROCEDURE EXC CONTAINED IN CBALANCE APPEARS IN
  1643. C     CBAL  IN LINE.  (NOTE THAT THE ALGOL ROLES OF IDENTIFIERS
  1644. C     K,L HAVE BEEN REVERSED.)
  1645. C
  1646. C     ARITHMETIC IS REAL THROUGHOUT.
  1647. C
  1648. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  1649. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  1650. C
  1651. C     THIS VERSION DATED AUGUST 1983.
  1652. C
  1653. C     ------------------------------------------------------------------
  1654. C
  1655.       RADIX = 16.0D0
  1656. C
  1657.       B2 = RADIX * RADIX
  1658.       K = 1
  1659.       L = N
  1660.       GO TO 100
  1661. C     .......... IN-LINE PROCEDURE FOR ROW AND
  1662. C                COLUMN EXCHANGE ..........
  1663.    20 SCALE(M) = J
  1664.       IF (J .EQ. M) GO TO 50
  1665. C
  1666.       DO 30 I = 1, L
  1667.          F = AR(I,J)
  1668.          AR(I,J) = AR(I,M)
  1669.          AR(I,M) = F
  1670.          F = AI(I,J)
  1671.          AI(I,J) = AI(I,M)
  1672.          AI(I,M) = F
  1673.    30 CONTINUE
  1674. C
  1675.       DO 40 I = K, N
  1676.          F = AR(J,I)
  1677.          AR(J,I) = AR(M,I)
  1678.          AR(M,I) = F
  1679.          F = AI(J,I)
  1680.          AI(J,I) = AI(M,I)
  1681.          AI(M,I) = F
  1682.    40 CONTINUE
  1683. C
  1684.    50 GO TO (80,130), IEXC
  1685. C     .......... SEARCH FOR ROWS ISOLATING AN EIGENVALUE
  1686. C                AND PUSH THEM DOWN ..........
  1687.    80 IF (L .EQ. 1) GO TO 280
  1688.       L = L - 1
  1689. C     .......... FOR J=L STEP -1 UNTIL 1 DO -- ..........
  1690.   100 DO 120 JJ = 1, L
  1691.          J = L + 1 - JJ
  1692. C
  1693.          DO 110 I = 1, L
  1694.             IF (I .EQ. J) GO TO 110
  1695.             IF (AR(J,I) .NE. 0.0D0 .OR. AI(J,I) .NE. 0.0D0) GO TO 120
  1696.   110    CONTINUE
  1697. C
  1698.          M = L
  1699.          IEXC = 1
  1700.          GO TO 20
  1701.   120 CONTINUE
  1702. C
  1703.       GO TO 140
  1704. C     .......... SEARCH FOR COLUMNS ISOLATING AN EIGENVALUE
  1705. C                AND PUSH THEM LEFT ..........
  1706.   130 K = K + 1
  1707. C
  1708.   140 DO 170 J = K, L
  1709. C
  1710.          DO 150 I = K, L
  1711.             IF (I .EQ. J) GO TO 150
  1712.             IF (AR(I,J) .NE. 0.0D0 .OR. AI(I,J) .NE. 0.0D0) GO TO 170
  1713.   150    CONTINUE
  1714. C
  1715.          M = K
  1716.          IEXC = 2
  1717.          GO TO 20
  1718.   170 CONTINUE
  1719. C     .......... NOW BALANCE THE SUBMATRIX IN ROWS K TO L ..........
  1720.       DO 180 I = K, L
  1721.   180 SCALE(I) = 1.0D0
  1722. C     .......... ITERATIVE LOOP FOR NORM REDUCTION ..........
  1723.   190 NOCONV = .FALSE.
  1724. C
  1725.       DO 270 I = K, L
  1726.          C = 0.0D0
  1727.          R = 0.0D0
  1728. C
  1729.          DO 200 J = K, L
  1730.             IF (J .EQ. I) GO TO 200
  1731.             C = C + DABS(AR(J,I)) + DABS(AI(J,I))
  1732.             R = R + DABS(AR(I,J)) + DABS(AI(I,J))
  1733.   200    CONTINUE
  1734. C     .......... GUARD AGAINST ZERO C OR R DUE TO UNDERFLOW ..........
  1735.          IF (C .EQ. 0.0D0 .OR. R .EQ. 0.0D0) GO TO 270
  1736.          G = R / RADIX
  1737.          F = 1.0D0
  1738.          S = C + R
  1739.   210    IF (C .GE. G) GO TO 220
  1740.          F = F * RADIX
  1741.          C = C * B2
  1742.          GO TO 210
  1743.   220    G = R * RADIX
  1744.   230    IF (C .LT. G) GO TO 240
  1745.          F = F / RADIX
  1746.          C = C / B2
  1747.          GO TO 230
  1748. C     .......... NOW BALANCE ..........
  1749.   240    IF ((C + R) / F .GE. 0.95D0 * S) GO TO 270
  1750.          G = 1.0D0 / F
  1751.          SCALE(I) = SCALE(I) * F
  1752.          NOCONV = .TRUE.
  1753. C
  1754.          DO 250 J = K, N
  1755.             AR(I,J) = AR(I,J) * G
  1756.             AI(I,J) = AI(I,J) * G
  1757.   250    CONTINUE
  1758. C
  1759.          DO 260 J = 1, L
  1760.             AR(J,I) = AR(J,I) * F
  1761.             AI(J,I) = AI(J,I) * F
  1762.   260    CONTINUE
  1763. C
  1764.   270 CONTINUE
  1765. C
  1766.       IF (NOCONV) GO TO 190
  1767. C
  1768.   280 LOW = K
  1769.       IGH = L
  1770.       RETURN
  1771.       END
  1772.       SUBROUTINE CG(NM,N,AR,AI,WR,WI,MATZ,ZR,ZI,FV1,FV2,FV3,IERR)
  1773. C
  1774.       INTEGER N,NM,IS1,IS2,IERR,MATZ
  1775.       DOUBLE PRECISION AR(NM,N),AI(NM,N),WR(N),WI(N),ZR(NM,N),ZI(NM,N),
  1776.      X       FV1(N),FV2(N),FV3(N)
  1777. C
  1778. C     THIS SUBROUTINE CALLS THE RECOMMENDED SEQUENCE OF
  1779. C     SUBROUTINES FROM THE EIGENSYSTEM SUBROUTINE PACKAGE (EISPACK)
  1780. C     TO FIND THE EIGENVALUES AND EIGENVECTORS (IF DESIRED)
  1781. C     OF A COMPLEX GENERAL MATRIX.
  1782. C
  1783. C     ON INPUT
  1784. C
  1785. C        NM  MUST BE SET TO THE ROW DIMENSION OF THE TWO-DIMENSIONAL
  1786. C        ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  1787. C        DIMENSION STATEMENT.
  1788. C
  1789. C        N  IS THE ORDER OF THE MATRIX  A=(AR,AI).
  1790. C
  1791. C        AR  AND  AI  CONTAIN THE REAL AND IMAGINARY PARTS,
  1792. C        RESPECTIVELY, OF THE COMPLEX GENERAL MATRIX.
  1793. C
  1794. C        MATZ  IS AN INTEGER VARIABLE SET EQUAL TO ZERO IF
  1795. C        ONLY EIGENVALUES ARE DESIRED.  OTHERWISE IT IS SET TO
  1796. C        ANY NON-ZERO INTEGER FOR BOTH EIGENVALUES AND EIGENVECTORS.
  1797. C
  1798. C     ON OUTPUT
  1799. C
  1800. C        WR  AND  WI  CONTAIN THE REAL AND IMAGINARY PARTS,
  1801. C        RESPECTIVELY, OF THE EIGENVALUES.
  1802. C
  1803. C        ZR  AND  ZI  CONTAIN THE REAL AND IMAGINARY PARTS,
  1804. C        RESPECTIVELY, OF THE EIGENVECTORS IF MATZ IS NOT ZERO.
  1805. C
  1806. C        IERR  IS AN INTEGER OUTPUT VARIABLE SET EQUAL TO AN ERROR
  1807. C           COMPLETION CODE DESCRIBED IN THE DOCUMENTATION FOR COMQR
  1808. C           AND COMQR2.  THE NORMAL COMPLETION CODE IS ZERO.
  1809. C
  1810. C        FV1, FV2, AND  FV3  ARE TEMPORARY STORAGE ARRAYS.
  1811. C
  1812. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  1813. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  1814. C
  1815. C     THIS VERSION DATED AUGUST 1983.
  1816. C
  1817. C     ------------------------------------------------------------------
  1818. C
  1819.       IF (N .LE. NM) GO TO 10
  1820.       IERR = 10 * N
  1821.       GO TO 50
  1822. C
  1823.    10 CALL  CBAL(NM,N,AR,AI,IS1,IS2,FV1)
  1824.       CALL  CORTH(NM,N,IS1,IS2,AR,AI,FV2,FV3)
  1825.       IF (MATZ .NE. 0) GO TO 20
  1826. C     .......... FIND EIGENVALUES ONLY ..........
  1827.       CALL  COMQR(NM,N,IS1,IS2,AR,AI,WR,WI,IERR)
  1828.       GO TO 50
  1829. C     .......... FIND BOTH EIGENVALUES AND EIGENVECTORS ..........
  1830.    20 CALL  COMQR2(NM,N,IS1,IS2,FV2,FV3,AR,AI,WR,WI,ZR,ZI,IERR)
  1831.       IF (IERR .NE. 0) GO TO 50
  1832.       CALL  CBABK2(NM,N,IS1,IS2,FV1,N,ZR,ZI)
  1833.    50 RETURN
  1834.       END
  1835.       SUBROUTINE CH(NM,N,AR,AI,W,MATZ,ZR,ZI,FV1,FV2,FM1,IERR)
  1836. C
  1837.       INTEGER I,J,N,NM,IERR,MATZ
  1838.       DOUBLE PRECISION AR(NM,N),AI(NM,N),W(N),ZR(NM,N),ZI(NM,N),
  1839.      X       FV1(N),FV2(N),FM1(2,N)
  1840. C
  1841. C     THIS SUBROUTINE CALLS THE RECOMMENDED SEQUENCE OF
  1842. C     SUBROUTINES FROM THE EIGENSYSTEM SUBROUTINE PACKAGE (EISPACK)
  1843. C     TO FIND THE EIGENVALUES AND EIGENVECTORS (IF DESIRED)
  1844. C     OF A COMPLEX HERMITIAN MATRIX.
  1845. C
  1846. C     ON INPUT
  1847. C
  1848. C        NM  MUST BE SET TO THE ROW DIMENSION OF THE TWO-DIMENSIONAL
  1849. C        ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  1850. C        DIMENSION STATEMENT.
  1851. C
  1852. C        N  IS THE ORDER OF THE MATRIX  A=(AR,AI).
  1853. C
  1854. C        AR  AND  AI  CONTAIN THE REAL AND IMAGINARY PARTS,
  1855. C        RESPECTIVELY, OF THE COMPLEX HERMITIAN MATRIX.
  1856. C
  1857. C        MATZ  IS AN INTEGER VARIABLE SET EQUAL TO ZERO IF
  1858. C        ONLY EIGENVALUES ARE DESIRED.  OTHERWISE IT IS SET TO
  1859. C        ANY NON-ZERO INTEGER FOR BOTH EIGENVALUES AND EIGENVECTORS.
  1860. C
  1861. C     ON OUTPUT
  1862. C
  1863. C        W  CONTAINS THE EIGENVALUES IN ASCENDING ORDER.
  1864. C
  1865. C        ZR  AND  ZI  CONTAIN THE REAL AND IMAGINARY PARTS,
  1866. C        RESPECTIVELY, OF THE EIGENVECTORS IF MATZ IS NOT ZERO.
  1867. C
  1868. C        IERR  IS AN INTEGER OUTPUT VARIABLE SET EQUAL TO AN ERROR
  1869. C           COMPLETION CODE DESCRIBED IN THE DOCUMENTATION FOR TQLRAT
  1870. C           AND TQL2.  THE NORMAL COMPLETION CODE IS ZERO.
  1871. C
  1872. C        FV1, FV2, AND  FM1  ARE TEMPORARY STORAGE ARRAYS.
  1873. C
  1874. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  1875. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  1876. C
  1877. C     THIS VERSION DATED AUGUST 1983.
  1878. C
  1879. C     ------------------------------------------------------------------
  1880. C
  1881.       IF (N .LE. NM) GO TO 10
  1882.       IERR = 10 * N
  1883.       GO TO 50
  1884. C
  1885.    10 CALL  HTRIDI(NM,N,AR,AI,W,FV1,FV2,FM1)
  1886.       IF (MATZ .NE. 0) GO TO 20
  1887. C     .......... FIND EIGENVALUES ONLY ..........
  1888.       CALL  TQLRAT(N,W,FV2,IERR)
  1889.       GO TO 50
  1890. C     .......... FIND BOTH EIGENVALUES AND EIGENVECTORS ..........
  1891.    20 DO 40 I = 1, N
  1892. C
  1893.          DO 30 J = 1, N
  1894.             ZR(J,I) = 0.0D0
  1895.    30    CONTINUE
  1896. C
  1897.          ZR(I,I) = 1.0D0
  1898.    40 CONTINUE
  1899. C
  1900.       CALL  TQL2(NM,N,W,FV1,ZR,IERR)
  1901.       IF (IERR .NE. 0) GO TO 50
  1902.       CALL  HTRIBK(NM,N,AR,AI,FM1,N,ZR,ZI)
  1903.    50 RETURN
  1904.       END
  1905.       SUBROUTINE CINVIT(NM,N,AR,AI,WR,WI,SELECT,MM,M,ZR,ZI,
  1906.      X                  IERR,RM1,RM2,RV1,RV2)
  1907. C
  1908.       INTEGER I,J,K,M,N,S,II,MM,MP,NM,UK,IP1,ITS,KM1,IERR
  1909.       DOUBLE PRECISION AR(NM,N),AI(NM,N),WR(N),WI(N),ZR(NM,MM),
  1910.      X       ZI(NM,MM),RM1(N,N),RM2(N,N),RV1(N),RV2(N)
  1911.       DOUBLE PRECISION X,Y,EPS3,NORM,NORMV,EPSLON,GROWTO,ILAMBD,PYTHAG,
  1912.      X       RLAMBD,UKROOT
  1913.       LOGICAL SELECT(N)
  1914. C
  1915. C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE CX INVIT
  1916. C     BY PETERS AND WILKINSON.
  1917. C     HANDBOOK FOR AUTO. COMP. VOL.II-LINEAR ALGEBRA, 418-439(1971).
  1918. C
  1919. C     THIS SUBROUTINE FINDS THOSE EIGENVECTORS OF A COMPLEX UPPER
  1920. C     HESSENBERG MATRIX CORRESPONDING TO SPECIFIED EIGENVALUES,
  1921. C     USING INVERSE ITERATION.
  1922. C
  1923. C     ON INPUT
  1924. C
  1925. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  1926. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  1927. C          DIMENSION STATEMENT.
  1928. C
  1929. C        N IS THE ORDER OF THE MATRIX.
  1930. C
  1931. C        AR AND AI CONTAIN THE REAL AND IMAGINARY PARTS,
  1932. C          RESPECTIVELY, OF THE HESSENBERG MATRIX.
  1933. C
  1934. C        WR AND WI CONTAIN THE REAL AND IMAGINARY PARTS, RESPECTIVELY,
  1935. C          OF THE EIGENVALUES OF THE MATRIX.  THE EIGENVALUES MUST BE
  1936. C          STORED IN A MANNER IDENTICAL TO THAT OF SUBROUTINE  COMLR,
  1937. C          WHICH RECOGNIZES POSSIBLE SPLITTING OF THE MATRIX.
  1938. C
  1939. C        SELECT SPECIFIES THE EIGENVECTORS TO BE FOUND.  THE
  1940. C          EIGENVECTOR CORRESPONDING TO THE J-TH EIGENVALUE IS
  1941. C          SPECIFIED BY SETTING SELECT(J) TO .TRUE..
  1942. C
  1943. C        MM SHOULD BE SET TO AN UPPER BOUND FOR THE NUMBER OF
  1944. C          EIGENVECTORS TO BE FOUND.
  1945. C
  1946. C     ON OUTPUT
  1947. C
  1948. C        AR, AI, WI, AND SELECT ARE UNALTERED.
  1949. C
  1950. C        WR MAY HAVE BEEN ALTERED SINCE CLOSE EIGENVALUES ARE PERTURBED
  1951. C          SLIGHTLY IN SEARCHING FOR INDEPENDENT EIGENVECTORS.
  1952. C
  1953. C        M IS THE NUMBER OF EIGENVECTORS ACTUALLY FOUND.
  1954. C
  1955. C        ZR AND ZI CONTAIN THE REAL AND IMAGINARY PARTS, RESPECTIVELY,
  1956. C          OF THE EIGENVECTORS.  THE EIGENVECTORS ARE NORMALIZED
  1957. C          SO THAT THE COMPONENT OF LARGEST MAGNITUDE IS 1.
  1958. C          ANY VECTOR WHICH FAILS THE ACCEPTANCE TEST IS SET TO ZERO.
  1959. C
  1960. C        IERR IS SET TO
  1961. C          ZERO       FOR NORMAL RETURN,
  1962. C          -(2*N+1)   IF MORE THAN MM EIGENVECTORS HAVE BEEN SPECIFIED,
  1963. C          -K         IF THE ITERATION CORRESPONDING TO THE K-TH
  1964. C                     VALUE FAILS,
  1965. C          -(N+K)     IF BOTH ERROR SITUATIONS OCCUR.
  1966. C
  1967. C        RM1, RM2, RV1, AND RV2 ARE TEMPORARY STORAGE ARRAYS.
  1968. C
  1969. C     THE ALGOL PROCEDURE GUESSVEC APPEARS IN CINVIT IN LINE.
  1970. C
  1971. C     CALLS CDIV FOR COMPLEX DIVISION.
  1972. C     CALLS PYTHAG FOR  DSQRT(A*A + B*B) .
  1973. C
  1974. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  1975. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  1976. C
  1977. C     THIS VERSION DATED AUGUST 1983.
  1978. C
  1979. C     ------------------------------------------------------------------
  1980. C
  1981.       IERR = 0
  1982.       UK = 0
  1983.       S = 1
  1984. C
  1985.       DO 980 K = 1, N
  1986.          IF (.NOT. SELECT(K)) GO TO 980
  1987.          IF (S .GT. MM) GO TO 1000
  1988.          IF (UK .GE. K) GO TO 200
  1989. C     .......... CHECK FOR POSSIBLE SPLITTING ..........
  1990.          DO 120 UK = K, N
  1991.             IF (UK .EQ. N) GO TO 140
  1992.             IF (AR(UK+1,UK) .EQ. 0.0D0 .AND. AI(UK+1,UK) .EQ. 0.0D0)
  1993.      X         GO TO 140
  1994.   120    CONTINUE
  1995. C     .......... COMPUTE INFINITY NORM OF LEADING UK BY UK
  1996. C                (HESSENBERG) MATRIX ..........
  1997.   140    NORM = 0.0D0
  1998.          MP = 1
  1999. C
  2000.          DO 180 I = 1, UK
  2001.             X = 0.0D0
  2002. C
  2003.             DO 160 J = MP, UK
  2004.   160       X = X + PYTHAG(AR(I,J),AI(I,J))
  2005. C
  2006.             IF (X .GT. NORM) NORM = X
  2007.             MP = I
  2008.   180    CONTINUE
  2009. C     .......... EPS3 REPLACES ZERO PIVOT IN DECOMPOSITION
  2010. C                AND CLOSE ROOTS ARE MODIFIED BY EPS3 ..........
  2011.          IF (NORM .EQ. 0.0D0) NORM = 1.0D0
  2012.          EPS3 = EPSLON(NORM)
  2013. C     .......... GROWTO IS THE CRITERION FOR GROWTH ..........
  2014.          UKROOT = UK
  2015.          UKROOT = DSQRT(UKROOT)
  2016.          GROWTO = 0.1D0 / UKROOT
  2017.   200    RLAMBD = WR(K)
  2018.          ILAMBD = WI(K)
  2019.          IF (K .EQ. 1) GO TO 280
  2020.          KM1 = K - 1
  2021.          GO TO 240
  2022. C     .......... PERTURB EIGENVALUE IF IT IS CLOSE
  2023. C                TO ANY PREVIOUS EIGENVALUE ..........
  2024.   220    RLAMBD = RLAMBD + EPS3
  2025. C     .......... FOR I=K-1 STEP -1 UNTIL 1 DO -- ..........
  2026.   240    DO 260 II = 1, KM1
  2027.             I = K - II
  2028.             IF (SELECT(I) .AND. DABS(WR(I)-RLAMBD) .LT. EPS3 .AND.
  2029.      X         DABS(WI(I)-ILAMBD) .LT. EPS3) GO TO 220
  2030.   260    CONTINUE
  2031. C
  2032.          WR(K) = RLAMBD
  2033. C     .......... FORM UPPER HESSENBERG (AR,AI)-(RLAMBD,ILAMBD)*I
  2034. C                AND INITIAL COMPLEX VECTOR ..........
  2035.   280    MP = 1
  2036. C
  2037.          DO 320 I = 1, UK
  2038. C
  2039.             DO 300 J = MP, UK
  2040.                RM1(I,J) = AR(I,J)
  2041.                RM2(I,J) = AI(I,J)
  2042.   300       CONTINUE
  2043. C
  2044.             RM1(I,I) = RM1(I,I) - RLAMBD
  2045.             RM2(I,I) = RM2(I,I) - ILAMBD
  2046.             MP = I
  2047.             RV1(I) = EPS3
  2048.   320    CONTINUE
  2049. C     .......... TRIANGULAR DECOMPOSITION WITH INTERCHANGES,
  2050. C                REPLACING ZERO PIVOTS BY EPS3 ..........
  2051.          IF (UK .EQ. 1) GO TO 420
  2052. C
  2053.          DO 400 I = 2, UK
  2054.             MP = I - 1
  2055.             IF (PYTHAG(RM1(I,MP),RM2(I,MP)) .LE.
  2056.      X          PYTHAG(RM1(MP,MP),RM2(MP,MP))) GO TO 360
  2057. C
  2058.             DO 340 J = MP, UK
  2059.                Y = RM1(I,J)
  2060.                RM1(I,J) = RM1(MP,J)
  2061.                RM1(MP,J) = Y
  2062.                Y = RM2(I,J)
  2063.                RM2(I,J) = RM2(MP,J)
  2064.                RM2(MP,J) = Y
  2065.   340       CONTINUE
  2066. C
  2067.   360       IF (RM1(MP,MP) .EQ. 0.0D0 .AND. RM2(MP,MP) .EQ. 0.0D0)
  2068.      X         RM1(MP,MP) = EPS3
  2069.             CALL CDIV(RM1(I,MP),RM2(I,MP),RM1(MP,MP),RM2(MP,MP),X,Y)
  2070.             IF (X .EQ. 0.0D0 .AND. Y .EQ. 0.0D0) GO TO 400
  2071. C
  2072.             DO 380 J = I, UK
  2073.                RM1(I,J) = RM1(I,J) - X * RM1(MP,J) + Y * RM2(MP,J)
  2074.                RM2(I,J) = RM2(I,J) - X * RM2(MP,J) - Y * RM1(MP,J)
  2075.   380       CONTINUE
  2076. C
  2077.   400    CONTINUE
  2078. C
  2079.   420    IF (RM1(UK,UK) .EQ. 0.0D0 .AND. RM2(UK,UK) .EQ. 0.0D0)
  2080.      X      RM1(UK,UK) = EPS3
  2081.          ITS = 0
  2082. C     .......... BACK SUBSTITUTION
  2083. C                FOR I=UK STEP -1 UNTIL 1 DO -- ..........
  2084.   660    DO 720 II = 1, UK
  2085.             I = UK + 1 - II
  2086.             X = RV1(I)
  2087.             Y = 0.0D0
  2088.             IF (I .EQ. UK) GO TO 700
  2089.             IP1 = I + 1
  2090. C
  2091.             DO 680 J = IP1, UK
  2092.                X = X - RM1(I,J) * RV1(J) + RM2(I,J) * RV2(J)
  2093.                Y = Y - RM1(I,J) * RV2(J) - RM2(I,J) * RV1(J)
  2094.   680       CONTINUE
  2095. C
  2096.   700       CALL CDIV(X,Y,RM1(I,I),RM2(I,I),RV1(I),RV2(I))
  2097.   720    CONTINUE
  2098. C     .......... ACCEPTANCE TEST FOR EIGENVECTOR
  2099. C                AND NORMALIZATION ..........
  2100.          ITS = ITS + 1
  2101.          NORM = 0.0D0
  2102.          NORMV = 0.0D0
  2103. C
  2104.          DO 780 I = 1, UK
  2105.             X = PYTHAG(RV1(I),RV2(I))
  2106.             IF (NORMV .GE. X) GO TO 760
  2107.             NORMV = X
  2108.             J = I
  2109.   760       NORM = NORM + X
  2110.   780    CONTINUE
  2111. C
  2112.          IF (NORM .LT. GROWTO) GO TO 840
  2113. C     .......... ACCEPT VECTOR ..........
  2114.          X = RV1(J)
  2115.          Y = RV2(J)
  2116. C
  2117.          DO 820 I = 1, UK
  2118.             CALL CDIV(RV1(I),RV2(I),X,Y,ZR(I,S),ZI(I,S))
  2119.   820    CONTINUE
  2120. C
  2121.          IF (UK .EQ. N) GO TO 940
  2122.          J = UK + 1
  2123.          GO TO 900
  2124. C     .......... IN-LINE PROCEDURE FOR CHOOSING
  2125. C                A NEW STARTING VECTOR ..........
  2126.   840    IF (ITS .GE. UK) GO TO 880
  2127.          X = UKROOT
  2128.          Y = EPS3 / (X + 1.0D0)
  2129.          RV1(1) = EPS3
  2130. C
  2131.          DO 860 I = 2, UK
  2132.   860    RV1(I) = Y
  2133. C
  2134.          J = UK - ITS + 1
  2135.          RV1(J) = RV1(J) - EPS3 * X
  2136.          GO TO 660
  2137. C     .......... SET ERROR -- UNACCEPTED EIGENVECTOR ..........
  2138.   880    J = 1
  2139.          IERR = -K
  2140. C     .......... SET REMAINING VECTOR COMPONENTS TO ZERO ..........
  2141.   900    DO 920 I = J, N
  2142.             ZR(I,S) = 0.0D0
  2143.             ZI(I,S) = 0.0D0
  2144.   920    CONTINUE
  2145. C
  2146.   940    S = S + 1
  2147.   980 CONTINUE
  2148. C
  2149.       GO TO 1001
  2150. C     .......... SET ERROR -- UNDERESTIMATE OF EIGENVECTOR
  2151. C                SPACE REQUIRED ..........
  2152.  1000 IF (IERR .NE. 0) IERR = IERR - N
  2153.       IF (IERR .EQ. 0) IERR = -(2 * N + 1)
  2154.  1001 M = S - 1
  2155.       RETURN
  2156.       END
  2157.       SUBROUTINE COMBAK(NM,LOW,IGH,AR,AI,INT,M,ZR,ZI)
  2158. C
  2159.       INTEGER I,J,M,LA,MM,MP,NM,IGH,KP1,LOW,MP1
  2160.       DOUBLE PRECISION AR(NM,IGH),AI(NM,IGH),ZR(NM,M),ZI(NM,M)
  2161.       DOUBLE PRECISION XR,XI
  2162.       INTEGER INT(IGH)
  2163. C
  2164. C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE COMBAK,
  2165. C     NUM. MATH. 12, 349-368(1968) BY MARTIN AND WILKINSON.
  2166. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 339-358(1971).
  2167. C
  2168. C     THIS SUBROUTINE FORMS THE EIGENVECTORS OF A COMPLEX GENERAL
  2169. C     MATRIX BY BACK TRANSFORMING THOSE OF THE CORRESPONDING
  2170. C     UPPER HESSENBERG MATRIX DETERMINED BY  COMHES.
  2171. C
  2172. C     ON INPUT
  2173. C
  2174. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  2175. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  2176. C          DIMENSION STATEMENT.
  2177. C
  2178. C        LOW AND IGH ARE INTEGERS DETERMINED BY THE BALANCING
  2179. C          SUBROUTINE  CBAL.  IF  CBAL  HAS NOT BEEN USED,
  2180. C          SET LOW=1 AND IGH EQUAL TO THE ORDER OF THE MATRIX.
  2181. C
  2182. C        AR AND AI CONTAIN THE MULTIPLIERS WHICH WERE USED IN THE
  2183. C          REDUCTION BY  COMHES  IN THEIR LOWER TRIANGLES
  2184. C          BELOW THE SUBDIAGONAL.
  2185. C
  2186. C        INT CONTAINS INFORMATION ON THE ROWS AND COLUMNS
  2187. C          INTERCHANGED IN THE REDUCTION BY  COMHES.
  2188. C          ONLY ELEMENTS LOW THROUGH IGH ARE USED.
  2189. C
  2190. C        M IS THE NUMBER OF EIGENVECTORS TO BE BACK TRANSFORMED.
  2191. C
  2192. C        ZR AND ZI CONTAIN THE REAL AND IMAGINARY PARTS,
  2193. C          RESPECTIVELY, OF THE EIGENVECTORS TO BE
  2194. C          BACK TRANSFORMED IN THEIR FIRST M COLUMNS.
  2195. C
  2196. C     ON OUTPUT
  2197. C
  2198. C        ZR AND ZI CONTAIN THE REAL AND IMAGINARY PARTS,
  2199. C          RESPECTIVELY, OF THE TRANSFORMED EIGENVECTORS
  2200. C          IN THEIR FIRST M COLUMNS.
  2201. C
  2202. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  2203. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  2204. C
  2205. C     THIS VERSION DATED AUGUST 1983.
  2206. C
  2207. C     ------------------------------------------------------------------
  2208. C
  2209.       IF (M .EQ. 0) GO TO 200
  2210.       LA = IGH - 1
  2211.       KP1 = LOW + 1
  2212.       IF (LA .LT. KP1) GO TO 200
  2213. C     .......... FOR MP=IGH-1 STEP -1 UNTIL LOW+1 DO -- ..........
  2214.       DO 140 MM = KP1, LA
  2215.          MP = LOW + IGH - MM
  2216.          MP1 = MP + 1
  2217. C
  2218.          DO 110 I = MP1, IGH
  2219.             XR = AR(I,MP-1)
  2220.             XI = AI(I,MP-1)
  2221.             IF (XR .EQ. 0.0D0 .AND. XI .EQ. 0.0D0) GO TO 110
  2222. C
  2223.             DO 100 J = 1, M
  2224.                ZR(I,J) = ZR(I,J) + XR * ZR(MP,J) - XI * ZI(MP,J)
  2225.                ZI(I,J) = ZI(I,J) + XR * ZI(MP,J) + XI * ZR(MP,J)
  2226.   100       CONTINUE
  2227. C
  2228.   110    CONTINUE
  2229. C
  2230.          I = INT(MP)
  2231.          IF (I .EQ. MP) GO TO 140
  2232. C
  2233.          DO 130 J = 1, M
  2234.             XR = ZR(I,J)
  2235.             ZR(I,J) = ZR(MP,J)
  2236.             ZR(MP,J) = XR
  2237.             XI = ZI(I,J)
  2238.             ZI(I,J) = ZI(MP,J)
  2239.             ZI(MP,J) = XI
  2240.   130    CONTINUE
  2241. C
  2242.   140 CONTINUE
  2243. C
  2244.   200 RETURN
  2245.       END
  2246.       SUBROUTINE COMHES(NM,N,LOW,IGH,AR,AI,INT)
  2247. C
  2248.       INTEGER I,J,M,N,LA,NM,IGH,KP1,LOW,MM1,MP1
  2249.       DOUBLE PRECISION AR(NM,N),AI(NM,N)
  2250.       DOUBLE PRECISION XR,XI,YR,YI
  2251.       INTEGER INT(IGH)
  2252. C
  2253. C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE COMHES,
  2254. C     NUM. MATH. 12, 349-368(1968) BY MARTIN AND WILKINSON.
  2255. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 339-358(1971).
  2256. C
  2257. C     GIVEN A COMPLEX GENERAL MATRIX, THIS SUBROUTINE
  2258. C     REDUCES A SUBMATRIX SITUATED IN ROWS AND COLUMNS
  2259. C     LOW THROUGH IGH TO UPPER HESSENBERG FORM BY
  2260. C     STABILIZED ELEMENTARY SIMILARITY TRANSFORMATIONS.
  2261. C
  2262. C     ON INPUT
  2263. C
  2264. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  2265. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  2266. C          DIMENSION STATEMENT.
  2267. C
  2268. C        N IS THE ORDER OF THE MATRIX.
  2269. C
  2270. C        LOW AND IGH ARE INTEGERS DETERMINED BY THE BALANCING
  2271. C          SUBROUTINE  CBAL.  IF  CBAL  HAS NOT BEEN USED,
  2272. C          SET LOW=1, IGH=N.
  2273. C
  2274. C        AR AND AI CONTAIN THE REAL AND IMAGINARY PARTS,
  2275. C          RESPECTIVELY, OF THE COMPLEX INPUT MATRIX.
  2276. C
  2277. C     ON OUTPUT
  2278. C
  2279. C        AR AND AI CONTAIN THE REAL AND IMAGINARY PARTS,
  2280. C          RESPECTIVELY, OF THE HESSENBERG MATRIX.  THE
  2281. C          MULTIPLIERS WHICH WERE USED IN THE REDUCTION
  2282. C          ARE STORED IN THE REMAINING TRIANGLES UNDER THE
  2283. C          HESSENBERG MATRIX.
  2284. C
  2285. C        INT CONTAINS INFORMATION ON THE ROWS AND COLUMNS
  2286. C          INTERCHANGED IN THE REDUCTION.
  2287. C          ONLY ELEMENTS LOW THROUGH IGH ARE USED.
  2288. C
  2289. C     CALLS CDIV FOR COMPLEX DIVISION.
  2290. C
  2291. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  2292. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  2293. C
  2294. C     THIS VERSION DATED AUGUST 1983.
  2295. C
  2296. C     ------------------------------------------------------------------
  2297. C
  2298.       LA = IGH - 1
  2299.       KP1 = LOW + 1
  2300.       IF (LA .LT. KP1) GO TO 200
  2301. C
  2302.       DO 180 M = KP1, LA
  2303.          MM1 = M - 1
  2304.          XR = 0.0D0
  2305.          XI = 0.0D0
  2306.          I = M
  2307. C
  2308.          DO 100 J = M, IGH
  2309.             IF (DABS(AR(J,MM1)) + DABS(AI(J,MM1))
  2310.      X         .LE. DABS(XR) + DABS(XI)) GO TO 100
  2311.             XR = AR(J,MM1)
  2312.             XI = AI(J,MM1)
  2313.             I = J
  2314.   100    CONTINUE
  2315. C
  2316.          INT(M) = I
  2317.          IF (I .EQ. M) GO TO 130
  2318. C     .......... INTERCHANGE ROWS AND COLUMNS OF AR AND AI ..........
  2319.          DO 110 J = MM1, N
  2320.             YR = AR(I,J)
  2321.             AR(I,J) = AR(M,J)
  2322.             AR(M,J) = YR
  2323.             YI = AI(I,J)
  2324.             AI(I,J) = AI(M,J)
  2325.             AI(M,J) = YI
  2326.   110    CONTINUE
  2327. C
  2328.          DO 120 J = 1, IGH
  2329.             YR = AR(J,I)
  2330.             AR(J,I) = AR(J,M)
  2331.             AR(J,M) = YR
  2332.             YI = AI(J,I)
  2333.             AI(J,I) = AI(J,M)
  2334.             AI(J,M) = YI
  2335.   120    CONTINUE
  2336. C     .......... END INTERCHANGE ..........
  2337.   130    IF (XR .EQ. 0.0D0 .AND. XI .EQ. 0.0D0) GO TO 180
  2338.          MP1 = M + 1
  2339. C
  2340.          DO 160 I = MP1, IGH
  2341.             YR = AR(I,MM1)
  2342.             YI = AI(I,MM1)
  2343.             IF (YR .EQ. 0.0D0 .AND. YI .EQ. 0.0D0) GO TO 160
  2344.             CALL CDIV(YR,YI,XR,XI,YR,YI)
  2345.             AR(I,MM1) = YR
  2346.             AI(I,MM1) = YI
  2347. C
  2348.             DO 140 J = M, N
  2349.                AR(I,J) = AR(I,J) - YR * AR(M,J) + YI * AI(M,J)
  2350.                AI(I,J) = AI(I,J) - YR * AI(M,J) - YI * AR(M,J)
  2351.   140       CONTINUE
  2352. C
  2353.             DO 150 J = 1, IGH
  2354.                AR(J,M) = AR(J,M) + YR * AR(J,I) - YI * AI(J,I)
  2355.                AI(J,M) = AI(J,M) + YR * AI(J,I) + YI * AR(J,I)
  2356.   150       CONTINUE
  2357. C
  2358.   160    CONTINUE
  2359. C
  2360.   180 CONTINUE
  2361. C
  2362.   200 RETURN
  2363.       END
  2364.       SUBROUTINE COMLR(NM,N,LOW,IGH,HR,HI,WR,WI,IERR)
  2365. C
  2366.       INTEGER I,J,L,M,N,EN,LL,MM,NM,IGH,IM1,ITN,ITS,LOW,MP1,ENM1,IERR
  2367.       DOUBLE PRECISION HR(NM,N),HI(NM,N),WR(N),WI(N)
  2368.       DOUBLE PRECISION SI,SR,TI,TR,XI,XR,YI,YR,ZZI,ZZR,TST1,TST2
  2369. C
  2370. C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE COMLR,
  2371. C     NUM. MATH. 12, 369-376(1968) BY MARTIN AND WILKINSON.
  2372. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 396-403(1971).
  2373. C
  2374. C     THIS SUBROUTINE FINDS THE EIGENVALUES OF A COMPLEX
  2375. C     UPPER HESSENBERG MATRIX BY THE MODIFIED LR METHOD.
  2376. C
  2377. C     ON INPUT
  2378. C
  2379. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  2380. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  2381. C          DIMENSION STATEMENT.
  2382. C
  2383. C        N IS THE ORDER OF THE MATRIX.
  2384. C
  2385. C        LOW AND IGH ARE INTEGERS DETERMINED BY THE BALANCING
  2386. C          SUBROUTINE  CBAL.  IF  CBAL  HAS NOT BEEN USED,
  2387. C          SET LOW=1, IGH=N.
  2388. C
  2389. C        HR AND HI CONTAIN THE REAL AND IMAGINARY PARTS,
  2390. C          RESPECTIVELY, OF THE COMPLEX UPPER HESSENBERG MATRIX.
  2391. C          THEIR LOWER TRIANGLES BELOW THE SUBDIAGONAL CONTAIN THE
  2392. C          MULTIPLIERS WHICH WERE USED IN THE REDUCTION BY  COMHES,
  2393. C          IF PERFORMED.
  2394. C
  2395. C     ON OUTPUT
  2396. C
  2397. C        THE UPPER HESSENBERG PORTIONS OF HR AND HI HAVE BEEN
  2398. C          DESTROYED.  THEREFORE, THEY MUST BE SAVED BEFORE
  2399. C          CALLING  COMLR  IF SUBSEQUENT CALCULATION OF
  2400. C          EIGENVECTORS IS TO BE PERFORMED.
  2401. C
  2402. C        WR AND WI CONTAIN THE REAL AND IMAGINARY PARTS,
  2403. C          RESPECTIVELY, OF THE EIGENVALUES.  IF AN ERROR
  2404. C          EXIT IS MADE, THE EIGENVALUES SHOULD BE CORRECT
  2405. C          FOR INDICES IERR+1,...,N.
  2406. C
  2407. C        IERR IS SET TO
  2408. C          ZERO       FOR NORMAL RETURN,
  2409. C          J          IF THE LIMIT OF 30*N ITERATIONS IS EXHAUSTED
  2410. C                     WHILE THE J-TH EIGENVALUE IS BEING SOUGHT.
  2411. C
  2412. C     CALLS CDIV FOR COMPLEX DIVISION.
  2413. C     CALLS CSROOT FOR COMPLEX SQUARE ROOT.
  2414. C
  2415. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  2416. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  2417. C
  2418. C     THIS VERSION DATED AUGUST 1983.
  2419. C
  2420. C     ------------------------------------------------------------------
  2421. C
  2422.       IERR = 0
  2423. C     .......... STORE ROOTS ISOLATED BY CBAL ..........
  2424.       DO 200 I = 1, N
  2425.          IF (I .GE. LOW .AND. I .LE. IGH) GO TO 200
  2426.          WR(I) = HR(I,I)
  2427.          WI(I) = HI(I,I)
  2428.   200 CONTINUE
  2429. C
  2430.       EN = IGH
  2431.       TR = 0.0D0
  2432.       TI = 0.0D0
  2433.       ITN = 30*N
  2434. C     .......... SEARCH FOR NEXT EIGENVALUE ..........
  2435.   220 IF (EN .LT. LOW) GO TO 1001
  2436.       ITS = 0
  2437.       ENM1 = EN - 1
  2438. C     .......... LOOK FOR SINGLE SMALL SUB-DIAGONAL ELEMENT
  2439. C                FOR L=EN STEP -1 UNTIL LOW D0 -- ..........
  2440.   240 DO 260 LL = LOW, EN
  2441.          L = EN + LOW - LL
  2442.          IF (L .EQ. LOW) GO TO 300
  2443.          TST1 = DABS(HR(L-1,L-1)) + DABS(HI(L-1,L-1))
  2444.      X            + DABS(HR(L,L)) + DABS(HI(L,L))
  2445.          TST2 = TST1 + DABS(HR(L,L-1)) + DABS(HI(L,L-1))
  2446.          IF (TST2 .EQ. TST1) GO TO 300
  2447.   260 CONTINUE
  2448. C     .......... FORM SHIFT ..........
  2449.   300 IF (L .EQ. EN) GO TO 660
  2450.       IF (ITN .EQ. 0) GO TO 1000
  2451.       IF (ITS .EQ. 10 .OR. ITS .EQ. 20) GO TO 320
  2452.       SR = HR(EN,EN)
  2453.       SI = HI(EN,EN)
  2454.       XR = HR(ENM1,EN) * HR(EN,ENM1) - HI(ENM1,EN) * HI(EN,ENM1)
  2455.       XI = HR(ENM1,EN) * HI(EN,ENM1) + HI(ENM1,EN) * HR(EN,ENM1)
  2456.       IF (XR .EQ. 0.0D0 .AND. XI .EQ. 0.0D0) GO TO 340
  2457.       YR = (HR(ENM1,ENM1) - SR) / 2.0D0
  2458.       YI = (HI(ENM1,ENM1) - SI) / 2.0D0
  2459.       CALL CSROOT(YR**2-YI**2+XR,2.0D0*YR*YI+XI,ZZR,ZZI)
  2460.       IF (YR * ZZR + YI * ZZI .GE. 0.0D0) GO TO 310
  2461.       ZZR = -ZZR
  2462.       ZZI = -ZZI
  2463.   310 CALL CDIV(XR,XI,YR+ZZR,YI+ZZI,XR,XI)
  2464.       SR = SR - XR
  2465.       SI = SI - XI
  2466.       GO TO 340
  2467. C     .......... FORM EXCEPTIONAL SHIFT ..........
  2468.   320 SR = DABS(HR(EN,ENM1)) + DABS(HR(ENM1,EN-2))
  2469.       SI = DABS(HI(EN,ENM1)) + DABS(HI(ENM1,EN-2))
  2470. C
  2471.   340 DO 360 I = LOW, EN
  2472.          HR(I,I) = HR(I,I) - SR
  2473.          HI(I,I) = HI(I,I) - SI
  2474.   360 CONTINUE
  2475. C
  2476.       TR = TR + SR
  2477.       TI = TI + SI
  2478.       ITS = ITS + 1
  2479.       ITN = ITN - 1
  2480. C     .......... LOOK FOR TWO CONSECUTIVE SMALL
  2481. C                SUB-DIAGONAL ELEMENTS ..........
  2482.       XR = DABS(HR(ENM1,ENM1)) + DABS(HI(ENM1,ENM1))
  2483.       YR = DABS(HR(EN,ENM1)) + DABS(HI(EN,ENM1))
  2484.       ZZR = DABS(HR(EN,EN)) + DABS(HI(EN,EN))
  2485. C     .......... FOR M=EN-1 STEP -1 UNTIL L DO -- ..........
  2486.       DO 380 MM = L, ENM1
  2487.          M = ENM1 + L - MM
  2488.          IF (M .EQ. L) GO TO 420
  2489.          YI = YR
  2490.          YR = DABS(HR(M,M-1)) + DABS(HI(M,M-1))
  2491.          XI = ZZR
  2492.          ZZR = XR
  2493.          XR = DABS(HR(M-1,M-1)) + DABS(HI(M-1,M-1))
  2494.          TST1 = ZZR / YI * (ZZR + XR + XI)
  2495.          TST2 = TST1 + YR
  2496.          IF (TST2 .EQ. TST1) GO TO 420
  2497.   380 CONTINUE
  2498. C     .......... TRIANGULAR DECOMPOSITION H=L*R ..........
  2499.   420 MP1 = M + 1
  2500. C
  2501.       DO 520 I = MP1, EN
  2502.          IM1 = I - 1
  2503.          XR = HR(IM1,IM1)
  2504.          XI = HI(IM1,IM1)
  2505.          YR = HR(I,IM1)
  2506.          YI = HI(I,IM1)
  2507.          IF (DABS(XR) + DABS(XI) .GE. DABS(YR) + DABS(YI)) GO TO 460
  2508. C     .......... INTERCHANGE ROWS OF HR AND HI ..........
  2509.          DO 440 J = IM1, EN
  2510.             ZZR = HR(IM1,J)
  2511.             HR(IM1,J) = HR(I,J)
  2512.             HR(I,J) = ZZR
  2513.             ZZI = HI(IM1,J)
  2514.             HI(IM1,J) = HI(I,J)
  2515.             HI(I,J) = ZZI
  2516.   440    CONTINUE
  2517. C
  2518.          CALL CDIV(XR,XI,YR,YI,ZZR,ZZI)
  2519.          WR(I) = 1.0D0
  2520.          GO TO 480
  2521.   460    CALL CDIV(YR,YI,XR,XI,ZZR,ZZI)
  2522.          WR(I) = -1.0D0
  2523.   480    HR(I,IM1) = ZZR
  2524.          HI(I,IM1) = ZZI
  2525. C
  2526.          DO 500 J = I, EN
  2527.             HR(I,J) = HR(I,J) - ZZR * HR(IM1,J) + ZZI * HI(IM1,J)
  2528.             HI(I,J) = HI(I,J) - ZZR * HI(IM1,J) - ZZI * HR(IM1,J)
  2529.   500    CONTINUE
  2530. C
  2531.   520 CONTINUE
  2532. C     .......... COMPOSITION R*L=H ..........
  2533.       DO 640 J = MP1, EN
  2534.          XR = HR(J,J-1)
  2535.          XI = HI(J,J-1)
  2536.          HR(J,J-1) = 0.0D0
  2537.          HI(J,J-1) = 0.0D0
  2538. C     .......... INTERCHANGE COLUMNS OF HR AND HI,
  2539. C                IF NECESSARY ..........
  2540.          IF (WR(J) .LE. 0.0D0) GO TO 580
  2541. C
  2542.          DO 540 I = L, J
  2543.             ZZR = HR(I,J-1)
  2544.             HR(I,J-1) = HR(I,J)
  2545.             HR(I,J) = ZZR
  2546.             ZZI = HI(I,J-1)
  2547.             HI(I,J-1) = HI(I,J)
  2548.             HI(I,J) = ZZI
  2549.   540    CONTINUE
  2550. C
  2551.   580    DO 600 I = L, J
  2552.             HR(I,J-1) = HR(I,J-1) + XR * HR(I,J) - XI * HI(I,J)
  2553.             HI(I,J-1) = HI(I,J-1) + XR * HI(I,J) + XI * HR(I,J)
  2554.   600    CONTINUE
  2555. C
  2556.   640 CONTINUE
  2557. C
  2558.       GO TO 240
  2559. C     .......... A ROOT FOUND ..........
  2560.   660 WR(EN) = HR(EN,EN) + TR
  2561.       WI(EN) = HI(EN,EN) + TI
  2562.       EN = ENM1
  2563.       GO TO 220
  2564. C     .......... SET ERROR -- ALL EIGENVALUES HAVE NOT
  2565. C                CONVERGED AFTER 30*N ITERATIONS ..........
  2566.  1000 IERR = EN
  2567.  1001 RETURN
  2568.       END
  2569.       SUBROUTINE COMLR2(NM,N,LOW,IGH,INT,HR,HI,WR,WI,ZR,ZI,IERR)
  2570. C
  2571.       INTEGER I,J,K,L,M,N,EN,II,JJ,LL,MM,NM,NN,IGH,IM1,IP1,
  2572.      X        ITN,ITS,LOW,MP1,ENM1,IEND,IERR
  2573.       DOUBLE PRECISION HR(NM,N),HI(NM,N),WR(N),WI(N),ZR(NM,N),ZI(NM,N)
  2574.       DOUBLE PRECISION SI,SR,TI,TR,XI,XR,YI,YR,ZZI,ZZR,NORM,TST1,TST2
  2575.       INTEGER INT(IGH)
  2576. C
  2577. C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE COMLR2,
  2578. C     NUM. MATH. 16, 181-204(1970) BY PETERS AND WILKINSON.
  2579. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 372-395(1971).
  2580. C
  2581. C     THIS SUBROUTINE FINDS THE EIGENVALUES AND EIGENVECTORS
  2582. C     OF A COMPLEX UPPER HESSENBERG MATRIX BY THE MODIFIED LR
  2583. C     METHOD.  THE EIGENVECTORS OF A COMPLEX GENERAL MATRIX
  2584. C     CAN ALSO BE FOUND IF  COMHES  HAS BEEN USED TO REDUCE
  2585. C     THIS GENERAL MATRIX TO HESSENBERG FORM.
  2586. C
  2587. C     ON INPUT
  2588. C
  2589. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  2590. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  2591. C          DIMENSION STATEMENT.
  2592. C
  2593. C        N IS THE ORDER OF THE MATRIX.
  2594. C
  2595. C        LOW AND IGH ARE INTEGERS DETERMINED BY THE BALANCING
  2596. C          SUBROUTINE  CBAL.  IF  CBAL  HAS NOT BEEN USED,
  2597. C          SET LOW=1, IGH=N.
  2598. C
  2599. C        INT CONTAINS INFORMATION ON THE ROWS AND COLUMNS INTERCHANGED
  2600. C          IN THE REDUCTION BY  COMHES, IF PERFORMED.  ONLY ELEMENTS
  2601. C          LOW THROUGH IGH ARE USED.  IF THE EIGENVECTORS OF THE HESSEN-
  2602. C          BERG MATRIX ARE DESIRED, SET INT(J)=J FOR THESE ELEMENTS.
  2603. C
  2604. C        HR AND HI CONTAIN THE REAL AND IMAGINARY PARTS,
  2605. C          RESPECTIVELY, OF THE COMPLEX UPPER HESSENBERG MATRIX.
  2606. C          THEIR LOWER TRIANGLES BELOW THE SUBDIAGONAL CONTAIN THE
  2607. C          MULTIPLIERS WHICH WERE USED IN THE REDUCTION BY  COMHES,
  2608. C          IF PERFORMED.  IF THE EIGENVECTORS OF THE HESSENBERG
  2609. C          MATRIX ARE DESIRED, THESE ELEMENTS MUST BE SET TO ZERO.
  2610. C
  2611. C     ON OUTPUT
  2612. C
  2613. C        THE UPPER HESSENBERG PORTIONS OF HR AND HI HAVE BEEN
  2614. C          DESTROYED, BUT THE LOCATION HR(1,1) CONTAINS THE NORM
  2615. C          OF THE TRIANGULARIZED MATRIX.
  2616. C
  2617. C        WR AND WI CONTAIN THE REAL AND IMAGINARY PARTS,
  2618. C          RESPECTIVELY, OF THE EIGENVALUES.  IF AN ERROR
  2619. C          EXIT IS MADE, THE EIGENVALUES SHOULD BE CORRECT
  2620. C          FOR INDICES IERR+1,...,N.
  2621. C
  2622. C        ZR AND ZI CONTAIN THE REAL AND IMAGINARY PARTS,
  2623. C          RESPECTIVELY, OF THE EIGENVECTORS.  THE EIGENVECTORS
  2624. C          ARE UNNORMALIZED.  IF AN ERROR EXIT IS MADE, NONE OF
  2625. C          THE EIGENVECTORS HAS BEEN FOUND.
  2626. C
  2627. C        IERR IS SET TO
  2628. C          ZERO       FOR NORMAL RETURN,
  2629. C          J          IF THE LIMIT OF 30*N ITERATIONS IS EXHAUSTED
  2630. C                     WHILE THE J-TH EIGENVALUE IS BEING SOUGHT.
  2631. C
  2632. C     
  2633. C     CALLS CDIV FOR COMPLEX DIVISION.
  2634. C     CALLS CSROOT FOR COMPLEX SQUARE ROOT.
  2635. C
  2636. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  2637. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  2638. C
  2639. C     THIS VERSION DATED AUGUST 1983.
  2640. C
  2641. C     ------------------------------------------------------------------
  2642. C
  2643.       IERR = 0
  2644. C     .......... INITIALIZE EIGENVECTOR MATRIX ..........
  2645.       DO 100 I = 1, N
  2646. C
  2647.          DO 100 J = 1, N
  2648.             ZR(I,J) = 0.0D0
  2649.             ZI(I,J) = 0.0D0
  2650.             IF (I .EQ. J) ZR(I,J) = 1.0D0
  2651.   100 CONTINUE
  2652. C     .......... FORM THE MATRIX OF ACCUMULATED TRANSFORMATIONS
  2653. C                FROM THE INFORMATION LEFT BY COMHES ..........
  2654.       IEND = IGH - LOW - 1
  2655.       IF (IEND .LE. 0) GO TO 180
  2656. C     .......... FOR I=IGH-1 STEP -1 UNTIL LOW+1 DO -- ..........
  2657.       DO 160 II = 1, IEND
  2658.          I = IGH - II
  2659.          IP1 = I + 1
  2660. C
  2661.          DO 120 K = IP1, IGH
  2662.             ZR(K,I) = HR(K,I-1)
  2663.             ZI(K,I) = HI(K,I-1)
  2664.   120    CONTINUE
  2665. C
  2666.          J = INT(I)
  2667.          IF (I .EQ. J) GO TO 160
  2668. C
  2669.          DO 140 K = I, IGH
  2670.             ZR(I,K) = ZR(J,K)
  2671.             ZI(I,K) = ZI(J,K)
  2672.             ZR(J,K) = 0.0D0
  2673.             ZI(J,K) = 0.0D0
  2674.   140    CONTINUE
  2675. C
  2676.          ZR(J,I) = 1.0D0
  2677.   160 CONTINUE
  2678. C     .......... STORE ROOTS ISOLATED BY CBAL ..........
  2679.   180 DO 200 I = 1, N
  2680.          IF (I .GE. LOW .AND. I .LE. IGH) GO TO 200
  2681.          WR(I) = HR(I,I)
  2682.          WI(I) = HI(I,I)
  2683.   200 CONTINUE
  2684. C
  2685.       EN = IGH
  2686.       TR = 0.0D0
  2687.       TI = 0.0D0
  2688.       ITN = 30*N
  2689. C     .......... SEARCH FOR NEXT EIGENVALUE ..........
  2690.   220 IF (EN .LT. LOW) GO TO 680
  2691.       ITS = 0
  2692.       ENM1 = EN - 1
  2693. C     .......... LOOK FOR SINGLE SMALL SUB-DIAGONAL ELEMENT
  2694. C                FOR L=EN STEP -1 UNTIL LOW DO -- ..........
  2695.   240 DO 260 LL = LOW, EN
  2696.          L = EN + LOW - LL
  2697.          IF (L .EQ. LOW) GO TO 300
  2698.          TST1 = DABS(HR(L-1,L-1)) + DABS(HI(L-1,L-1))
  2699.      X            + DABS(HR(L,L)) + DABS(HI(L,L))
  2700.          TST2 = TST1 + DABS(HR(L,L-1)) + DABS(HI(L,L-1))
  2701.          IF (TST2 .EQ. TST1) GO TO 300
  2702.   260 CONTINUE
  2703. C     .......... FORM SHIFT ..........
  2704.   300 IF (L .EQ. EN) GO TO 660
  2705.       IF (ITN .EQ. 0) GO TO 1000
  2706.       IF (ITS .EQ. 10 .OR. ITS .EQ. 20) GO TO 320
  2707.       SR = HR(EN,EN)
  2708.       SI = HI(EN,EN)
  2709.       XR = HR(ENM1,EN) * HR(EN,ENM1) - HI(ENM1,EN) * HI(EN,ENM1)
  2710.       XI = HR(ENM1,EN) * HI(EN,ENM1) + HI(ENM1,EN) * HR(EN,ENM1)
  2711.       IF (XR .EQ. 0.0D0 .AND. XI .EQ. 0.0D0) GO TO 340
  2712.       YR = (HR(ENM1,ENM1) - SR) / 2.0D0
  2713.       YI = (HI(ENM1,ENM1) - SI) / 2.0D0
  2714.       CALL CSROOT(YR**2-YI**2+XR,2.0D0*YR*YI+XI,ZZR,ZZI)
  2715.       IF (YR * ZZR + YI * ZZI .GE. 0.0D0) GO TO 310
  2716.       ZZR = -ZZR
  2717.       ZZI = -ZZI
  2718.   310 CALL CDIV(XR,XI,YR+ZZR,YI+ZZI,XR,XI)
  2719.       SR = SR - XR
  2720.       SI = SI - XI
  2721.       GO TO 340
  2722. C     .......... FORM EXCEPTIONAL SHIFT ..........
  2723.   320 SR = DABS(HR(EN,ENM1)) + DABS(HR(ENM1,EN-2))
  2724.       SI = DABS(HI(EN,ENM1)) + DABS(HI(ENM1,EN-2))
  2725. C
  2726.   340 DO 360 I = LOW, EN
  2727.          HR(I,I) = HR(I,I) - SR
  2728.          HI(I,I) = HI(I,I) - SI
  2729.   360 CONTINUE
  2730. C
  2731.       TR = TR + SR
  2732.       TI = TI + SI
  2733.       ITS = ITS + 1
  2734.       ITN = ITN - 1
  2735. C     .......... LOOK FOR TWO CONSECUTIVE SMALL
  2736. C                SUB-DIAGONAL ELEMENTS ..........
  2737.       XR = DABS(HR(ENM1,ENM1)) + DABS(HI(ENM1,ENM1))
  2738.       YR = DABS(HR(EN,ENM1)) + DABS(HI(EN,ENM1))
  2739.       ZZR = DABS(HR(EN,EN)) + DABS(HI(EN,EN))
  2740. C     .......... FOR M=EN-1 STEP -1 UNTIL L DO -- ..........
  2741.       DO 380 MM = L, ENM1
  2742.          M = ENM1 + L - MM
  2743.          IF (M .EQ. L) GO TO 420
  2744.          YI = YR
  2745.          YR = DABS(HR(M,M-1)) + DABS(HI(M,M-1))
  2746.          XI = ZZR
  2747.          ZZR = XR
  2748.          XR = DABS(HR(M-1,M-1)) + DABS(HI(M-1,M-1))
  2749.          TST1 = ZZR / YI * (ZZR + XR + XI)
  2750.          TST2 = TST1 + YR
  2751.          IF (TST2 .EQ. TST1) GO TO 420
  2752.   380 CONTINUE
  2753. C     .......... TRIANGULAR DECOMPOSITION H=L*R ..........
  2754.   420 MP1 = M + 1
  2755. C
  2756.       DO 520 I = MP1, EN
  2757.          IM1 = I - 1
  2758.          XR = HR(IM1,IM1)
  2759.          XI = HI(IM1,IM1)
  2760.          YR = HR(I,IM1)
  2761.          YI = HI(I,IM1)
  2762.          IF (DABS(XR) + DABS(XI) .GE. DABS(YR) + DABS(YI)) GO TO 460
  2763. C     .......... INTERCHANGE ROWS OF HR AND HI ..........
  2764.          DO 440 J = IM1, N
  2765.             ZZR = HR(IM1,J)
  2766.             HR(IM1,J) = HR(I,J)
  2767.             HR(I,J) = ZZR
  2768.             ZZI = HI(IM1,J)
  2769.             HI(IM1,J) = HI(I,J)
  2770.             HI(I,J) = ZZI
  2771.   440    CONTINUE
  2772. C
  2773.          CALL CDIV(XR,XI,YR,YI,ZZR,ZZI)
  2774.          WR(I) = 1.0D0
  2775.          GO TO 480
  2776.   460    CALL CDIV(YR,YI,XR,XI,ZZR,ZZI)
  2777.          WR(I) = -1.0D0
  2778.   480    HR(I,IM1) = ZZR
  2779.          HI(I,IM1) = ZZI
  2780. C
  2781.          DO 500 J = I, N
  2782.             HR(I,J) = HR(I,J) - ZZR * HR(IM1,J) + ZZI * HI(IM1,J)
  2783.             HI(I,J) = HI(I,J) - ZZR * HI(IM1,J) - ZZI * HR(IM1,J)
  2784.   500    CONTINUE
  2785. C
  2786.   520 CONTINUE
  2787. C     .......... COMPOSITION R*L=H ..........
  2788.       DO 640 J = MP1, EN
  2789.          XR = HR(J,J-1)
  2790.          XI = HI(J,J-1)
  2791.          HR(J,J-1) = 0.0D0
  2792.          HI(J,J-1) = 0.0D0
  2793. C     .......... INTERCHANGE COLUMNS OF HR, HI, ZR, AND ZI,
  2794. C                IF NECESSARY ..........
  2795.          IF (WR(J) .LE. 0.0D0) GO TO 580
  2796. C
  2797.          DO 540 I = 1, J
  2798.             ZZR = HR(I,J-1)
  2799.             HR(I,J-1) = HR(I,J)
  2800.             HR(I,J) = ZZR
  2801.             ZZI = HI(I,J-1)
  2802.             HI(I,J-1) = HI(I,J)
  2803.             HI(I,J) = ZZI
  2804.   540    CONTINUE
  2805. C
  2806.          DO 560 I = LOW, IGH
  2807.             ZZR = ZR(I,J-1)
  2808.             ZR(I,J-1) = ZR(I,J)
  2809.             ZR(I,J) = ZZR
  2810.             ZZI = ZI(I,J-1)
  2811.             ZI(I,J-1) = ZI(I,J)
  2812.             ZI(I,J) = ZZI
  2813.   560    CONTINUE
  2814. C
  2815.   580    DO 600 I = 1, J
  2816.             HR(I,J-1) = HR(I,J-1) + XR * HR(I,J) - XI * HI(I,J)
  2817.             HI(I,J-1) = HI(I,J-1) + XR * HI(I,J) + XI * HR(I,J)
  2818.   600    CONTINUE
  2819. C     .......... ACCUMULATE TRANSFORMATIONS ..........
  2820.          DO 620 I = LOW, IGH
  2821.             ZR(I,J-1) = ZR(I,J-1) + XR * ZR(I,J) - XI * ZI(I,J)
  2822.             ZI(I,J-1) = ZI(I,J-1) + XR * ZI(I,J) + XI * ZR(I,J)
  2823.   620    CONTINUE
  2824. C
  2825.   640 CONTINUE
  2826. C
  2827.       GO TO 240
  2828. C     .......... A ROOT FOUND ..........
  2829.   660 HR(EN,EN) = HR(EN,EN) + TR
  2830.       WR(EN) = HR(EN,EN)
  2831.       HI(EN,EN) = HI(EN,EN) + TI
  2832.       WI(EN) = HI(EN,EN)
  2833.       EN = ENM1
  2834.       GO TO 220
  2835. C     .......... ALL ROOTS FOUND.  BACKSUBSTITUTE TO FIND
  2836. C                VECTORS OF UPPER TRIANGULAR FORM ..........
  2837.   680 NORM = 0.0D0
  2838. C
  2839.       DO 720 I = 1, N
  2840. C
  2841.          DO 720 J = I, N
  2842.             TR = DABS(HR(I,J)) + DABS(HI(I,J))
  2843.             IF (TR .GT. NORM) NORM = TR
  2844.   720 CONTINUE
  2845. C
  2846.       HR(1,1) = NORM
  2847.       IF (N .EQ. 1 .OR. NORM .EQ. 0.0D0) GO TO 1001
  2848. C     .......... FOR EN=N STEP -1 UNTIL 2 DO -- ..........
  2849.       DO 800 NN = 2, N
  2850.          EN = N + 2 - NN
  2851.          XR = WR(EN)
  2852.          XI = WI(EN)
  2853.          HR(EN,EN) = 1.0D0
  2854.          HI(EN,EN) = 0.0D0
  2855.          ENM1 = EN - 1
  2856. C     .......... FOR I=EN-1 STEP -1 UNTIL 1 DO -- ..........
  2857.          DO 780 II = 1, ENM1
  2858.             I = EN - II
  2859.             ZZR = 0.0D0
  2860.             ZZI = 0.0D0
  2861.             IP1 = I + 1
  2862. C
  2863.             DO 740 J = IP1, EN
  2864.                ZZR = ZZR + HR(I,J) * HR(J,EN) - HI(I,J) * HI(J,EN)
  2865.                ZZI = ZZI + HR(I,J) * HI(J,EN) + HI(I,J) * HR(J,EN)
  2866.   740       CONTINUE
  2867. C
  2868.             YR = XR - WR(I)
  2869.             YI = XI - WI(I)
  2870.             IF (YR .NE. 0.0D0 .OR. YI .NE. 0.0D0) GO TO 765
  2871.                TST1 = NORM
  2872.                YR = TST1
  2873.   760          YR = 0.01D0 * YR
  2874.                TST2 = NORM + YR
  2875.                IF (TST2 .GT. TST1) GO TO 760
  2876.   765       CONTINUE
  2877.             CALL CDIV(ZZR,ZZI,YR,YI,HR(I,EN),HI(I,EN))
  2878. C     .......... OVERFLOW CONTROL ..........
  2879.             TR = DABS(HR(I,EN)) + DABS(HI(I,EN))
  2880.             IF (TR .EQ. 0.0D0) GO TO 780
  2881.             TST1 = TR
  2882.             TST2 = TST1 + 1.0D0/TST1
  2883.             IF (TST2 .GT. TST1) GO TO 780
  2884.             DO 770 J = I, EN
  2885.                HR(J,EN) = HR(J,EN)/TR
  2886.                HI(J,EN) = HI(J,EN)/TR
  2887.   770       CONTINUE
  2888. C
  2889.   780    CONTINUE
  2890. C
  2891.   800 CONTINUE
  2892. C     .......... END BACKSUBSTITUTION ..........
  2893.       ENM1 = N - 1
  2894. C     .......... VECTORS OF ISOLATED ROOTS ..........
  2895.       DO  840 I = 1, ENM1
  2896.          IF (I .GE. LOW .AND. I .LE. IGH) GO TO 840
  2897.          IP1 = I + 1
  2898. C
  2899.          DO 820 J = IP1, N
  2900.             ZR(I,J) = HR(I,J)
  2901.             ZI(I,J) = HI(I,J)
  2902.   820    CONTINUE
  2903. C
  2904.   840 CONTINUE
  2905. C     .......... MULTIPLY BY TRANSFORMATION MATRIX TO GIVE
  2906. C                VECTORS OF ORIGINAL FULL MATRIX.
  2907. C                FOR J=N STEP -1 UNTIL LOW+1 DO -- ..........
  2908.       DO 880 JJ = LOW, ENM1
  2909.          J = N + LOW - JJ
  2910.          M = MIN0(J,IGH)
  2911. C
  2912.          DO 880 I = LOW, IGH
  2913.             ZZR = 0.0D0
  2914.             ZZI = 0.0D0
  2915. C
  2916.             DO 860 K = LOW, M
  2917.                ZZR = ZZR + ZR(I,K) * HR(K,J) - ZI(I,K) * HI(K,J)
  2918.                ZZI = ZZI + ZR(I,K) * HI(K,J) + ZI(I,K) * HR(K,J)
  2919.   860       CONTINUE
  2920. C
  2921.             ZR(I,J) = ZZR
  2922.             ZI(I,J) = ZZI
  2923.   880 CONTINUE
  2924. C
  2925.       GO TO 1001
  2926. C     .......... SET ERROR -- ALL EIGENVALUES HAVE NOT
  2927. C                CONVERGED AFTER 30*N ITERATIONS ..........
  2928.  1000 IERR = EN
  2929.  1001 RETURN
  2930.       END
  2931.       SUBROUTINE COMQR(NM,N,LOW,IGH,HR,HI,WR,WI,IERR)
  2932. C
  2933.       INTEGER I,J,L,N,EN,LL,NM,IGH,ITN,ITS,LOW,LP1,ENM1,IERR
  2934.       DOUBLE PRECISION HR(NM,N),HI(NM,N),WR(N),WI(N)
  2935.       DOUBLE PRECISION SI,SR,TI,TR,XI,XR,YI,YR,ZZI,ZZR,NORM,TST1,TST2,
  2936.      X       PYTHAG
  2937. C
  2938. C     THIS SUBROUTINE IS A TRANSLATION OF A UNITARY ANALOGUE OF THE
  2939. C     ALGOL PROCEDURE  COMLR, NUM. MATH. 12, 369-376(1968) BY MARTIN
  2940. C     AND WILKINSON.
  2941. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 396-403(1971).
  2942. C     THE UNITARY ANALOGUE SUBSTITUTES THE QR ALGORITHM OF FRANCIS
  2943. C     (COMP. JOUR. 4, 332-345(1962)) FOR THE LR ALGORITHM.
  2944. C
  2945. C     THIS SUBROUTINE FINDS THE EIGENVALUES OF A COMPLEX
  2946. C     UPPER HESSENBERG MATRIX BY THE QR METHOD.
  2947. C
  2948. C     ON INPUT
  2949. C
  2950. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  2951. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  2952. C          DIMENSION STATEMENT.
  2953. C
  2954. C        N IS THE ORDER OF THE MATRIX.
  2955. C
  2956. C        LOW AND IGH ARE INTEGERS DETERMINED BY THE BALANCING
  2957. C          SUBROUTINE  CBAL.  IF  CBAL  HAS NOT BEEN USED,
  2958. C          SET LOW=1, IGH=N.
  2959. C
  2960. C        HR AND HI CONTAIN THE REAL AND IMAGINARY PARTS,
  2961. C          RESPECTIVELY, OF THE COMPLEX UPPER HESSENBERG MATRIX.
  2962. C          THEIR LOWER TRIANGLES BELOW THE SUBDIAGONAL CONTAIN
  2963. C          INFORMATION ABOUT THE UNITARY TRANSFORMATIONS USED IN
  2964. C          THE REDUCTION BY  CORTH, IF PERFORMED.
  2965. C
  2966. C     ON OUTPUT
  2967. C
  2968. C        THE UPPER HESSENBERG PORTIONS OF HR AND HI HAVE BEEN
  2969. C          DESTROYED.  THEREFORE, THEY MUST BE SAVED BEFORE
  2970. C          CALLING  COMQR  IF SUBSEQUENT CALCULATION OF
  2971. C          EIGENVECTORS IS TO BE PERFORMED.
  2972. C
  2973. C        WR AND WI CONTAIN THE REAL AND IMAGINARY PARTS,
  2974. C          RESPECTIVELY, OF THE EIGENVALUES.  IF AN ERROR
  2975. C          EXIT IS MADE, THE EIGENVALUES SHOULD BE CORRECT
  2976. C          FOR INDICES IERR+1,...,N.
  2977. C
  2978. C        IERR IS SET TO
  2979. C          ZERO       FOR NORMAL RETURN,
  2980. C          J          IF THE LIMIT OF 30*N ITERATIONS IS EXHAUSTED
  2981. C                     WHILE THE J-TH EIGENVALUE IS BEING SOUGHT.
  2982. C
  2983. C     CALLS CDIV FOR COMPLEX DIVISION.
  2984. C     CALLS CSROOT FOR COMPLEX SQUARE ROOT.
  2985. C     CALLS PYTHAG FOR  DSQRT(A*A + B*B) .
  2986. C
  2987. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  2988. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  2989. C
  2990. C     THIS VERSION DATED AUGUST 1983.
  2991. C
  2992. C     ------------------------------------------------------------------
  2993. C
  2994.       IERR = 0
  2995.       IF (LOW .EQ. IGH) GO TO 180
  2996. C     .......... CREATE REAL SUBDIAGONAL ELEMENTS ..........
  2997.       L = LOW + 1
  2998. C
  2999.       DO 170 I = L, IGH
  3000.          LL = MIN0(I+1,IGH)
  3001.          IF (HI(I,I-1) .EQ. 0.0D0) GO TO 170
  3002.          NORM = PYTHAG(HR(I,I-1),HI(I,I-1))
  3003.          YR = HR(I,I-1) / NORM
  3004.          YI = HI(I,I-1) / NORM
  3005.          HR(I,I-1) = NORM
  3006.          HI(I,I-1) = 0.0D0
  3007. C
  3008.          DO 155 J = I, IGH
  3009.             SI = YR * HI(I,J) - YI * HR(I,J)
  3010.             HR(I,J) = YR * HR(I,J) + YI * HI(I,J)
  3011.             HI(I,J) = SI
  3012.   155    CONTINUE
  3013. C
  3014.          DO 160 J = LOW, LL
  3015.             SI = YR * HI(J,I) + YI * HR(J,I)
  3016.             HR(J,I) = YR * HR(J,I) - YI * HI(J,I)
  3017.             HI(J,I) = SI
  3018.   160    CONTINUE
  3019. C
  3020.   170 CONTINUE
  3021. C     .......... STORE ROOTS ISOLATED BY CBAL ..........
  3022.   180 DO 200 I = 1, N
  3023.          IF (I .GE. LOW .AND. I .LE. IGH) GO TO 200
  3024.          WR(I) = HR(I,I)
  3025.          WI(I) = HI(I,I)
  3026.   200 CONTINUE
  3027. C
  3028.       EN = IGH
  3029.       TR = 0.0D0
  3030.       TI = 0.0D0
  3031.       ITN = 30*N
  3032. C     .......... SEARCH FOR NEXT EIGENVALUE ..........
  3033.   220 IF (EN .LT. LOW) GO TO 1001
  3034.       ITS = 0
  3035.       ENM1 = EN - 1
  3036. C     .......... LOOK FOR SINGLE SMALL SUB-DIAGONAL ELEMENT
  3037. C                FOR L=EN STEP -1 UNTIL LOW D0 -- ..........
  3038.   240 DO 260 LL = LOW, EN
  3039.          L = EN + LOW - LL
  3040.          IF (L .EQ. LOW) GO TO 300
  3041.          TST1 = DABS(HR(L-1,L-1)) + DABS(HI(L-1,L-1))
  3042.      X            + DABS(HR(L,L)) + DABS(HI(L,L))
  3043.          TST2 = TST1 + DABS(HR(L,L-1))
  3044.          IF (TST2 .EQ. TST1) GO TO 300
  3045.   260 CONTINUE
  3046. C     .......... FORM SHIFT ..........
  3047.   300 IF (L .EQ. EN) GO TO 660
  3048.       IF (ITN .EQ. 0) GO TO 1000
  3049.       IF (ITS .EQ. 10 .OR. ITS .EQ. 20) GO TO 320
  3050.       SR = HR(EN,EN)
  3051.       SI = HI(EN,EN)
  3052.       XR = HR(ENM1,EN) * HR(EN,ENM1)
  3053.       XI = HI(ENM1,EN) * HR(EN,ENM1)
  3054.       IF (XR .EQ. 0.0D0 .AND. XI .EQ. 0.0D0) GO TO 340
  3055.       YR = (HR(ENM1,ENM1) - SR) / 2.0D0
  3056.       YI = (HI(ENM1,ENM1) - SI) / 2.0D0
  3057.       CALL CSROOT(YR**2-YI**2+XR,2.0D0*YR*YI+XI,ZZR,ZZI)
  3058.       IF (YR * ZZR + YI * ZZI .GE. 0.0D0) GO TO 310
  3059.       ZZR = -ZZR
  3060.       ZZI = -ZZI
  3061.   310 CALL CDIV(XR,XI,YR+ZZR,YI+ZZI,XR,XI)
  3062.       SR = SR - XR
  3063.       SI = SI - XI
  3064.       GO TO 340
  3065. C     .......... FORM EXCEPTIONAL SHIFT ..........
  3066.   320 SR = DABS(HR(EN,ENM1)) + DABS(HR(ENM1,EN-2))
  3067.       SI = 0.0D0
  3068. C
  3069.   340 DO 360 I = LOW, EN
  3070.          HR(I,I) = HR(I,I) - SR
  3071.          HI(I,I) = HI(I,I) - SI
  3072.   360 CONTINUE
  3073. C
  3074.       TR = TR + SR
  3075.       TI = TI + SI
  3076.       ITS = ITS + 1
  3077.       ITN = ITN - 1
  3078. C     .......... REDUCE TO TRIANGLE (ROWS) ..........
  3079.       LP1 = L + 1
  3080. C
  3081.       DO 500 I = LP1, EN
  3082.          SR = HR(I,I-1)
  3083.          HR(I,I-1) = 0.0D0
  3084.          NORM = PYTHAG(PYTHAG(HR(I-1,I-1),HI(I-1,I-1)),SR)
  3085.          XR = HR(I-1,I-1) / NORM
  3086.          WR(I-1) = XR
  3087.          XI = HI(I-1,I-1) / NORM
  3088.          WI(I-1) = XI
  3089.          HR(I-1,I-1) = NORM
  3090.          HI(I-1,I-1) = 0.0D0
  3091.          HI(I,I-1) = SR / NORM
  3092. C
  3093.          DO 490 J = I, EN
  3094.             YR = HR(I-1,J)
  3095.             YI = HI(I-1,J)
  3096.             ZZR = HR(I,J)
  3097.             ZZI = HI(I,J)
  3098.             HR(I-1,J) = XR * YR + XI * YI + HI(I,I-1) * ZZR
  3099.             HI(I-1,J) = XR * YI - XI * YR + HI(I,I-1) * ZZI
  3100.             HR(I,J) = XR * ZZR - XI * ZZI - HI(I,I-1) * YR
  3101.             HI(I,J) = XR * ZZI + XI * ZZR - HI(I,I-1) * YI
  3102.   490    CONTINUE
  3103. C
  3104.   500 CONTINUE
  3105. C
  3106.       SI = HI(EN,EN)
  3107.       IF (SI .EQ. 0.0D0) GO TO 540
  3108.       NORM = PYTHAG(HR(EN,EN),SI)
  3109.       SR = HR(EN,EN) / NORM
  3110.       SI = SI / NORM
  3111.       HR(EN,EN) = NORM
  3112.       HI(EN,EN) = 0.0D0
  3113. C     .......... INVERSE OPERATION (COLUMNS) ..........
  3114.   540 DO 600 J = LP1, EN
  3115.          XR = WR(J-1)
  3116.          XI = WI(J-1)
  3117. C
  3118.          DO 580 I = L, J
  3119.             YR = HR(I,J-1)
  3120.             YI = 0.0D0
  3121.             ZZR = HR(I,J)
  3122.             ZZI = HI(I,J)
  3123.             IF (I .EQ. J) GO TO 560
  3124.             YI = HI(I,J-1)
  3125.             HI(I,J-1) = XR * YI + XI * YR + HI(J,J-1) * ZZI
  3126.   560       HR(I,J-1) = XR * YR - XI * YI + HI(J,J-1) * ZZR
  3127.             HR(I,J) = XR * ZZR + XI * ZZI - HI(J,J-1) * YR
  3128.             HI(I,J) = XR * ZZI - XI * ZZR - HI(J,J-1) * YI
  3129.   580    CONTINUE
  3130. C
  3131.   600 CONTINUE
  3132. C
  3133.       IF (SI .EQ. 0.0D0) GO TO 240
  3134. C
  3135.       DO 630 I = L, EN
  3136.          YR = HR(I,EN)
  3137.          YI = HI(I,EN)
  3138.          HR(I,EN) = SR * YR - SI * YI
  3139.          HI(I,EN) = SR * YI + SI * YR
  3140.   630 CONTINUE
  3141. C
  3142.       GO TO 240
  3143. C     .......... A ROOT FOUND ..........
  3144.   660 WR(EN) = HR(EN,EN) + TR
  3145.       WI(EN) = HI(EN,EN) + TI
  3146.       EN = ENM1
  3147.       GO TO 220
  3148. C     .......... SET ERROR -- ALL EIGENVALUES HAVE NOT
  3149. C                CONVERGED AFTER 30*N ITERATIONS ..........
  3150.  1000 IERR = EN
  3151.  1001 RETURN
  3152.       END
  3153.       SUBROUTINE COMQR2(NM,N,LOW,IGH,ORTR,ORTI,HR,HI,WR,WI,ZR,ZI,IERR)
  3154. C
  3155.       INTEGER I,J,K,L,M,N,EN,II,JJ,LL,NM,NN,IGH,IP1,
  3156.      X        ITN,ITS,LOW,LP1,ENM1,IEND,IERR
  3157.       DOUBLE PRECISION HR(NM,N),HI(NM,N),WR(N),WI(N),ZR(NM,N),ZI(NM,N),
  3158.      X       ORTR(IGH),ORTI(IGH)
  3159.       DOUBLE PRECISION SI,SR,TI,TR,XI,XR,YI,YR,ZZI,ZZR,NORM,TST1,TST2,
  3160.      X       PYTHAG
  3161. C
  3162. C     THIS SUBROUTINE IS A TRANSLATION OF A UNITARY ANALOGUE OF THE
  3163. C     ALGOL PROCEDURE  COMLR2, NUM. MATH. 16, 181-204(1970) BY PETERS
  3164. C     AND WILKINSON.
  3165. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 372-395(1971).
  3166. C     THE UNITARY ANALOGUE SUBSTITUTES THE QR ALGORITHM OF FRANCIS
  3167. C     (COMP. JOUR. 4, 332-345(1962)) FOR THE LR ALGORITHM.
  3168. C
  3169. C     THIS SUBROUTINE FINDS THE EIGENVALUES AND EIGENVECTORS
  3170. C     OF A COMPLEX UPPER HESSENBERG MATRIX BY THE QR
  3171. C     METHOD.  THE EIGENVECTORS OF A COMPLEX GENERAL MATRIX
  3172. C     CAN ALSO BE FOUND IF  CORTH  HAS BEEN USED TO REDUCE
  3173. C     THIS GENERAL MATRIX TO HESSENBERG FORM.
  3174. C
  3175. C     ON INPUT
  3176. C
  3177. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  3178. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  3179. C          DIMENSION STATEMENT.
  3180. C
  3181. C        N IS THE ORDER OF THE MATRIX.
  3182. C
  3183. C        LOW AND IGH ARE INTEGERS DETERMINED BY THE BALANCING
  3184. C          SUBROUTINE  CBAL.  IF  CBAL  HAS NOT BEEN USED,
  3185. C          SET LOW=1, IGH=N.
  3186. C
  3187. C        ORTR AND ORTI CONTAIN INFORMATION ABOUT THE UNITARY TRANS-
  3188. C          FORMATIONS USED IN THE REDUCTION BY  CORTH, IF PERFORMED.
  3189. C          ONLY ELEMENTS LOW THROUGH IGH ARE USED.  IF THE EIGENVECTORS
  3190. C          OF THE HESSENBERG MATRIX ARE DESIRED, SET ORTR(J) AND
  3191. C          ORTI(J) TO 0.0D0 FOR THESE ELEMENTS.
  3192. C
  3193. C        HR AND HI CONTAIN THE REAL AND IMAGINARY PARTS,
  3194. C          RESPECTIVELY, OF THE COMPLEX UPPER HESSENBERG MATRIX.
  3195. C          THEIR LOWER TRIANGLES BELOW THE SUBDIAGONAL CONTAIN FURTHER
  3196. C          INFORMATION ABOUT THE TRANSFORMATIONS WHICH WERE USED IN THE
  3197. C          REDUCTION BY  CORTH, IF PERFORMED.  IF THE EIGENVECTORS OF
  3198. C          THE HESSENBERG MATRIX ARE DESIRED, THESE ELEMENTS MAY BE
  3199. C          ARBITRARY.
  3200. C
  3201. C     ON OUTPUT
  3202. C
  3203. C        ORTR, ORTI, AND THE UPPER HESSENBERG PORTIONS OF HR AND HI
  3204. C          HAVE BEEN DESTROYED.
  3205. C
  3206. C        WR AND WI CONTAIN THE REAL AND IMAGINARY PARTS,
  3207. C          RESPECTIVELY, OF THE EIGENVALUES.  IF AN ERROR
  3208. C          EXIT IS MADE, THE EIGENVALUES SHOULD BE CORRECT
  3209. C          FOR INDICES IERR+1,...,N.
  3210. C
  3211. C        ZR AND ZI CONTAIN THE REAL AND IMAGINARY PARTS,
  3212. C          RESPECTIVELY, OF THE EIGENVECTORS.  THE EIGENVECTORS
  3213. C          ARE UNNORMALIZED.  IF AN ERROR EXIT IS MADE, NONE OF
  3214. C          THE EIGENVECTORS HAS BEEN FOUND.
  3215. C
  3216. C        IERR IS SET TO
  3217. C          ZERO       FOR NORMAL RETURN,
  3218. C          J          IF THE LIMIT OF 30*N ITERATIONS IS EXHAUSTED
  3219. C                     WHILE THE J-TH EIGENVALUE IS BEING SOUGHT.
  3220. C
  3221. C     CALLS CDIV FOR COMPLEX DIVISION.
  3222. C     CALLS CSROOT FOR COMPLEX SQUARE ROOT.
  3223. C     CALLS PYTHAG FOR  DSQRT(A*A + B*B) .
  3224. C
  3225. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  3226. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  3227. C
  3228. C     THIS VERSION DATED AUGUST 1983.
  3229. C
  3230. C     ------------------------------------------------------------------
  3231. C
  3232.       IERR = 0
  3233. C     .......... INITIALIZE EIGENVECTOR MATRIX ..........
  3234.       DO 101 J = 1, N
  3235. C
  3236.          DO 100 I = 1, N
  3237.             ZR(I,J) = 0.0D0
  3238.             ZI(I,J) = 0.0D0
  3239.   100    CONTINUE
  3240.          ZR(J,J) = 1.0D0
  3241.   101 CONTINUE
  3242. C     .......... FORM THE MATRIX OF ACCUMULATED TRANSFORMATIONS
  3243. C                FROM THE INFORMATION LEFT BY CORTH ..........
  3244.       IEND = IGH - LOW - 1
  3245.       IF (IEND) 180, 150, 105
  3246. C     .......... FOR I=IGH-1 STEP -1 UNTIL LOW+1 DO -- ..........
  3247.   105 DO 140 II = 1, IEND
  3248.          I = IGH - II
  3249.          IF (ORTR(I) .EQ. 0.0D0 .AND. ORTI(I) .EQ. 0.0D0) GO TO 140
  3250.          IF (HR(I,I-1) .EQ. 0.0D0 .AND. HI(I,I-1) .EQ. 0.0D0) GO TO 140
  3251. C     .......... NORM BELOW IS NEGATIVE OF H FORMED IN CORTH ..........
  3252.          NORM = HR(I,I-1) * ORTR(I) + HI(I,I-1) * ORTI(I)
  3253.          IP1 = I + 1
  3254. C
  3255.          DO 110 K = IP1, IGH
  3256.             ORTR(K) = HR(K,I-1)
  3257.             ORTI(K) = HI(K,I-1)
  3258.   110    CONTINUE
  3259. C
  3260.          DO 130 J = I, IGH
  3261.             SR = 0.0D0
  3262.             SI = 0.0D0
  3263. C
  3264.             DO 115 K = I, IGH
  3265.                SR = SR + ORTR(K) * ZR(K,J) + ORTI(K) * ZI(K,J)
  3266.                SI = SI + ORTR(K) * ZI(K,J) - ORTI(K) * ZR(K,J)
  3267.   115       CONTINUE
  3268. C
  3269.             SR = SR / NORM
  3270.             SI = SI / NORM
  3271. C
  3272.             DO 120 K = I, IGH
  3273.                ZR(K,J) = ZR(K,J) + SR * ORTR(K) - SI * ORTI(K)
  3274.                ZI(K,J) = ZI(K,J) + SR * ORTI(K) + SI * ORTR(K)
  3275.   120       CONTINUE
  3276. C
  3277.   130    CONTINUE
  3278. C
  3279.   140 CONTINUE
  3280. C     .......... CREATE REAL SUBDIAGONAL ELEMENTS ..........
  3281.   150 L = LOW + 1
  3282. C
  3283.       DO 170 I = L, IGH
  3284.          LL = MIN0(I+1,IGH)
  3285.          IF (HI(I,I-1) .EQ. 0.0D0) GO TO 170
  3286.          NORM = PYTHAG(HR(I,I-1),HI(I,I-1))
  3287.          YR = HR(I,I-1) / NORM
  3288.          YI = HI(I,I-1) / NORM
  3289.          HR(I,I-1) = NORM
  3290.          HI(I,I-1) = 0.0D0
  3291. C
  3292.          DO 155 J = I, N
  3293.             SI = YR * HI(I,J) - YI * HR(I,J)
  3294.             HR(I,J) = YR * HR(I,J) + YI * HI(I,J)
  3295.             HI(I,J) = SI
  3296.   155    CONTINUE
  3297. C
  3298.          DO 160 J = 1, LL
  3299.             SI = YR * HI(J,I) + YI * HR(J,I)
  3300.             HR(J,I) = YR * HR(J,I) - YI * HI(J,I)
  3301.             HI(J,I) = SI
  3302.   160    CONTINUE
  3303. C
  3304.          DO 165 J = LOW, IGH
  3305.             SI = YR * ZI(J,I) + YI * ZR(J,I)
  3306.             ZR(J,I) = YR * ZR(J,I) - YI * ZI(J,I)
  3307.             ZI(J,I) = SI
  3308.   165    CONTINUE
  3309. C
  3310.   170 CONTINUE
  3311. C     .......... STORE ROOTS ISOLATED BY CBAL ..........
  3312.   180 DO 200 I = 1, N
  3313.          IF (I .GE. LOW .AND. I .LE. IGH) GO TO 200
  3314.          WR(I) = HR(I,I)
  3315.          WI(I) = HI(I,I)
  3316.   200 CONTINUE
  3317. C
  3318.       EN = IGH
  3319.       TR = 0.0D0
  3320.       TI = 0.0D0
  3321.       ITN = 30*N
  3322. C     .......... SEARCH FOR NEXT EIGENVALUE ..........
  3323.   220 IF (EN .LT. LOW) GO TO 680
  3324.       ITS = 0
  3325.       ENM1 = EN - 1
  3326. C     .......... LOOK FOR SINGLE SMALL SUB-DIAGONAL ELEMENT
  3327. C                FOR L=EN STEP -1 UNTIL LOW DO -- ..........
  3328.   240 DO 260 LL = LOW, EN
  3329.          L = EN + LOW - LL
  3330.          IF (L .EQ. LOW) GO TO 300
  3331.          TST1 = DABS(HR(L-1,L-1)) + DABS(HI(L-1,L-1))
  3332.      X            + DABS(HR(L,L)) + DABS(HI(L,L))
  3333.          TST2 = TST1 + DABS(HR(L,L-1))
  3334.          IF (TST2 .EQ. TST1) GO TO 300
  3335.   260 CONTINUE
  3336. C     .......... FORM SHIFT ..........
  3337.   300 IF (L .EQ. EN) GO TO 660
  3338.       IF (ITN .EQ. 0) GO TO 1000
  3339.       IF (ITS .EQ. 10 .OR. ITS .EQ. 20) GO TO 320
  3340.       SR = HR(EN,EN)
  3341.       SI = HI(EN,EN)
  3342.       XR = HR(ENM1,EN) * HR(EN,ENM1)
  3343.       XI = HI(ENM1,EN) * HR(EN,ENM1)
  3344.       IF (XR .EQ. 0.0D0 .AND. XI .EQ. 0.0D0) GO TO 340
  3345.       YR = (HR(ENM1,ENM1) - SR) / 2.0D0
  3346.       YI = (HI(ENM1,ENM1) - SI) / 2.0D0
  3347.       CALL CSROOT(YR**2-YI**2+XR,2.0D0*YR*YI+XI,ZZR,ZZI)
  3348.       IF (YR * ZZR + YI * ZZI .GE. 0.0D0) GO TO 310
  3349.       ZZR = -ZZR
  3350.       ZZI = -ZZI
  3351.   310 CALL CDIV(XR,XI,YR+ZZR,YI+ZZI,XR,XI)
  3352.       SR = SR - XR
  3353.       SI = SI - XI
  3354.       GO TO 340
  3355. C     .......... FORM EXCEPTIONAL SHIFT ..........
  3356.   320 SR = DABS(HR(EN,ENM1)) + DABS(HR(ENM1,EN-2))
  3357.       SI = 0.0D0
  3358. C
  3359.   340 DO 360 I = LOW, EN
  3360.          HR(I,I) = HR(I,I) - SR
  3361.          HI(I,I) = HI(I,I) - SI
  3362.   360 CONTINUE
  3363. C
  3364.       TR = TR + SR
  3365.       TI = TI + SI
  3366.       ITS = ITS + 1
  3367.       ITN = ITN - 1
  3368. C     .......... REDUCE TO TRIANGLE (ROWS) ..........
  3369.       LP1 = L + 1
  3370. C
  3371.       DO 500 I = LP1, EN
  3372.          SR = HR(I,I-1)
  3373.          HR(I,I-1) = 0.0D0
  3374.          NORM = PYTHAG(PYTHAG(HR(I-1,I-1),HI(I-1,I-1)),SR)
  3375.          XR = HR(I-1,I-1) / NORM
  3376.          WR(I-1) = XR
  3377.          XI = HI(I-1,I-1) / NORM
  3378.          WI(I-1) = XI
  3379.          HR(I-1,I-1) = NORM
  3380.          HI(I-1,I-1) = 0.0D0
  3381.          HI(I,I-1) = SR / NORM
  3382. C
  3383.          DO 490 J = I, N
  3384.             YR = HR(I-1,J)
  3385.             YI = HI(I-1,J)
  3386.             ZZR = HR(I,J)
  3387.             ZZI = HI(I,J)
  3388.             HR(I-1,J) = XR * YR + XI * YI + HI(I,I-1) * ZZR
  3389.             HI(I-1,J) = XR * YI - XI * YR + HI(I,I-1) * ZZI
  3390.             HR(I,J) = XR * ZZR - XI * ZZI - HI(I,I-1) * YR
  3391.             HI(I,J) = XR * ZZI + XI * ZZR - HI(I,I-1) * YI
  3392.   490    CONTINUE
  3393. C
  3394.   500 CONTINUE
  3395. C
  3396.       SI = HI(EN,EN)
  3397.       IF (SI .EQ. 0.0D0) GO TO 540
  3398.       NORM = PYTHAG(HR(EN,EN),SI)
  3399.       SR = HR(EN,EN) / NORM
  3400.       SI = SI / NORM
  3401.       HR(EN,EN) = NORM
  3402.       HI(EN,EN) = 0.0D0
  3403.       IF (EN .EQ. N) GO TO 540
  3404.       IP1 = EN + 1
  3405. C
  3406.       DO 520 J = IP1, N
  3407.          YR = HR(EN,J)
  3408.          YI = HI(EN,J)
  3409.          HR(EN,J) = SR * YR + SI * YI
  3410.          HI(EN,J) = SR * YI - SI * YR
  3411.   520 CONTINUE
  3412. C     .......... INVERSE OPERATION (COLUMNS) ..........
  3413.   540 DO 600 J = LP1, EN
  3414.          XR = WR(J-1)
  3415.          XI = WI(J-1)
  3416. C
  3417.          DO 580 I = 1, J
  3418.             YR = HR(I,J-1)
  3419.             YI = 0.0D0
  3420.             ZZR = HR(I,J)
  3421.             ZZI = HI(I,J)
  3422.             IF (I .EQ. J) GO TO 560
  3423.             YI = HI(I,J-1)
  3424.             HI(I,J-1) = XR * YI + XI * YR + HI(J,J-1) * ZZI
  3425.   560       HR(I,J-1) = XR * YR - XI * YI + HI(J,J-1) * ZZR
  3426.             HR(I,J) = XR * ZZR + XI * ZZI - HI(J,J-1) * YR
  3427.             HI(I,J) = XR * ZZI - XI * ZZR - HI(J,J-1) * YI
  3428.   580    CONTINUE
  3429. C
  3430.          DO 590 I = LOW, IGH
  3431.             YR = ZR(I,J-1)
  3432.             YI = ZI(I,J-1)
  3433.             ZZR = ZR(I,J)
  3434.             ZZI = ZI(I,J)
  3435.             ZR(I,J-1) = XR * YR - XI * YI + HI(J,J-1) * ZZR
  3436.             ZI(I,J-1) = XR * YI + XI * YR + HI(J,J-1) * ZZI
  3437.             ZR(I,J) = XR * ZZR + XI * ZZI - HI(J,J-1) * YR
  3438.             ZI(I,J) = XR * ZZI - XI * ZZR - HI(J,J-1) * YI
  3439.   590    CONTINUE
  3440. C
  3441.   600 CONTINUE
  3442. C
  3443.       IF (SI .EQ. 0.0D0) GO TO 240
  3444. C
  3445.       DO 630 I = 1, EN
  3446.          YR = HR(I,EN)
  3447.          YI = HI(I,EN)
  3448.          HR(I,EN) = SR * YR - SI * YI
  3449.          HI(I,EN) = SR * YI + SI * YR
  3450.   630 CONTINUE
  3451. C
  3452.       DO 640 I = LOW, IGH
  3453.          YR = ZR(I,EN)
  3454.          YI = ZI(I,EN)
  3455.          ZR(I,EN) = SR * YR - SI * YI
  3456.          ZI(I,EN) = SR * YI + SI * YR
  3457.   640 CONTINUE
  3458. C
  3459.       GO TO 240
  3460. C     .......... A ROOT FOUND ..........
  3461.   660 HR(EN,EN) = HR(EN,EN) + TR
  3462.       WR(EN) = HR(EN,EN)
  3463.       HI(EN,EN) = HI(EN,EN) + TI
  3464.       WI(EN) = HI(EN,EN)
  3465.       EN = ENM1
  3466.       GO TO 220
  3467. C     .......... ALL ROOTS FOUND.  BACKSUBSTITUTE TO FIND
  3468. C                VECTORS OF UPPER TRIANGULAR FORM ..........
  3469.   680 NORM = 0.0D0
  3470. C
  3471.       DO 720 I = 1, N
  3472. C
  3473.          DO 720 J = I, N
  3474.             TR = DABS(HR(I,J)) + DABS(HI(I,J))
  3475.             IF (TR .GT. NORM) NORM = TR
  3476.   720 CONTINUE
  3477. C
  3478.       IF (N .EQ. 1 .OR. NORM .EQ. 0.0D0) GO TO 1001
  3479. C     .......... FOR EN=N STEP -1 UNTIL 2 DO -- ..........
  3480.       DO 800 NN = 2, N
  3481.          EN = N + 2 - NN
  3482.          XR = WR(EN)
  3483.          XI = WI(EN)
  3484.          HR(EN,EN) = 1.0D0
  3485.          HI(EN,EN) = 0.0D0
  3486.          ENM1 = EN - 1
  3487. C     .......... FOR I=EN-1 STEP -1 UNTIL 1 DO -- ..........
  3488.          DO 780 II = 1, ENM1
  3489.             I = EN - II
  3490.             ZZR = 0.0D0
  3491.             ZZI = 0.0D0
  3492.             IP1 = I + 1
  3493. C
  3494.             DO 740 J = IP1, EN
  3495.                ZZR = ZZR + HR(I,J) * HR(J,EN) - HI(I,J) * HI(J,EN)
  3496.                ZZI = ZZI + HR(I,J) * HI(J,EN) + HI(I,J) * HR(J,EN)
  3497.   740       CONTINUE
  3498. C
  3499.             YR = XR - WR(I)
  3500.             YI = XI - WI(I)
  3501.             IF (YR .NE. 0.0D0 .OR. YI .NE. 0.0D0) GO TO 765
  3502.                TST1 = NORM
  3503.                YR = TST1
  3504.   760          YR = 0.01D0 * YR
  3505.                TST2 = NORM + YR
  3506.                IF (TST2 .GT. TST1) GO TO 760
  3507.   765       CONTINUE
  3508.             CALL CDIV(ZZR,ZZI,YR,YI,HR(I,EN),HI(I,EN))
  3509. C     .......... OVERFLOW CONTROL ..........
  3510.             TR = DABS(HR(I,EN)) + DABS(HI(I,EN))
  3511.             IF (TR .EQ. 0.0D0) GO TO 780
  3512.             TST1 = TR
  3513.             TST2 = TST1 + 1.0D0/TST1
  3514.             IF (TST2 .GT. TST1) GO TO 780
  3515.             DO 770 J = I, EN
  3516.                HR(J,EN) = HR(J,EN)/TR
  3517.                HI(J,EN) = HI(J,EN)/TR
  3518.   770       CONTINUE
  3519. C
  3520.   780    CONTINUE
  3521. C
  3522.   800 CONTINUE
  3523. C     .......... END BACKSUBSTITUTION ..........
  3524.       ENM1 = N - 1
  3525. C     .......... VECTORS OF ISOLATED ROOTS ..........
  3526.       DO  840 I = 1, ENM1
  3527.          IF (I .GE. LOW .AND. I .LE. IGH) GO TO 840
  3528.          IP1 = I + 1
  3529. C
  3530.          DO 820 J = IP1, N
  3531.             ZR(I,J) = HR(I,J)
  3532.             ZI(I,J) = HI(I,J)
  3533.   820    CONTINUE
  3534. C
  3535.   840 CONTINUE
  3536. C     .......... MULTIPLY BY TRANSFORMATION MATRIX TO GIVE
  3537. C                VECTORS OF ORIGINAL FULL MATRIX.
  3538. C                FOR J=N STEP -1 UNTIL LOW+1 DO -- ..........
  3539.       DO 880 JJ = LOW, ENM1
  3540.          J = N + LOW - JJ
  3541.          M = MIN0(J,IGH)
  3542. C
  3543.          DO 880 I = LOW, IGH
  3544.             ZZR = 0.0D0
  3545.             ZZI = 0.0D0
  3546. C
  3547.             DO 860 K = LOW, M
  3548.                ZZR = ZZR + ZR(I,K) * HR(K,J) - ZI(I,K) * HI(K,J)
  3549.                ZZI = ZZI + ZR(I,K) * HI(K,J) + ZI(I,K) * HR(K,J)
  3550.   860       CONTINUE
  3551. C
  3552.             ZR(I,J) = ZZR
  3553.             ZI(I,J) = ZZI
  3554.   880 CONTINUE
  3555. C
  3556.       GO TO 1001
  3557. C     .......... SET ERROR -- ALL EIGENVALUES HAVE NOT
  3558. C                CONVERGED AFTER 30*N ITERATIONS ..........
  3559.  1000 IERR = EN
  3560.  1001 RETURN
  3561.       END
  3562.       SUBROUTINE CORTB(NM,LOW,IGH,AR,AI,ORTR,ORTI,M,ZR,ZI)
  3563. C
  3564.       INTEGER I,J,M,LA,MM,MP,NM,IGH,KP1,LOW,MP1
  3565.       DOUBLE PRECISION AR(NM,IGH),AI(NM,IGH),ORTR(IGH),ORTI(IGH),
  3566.      X       ZR(NM,M),ZI(NM,M)
  3567.       DOUBLE PRECISION H,GI,GR
  3568. C
  3569. C     THIS SUBROUTINE IS A TRANSLATION OF A COMPLEX ANALOGUE OF
  3570. C     THE ALGOL PROCEDURE ORTBAK, NUM. MATH. 12, 349-368(1968)
  3571. C     BY MARTIN AND WILKINSON.
  3572. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 339-358(1971).
  3573. C
  3574. C     THIS SUBROUTINE FORMS THE EIGENVECTORS OF A COMPLEX GENERAL
  3575. C     MATRIX BY BACK TRANSFORMING THOSE OF THE CORRESPONDING
  3576. C     UPPER HESSENBERG MATRIX DETERMINED BY  CORTH.
  3577. C
  3578. C     ON INPUT
  3579. C
  3580. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  3581. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  3582. C          DIMENSION STATEMENT.
  3583. C
  3584. C        LOW AND IGH ARE INTEGERS DETERMINED BY THE BALANCING
  3585. C          SUBROUTINE  CBAL.  IF  CBAL  HAS NOT BEEN USED,
  3586. C          SET LOW=1 AND IGH EQUAL TO THE ORDER OF THE MATRIX.
  3587. C
  3588. C        AR AND AI CONTAIN INFORMATION ABOUT THE UNITARY
  3589. C          TRANSFORMATIONS USED IN THE REDUCTION BY  CORTH
  3590. C          IN THEIR STRICT LOWER TRIANGLES.
  3591. C
  3592. C        ORTR AND ORTI CONTAIN FURTHER INFORMATION ABOUT THE
  3593. C          TRANSFORMATIONS USED IN THE REDUCTION BY  CORTH.
  3594. C          ONLY ELEMENTS LOW THROUGH IGH ARE USED.
  3595. C
  3596. C        M IS THE NUMBER OF COLUMNS OF ZR AND ZI TO BE BACK TRANSFORMED.
  3597. C
  3598. C        ZR AND ZI CONTAIN THE REAL AND IMAGINARY PARTS,
  3599. C          RESPECTIVELY, OF THE EIGENVECTORS TO BE
  3600. C          BACK TRANSFORMED IN THEIR FIRST M COLUMNS.
  3601. C
  3602. C     ON OUTPUT
  3603. C
  3604. C        ZR AND ZI CONTAIN THE REAL AND IMAGINARY PARTS,
  3605. C          RESPECTIVELY, OF THE TRANSFORMED EIGENVECTORS
  3606. C          IN THEIR FIRST M COLUMNS.
  3607. C
  3608. C        ORTR AND ORTI HAVE BEEN ALTERED.
  3609. C
  3610. C     NOTE THAT CORTB PRESERVES VECTOR EUCLIDEAN NORMS.
  3611. C
  3612. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  3613. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  3614. C
  3615. C     THIS VERSION DATED AUGUST 1983.
  3616. C
  3617. C     ------------------------------------------------------------------
  3618. C
  3619.       IF (M .EQ. 0) GO TO 200
  3620.       LA = IGH - 1
  3621.       KP1 = LOW + 1
  3622.       IF (LA .LT. KP1) GO TO 200
  3623. C     .......... FOR MP=IGH-1 STEP -1 UNTIL LOW+1 DO -- ..........
  3624.       DO 140 MM = KP1, LA
  3625.          MP = LOW + IGH - MM
  3626.          IF (AR(MP,MP-1) .EQ. 0.0D0 .AND. AI(MP,MP-1) .EQ. 0.0D0)
  3627.      X      GO TO 140
  3628. C     .......... H BELOW IS NEGATIVE OF H FORMED IN CORTH ..........
  3629.          H = AR(MP,MP-1) * ORTR(MP) + AI(MP,MP-1) * ORTI(MP)
  3630.          MP1 = MP + 1
  3631. C
  3632.          DO 100 I = MP1, IGH
  3633.             ORTR(I) = AR(I,MP-1)
  3634.             ORTI(I) = AI(I,MP-1)
  3635.   100    CONTINUE
  3636. C
  3637.          DO 130 J = 1, M
  3638.             GR = 0.0D0
  3639.             GI = 0.0D0
  3640. C
  3641.             DO 110 I = MP, IGH
  3642.                GR = GR + ORTR(I) * ZR(I,J) + ORTI(I) * ZI(I,J)
  3643.                GI = GI + ORTR(I) * ZI(I,J) - ORTI(I) * ZR(I,J)
  3644.   110       CONTINUE
  3645. C
  3646.             GR = GR / H
  3647.             GI = GI / H
  3648. C
  3649.             DO 120 I = MP, IGH
  3650.                ZR(I,J) = ZR(I,J) + GR * ORTR(I) - GI * ORTI(I)
  3651.                ZI(I,J) = ZI(I,J) + GR * ORTI(I) + GI * ORTR(I)
  3652.   120       CONTINUE
  3653. C
  3654.   130    CONTINUE
  3655. C
  3656.   140 CONTINUE
  3657. C
  3658.   200 RETURN
  3659.       END
  3660.       SUBROUTINE CORTH(NM,N,LOW,IGH,AR,AI,ORTR,ORTI)
  3661. C
  3662.       INTEGER I,J,M,N,II,JJ,LA,MP,NM,IGH,KP1,LOW
  3663.       DOUBLE PRECISION AR(NM,N),AI(NM,N),ORTR(IGH),ORTI(IGH)
  3664.       DOUBLE PRECISION F,G,H,FI,FR,SCALE,PYTHAG
  3665. C
  3666. C     THIS SUBROUTINE IS A TRANSLATION OF A COMPLEX ANALOGUE OF
  3667. C     THE ALGOL PROCEDURE ORTHES, NUM. MATH. 12, 349-368(1968)
  3668. C     BY MARTIN AND WILKINSON.
  3669. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 339-358(1971).
  3670. C
  3671. C     GIVEN A COMPLEX GENERAL MATRIX, THIS SUBROUTINE
  3672. C     REDUCES A SUBMATRIX SITUATED IN ROWS AND COLUMNS
  3673. C     LOW THROUGH IGH TO UPPER HESSENBERG FORM BY
  3674. C     UNITARY SIMILARITY TRANSFORMATIONS.
  3675. C
  3676. C     ON INPUT
  3677. C
  3678. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  3679. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  3680. C          DIMENSION STATEMENT.
  3681. C
  3682. C        N IS THE ORDER OF THE MATRIX.
  3683. C
  3684. C        LOW AND IGH ARE INTEGERS DETERMINED BY THE BALANCING
  3685. C          SUBROUTINE  CBAL.  IF  CBAL  HAS NOT BEEN USED,
  3686. C          SET LOW=1, IGH=N.
  3687. C
  3688. C        AR AND AI CONTAIN THE REAL AND IMAGINARY PARTS,
  3689. C          RESPECTIVELY, OF THE COMPLEX INPUT MATRIX.
  3690. C
  3691. C     ON OUTPUT
  3692. C
  3693. C        AR AND AI CONTAIN THE REAL AND IMAGINARY PARTS,
  3694. C          RESPECTIVELY, OF THE HESSENBERG MATRIX.  INFORMATION
  3695. C          ABOUT THE UNITARY TRANSFORMATIONS USED IN THE REDUCTION
  3696. C          IS STORED IN THE REMAINING TRIANGLES UNDER THE
  3697. C          HESSENBERG MATRIX.
  3698. C
  3699. C        ORTR AND ORTI CONTAIN FURTHER INFORMATION ABOUT THE
  3700. C          TRANSFORMATIONS.  ONLY ELEMENTS LOW THROUGH IGH ARE USED.
  3701. C
  3702. C     CALLS PYTHAG FOR  DSQRT(A*A + B*B) .
  3703. C
  3704. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  3705. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  3706. C
  3707. C     THIS VERSION DATED AUGUST 1983.
  3708. C
  3709. C     ------------------------------------------------------------------
  3710. C
  3711.       LA = IGH - 1
  3712.       KP1 = LOW + 1
  3713.       IF (LA .LT. KP1) GO TO 200
  3714. C
  3715.       DO 180 M = KP1, LA
  3716.          H = 0.0D0
  3717.          ORTR(M) = 0.0D0
  3718.          ORTI(M) = 0.0D0
  3719.          SCALE = 0.0D0
  3720. C     .......... SCALE COLUMN (ALGOL TOL THEN NOT NEEDED) ..........
  3721.          DO 90 I = M, IGH
  3722.    90    SCALE = SCALE + DABS(AR(I,M-1)) + DABS(AI(I,M-1))
  3723. C
  3724.          IF (SCALE .EQ. 0.0D0) GO TO 180
  3725.          MP = M + IGH
  3726. C     .......... FOR I=IGH STEP -1 UNTIL M DO -- ..........
  3727.          DO 100 II = M, IGH
  3728.             I = MP - II
  3729.             ORTR(I) = AR(I,M-1) / SCALE
  3730.             ORTI(I) = AI(I,M-1) / SCALE
  3731.             H = H + ORTR(I) * ORTR(I) + ORTI(I) * ORTI(I)
  3732.   100    CONTINUE
  3733. C
  3734.          G = DSQRT(H)
  3735.          F = PYTHAG(ORTR(M),ORTI(M))
  3736.          IF (F .EQ. 0.0D0) GO TO 103
  3737.          H = H + F * G
  3738.          G = G / F
  3739.          ORTR(M) = (1.0D0 + G) * ORTR(M)
  3740.          ORTI(M) = (1.0D0 + G) * ORTI(M)
  3741.          GO TO 105
  3742. C
  3743.   103    ORTR(M) = G
  3744.          AR(M,M-1) = SCALE
  3745. C     .......... FORM (I-(U*UT)/H) * A ..........
  3746.   105    DO 130 J = M, N
  3747.             FR = 0.0D0
  3748.             FI = 0.0D0
  3749. C     .......... FOR I=IGH STEP -1 UNTIL M DO -- ..........
  3750.             DO 110 II = M, IGH
  3751.                I = MP - II
  3752.                FR = FR + ORTR(I) * AR(I,J) + ORTI(I) * AI(I,J)
  3753.                FI = FI + ORTR(I) * AI(I,J) - ORTI(I) * AR(I,J)
  3754.   110       CONTINUE
  3755. C
  3756.             FR = FR / H
  3757.             FI = FI / H
  3758. C
  3759.             DO 120 I = M, IGH
  3760.                AR(I,J) = AR(I,J) - FR * ORTR(I) + FI * ORTI(I)
  3761.                AI(I,J) = AI(I,J) - FR * ORTI(I) - FI * ORTR(I)
  3762.   120       CONTINUE
  3763. C
  3764.   130    CONTINUE
  3765. C     .......... FORM (I-(U*UT)/H)*A*(I-(U*UT)/H) ..........
  3766.          DO 160 I = 1, IGH
  3767.             FR = 0.0D0
  3768.             FI = 0.0D0
  3769. C     .......... FOR J=IGH STEP -1 UNTIL M DO -- ..........
  3770.             DO 140 JJ = M, IGH
  3771.                J = MP - JJ
  3772.                FR = FR + ORTR(J) * AR(I,J) - ORTI(J) * AI(I,J)
  3773.                FI = FI + ORTR(J) * AI(I,J) + ORTI(J) * AR(I,J)
  3774.   140       CONTINUE
  3775. C
  3776.             FR = FR / H
  3777.             FI = FI / H
  3778. C
  3779.             DO 150 J = M, IGH
  3780.                AR(I,J) = AR(I,J) - FR * ORTR(J) - FI * ORTI(J)
  3781.                AI(I,J) = AI(I,J) + FR * ORTI(J) - FI * ORTR(J)
  3782.   150       CONTINUE
  3783. C
  3784.   160    CONTINUE
  3785. C
  3786.          ORTR(M) = SCALE * ORTR(M)
  3787.          ORTI(M) = SCALE * ORTI(M)
  3788.          AR(M,M-1) = -G * AR(M,M-1)
  3789.          AI(M,M-1) = -G * AI(M,M-1)
  3790.   180 CONTINUE
  3791. C
  3792.   200 RETURN
  3793.       END
  3794.       SUBROUTINE ELMBAK(NM,LOW,IGH,A,INT,M,Z)
  3795. C
  3796.       INTEGER I,J,M,LA,MM,MP,NM,IGH,KP1,LOW,MP1
  3797.       DOUBLE PRECISION A(NM,IGH),Z(NM,M)
  3798.       DOUBLE PRECISION X
  3799.       INTEGER INT(IGH)
  3800. C
  3801. C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE ELMBAK,
  3802. C     NUM. MATH. 12, 349-368(1968) BY MARTIN AND WILKINSON.
  3803. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 339-358(1971).
  3804. C
  3805. C     THIS SUBROUTINE FORMS THE EIGENVECTORS OF A REAL GENERAL
  3806. C     MATRIX BY BACK TRANSFORMING THOSE OF THE CORRESPONDING
  3807. C     UPPER HESSENBERG MATRIX DETERMINED BY  ELMHES.
  3808. C
  3809. C     ON INPUT
  3810. C
  3811. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  3812. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  3813. C          DIMENSION STATEMENT.
  3814. C
  3815. C        LOW AND IGH ARE INTEGERS DETERMINED BY THE BALANCING
  3816. C          SUBROUTINE  BALANC.  IF  BALANC  HAS NOT BEEN USED,
  3817. C          SET LOW=1 AND IGH EQUAL TO THE ORDER OF THE MATRIX.
  3818. C
  3819. C        A CONTAINS THE MULTIPLIERS WHICH WERE USED IN THE
  3820. C          REDUCTION BY  ELMHES  IN ITS LOWER TRIANGLE
  3821. C          BELOW THE SUBDIAGONAL.
  3822. C
  3823. C        INT CONTAINS INFORMATION ON THE ROWS AND COLUMNS
  3824. C          INTERCHANGED IN THE REDUCTION BY  ELMHES.
  3825. C          ONLY ELEMENTS LOW THROUGH IGH ARE USED.
  3826. C
  3827. C        M IS THE NUMBER OF COLUMNS OF Z TO BE BACK TRANSFORMED.
  3828. C
  3829. C        Z CONTAINS THE REAL AND IMAGINARY PARTS OF THE EIGEN-
  3830. C          VECTORS TO BE BACK TRANSFORMED IN ITS FIRST M COLUMNS.
  3831. C
  3832. C     ON OUTPUT
  3833. C
  3834. C        Z CONTAINS THE REAL AND IMAGINARY PARTS OF THE
  3835. C          TRANSFORMED EIGENVECTORS IN ITS FIRST M COLUMNS.
  3836. C
  3837. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  3838. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  3839. C
  3840. C     THIS VERSION DATED AUGUST 1983.
  3841. C
  3842. C     ------------------------------------------------------------------
  3843. C
  3844.       IF (M .EQ. 0) GO TO 200
  3845.       LA = IGH - 1
  3846.       KP1 = LOW + 1
  3847.       IF (LA .LT. KP1) GO TO 200
  3848. C     .......... FOR MP=IGH-1 STEP -1 UNTIL LOW+1 DO -- ..........
  3849.       DO 140 MM = KP1, LA
  3850.          MP = LOW + IGH - MM
  3851.          MP1 = MP + 1
  3852. C
  3853.          DO 110 I = MP1, IGH
  3854.             X = A(I,MP-1)
  3855.             IF (X .EQ. 0.0D0) GO TO 110
  3856. C
  3857.             DO 100 J = 1, M
  3858.   100       Z(I,J) = Z(I,J) + X * Z(MP,J)
  3859. C
  3860.   110    CONTINUE
  3861. C
  3862.          I = INT(MP)
  3863.          IF (I .EQ. MP) GO TO 140
  3864. C
  3865.          DO 130 J = 1, M
  3866.             X = Z(I,J)
  3867.             Z(I,J) = Z(MP,J)
  3868.             Z(MP,J) = X
  3869.   130    CONTINUE
  3870. C
  3871.   140 CONTINUE
  3872. C
  3873.   200 RETURN
  3874.       END
  3875.       SUBROUTINE ELMHES(NM,N,LOW,IGH,A,INT)
  3876. C
  3877.       INTEGER I,J,M,N,LA,NM,IGH,KP1,LOW,MM1,MP1
  3878.       DOUBLE PRECISION A(NM,N)
  3879.       DOUBLE PRECISION X,Y
  3880.       INTEGER INT(IGH)
  3881. C
  3882. C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE ELMHES,
  3883. C     NUM. MATH. 12, 349-368(1968) BY MARTIN AND WILKINSON.
  3884. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 339-358(1971).
  3885. C
  3886. C     GIVEN A REAL GENERAL MATRIX, THIS SUBROUTINE
  3887. C     REDUCES A SUBMATRIX SITUATED IN ROWS AND COLUMNS
  3888. C     LOW THROUGH IGH TO UPPER HESSENBERG FORM BY
  3889. C     STABILIZED ELEMENTARY SIMILARITY TRANSFORMATIONS.
  3890. C
  3891. C     ON INPUT
  3892. C
  3893. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  3894. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  3895. C          DIMENSION STATEMENT.
  3896. C
  3897. C        N IS THE ORDER OF THE MATRIX.
  3898. C
  3899. C        LOW AND IGH ARE INTEGERS DETERMINED BY THE BALANCING
  3900. C          SUBROUTINE  BALANC.  IF  BALANC  HAS NOT BEEN USED,
  3901. C          SET LOW=1, IGH=N.
  3902. C
  3903. C        A CONTAINS THE INPUT MATRIX.
  3904. C
  3905. C     ON OUTPUT
  3906. C
  3907. C        A CONTAINS THE HESSENBERG MATRIX.  THE MULTIPLIERS
  3908. C          WHICH WERE USED IN THE REDUCTION ARE STORED IN THE
  3909. C          REMAINING TRIANGLE UNDER THE HESSENBERG MATRIX.
  3910. C
  3911. C        INT CONTAINS INFORMATION ON THE ROWS AND COLUMNS
  3912. C          INTERCHANGED IN THE REDUCTION.
  3913. C          ONLY ELEMENTS LOW THROUGH IGH ARE USED.
  3914. C
  3915. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  3916. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  3917. C
  3918. C     THIS VERSION DATED AUGUST 1983.
  3919. C
  3920. C     ------------------------------------------------------------------
  3921. C
  3922.       LA = IGH - 1
  3923.       KP1 = LOW + 1
  3924.       IF (LA .LT. KP1) GO TO 200
  3925. C
  3926.       DO 180 M = KP1, LA
  3927.          MM1 = M - 1
  3928.          X = 0.0D0
  3929.          I = M
  3930. C
  3931.          DO 100 J = M, IGH
  3932.             IF (DABS(A(J,MM1)) .LE. DABS(X)) GO TO 100
  3933.             X = A(J,MM1)
  3934.             I = J
  3935.   100    CONTINUE
  3936. C
  3937.          INT(M) = I
  3938.          IF (I .EQ. M) GO TO 130
  3939. C     .......... INTERCHANGE ROWS AND COLUMNS OF A ..........
  3940.          DO 110 J = MM1, N
  3941.             Y = A(I,J)
  3942.             A(I,J) = A(M,J)
  3943.             A(M,J) = Y
  3944.   110    CONTINUE
  3945. C
  3946.          DO 120 J = 1, IGH
  3947.             Y = A(J,I)
  3948.             A(J,I) = A(J,M)
  3949.             A(J,M) = Y
  3950.   120    CONTINUE
  3951. C     .......... END INTERCHANGE ..........
  3952.   130    IF (X .EQ. 0.0D0) GO TO 180
  3953.          MP1 = M + 1
  3954. C
  3955.          DO 160 I = MP1, IGH
  3956.             Y = A(I,MM1)
  3957.             IF (Y .EQ. 0.0D0) GO TO 160
  3958.             Y = Y / X
  3959.             A(I,MM1) = Y
  3960. C
  3961.             DO 140 J = M, N
  3962.   140       A(I,J) = A(I,J) - Y * A(M,J)
  3963. C
  3964.             DO 150 J = 1, IGH
  3965.   150       A(J,M) = A(J,M) + Y * A(J,I)
  3966. C
  3967.   160    CONTINUE
  3968. C
  3969.   180 CONTINUE
  3970. C
  3971.   200 RETURN
  3972.       END
  3973.       SUBROUTINE ELTRAN(NM,N,LOW,IGH,A,INT,Z)
  3974. C
  3975.       INTEGER I,J,N,KL,MM,MP,NM,IGH,LOW,MP1
  3976.       DOUBLE PRECISION A(NM,IGH),Z(NM,N)
  3977.       INTEGER INT(IGH)
  3978. C
  3979. C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE ELMTRANS,
  3980. C     NUM. MATH. 16, 181-204(1970) BY PETERS AND WILKINSON.
  3981. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 372-395(1971).
  3982. C
  3983. C     THIS SUBROUTINE ACCUMULATES THE STABILIZED ELEMENTARY
  3984. C     SIMILARITY TRANSFORMATIONS USED IN THE REDUCTION OF A
  3985. C     REAL GENERAL MATRIX TO UPPER HESSENBERG FORM BY  ELMHES.
  3986. C
  3987. C     ON INPUT
  3988. C
  3989. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  3990. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  3991. C          DIMENSION STATEMENT.
  3992. C
  3993. C        N IS THE ORDER OF THE MATRIX.
  3994. C
  3995. C        LOW AND IGH ARE INTEGERS DETERMINED BY THE BALANCING
  3996. C          SUBROUTINE  BALANC.  IF  BALANC  HAS NOT BEEN USED,
  3997. C          SET LOW=1, IGH=N.
  3998. C
  3999. C        A CONTAINS THE MULTIPLIERS WHICH WERE USED IN THE
  4000. C          REDUCTION BY  ELMHES  IN ITS LOWER TRIANGLE
  4001. C          BELOW THE SUBDIAGONAL.
  4002. C
  4003. C        INT CONTAINS INFORMATION ON THE ROWS AND COLUMNS
  4004. C          INTERCHANGED IN THE REDUCTION BY  ELMHES.
  4005. C          ONLY ELEMENTS LOW THROUGH IGH ARE USED.
  4006. C
  4007. C     ON OUTPUT
  4008. C
  4009. C        Z CONTAINS THE TRANSFORMATION MATRIX PRODUCED IN THE
  4010. C          REDUCTION BY  ELMHES.
  4011. C
  4012. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  4013. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  4014. C
  4015. C     THIS VERSION DATED AUGUST 1983.
  4016. C
  4017. C     ------------------------------------------------------------------
  4018. C
  4019. C     .......... INITIALIZE Z TO IDENTITY MATRIX ..........
  4020.       DO 80 J = 1, N
  4021. C
  4022.          DO 60 I = 1, N
  4023.    60    Z(I,J) = 0.0D0
  4024. C
  4025.          Z(J,J) = 1.0D0
  4026.    80 CONTINUE
  4027. C
  4028.       KL = IGH - LOW - 1
  4029.       IF (KL .LT. 1) GO TO 200
  4030. C     .......... FOR MP=IGH-1 STEP -1 UNTIL LOW+1 DO -- ..........
  4031.       DO 140 MM = 1, KL
  4032.          MP = IGH - MM
  4033.          MP1 = MP + 1
  4034. C
  4035.          DO 100 I = MP1, IGH
  4036.   100    Z(I,MP) = A(I,MP-1)
  4037. C
  4038.          I = INT(MP)
  4039.          IF (I .EQ. MP) GO TO 140
  4040. C
  4041.          DO 130 J = MP, IGH
  4042.             Z(MP,J) = Z(I,J)
  4043.             Z(I,J) = 0.0D0
  4044.   130    CONTINUE
  4045. C
  4046.          Z(I,MP) = 1.0D0
  4047.   140 CONTINUE
  4048. C
  4049.   200 RETURN
  4050.       END
  4051.       SUBROUTINE FIGI(NM,N,T,D,E,E2,IERR)
  4052. C
  4053.       INTEGER I,N,NM,IERR
  4054.       DOUBLE PRECISION T(NM,3),D(N),E(N),E2(N)
  4055. C
  4056. C     GIVEN A NONSYMMETRIC TRIDIAGONAL MATRIX SUCH THAT THE PRODUCTS
  4057. C     OF CORRESPONDING PAIRS OF OFF-DIAGONAL ELEMENTS ARE ALL
  4058. C     NON-NEGATIVE, THIS SUBROUTINE REDUCES IT TO A SYMMETRIC
  4059. C     TRIDIAGONAL MATRIX WITH THE SAME EIGENVALUES.  IF, FURTHER,
  4060. C     A ZERO PRODUCT ONLY OCCURS WHEN BOTH FACTORS ARE ZERO,
  4061. C     THE REDUCED MATRIX IS SIMILAR TO THE ORIGINAL MATRIX.
  4062. C
  4063. C     ON INPUT
  4064. C
  4065. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  4066. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  4067. C          DIMENSION STATEMENT.
  4068. C
  4069. C        N IS THE ORDER OF THE MATRIX.
  4070. C
  4071. C        T CONTAINS THE INPUT MATRIX.  ITS SUBDIAGONAL IS
  4072. C          STORED IN THE LAST N-1 POSITIONS OF THE FIRST COLUMN,
  4073. C          ITS DIAGONAL IN THE N POSITIONS OF THE SECOND COLUMN,
  4074. C          AND ITS SUPERDIAGONAL IN THE FIRST N-1 POSITIONS OF
  4075. C          THE THIRD COLUMN.  T(1,1) AND T(N,3) ARE ARBITRARY.
  4076. C
  4077. C     ON OUTPUT
  4078. C
  4079. C        T IS UNALTERED.
  4080. C
  4081. C        D CONTAINS THE DIAGONAL ELEMENTS OF THE SYMMETRIC MATRIX.
  4082. C
  4083. C        E CONTAINS THE SUBDIAGONAL ELEMENTS OF THE SYMMETRIC
  4084. C          MATRIX IN ITS LAST N-1 POSITIONS.  E(1) IS NOT SET.
  4085. C
  4086. C        E2 CONTAINS THE SQUARES OF THE CORRESPONDING ELEMENTS OF E.
  4087. C          E2 MAY COINCIDE WITH E IF THE SQUARES ARE NOT NEEDED.
  4088. C
  4089. C        IERR IS SET TO
  4090. C          ZERO       FOR NORMAL RETURN,
  4091. C          N+I        IF T(I,1)*T(I-1,3) IS NEGATIVE,
  4092. C          -(3*N+I)   IF T(I,1)*T(I-1,3) IS ZERO WITH ONE FACTOR
  4093. C                     NON-ZERO.  IN THIS CASE, THE EIGENVECTORS OF
  4094. C                     THE SYMMETRIC MATRIX ARE NOT SIMPLY RELATED
  4095. C                     TO THOSE OF  T  AND SHOULD NOT BE SOUGHT.
  4096. C
  4097. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  4098. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  4099. C
  4100. C     THIS VERSION DATED AUGUST 1983.
  4101. C
  4102. C     ------------------------------------------------------------------
  4103. C
  4104.       IERR = 0
  4105. C
  4106.       DO 100 I = 1, N
  4107.          IF (I .EQ. 1) GO TO 90
  4108.          E2(I) = T(I,1) * T(I-1,3)
  4109.          IF (E2(I)) 1000, 60, 80
  4110.    60    IF (T(I,1) .EQ. 0.0D0 .AND. T(I-1,3) .EQ. 0.0D0) GO TO 80
  4111. C     .......... SET ERROR -- PRODUCT OF SOME PAIR OF OFF-DIAGONAL
  4112. C                ELEMENTS IS ZERO WITH ONE MEMBER NON-ZERO ..........
  4113.          IERR = -(3 * N + I)
  4114.    80    E(I) = DSQRT(E2(I))
  4115.    90    D(I) = T(I,2)
  4116.   100 CONTINUE
  4117. C
  4118.       GO TO 1001
  4119. C     .......... SET ERROR -- PRODUCT OF SOME PAIR OF OFF-DIAGONAL
  4120. C                ELEMENTS IS NEGATIVE ..........
  4121.  1000 IERR = N + I
  4122.  1001 RETURN
  4123.       END
  4124.       SUBROUTINE FIGI2(NM,N,T,D,E,Z,IERR)
  4125. C
  4126.       INTEGER I,J,N,NM,IERR
  4127.       DOUBLE PRECISION T(NM,3),D(N),E(N),Z(NM,N)
  4128.       DOUBLE PRECISION H
  4129. C
  4130. C     GIVEN A NONSYMMETRIC TRIDIAGONAL MATRIX SUCH THAT THE PRODUCTS
  4131. C     OF CORRESPONDING PAIRS OF OFF-DIAGONAL ELEMENTS ARE ALL
  4132. C     NON-NEGATIVE, AND ZERO ONLY WHEN BOTH FACTORS ARE ZERO, THIS
  4133. C     SUBROUTINE REDUCES IT TO A SYMMETRIC TRIDIAGONAL MATRIX
  4134. C     USING AND ACCUMULATING DIAGONAL SIMILARITY TRANSFORMATIONS.
  4135. C
  4136. C     ON INPUT
  4137. C
  4138. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  4139. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  4140. C          DIMENSION STATEMENT.
  4141. C
  4142. C        N IS THE ORDER OF THE MATRIX.
  4143. C
  4144. C        T CONTAINS THE INPUT MATRIX.  ITS SUBDIAGONAL IS
  4145. C          STORED IN THE LAST N-1 POSITIONS OF THE FIRST COLUMN,
  4146. C          ITS DIAGONAL IN THE N POSITIONS OF THE SECOND COLUMN,
  4147. C          AND ITS SUPERDIAGONAL IN THE FIRST N-1 POSITIONS OF
  4148. C          THE THIRD COLUMN.  T(1,1) AND T(N,3) ARE ARBITRARY.
  4149. C
  4150. C     ON OUTPUT
  4151. C
  4152. C        T IS UNALTERED.
  4153. C
  4154. C        D CONTAINS THE DIAGONAL ELEMENTS OF THE SYMMETRIC MATRIX.
  4155. C
  4156. C        E CONTAINS THE SUBDIAGONAL ELEMENTS OF THE SYMMETRIC
  4157. C          MATRIX IN ITS LAST N-1 POSITIONS.  E(1) IS NOT SET.
  4158. C
  4159. C        Z CONTAINS THE TRANSFORMATION MATRIX PRODUCED IN
  4160. C          THE REDUCTION.
  4161. C
  4162. C        IERR IS SET TO
  4163. C          ZERO       FOR NORMAL RETURN,
  4164. C          N+I        IF T(I,1)*T(I-1,3) IS NEGATIVE,
  4165. C          2*N+I      IF T(I,1)*T(I-1,3) IS ZERO WITH
  4166. C                     ONE FACTOR NON-ZERO.
  4167. C
  4168. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  4169. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  4170. C
  4171. C     THIS VERSION DATED AUGUST 1983.
  4172. C
  4173. C     ------------------------------------------------------------------
  4174. C
  4175.       IERR = 0
  4176. C
  4177.       DO 100 I = 1, N
  4178. C
  4179.          DO 50 J = 1, N
  4180.    50    Z(I,J) = 0.0D0
  4181. C
  4182.          IF (I .EQ. 1) GO TO 70
  4183.          H = T(I,1) * T(I-1,3)
  4184.          IF (H) 900, 60, 80
  4185.    60    IF (T(I,1) .NE. 0.0D0 .OR. T(I-1,3) .NE. 0.0D0) GO TO 1000
  4186.          E(I) = 0.0D0
  4187.    70    Z(I,I) = 1.0D0
  4188.          GO TO 90
  4189.    80    E(I) = DSQRT(H)
  4190.          Z(I,I) = Z(I-1,I-1) * E(I) / T(I-1,3)
  4191.    90    D(I) = T(I,2)
  4192.   100 CONTINUE
  4193. C
  4194.       GO TO 1001
  4195. C     .......... SET ERROR -- PRODUCT OF SOME PAIR OF OFF-DIAGONAL
  4196. C                ELEMENTS IS NEGATIVE ..........
  4197.   900 IERR = N + I
  4198.       GO TO 1001
  4199. C     .......... SET ERROR -- PRODUCT OF SOME PAIR OF OFF-DIAGONAL
  4200. C                ELEMENTS IS ZERO WITH ONE MEMBER NON-ZERO ..........
  4201.  1000 IERR = 2 * N + I
  4202.  1001 RETURN
  4203.       END
  4204.       SUBROUTINE HQR(NM,N,LOW,IGH,H,WR,WI,IERR)
  4205. C
  4206.       INTEGER I,J,K,L,M,N,EN,LL,MM,NA,NM,IGH,ITN,ITS,LOW,MP2,ENM2,IERR
  4207.       DOUBLE PRECISION H(NM,N),WR(N),WI(N)
  4208.       DOUBLE PRECISION P,Q,R,S,T,W,X,Y,ZZ,NORM,TST1,TST2
  4209.       LOGICAL NOTLAS
  4210. C
  4211. C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE HQR,
  4212. C     NUM. MATH. 14, 219-231(1970) BY MARTIN, PETERS, AND WILKINSON.
  4213. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 359-371(1971).
  4214. C
  4215. C     THIS SUBROUTINE FINDS THE EIGENVALUES OF A REAL
  4216. C     UPPER HESSENBERG MATRIX BY THE QR METHOD.
  4217. C
  4218. C     ON INPUT
  4219. C
  4220. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  4221. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  4222. C          DIMENSION STATEMENT.
  4223. C
  4224. C        N IS THE ORDER OF THE MATRIX.
  4225. C
  4226. C        LOW AND IGH ARE INTEGERS DETERMINED BY THE BALANCING
  4227. C          SUBROUTINE  BALANC.  IF  BALANC  HAS NOT BEEN USED,
  4228. C          SET LOW=1, IGH=N.
  4229. C
  4230. C        H CONTAINS THE UPPER HESSENBERG MATRIX.  INFORMATION ABOUT
  4231. C          THE TRANSFORMATIONS USED IN THE REDUCTION TO HESSENBERG
  4232. C          FORM BY  ELMHES  OR  ORTHES, IF PERFORMED, IS STORED
  4233. C          IN THE REMAINING TRIANGLE UNDER THE HESSENBERG MATRIX.
  4234. C
  4235. C     ON OUTPUT
  4236. C
  4237. C        H HAS BEEN DESTROYED.  THEREFORE, IT MUST BE SAVED
  4238. C          BEFORE CALLING  HQR  IF SUBSEQUENT CALCULATION AND
  4239. C          BACK TRANSFORMATION OF EIGENVECTORS IS TO BE PERFORMED.
  4240. C
  4241. C        WR AND WI CONTAIN THE REAL AND IMAGINARY PARTS,
  4242. C          RESPECTIVELY, OF THE EIGENVALUES.  THE EIGENVALUES
  4243. C          ARE UNORDERED EXCEPT THAT COMPLEX CONJUGATE PAIRS
  4244. C          OF VALUES APPEAR CONSECUTIVELY WITH THE EIGENVALUE
  4245. C          HAVING THE POSITIVE IMAGINARY PART FIRST.  IF AN
  4246. C          ERROR EXIT IS MADE, THE EIGENVALUES SHOULD BE CORRECT
  4247. C          FOR INDICES IERR+1,...,N.
  4248. C
  4249. C        IERR IS SET TO
  4250. C          ZERO       FOR NORMAL RETURN,
  4251. C          J          IF THE LIMIT OF 30*N ITERATIONS IS EXHAUSTED
  4252. C                     WHILE THE J-TH EIGENVALUE IS BEING SOUGHT.
  4253. C
  4254. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  4255. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  4256. C
  4257. C     THIS VERSION DATED AUGUST 1983.
  4258. C
  4259. C     ------------------------------------------------------------------
  4260. C
  4261.       IERR = 0
  4262.       NORM = 0.0D0
  4263.       K = 1
  4264. C     .......... STORE ROOTS ISOLATED BY BALANC
  4265. C                AND COMPUTE MATRIX NORM ..........
  4266.       DO 50 I = 1, N
  4267. C
  4268.          DO 40 J = K, N
  4269.    40    NORM = NORM + DABS(H(I,J))
  4270. C
  4271.          K = I
  4272.          IF (I .GE. LOW .AND. I .LE. IGH) GO TO 50
  4273.          WR(I) = H(I,I)
  4274.          WI(I) = 0.0D0
  4275.    50 CONTINUE
  4276. C
  4277.       EN = IGH
  4278.       T = 0.0D0
  4279.       ITN = 30*N
  4280. C     .......... SEARCH FOR NEXT EIGENVALUES ..........
  4281.    60 IF (EN .LT. LOW) GO TO 1001
  4282.       ITS = 0
  4283.       NA = EN - 1
  4284.       ENM2 = NA - 1
  4285. C     .......... LOOK FOR SINGLE SMALL SUB-DIAGONAL ELEMENT
  4286. C                FOR L=EN STEP -1 UNTIL LOW DO -- ..........
  4287.    70 DO 80 LL = LOW, EN
  4288.          L = EN + LOW - LL
  4289.          IF (L .EQ. LOW) GO TO 100
  4290.          S = DABS(H(L-1,L-1)) + DABS(H(L,L))
  4291.          IF (S .EQ. 0.0D0) S = NORM
  4292.          TST1 = S
  4293.          TST2 = TST1 + DABS(H(L,L-1))
  4294.          IF (TST2 .EQ. TST1) GO TO 100
  4295.    80 CONTINUE
  4296. C     .......... FORM SHIFT ..........
  4297.   100 X = H(EN,EN)
  4298.       IF (L .EQ. EN) GO TO 270
  4299.       Y = H(NA,NA)
  4300.       W = H(EN,NA) * H(NA,EN)
  4301.       IF (L .EQ. NA) GO TO 280
  4302.       IF (ITN .EQ. 0) GO TO 1000
  4303.       IF (ITS .NE. 10 .AND. ITS .NE. 20) GO TO 130
  4304. C     .......... FORM EXCEPTIONAL SHIFT ..........
  4305.       T = T + X
  4306. C
  4307.       DO 120 I = LOW, EN
  4308.   120 H(I,I) = H(I,I) - X
  4309. C
  4310.       S = DABS(H(EN,NA)) + DABS(H(NA,ENM2))
  4311.       X = 0.75D0 * S
  4312.       Y = X
  4313.       W = -0.4375D0 * S * S
  4314.   130 ITS = ITS + 1
  4315.       ITN = ITN - 1
  4316. C     .......... LOOK FOR TWO CONSECUTIVE SMALL
  4317. C                SUB-DIAGONAL ELEMENTS.
  4318. C                FOR M=EN-2 STEP -1 UNTIL L DO -- ..........
  4319.       DO 140 MM = L, ENM2
  4320.          M = ENM2 + L - MM
  4321.          ZZ = H(M,M)
  4322.          R = X - ZZ
  4323.          S = Y - ZZ
  4324.          P = (R * S - W) / H(M+1,M) + H(M,M+1)
  4325.          Q = H(M+1,M+1) - ZZ - R - S
  4326.          R = H(M+2,M+1)
  4327.          S = DABS(P) + DABS(Q) + DABS(R)
  4328.          P = P / S
  4329.          Q = Q / S
  4330.          R = R / S
  4331.          IF (M .EQ. L) GO TO 150
  4332.          TST1 = DABS(P)*(DABS(H(M-1,M-1)) + DABS(ZZ) + DABS(H(M+1,M+1)))
  4333.          TST2 = TST1 + DABS(H(M,M-1))*(DABS(Q) + DABS(R))
  4334.          IF (TST2 .EQ. TST1) GO TO 150
  4335.   140 CONTINUE
  4336. C
  4337.   150 MP2 = M + 2
  4338. C
  4339.       DO 160 I = MP2, EN
  4340.          H(I,I-2) = 0.0D0
  4341.          IF (I .EQ. MP2) GO TO 160
  4342.          H(I,I-3) = 0.0D0
  4343.   160 CONTINUE
  4344. C     .......... DOUBLE QR STEP INVOLVING ROWS L TO EN AND
  4345. C                COLUMNS M TO EN ..........
  4346.       DO 260 K = M, NA
  4347.          NOTLAS = K .NE. NA
  4348.          IF (K .EQ. M) GO TO 170
  4349.          P = H(K,K-1)
  4350.          Q = H(K+1,K-1)
  4351.          R = 0.0D0
  4352.          IF (NOTLAS) R = H(K+2,K-1)
  4353.          X = DABS(P) + DABS(Q) + DABS(R)
  4354.          IF (X .EQ. 0.0D0) GO TO 260
  4355.          P = P / X
  4356.          Q = Q / X
  4357.          R = R / X
  4358.   170    S = DSIGN(DSQRT(P*P+Q*Q+R*R),P)
  4359.          IF (K .EQ. M) GO TO 180
  4360.          H(K,K-1) = -S * X
  4361.          GO TO 190
  4362.   180    IF (L .NE. M) H(K,K-1) = -H(K,K-1)
  4363.   190    P = P + S
  4364.          X = P / S
  4365.          Y = Q / S
  4366.          ZZ = R / S
  4367.          Q = Q / P
  4368.          R = R / P
  4369.          IF (NOTLAS) GO TO 225
  4370. C     .......... ROW MODIFICATION ..........
  4371.          DO 200 J = K, N
  4372.             P = H(K,J) + Q * H(K+1,J)
  4373.             H(K,J) = H(K,J) - P * X
  4374.             H(K+1,J) = H(K+1,J) - P * Y
  4375.   200    CONTINUE
  4376. C
  4377.          J = MIN0(EN,K+3)
  4378. C     .......... COLUMN MODIFICATION ..........
  4379.          DO 210 I = 1, J
  4380.             P = X * H(I,K) + Y * H(I,K+1)
  4381.             H(I,K) = H(I,K) - P
  4382.             H(I,K+1) = H(I,K+1) - P * Q
  4383.   210    CONTINUE
  4384.          GO TO 255
  4385.   225    CONTINUE
  4386. C     .......... ROW MODIFICATION ..........
  4387.          DO 230 J = K, N
  4388.             P = H(K,J) + Q * H(K+1,J) + R * H(K+2,J)
  4389.             H(K,J) = H(K,J) - P * X
  4390.             H(K+1,J) = H(K+1,J) - P * Y
  4391.             H(K+2,J) = H(K+2,J) - P * ZZ
  4392.   230    CONTINUE
  4393. C
  4394.          J = MIN0(EN,K+3)
  4395. C     .......... COLUMN MODIFICATION ..........
  4396.          DO 240 I = 1, J
  4397.             P = X * H(I,K) + Y * H(I,K+1) + ZZ * H(I,K+2)
  4398.             H(I,K) = H(I,K) - P
  4399.             H(I,K+1) = H(I,K+1) - P * Q
  4400.             H(I,K+2) = H(I,K+2) - P * R
  4401.   240    CONTINUE
  4402.   255    CONTINUE
  4403. C
  4404.   260 CONTINUE
  4405. C
  4406.       GO TO 70
  4407. C     .......... ONE ROOT FOUND ..........
  4408.   270 WR(EN) = X + T
  4409.       WI(EN) = 0.0D0
  4410.       EN = NA
  4411.       GO TO 60
  4412. C     .......... TWO ROOTS FOUND ..........
  4413.   280 P = (Y - X) / 2.0D0
  4414.       Q = P * P + W
  4415.       ZZ = DSQRT(DABS(Q))
  4416.       X = X + T
  4417.       IF (Q .LT. 0.0D0) GO TO 320
  4418. C     .......... REAL PAIR ..........
  4419.       ZZ = P + DSIGN(ZZ,P)
  4420.       WR(NA) = X + ZZ
  4421.       WR(EN) = WR(NA)
  4422.       IF (ZZ .NE. 0.0D0) WR(EN) = X - W / ZZ
  4423.       WI(NA) = 0.0D0
  4424.       WI(EN) = 0.0D0
  4425.       GO TO 330
  4426. C     .......... COMPLEX PAIR ..........
  4427.   320 WR(NA) = X + P
  4428.       WR(EN) = X + P
  4429.       WI(NA) = ZZ
  4430.       WI(EN) = -ZZ
  4431.   330 EN = ENM2
  4432.       GO TO 60
  4433. C     .......... SET ERROR -- ALL EIGENVALUES HAVE NOT
  4434. C                CONVERGED AFTER 30*N ITERATIONS ..........
  4435.  1000 IERR = EN
  4436.  1001 RETURN
  4437.       END
  4438.       SUBROUTINE HQR2(NM,N,LOW,IGH,H,WR,WI,Z,IERR)
  4439. C
  4440.       INTEGER I,J,K,L,M,N,EN,II,JJ,LL,MM,NA,NM,NN,
  4441.      X        IGH,ITN,ITS,LOW,MP2,ENM2,IERR
  4442.       DOUBLE PRECISION H(NM,N),WR(N),WI(N),Z(NM,N)
  4443.       DOUBLE PRECISION P,Q,R,S,T,W,X,Y,RA,SA,VI,VR,ZZ,NORM,TST1,TST2
  4444.       LOGICAL NOTLAS
  4445. C
  4446. C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE HQR2,
  4447. C     NUM. MATH. 16, 181-204(1970) BY PETERS AND WILKINSON.
  4448. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 372-395(1971).
  4449. C
  4450. C     THIS SUBROUTINE FINDS THE EIGENVALUES AND EIGENVECTORS
  4451. C     OF A REAL UPPER HESSENBERG MATRIX BY THE QR METHOD.  THE
  4452. C     EIGENVECTORS OF A REAL GENERAL MATRIX CAN ALSO BE FOUND
  4453. C     IF  ELMHES  AND  ELTRAN  OR  ORTHES  AND  ORTRAN  HAVE
  4454. C     BEEN USED TO REDUCE THIS GENERAL MATRIX TO HESSENBERG FORM
  4455. C     AND TO ACCUMULATE THE SIMILARITY TRANSFORMATIONS.
  4456. C
  4457. C     ON INPUT
  4458. C
  4459. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  4460. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  4461. C          DIMENSION STATEMENT.
  4462. C
  4463. C        N IS THE ORDER OF THE MATRIX.
  4464. C
  4465. C        LOW AND IGH ARE INTEGERS DETERMINED BY THE BALANCING
  4466. C          SUBROUTINE  BALANC.  IF  BALANC  HAS NOT BEEN USED,
  4467. C          SET LOW=1, IGH=N.
  4468. C
  4469. C        H CONTAINS THE UPPER HESSENBERG MATRIX.
  4470. C
  4471. C        Z CONTAINS THE TRANSFORMATION MATRIX PRODUCED BY  ELTRAN
  4472. C          AFTER THE REDUCTION BY  ELMHES, OR BY  ORTRAN  AFTER THE
  4473. C          REDUCTION BY  ORTHES, IF PERFORMED.  IF THE EIGENVECTORS
  4474. C          OF THE HESSENBERG MATRIX ARE DESIRED, Z MUST CONTAIN THE
  4475. C          IDENTITY MATRIX.
  4476. C
  4477. C     ON OUTPUT
  4478. C
  4479. C        H HAS BEEN DESTROYED.
  4480. C
  4481. C        WR AND WI CONTAIN THE REAL AND IMAGINARY PARTS,
  4482. C          RESPECTIVELY, OF THE EIGENVALUES.  THE EIGENVALUES
  4483. C          ARE UNORDERED EXCEPT THAT COMPLEX CONJUGATE PAIRS
  4484. C          OF VALUES APPEAR CONSECUTIVELY WITH THE EIGENVALUE
  4485. C          HAVING THE POSITIVE IMAGINARY PART FIRST.  IF AN
  4486. C          ERROR EXIT IS MADE, THE EIGENVALUES SHOULD BE CORRECT
  4487. C          FOR INDICES IERR+1,...,N.
  4488. C
  4489. C        Z CONTAINS THE REAL AND IMAGINARY PARTS OF THE EIGENVECTORS.
  4490. C          IF THE I-TH EIGENVALUE IS REAL, THE I-TH COLUMN OF Z
  4491. C          CONTAINS ITS EIGENVECTOR.  IF THE I-TH EIGENVALUE IS COMPLEX
  4492. C          WITH POSITIVE IMAGINARY PART, THE I-TH AND (I+1)-TH
  4493. C          COLUMNS OF Z CONTAIN THE REAL AND IMAGINARY PARTS OF ITS
  4494. C          EIGENVECTOR.  THE EIGENVECTORS ARE UNNORMALIZED.  IF AN
  4495. C          ERROR EXIT IS MADE, NONE OF THE EIGENVECTORS HAS BEEN FOUND.
  4496. C
  4497. C        IERR IS SET TO
  4498. C          ZERO       FOR NORMAL RETURN,
  4499. C          J          IF THE LIMIT OF 30*N ITERATIONS IS EXHAUSTED
  4500. C                     WHILE THE J-TH EIGENVALUE IS BEING SOUGHT.
  4501. C
  4502. C     CALLS CDIV FOR COMPLEX DIVISION.
  4503. C
  4504. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  4505. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  4506. C
  4507. C     THIS VERSION DATED AUGUST 1983.
  4508. C
  4509. C     ------------------------------------------------------------------
  4510. C
  4511.       IERR = 0
  4512.       NORM = 0.0D0
  4513.       K = 1
  4514. C     .......... STORE ROOTS ISOLATED BY BALANC
  4515. C                AND COMPUTE MATRIX NORM ..........
  4516.       DO 50 I = 1, N
  4517. C
  4518.          DO 40 J = K, N
  4519.    40    NORM = NORM + DABS(H(I,J))
  4520. C
  4521.          K = I
  4522.          IF (I .GE. LOW .AND. I .LE. IGH) GO TO 50
  4523.          WR(I) = H(I,I)
  4524.          WI(I) = 0.0D0
  4525.    50 CONTINUE
  4526. C
  4527.       EN = IGH
  4528.       T = 0.0D0
  4529.       ITN = 30*N
  4530. C     .......... SEARCH FOR NEXT EIGENVALUES ..........
  4531.    60 IF (EN .LT. LOW) GO TO 340
  4532.       ITS = 0
  4533.       NA = EN - 1
  4534.       ENM2 = NA - 1
  4535. C     .......... LOOK FOR SINGLE SMALL SUB-DIAGONAL ELEMENT
  4536. C                FOR L=EN STEP -1 UNTIL LOW DO -- ..........
  4537.    70 DO 80 LL = LOW, EN
  4538.          L = EN + LOW - LL
  4539.          IF (L .EQ. LOW) GO TO 100
  4540.          S = DABS(H(L-1,L-1)) + DABS(H(L,L))
  4541.          IF (S .EQ. 0.0D0) S = NORM
  4542.          TST1 = S
  4543.          TST2 = TST1 + DABS(H(L,L-1))
  4544.          IF (TST2 .EQ. TST1) GO TO 100
  4545.    80 CONTINUE
  4546. C     .......... FORM SHIFT ..........
  4547.   100 X = H(EN,EN)
  4548.       IF (L .EQ. EN) GO TO 270
  4549.       Y = H(NA,NA)
  4550.       W = H(EN,NA) * H(NA,EN)
  4551.       IF (L .EQ. NA) GO TO 280
  4552.       IF (ITN .EQ. 0) GO TO 1000
  4553.       IF (ITS .NE. 10 .AND. ITS .NE. 20) GO TO 130
  4554. C     .......... FORM EXCEPTIONAL SHIFT ..........
  4555.       T = T + X
  4556. C
  4557.       DO 120 I = LOW, EN
  4558.   120 H(I,I) = H(I,I) - X
  4559. C
  4560.       S = DABS(H(EN,NA)) + DABS(H(NA,ENM2))
  4561.       X = 0.75D0 * S
  4562.       Y = X
  4563.       W = -0.4375D0 * S * S
  4564.   130 ITS = ITS + 1
  4565.       ITN = ITN - 1
  4566. C     .......... LOOK FOR TWO CONSECUTIVE SMALL
  4567. C                SUB-DIAGONAL ELEMENTS.
  4568. C                FOR M=EN-2 STEP -1 UNTIL L DO -- ..........
  4569.       DO 140 MM = L, ENM2
  4570.          M = ENM2 + L - MM
  4571.          ZZ = H(M,M)
  4572.          R = X - ZZ
  4573.          S = Y - ZZ
  4574.          P = (R * S - W) / H(M+1,M) + H(M,M+1)
  4575.          Q = H(M+1,M+1) - ZZ - R - S
  4576.          R = H(M+2,M+1)
  4577.          S = DABS(P) + DABS(Q) + DABS(R)
  4578.          P = P / S
  4579.          Q = Q / S
  4580.          R = R / S
  4581.          IF (M .EQ. L) GO TO 150
  4582.          TST1 = DABS(P)*(DABS(H(M-1,M-1)) + DABS(ZZ) + DABS(H(M+1,M+1)))
  4583.          TST2 = TST1 + DABS(H(M,M-1))*(DABS(Q) + DABS(R))
  4584.          IF (TST2 .EQ. TST1) GO TO 150
  4585.   140 CONTINUE
  4586. C
  4587.   150 MP2 = M + 2
  4588. C
  4589.       DO 160 I = MP2, EN
  4590.          H(I,I-2) = 0.0D0
  4591.          IF (I .EQ. MP2) GO TO 160
  4592.          H(I,I-3) = 0.0D0
  4593.   160 CONTINUE
  4594. C     .......... DOUBLE QR STEP INVOLVING ROWS L TO EN AND
  4595. C                COLUMNS M TO EN ..........
  4596.       DO 260 K = M, NA
  4597.          NOTLAS = K .NE. NA
  4598.          IF (K .EQ. M) GO TO 170
  4599.          P = H(K,K-1)
  4600.          Q = H(K+1,K-1)
  4601.          R = 0.0D0
  4602.          IF (NOTLAS) R = H(K+2,K-1)
  4603.          X = DABS(P) + DABS(Q) + DABS(R)
  4604.          IF (X .EQ. 0.0D0) GO TO 260
  4605.          P = P / X
  4606.          Q = Q / X
  4607.          R = R / X
  4608.   170    S = DSIGN(DSQRT(P*P+Q*Q+R*R),P)
  4609.          IF (K .EQ. M) GO TO 180
  4610.          H(K,K-1) = -S * X
  4611.          GO TO 190
  4612.   180    IF (L .NE. M) H(K,K-1) = -H(K,K-1)
  4613.   190    P = P + S
  4614.          X = P / S
  4615.          Y = Q / S
  4616.          ZZ = R / S
  4617.          Q = Q / P
  4618.          R = R / P
  4619.          IF (NOTLAS) GO TO 225
  4620. C     .......... ROW MODIFICATION ..........
  4621.          DO 200 J = K, N
  4622.             P = H(K,J) + Q * H(K+1,J)
  4623.             H(K,J) = H(K,J) - P * X
  4624.             H(K+1,J) = H(K+1,J) - P * Y
  4625.   200    CONTINUE
  4626. C
  4627.          J = MIN0(EN,K+3)
  4628. C     .......... COLUMN MODIFICATION ..........
  4629.          DO 210 I = 1, J
  4630.             P = X * H(I,K) + Y * H(I,K+1)
  4631.             H(I,K) = H(I,K) - P
  4632.             H(I,K+1) = H(I,K+1) - P * Q
  4633.   210    CONTINUE
  4634. C     .......... ACCUMULATE TRANSFORMATIONS ..........
  4635.          DO 220 I = LOW, IGH
  4636.             P = X * Z(I,K) + Y * Z(I,K+1)
  4637.             Z(I,K) = Z(I,K) - P
  4638.             Z(I,K+1) = Z(I,K+1) - P * Q
  4639.   220    CONTINUE
  4640.          GO TO 255
  4641.   225    CONTINUE
  4642. C     .......... ROW MODIFICATION ..........
  4643.          DO 230 J = K, N
  4644.             P = H(K,J) + Q * H(K+1,J) + R * H(K+2,J)
  4645.             H(K,J) = H(K,J) - P * X
  4646.             H(K+1,J) = H(K+1,J) - P * Y
  4647.             H(K+2,J) = H(K+2,J) - P * ZZ
  4648.   230    CONTINUE
  4649. C
  4650.          J = MIN0(EN,K+3)
  4651. C     .......... COLUMN MODIFICATION ..........
  4652.          DO 240 I = 1, J
  4653.             P = X * H(I,K) + Y * H(I,K+1) + ZZ * H(I,K+2)
  4654.             H(I,K) = H(I,K) - P
  4655.             H(I,K+1) = H(I,K+1) - P * Q
  4656.             H(I,K+2) = H(I,K+2) - P * R
  4657.   240    CONTINUE
  4658. C     .......... ACCUMULATE TRANSFORMATIONS ..........
  4659.          DO 250 I = LOW, IGH
  4660.             P = X * Z(I,K) + Y * Z(I,K+1) + ZZ * Z(I,K+2)
  4661.             Z(I,K) = Z(I,K) - P
  4662.             Z(I,K+1) = Z(I,K+1) - P * Q
  4663.             Z(I,K+2) = Z(I,K+2) - P * R
  4664.   250    CONTINUE
  4665.   255    CONTINUE
  4666. C
  4667.   260 CONTINUE
  4668. C
  4669.       GO TO 70
  4670. C     .......... ONE ROOT FOUND ..........
  4671.   270 H(EN,EN) = X + T
  4672.       WR(EN) = H(EN,EN)
  4673.       WI(EN) = 0.0D0
  4674.       EN = NA
  4675.       GO TO 60
  4676. C     .......... TWO ROOTS FOUND ..........
  4677.   280 P = (Y - X) / 2.0D0
  4678.       Q = P * P + W
  4679.       ZZ = DSQRT(DABS(Q))
  4680.       H(EN,EN) = X + T
  4681.       X = H(EN,EN)
  4682.       H(NA,NA) = Y + T
  4683.       IF (Q .LT. 0.0D0) GO TO 320
  4684. C     .......... REAL PAIR ..........
  4685.       ZZ = P + DSIGN(ZZ,P)
  4686.       WR(NA) = X + ZZ
  4687.       WR(EN) = WR(NA)
  4688.       IF (ZZ .NE. 0.0D0) WR(EN) = X - W / ZZ
  4689.       WI(NA) = 0.0D0
  4690.       WI(EN) = 0.0D0
  4691.       X = H(EN,NA)
  4692.       S = DABS(X) + DABS(ZZ)
  4693.       P = X / S
  4694.       Q = ZZ / S
  4695.       R = DSQRT(P*P+Q*Q)
  4696.       P = P / R
  4697.       Q = Q / R
  4698. C     .......... ROW MODIFICATION ..........
  4699.       DO 290 J = NA, N
  4700.          ZZ = H(NA,J)
  4701.          H(NA,J) = Q * ZZ + P * H(EN,J)
  4702.          H(EN,J) = Q * H(EN,J) - P * ZZ
  4703.   290 CONTINUE
  4704. C     .......... COLUMN MODIFICATION ..........
  4705.       DO 300 I = 1, EN
  4706.          ZZ = H(I,NA)
  4707.          H(I,NA) = Q * ZZ + P * H(I,EN)
  4708.          H(I,EN) = Q * H(I,EN) - P * ZZ
  4709.   300 CONTINUE
  4710. C     .......... ACCUMULATE TRANSFORMATIONS ..........
  4711.       DO 310 I = LOW, IGH
  4712.          ZZ = Z(I,NA)
  4713.          Z(I,NA) = Q * ZZ + P * Z(I,EN)
  4714.          Z(I,EN) = Q * Z(I,EN) - P * ZZ
  4715.   310 CONTINUE
  4716. C
  4717.       GO TO 330
  4718. C     .......... COMPLEX PAIR ..........
  4719.   320 WR(NA) = X + P
  4720.       WR(EN) = X + P
  4721.       WI(NA) = ZZ
  4722.       WI(EN) = -ZZ
  4723.   330 EN = ENM2
  4724.       GO TO 60
  4725. C     .......... ALL ROOTS FOUND.  BACKSUBSTITUTE TO FIND
  4726. C                VECTORS OF UPPER TRIANGULAR FORM ..........
  4727.   340 IF (NORM .EQ. 0.0D0) GO TO 1001
  4728. C     .......... FOR EN=N STEP -1 UNTIL 1 DO -- ..........
  4729.       DO 800 NN = 1, N
  4730.          EN = N + 1 - NN
  4731.          P = WR(EN)
  4732.          Q = WI(EN)
  4733.          NA = EN - 1
  4734.          IF (Q) 710, 600, 800
  4735. C     .......... REAL VECTOR ..........
  4736.   600    M = EN
  4737.          H(EN,EN) = 1.0D0
  4738.          IF (NA .EQ. 0) GO TO 800
  4739. C     .......... FOR I=EN-1 STEP -1 UNTIL 1 DO -- ..........
  4740.          DO 700 II = 1, NA
  4741.             I = EN - II
  4742.             W = H(I,I) - P
  4743.             R = 0.0D0
  4744. C
  4745.             DO 610 J = M, EN
  4746.   610       R = R + H(I,J) * H(J,EN)
  4747. C
  4748.             IF (WI(I) .GE. 0.0D0) GO TO 630
  4749.             ZZ = W
  4750.             S = R
  4751.             GO TO 700
  4752.   630       M = I
  4753.             IF (WI(I) .NE. 0.0D0) GO TO 640
  4754.             T = W
  4755.             IF (T .NE. 0.0D0) GO TO 635
  4756.                TST1 = NORM
  4757.                T = TST1
  4758.   632          T = 0.01D0 * T
  4759.                TST2 = NORM + T
  4760.                IF (TST2 .GT. TST1) GO TO 632
  4761.   635       H(I,EN) = -R / T
  4762.             GO TO 680
  4763. C     .......... SOLVE REAL EQUATIONS ..........
  4764.   640       X = H(I,I+1)
  4765.             Y = H(I+1,I)
  4766.             Q = (WR(I) - P) * (WR(I) - P) + WI(I) * WI(I)
  4767.             T = (X * S - ZZ * R) / Q
  4768.             H(I,EN) = T
  4769.             IF (DABS(X) .LE. DABS(ZZ)) GO TO 650
  4770.             H(I+1,EN) = (-R - W * T) / X
  4771.             GO TO 680
  4772.   650       H(I+1,EN) = (-S - Y * T) / ZZ
  4773. C
  4774. C     .......... OVERFLOW CONTROL ..........
  4775.   680       T = DABS(H(I,EN))
  4776.             IF (T .EQ. 0.0D0) GO TO 700
  4777.             TST1 = T
  4778.             TST2 = TST1 + 1.0D0/TST1
  4779.             IF (TST2 .GT. TST1) GO TO 700
  4780.             DO 690 J = I, EN
  4781.                H(J,EN) = H(J,EN)/T
  4782.   690       CONTINUE
  4783. C
  4784.   700    CONTINUE
  4785. C     .......... END REAL VECTOR ..........
  4786.          GO TO 800
  4787. C     .......... COMPLEX VECTOR ..........
  4788.   710    M = NA
  4789. C     .......... LAST VECTOR COMPONENT CHOSEN IMAGINARY SO THAT
  4790. C                EIGENVECTOR MATRIX IS TRIANGULAR ..........
  4791.          IF (DABS(H(EN,NA)) .LE. DABS(H(NA,EN))) GO TO 720
  4792.          H(NA,NA) = Q / H(EN,NA)
  4793.          H(NA,EN) = -(H(EN,EN) - P) / H(EN,NA)
  4794.          GO TO 730
  4795.   720    CALL CDIV(0.0D0,-H(NA,EN),H(NA,NA)-P,Q,H(NA,NA),H(NA,EN))
  4796.   730    H(EN,NA) = 0.0D0
  4797.          H(EN,EN) = 1.0D0
  4798.          ENM2 = NA - 1
  4799.          IF (ENM2 .EQ. 0) GO TO 800
  4800. C     .......... FOR I=EN-2 STEP -1 UNTIL 1 DO -- ..........
  4801.          DO 795 II = 1, ENM2
  4802.             I = NA - II
  4803.             W = H(I,I) - P
  4804.             RA = 0.0D0
  4805.             SA = 0.0D0
  4806. C
  4807.             DO 760 J = M, EN
  4808.                RA = RA + H(I,J) * H(J,NA)
  4809.                SA = SA + H(I,J) * H(J,EN)
  4810.   760       CONTINUE
  4811. C
  4812.             IF (WI(I) .GE. 0.0D0) GO TO 770
  4813.             ZZ = W
  4814.             R = RA
  4815.             S = SA
  4816.             GO TO 795
  4817.   770       M = I
  4818.             IF (WI(I) .NE. 0.0D0) GO TO 780
  4819.             CALL CDIV(-RA,-SA,W,Q,H(I,NA),H(I,EN))
  4820.             GO TO 790
  4821. C     .......... SOLVE COMPLEX EQUATIONS ..........
  4822.   780       X = H(I,I+1)
  4823.             Y = H(I+1,I)
  4824.             VR = (WR(I) - P) * (WR(I) - P) + WI(I) * WI(I) - Q * Q
  4825.             VI = (WR(I) - P) * 2.0D0 * Q
  4826.             IF (VR .NE. 0.0D0 .OR. VI .NE. 0.0D0) GO TO 784
  4827.                TST1 = NORM * (DABS(W) + DABS(Q) + DABS(X)
  4828.      X                      + DABS(Y) + DABS(ZZ))
  4829.                VR = TST1
  4830.   783          VR = 0.01D0 * VR
  4831.                TST2 = TST1 + VR
  4832.                IF (TST2 .GT. TST1) GO TO 783
  4833.   784       CALL CDIV(X*R-ZZ*RA+Q*SA,X*S-ZZ*SA-Q*RA,VR,VI,
  4834.      X                H(I,NA),H(I,EN))
  4835.             IF (DABS(X) .LE. DABS(ZZ) + DABS(Q)) GO TO 785
  4836.             H(I+1,NA) = (-RA - W * H(I,NA) + Q * H(I,EN)) / X
  4837.             H(I+1,EN) = (-SA - W * H(I,EN) - Q * H(I,NA)) / X
  4838.             GO TO 790
  4839.   785       CALL CDIV(-R-Y*H(I,NA),-S-Y*H(I,EN),ZZ,Q,
  4840.      X                H(I+1,NA),H(I+1,EN))
  4841. C
  4842. C     .......... OVERFLOW CONTROL ..........
  4843.   790       T = DMAX1(DABS(H(I,NA)), DABS(H(I,EN)))
  4844.             IF (T .EQ. 0.0D0) GO TO 795
  4845.             TST1 = T
  4846.             TST2 = TST1 + 1.0D0/TST1
  4847.             IF (TST2 .GT. TST1) GO TO 795
  4848.             DO 792 J = I, EN
  4849.                H(J,NA) = H(J,NA)/T
  4850.                H(J,EN) = H(J,EN)/T
  4851.   792       CONTINUE
  4852. C
  4853.   795    CONTINUE
  4854. C     .......... END COMPLEX VECTOR ..........
  4855.   800 CONTINUE
  4856. C     .......... END BACK SUBSTITUTION.
  4857. C                VECTORS OF ISOLATED ROOTS ..........
  4858.       DO 840 I = 1, N
  4859.          IF (I .GE. LOW .AND. I .LE. IGH) GO TO 840
  4860. C
  4861.          DO 820 J = I, N
  4862.   820    Z(I,J) = H(I,J)
  4863. C
  4864.   840 CONTINUE
  4865. C     .......... MULTIPLY BY TRANSFORMATION MATRIX TO GIVE
  4866. C                VECTORS OF ORIGINAL FULL MATRIX.
  4867. C                FOR J=N STEP -1 UNTIL LOW DO -- ..........
  4868.       DO 880 JJ = LOW, N
  4869.          J = N + LOW - JJ
  4870.          M = MIN0(J,IGH)
  4871. C
  4872.          DO 880 I = LOW, IGH
  4873.             ZZ = 0.0D0
  4874. C
  4875.             DO 860 K = LOW, M
  4876.   860       ZZ = ZZ + Z(I,K) * H(K,J)
  4877. C
  4878.             Z(I,J) = ZZ
  4879.   880 CONTINUE
  4880. C
  4881.       GO TO 1001
  4882. C     .......... SET ERROR -- ALL EIGENVALUES HAVE NOT
  4883. C                CONVERGED AFTER 30*N ITERATIONS ..........
  4884.  1000 IERR = EN
  4885.  1001 RETURN
  4886.       END
  4887.       SUBROUTINE HTRIB3(NM,N,A,TAU,M,ZR,ZI)
  4888. C
  4889.       INTEGER I,J,K,L,M,N,NM
  4890.       DOUBLE PRECISION A(NM,N),TAU(2,N),ZR(NM,M),ZI(NM,M)
  4891.       DOUBLE PRECISION H,S,SI
  4892. C
  4893. C     THIS SUBROUTINE IS A TRANSLATION OF A COMPLEX ANALOGUE OF
  4894. C     THE ALGOL PROCEDURE TRBAK3, NUM. MATH. 11, 181-195(1968)
  4895. C     BY MARTIN, REINSCH, AND WILKINSON.
  4896. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 212-226(1971).
  4897. C
  4898. C     THIS SUBROUTINE FORMS THE EIGENVECTORS OF A COMPLEX HERMITIAN
  4899. C     MATRIX BY BACK TRANSFORMING THOSE OF THE CORRESPONDING
  4900. C     REAL SYMMETRIC TRIDIAGONAL MATRIX DETERMINED BY  HTRID3.
  4901. C
  4902. C     ON INPUT
  4903. C
  4904. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  4905. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  4906. C          DIMENSION STATEMENT.
  4907. C
  4908. C        N IS THE ORDER OF THE MATRIX.
  4909. C
  4910. C        A CONTAINS INFORMATION ABOUT THE UNITARY TRANSFORMATIONS
  4911. C          USED IN THE REDUCTION BY  HTRID3.
  4912. C
  4913. C        TAU CONTAINS FURTHER INFORMATION ABOUT THE TRANSFORMATIONS.
  4914. C
  4915. C        M IS THE NUMBER OF EIGENVECTORS TO BE BACK TRANSFORMED.
  4916. C
  4917. C        ZR CONTAINS THE EIGENVECTORS TO BE BACK TRANSFORMED
  4918. C          IN ITS FIRST M COLUMNS.
  4919. C
  4920. C     ON OUTPUT
  4921. C
  4922. C        ZR AND ZI CONTAIN THE REAL AND IMAGINARY PARTS,
  4923. C          RESPECTIVELY, OF THE TRANSFORMED EIGENVECTORS
  4924. C          IN THEIR FIRST M COLUMNS.
  4925. C
  4926. C     NOTE THAT THE LAST COMPONENT OF EACH RETURNED VECTOR
  4927. C     IS REAL AND THAT VECTOR EUCLIDEAN NORMS ARE PRESERVED.
  4928. C
  4929. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  4930. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  4931. C
  4932. C     THIS VERSION DATED AUGUST 1983.
  4933. C
  4934. C     ------------------------------------------------------------------
  4935. C
  4936.       IF (M .EQ. 0) GO TO 200
  4937. C     .......... TRANSFORM THE EIGENVECTORS OF THE REAL SYMMETRIC
  4938. C                TRIDIAGONAL MATRIX TO THOSE OF THE HERMITIAN
  4939. C                TRIDIAGONAL MATRIX. ..........
  4940.       DO 50 K = 1, N
  4941. C
  4942.          DO 50 J = 1, M
  4943.             ZI(K,J) = -ZR(K,J) * TAU(2,K)
  4944.             ZR(K,J) = ZR(K,J) * TAU(1,K)
  4945.    50 CONTINUE
  4946. C
  4947.       IF (N .EQ. 1) GO TO 200
  4948. C     .......... RECOVER AND APPLY THE HOUSEHOLDER MATRICES ..........
  4949.       DO 140 I = 2, N
  4950.          L = I - 1
  4951.          H = A(I,I)
  4952.          IF (H .EQ. 0.0D0) GO TO 140
  4953. C
  4954.          DO 130 J = 1, M
  4955.             S = 0.0D0
  4956.             SI = 0.0D0
  4957. C
  4958.             DO 110 K = 1, L
  4959.                S = S + A(I,K) * ZR(K,J) - A(K,I) * ZI(K,J)
  4960.                SI = SI + A(I,K) * ZI(K,J) + A(K,I) * ZR(K,J)
  4961.   110       CONTINUE
  4962. C     .......... DOUBLE DIVISIONS AVOID POSSIBLE UNDERFLOW ..........
  4963.             S = (S / H) / H
  4964.             SI = (SI / H) / H
  4965. C
  4966.             DO 120 K = 1, L
  4967.                ZR(K,J) = ZR(K,J) - S * A(I,K) - SI * A(K,I)
  4968.                ZI(K,J) = ZI(K,J) - SI * A(I,K) + S * A(K,I)
  4969.   120       CONTINUE
  4970. C
  4971.   130    CONTINUE
  4972. C
  4973.   140 CONTINUE
  4974. C
  4975.   200 RETURN
  4976.       END
  4977.       SUBROUTINE HTRIBK(NM,N,AR,AI,TAU,M,ZR,ZI)
  4978. C
  4979.       INTEGER I,J,K,L,M,N,NM
  4980.       DOUBLE PRECISION AR(NM,N),AI(NM,N),TAU(2,N),ZR(NM,M),ZI(NM,M)
  4981.       DOUBLE PRECISION H,S,SI
  4982. C
  4983. C     THIS SUBROUTINE IS A TRANSLATION OF A COMPLEX ANALOGUE OF
  4984. C     THE ALGOL PROCEDURE TRBAK1, NUM. MATH. 11, 181-195(1968)
  4985. C     BY MARTIN, REINSCH, AND WILKINSON.
  4986. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 212-226(1971).
  4987. C
  4988. C     THIS SUBROUTINE FORMS THE EIGENVECTORS OF A COMPLEX HERMITIAN
  4989. C     MATRIX BY BACK TRANSFORMING THOSE OF THE CORRESPONDING
  4990. C     REAL SYMMETRIC TRIDIAGONAL MATRIX DETERMINED BY  HTRIDI.
  4991. C
  4992. C     ON INPUT
  4993. C
  4994. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  4995. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  4996. C          DIMENSION STATEMENT.
  4997. C
  4998. C        N IS THE ORDER OF THE MATRIX.
  4999. C
  5000. C        AR AND AI CONTAIN INFORMATION ABOUT THE UNITARY TRANS-
  5001. C          FORMATIONS USED IN THE REDUCTION BY  HTRIDI  IN THEIR
  5002. C          FULL LOWER TRIANGLES EXCEPT FOR THE DIAGONAL OF AR.
  5003. C
  5004. C        TAU CONTAINS FURTHER INFORMATION ABOUT THE TRANSFORMATIONS.
  5005. C
  5006. C        M IS THE NUMBER OF EIGENVECTORS TO BE BACK TRANSFORMED.
  5007. C
  5008. C        ZR CONTAINS THE EIGENVECTORS TO BE BACK TRANSFORMED
  5009. C          IN ITS FIRST M COLUMNS.
  5010. C
  5011. C     ON OUTPUT
  5012. C
  5013. C        ZR AND ZI CONTAIN THE REAL AND IMAGINARY PARTS,
  5014. C          RESPECTIVELY, OF THE TRANSFORMED EIGENVECTORS
  5015. C          IN THEIR FIRST M COLUMNS.
  5016. C
  5017. C     NOTE THAT THE LAST COMPONENT OF EACH RETURNED VECTOR
  5018. C     IS REAL AND THAT VECTOR EUCLIDEAN NORMS ARE PRESERVED.
  5019. C
  5020. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  5021. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  5022. C
  5023. C     THIS VERSION DATED AUGUST 1983.
  5024. C
  5025. C     ------------------------------------------------------------------
  5026. C
  5027.       IF (M .EQ. 0) GO TO 200
  5028. C     .......... TRANSFORM THE EIGENVECTORS OF THE REAL SYMMETRIC
  5029. C                TRIDIAGONAL MATRIX TO THOSE OF THE HERMITIAN
  5030. C                TRIDIAGONAL MATRIX. ..........
  5031.       DO 50 K = 1, N
  5032. C
  5033.          DO 50 J = 1, M
  5034.             ZI(K,J) = -ZR(K,J) * TAU(2,K)
  5035.             ZR(K,J) = ZR(K,J) * TAU(1,K)
  5036.    50 CONTINUE
  5037. C
  5038.       IF (N .EQ. 1) GO TO 200
  5039. C     .......... RECOVER AND APPLY THE HOUSEHOLDER MATRICES ..........
  5040.       DO 140 I = 2, N
  5041.          L = I - 1
  5042.          H = AI(I,I)
  5043.          IF (H .EQ. 0.0D0) GO TO 140
  5044. C
  5045.          DO 130 J = 1, M
  5046.             S = 0.0D0
  5047.             SI = 0.0D0
  5048. C
  5049.             DO 110 K = 1, L
  5050.                S = S + AR(I,K) * ZR(K,J) - AI(I,K) * ZI(K,J)
  5051.                SI = SI + AR(I,K) * ZI(K,J) + AI(I,K) * ZR(K,J)
  5052.   110       CONTINUE
  5053. C     .......... DOUBLE DIVISIONS AVOID POSSIBLE UNDERFLOW ..........
  5054.             S = (S / H) / H
  5055.             SI = (SI / H) / H
  5056. C
  5057.             DO 120 K = 1, L
  5058.                ZR(K,J) = ZR(K,J) - S * AR(I,K) - SI * AI(I,K)
  5059.                ZI(K,J) = ZI(K,J) - SI * AR(I,K) + S * AI(I,K)
  5060.   120       CONTINUE
  5061. C
  5062.   130    CONTINUE
  5063. C
  5064.   140 CONTINUE
  5065. C
  5066.   200 RETURN
  5067.       END
  5068.       SUBROUTINE HTRID3(NM,N,A,D,E,E2,TAU)
  5069. C
  5070.       INTEGER I,J,K,L,N,II,NM,JM1,JP1
  5071.       DOUBLE PRECISION A(NM,N),D(N),E(N),E2(N),TAU(2,N)
  5072.       DOUBLE PRECISION F,G,H,FI,GI,HH,SI,SCALE,PYTHAG
  5073. C
  5074. C     THIS SUBROUTINE IS A TRANSLATION OF A COMPLEX ANALOGUE OF
  5075. C     THE ALGOL PROCEDURE TRED3, NUM. MATH. 11, 181-195(1968)
  5076. C     BY MARTIN, REINSCH, AND WILKINSON.
  5077. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 212-226(1971).
  5078. C
  5079. C     THIS SUBROUTINE REDUCES A COMPLEX HERMITIAN MATRIX, STORED AS
  5080. C     A SINGLE SQUARE ARRAY, TO A REAL SYMMETRIC TRIDIAGONAL MATRIX
  5081. C     USING UNITARY SIMILARITY TRANSFORMATIONS.
  5082. C
  5083. C     ON INPUT
  5084. C
  5085. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  5086. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  5087. C          DIMENSION STATEMENT.
  5088. C
  5089. C        N IS THE ORDER OF THE MATRIX.
  5090. C
  5091. C        A CONTAINS THE LOWER TRIANGLE OF THE COMPLEX HERMITIAN INPUT
  5092. C          MATRIX.  THE REAL PARTS OF THE MATRIX ELEMENTS ARE STORED
  5093. C          IN THE FULL LOWER TRIANGLE OF A, AND THE IMAGINARY PARTS
  5094. C          ARE STORED IN THE TRANSPOSED POSITIONS OF THE STRICT UPPER
  5095. C          TRIANGLE OF A.  NO STORAGE IS REQUIRED FOR THE ZERO
  5096. C          IMAGINARY PARTS OF THE DIAGONAL ELEMENTS.
  5097. C
  5098. C     ON OUTPUT
  5099. C
  5100. C        A CONTAINS INFORMATION ABOUT THE UNITARY TRANSFORMATIONS
  5101. C          USED IN THE REDUCTION.
  5102. C
  5103. C        D CONTAINS THE DIAGONAL ELEMENTS OF THE THE TRIDIAGONAL MATRIX.
  5104. C
  5105. C        E CONTAINS THE SUBDIAGONAL ELEMENTS OF THE TRIDIAGONAL
  5106. C          MATRIX IN ITS LAST N-1 POSITIONS.  E(1) IS SET TO ZERO.
  5107. C
  5108. C        E2 CONTAINS THE SQUARES OF THE CORRESPONDING ELEMENTS OF E.
  5109. C          E2 MAY COINCIDE WITH E IF THE SQUARES ARE NOT NEEDED.
  5110. C
  5111. C        TAU CONTAINS FURTHER INFORMATION ABOUT THE TRANSFORMATIONS.
  5112. C
  5113. C     CALLS PYTHAG FOR  DSQRT(A*A + B*B) .
  5114. C
  5115. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  5116. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  5117. C
  5118. C     THIS VERSION DATED AUGUST 1983.
  5119. C
  5120. C     ------------------------------------------------------------------
  5121. C
  5122.       TAU(1,N) = 1.0D0
  5123.       TAU(2,N) = 0.0D0
  5124. C     .......... FOR I=N STEP -1 UNTIL 1 DO -- ..........
  5125.       DO 300 II = 1, N
  5126.          I = N + 1 - II
  5127.          L = I - 1
  5128.          H = 0.0D0
  5129.          SCALE = 0.0D0
  5130.          IF (L .LT. 1) GO TO 130
  5131. C     .......... SCALE ROW (ALGOL TOL THEN NOT NEEDED) ..........
  5132.          DO 120 K = 1, L
  5133.   120    SCALE = SCALE + DABS(A(I,K)) + DABS(A(K,I))
  5134. C
  5135.          IF (SCALE .NE. 0.0D0) GO TO 140
  5136.          TAU(1,L) = 1.0D0
  5137.          TAU(2,L) = 0.0D0
  5138.   130    E(I) = 0.0D0
  5139.          E2(I) = 0.0D0
  5140.          GO TO 290
  5141. C
  5142.   140    DO 150 K = 1, L
  5143.             A(I,K) = A(I,K) / SCALE
  5144.             A(K,I) = A(K,I) / SCALE
  5145.             H = H + A(I,K) * A(I,K) + A(K,I) * A(K,I)
  5146.   150    CONTINUE
  5147. C
  5148.          E2(I) = SCALE * SCALE * H
  5149.          G = DSQRT(H)
  5150.          E(I) = SCALE * G
  5151.          F = PYTHAG(A(I,L),A(L,I))
  5152. C     .......... FORM NEXT DIAGONAL ELEMENT OF MATRIX T ..........
  5153.          IF (F .EQ. 0.0D0) GO TO 160
  5154.          TAU(1,L) = (A(L,I) * TAU(2,I) - A(I,L) * TAU(1,I)) / F
  5155.          SI = (A(I,L) * TAU(2,I) + A(L,I) * TAU(1,I)) / F
  5156.          H = H + F * G
  5157.          G = 1.0D0 + G / F
  5158.          A(I,L) = G * A(I,L)
  5159.          A(L,I) = G * A(L,I)
  5160.          IF (L .EQ. 1) GO TO 270
  5161.          GO TO 170
  5162.   160    TAU(1,L) = -TAU(1,I)
  5163.          SI = TAU(2,I)
  5164.          A(I,L) = G
  5165.   170    F = 0.0D0
  5166. C
  5167.          DO 240 J = 1, L
  5168.             G = 0.0D0
  5169.             GI = 0.0D0
  5170.             IF (J .EQ. 1) GO TO 190
  5171.             JM1 = J - 1
  5172. C     .......... FORM ELEMENT OF A*U ..........
  5173.             DO 180 K = 1, JM1
  5174.                G = G + A(J,K) * A(I,K) + A(K,J) * A(K,I)
  5175.                GI = GI - A(J,K) * A(K,I) + A(K,J) * A(I,K)
  5176.   180       CONTINUE
  5177. C
  5178.   190       G = G + A(J,J) * A(I,J)
  5179.             GI = GI - A(J,J) * A(J,I)
  5180.             JP1 = J + 1
  5181.             IF (L .LT. JP1) GO TO 220
  5182. C
  5183.             DO 200 K = JP1, L
  5184.                G = G + A(K,J) * A(I,K) - A(J,K) * A(K,I)
  5185.                GI = GI - A(K,J) * A(K,I) - A(J,K) * A(I,K)
  5186.   200       CONTINUE
  5187. C     .......... FORM ELEMENT OF P ..........
  5188.   220       E(J) = G / H
  5189.             TAU(2,J) = GI / H
  5190.             F = F + E(J) * A(I,J) - TAU(2,J) * A(J,I)
  5191.   240    CONTINUE
  5192. C
  5193.          HH = F / (H + H)
  5194. C     .......... FORM REDUCED A ..........
  5195.          DO 260 J = 1, L
  5196.             F = A(I,J)
  5197.             G = E(J) - HH * F
  5198.             E(J) = G
  5199.             FI = -A(J,I)
  5200.             GI = TAU(2,J) - HH * FI
  5201.             TAU(2,J) = -GI
  5202.             A(J,J) = A(J,J) - 2.0D0 * (F * G + FI * GI)
  5203.             IF (J .EQ. 1) GO TO 260
  5204.             JM1 = J - 1
  5205. C
  5206.             DO 250 K = 1, JM1
  5207.                A(J,K) = A(J,K) - F * E(K) - G * A(I,K)
  5208.      X                         + FI * TAU(2,K) + GI * A(K,I)
  5209.                A(K,J) = A(K,J) - F * TAU(2,K) - G * A(K,I)
  5210.      X                         - FI * E(K) - GI * A(I,K)
  5211.   250       CONTINUE
  5212. C
  5213.   260    CONTINUE
  5214. C
  5215.   270    DO 280 K = 1, L
  5216.             A(I,K) = SCALE * A(I,K)
  5217.             A(K,I) = SCALE * A(K,I)
  5218.   280    CONTINUE
  5219. C
  5220.          TAU(2,L) = -SI
  5221.   290    D(I) = A(I,I)
  5222.          A(I,I) = SCALE * DSQRT(H)
  5223.   300 CONTINUE
  5224. C
  5225.       RETURN
  5226.       END
  5227.       SUBROUTINE HTRIDI(NM,N,AR,AI,D,E,E2,TAU)
  5228. C
  5229.       INTEGER I,J,K,L,N,II,NM,JP1
  5230.       DOUBLE PRECISION AR(NM,N),AI(NM,N),D(N),E(N),E2(N),TAU(2,N)
  5231.       DOUBLE PRECISION F,G,H,FI,GI,HH,SI,SCALE,PYTHAG
  5232. C
  5233. C     THIS SUBROUTINE IS A TRANSLATION OF A COMPLEX ANALOGUE OF
  5234. C     THE ALGOL PROCEDURE TRED1, NUM. MATH. 11, 181-195(1968)
  5235. C     BY MARTIN, REINSCH, AND WILKINSON.
  5236. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 212-226(1971).
  5237. C
  5238. C     THIS SUBROUTINE REDUCES A COMPLEX HERMITIAN MATRIX
  5239. C     TO A REAL SYMMETRIC TRIDIAGONAL MATRIX USING
  5240. C     UNITARY SIMILARITY TRANSFORMATIONS.
  5241. C
  5242. C     ON INPUT
  5243. C
  5244. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  5245. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  5246. C          DIMENSION STATEMENT.
  5247. C
  5248. C        N IS THE ORDER OF THE MATRIX.
  5249. C
  5250. C        AR AND AI CONTAIN THE REAL AND IMAGINARY PARTS,
  5251. C          RESPECTIVELY, OF THE COMPLEX HERMITIAN INPUT MATRIX.
  5252. C          ONLY THE LOWER TRIANGLE OF THE MATRIX NEED BE SUPPLIED.
  5253. C
  5254. C     ON OUTPUT
  5255. C
  5256. C        AR AND AI CONTAIN INFORMATION ABOUT THE UNITARY TRANS-
  5257. C          FORMATIONS USED IN THE REDUCTION IN THEIR FULL LOWER
  5258. C          TRIANGLES.  THEIR STRICT UPPER TRIANGLES AND THE
  5259. C          DIAGONAL OF AR ARE UNALTERED.
  5260. C
  5261. C        D CONTAINS THE DIAGONAL ELEMENTS OF THE THE TRIDIAGONAL MATRIX.
  5262. C
  5263. C        E CONTAINS THE SUBDIAGONAL ELEMENTS OF THE TRIDIAGONAL
  5264. C          MATRIX IN ITS LAST N-1 POSITIONS.  E(1) IS SET TO ZERO.
  5265. C
  5266. C        E2 CONTAINS THE SQUARES OF THE CORRESPONDING ELEMENTS OF E.
  5267. C          E2 MAY COINCIDE WITH E IF THE SQUARES ARE NOT NEEDED.
  5268. C
  5269. C        TAU CONTAINS FURTHER INFORMATION ABOUT THE TRANSFORMATIONS.
  5270. C
  5271. C     CALLS PYTHAG FOR  DSQRT(A*A + B*B) .
  5272. C
  5273. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  5274. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  5275. C
  5276. C     THIS VERSION DATED AUGUST 1983.
  5277. C
  5278. C     ------------------------------------------------------------------
  5279. C
  5280.       TAU(1,N) = 1.0D0
  5281.       TAU(2,N) = 0.0D0
  5282. C
  5283.       DO 100 I = 1, N
  5284.   100 D(I) = AR(I,I)
  5285. C     .......... FOR I=N STEP -1 UNTIL 1 DO -- ..........
  5286.       DO 300 II = 1, N
  5287.          I = N + 1 - II
  5288.          L = I - 1
  5289.          H = 0.0D0
  5290.          SCALE = 0.0D0
  5291.          IF (L .LT. 1) GO TO 130
  5292. C     .......... SCALE ROW (ALGOL TOL THEN NOT NEEDED) ..........
  5293.          DO 120 K = 1, L
  5294.   120    SCALE = SCALE + DABS(AR(I,K)) + DABS(AI(I,K))
  5295. C
  5296.          IF (SCALE .NE. 0.0D0) GO TO 140
  5297.          TAU(1,L) = 1.0D0
  5298.          TAU(2,L) = 0.0D0
  5299.   130    E(I) = 0.0D0
  5300.          E2(I) = 0.0D0
  5301.          GO TO 290
  5302. C
  5303.   140    DO 150 K = 1, L
  5304.             AR(I,K) = AR(I,K) / SCALE
  5305.             AI(I,K) = AI(I,K) / SCALE
  5306.             H = H + AR(I,K) * AR(I,K) + AI(I,K) * AI(I,K)
  5307.   150    CONTINUE
  5308. C
  5309.          E2(I) = SCALE * SCALE * H
  5310.          G = DSQRT(H)
  5311.          E(I) = SCALE * G
  5312.          F = PYTHAG(AR(I,L),AI(I,L))
  5313. C     .......... FORM NEXT DIAGONAL ELEMENT OF MATRIX T ..........
  5314.          IF (F .EQ. 0.0D0) GO TO 160
  5315.          TAU(1,L) = (AI(I,L) * TAU(2,I) - AR(I,L) * TAU(1,I)) / F
  5316.          SI = (AR(I,L) * TAU(2,I) + AI(I,L) * TAU(1,I)) / F
  5317.          H = H + F * G
  5318.          G = 1.0D0 + G / F
  5319.          AR(I,L) = G * AR(I,L)
  5320.          AI(I,L) = G * AI(I,L)
  5321.          IF (L .EQ. 1) GO TO 270
  5322.          GO TO 170
  5323.   160    TAU(1,L) = -TAU(1,I)
  5324.          SI = TAU(2,I)
  5325.          AR(I,L) = G
  5326.   170    F = 0.0D0
  5327. C
  5328.          DO 240 J = 1, L
  5329.             G = 0.0D0
  5330.             GI = 0.0D0
  5331. C     .......... FORM ELEMENT OF A*U ..........
  5332.             DO 180 K = 1, J
  5333.                G = G + AR(J,K) * AR(I,K) + AI(J,K) * AI(I,K)
  5334.                GI = GI - AR(J,K) * AI(I,K) + AI(J,K) * AR(I,K)
  5335.   180       CONTINUE
  5336. C
  5337.             JP1 = J + 1
  5338.             IF (L .LT. JP1) GO TO 220
  5339. C
  5340.             DO 200 K = JP1, L
  5341.                G = G + AR(K,J) * AR(I,K) - AI(K,J) * AI(I,K)
  5342.                GI = GI - AR(K,J) * AI(I,K) - AI(K,J) * AR(I,K)
  5343.   200       CONTINUE
  5344. C     .......... FORM ELEMENT OF P ..........
  5345.   220       E(J) = G / H
  5346.             TAU(2,J) = GI / H
  5347.             F = F + E(J) * AR(I,J) - TAU(2,J) * AI(I,J)
  5348.   240    CONTINUE
  5349. C
  5350.          HH = F / (H + H)
  5351. C     .......... FORM REDUCED A ..........
  5352.          DO 260 J = 1, L
  5353.             F = AR(I,J)
  5354.             G = E(J) - HH * F
  5355.             E(J) = G
  5356.             FI = -AI(I,J)
  5357.             GI = TAU(2,J) - HH * FI
  5358.             TAU(2,J) = -GI
  5359. C
  5360.             DO 260 K = 1, J
  5361.                AR(J,K) = AR(J,K) - F * E(K) - G * AR(I,K)
  5362.      X                           + FI * TAU(2,K) + GI * AI(I,K)
  5363.                AI(J,K) = AI(J,K) - F * TAU(2,K) - G * AI(I,K)
  5364.      X                           - FI * E(K) - GI * AR(I,K)
  5365.   260    CONTINUE
  5366. C
  5367.   270    DO 280 K = 1, L
  5368.             AR(I,K) = SCALE * AR(I,K)
  5369.             AI(I,K) = SCALE * AI(I,K)
  5370.   280    CONTINUE
  5371. C
  5372.          TAU(2,L) = -SI
  5373.   290    HH = D(I)
  5374.          D(I) = AR(I,I)
  5375.          AR(I,I) = HH
  5376.          AI(I,I) = SCALE * DSQRT(H)
  5377.   300 CONTINUE
  5378. C
  5379.       RETURN
  5380.       END
  5381.       SUBROUTINE IMTQL1(N,D,E,IERR)
  5382. C
  5383.       INTEGER I,J,L,M,N,II,MML,IERR
  5384.       DOUBLE PRECISION D(N),E(N)
  5385.       DOUBLE PRECISION B,C,F,G,P,R,S,TST1,TST2,PYTHAG
  5386. C
  5387. C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE IMTQL1,
  5388. C     NUM. MATH. 12, 377-383(1968) BY MARTIN AND WILKINSON,
  5389. C     AS MODIFIED IN NUM. MATH. 15, 450(1970) BY DUBRULLE.
  5390. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 241-248(1971).
  5391. C
  5392. C     THIS SUBROUTINE FINDS THE EIGENVALUES OF A SYMMETRIC
  5393. C     TRIDIAGONAL MATRIX BY THE IMPLICIT QL METHOD.
  5394. C
  5395. C     ON INPUT
  5396. C
  5397. C        N IS THE ORDER OF THE MATRIX.
  5398. C
  5399. C        D CONTAINS THE DIAGONAL ELEMENTS OF THE INPUT MATRIX.
  5400. C
  5401. C        E CONTAINS THE SUBDIAGONAL ELEMENTS OF THE INPUT MATRIX
  5402. C          IN ITS LAST N-1 POSITIONS.  E(1) IS ARBITRARY.
  5403. C
  5404. C      ON OUTPUT
  5405. C
  5406. C        D CONTAINS THE EIGENVALUES IN ASCENDING ORDER.  IF AN
  5407. C          ERROR EXIT IS MADE, THE EIGENVALUES ARE CORRECT AND
  5408. C          ORDERED FOR INDICES 1,2,...IERR-1, BUT MAY NOT BE
  5409. C          THE SMALLEST EIGENVALUES.
  5410. C
  5411. C        E HAS BEEN DESTROYED.
  5412. C
  5413. C        IERR IS SET TO
  5414. C          ZERO       FOR NORMAL RETURN,
  5415. C          J          IF THE J-TH EIGENVALUE HAS NOT BEEN
  5416. C                     DETERMINED AFTER 30 ITERATIONS.
  5417. C
  5418. C     CALLS PYTHAG FOR  DSQRT(A*A + B*B) .
  5419. C
  5420. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  5421. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  5422. C
  5423. C     THIS VERSION DATED AUGUST 1983.
  5424. C
  5425. C     ------------------------------------------------------------------
  5426. C
  5427.       IERR = 0
  5428.       IF (N .EQ. 1) GO TO 1001
  5429. C
  5430.       DO 100 I = 2, N
  5431.   100 E(I-1) = E(I)
  5432. C
  5433.       E(N) = 0.0D0
  5434. C
  5435.       DO 290 L = 1, N
  5436.          J = 0
  5437. C     .......... LOOK FOR SMALL SUB-DIAGONAL ELEMENT ..........
  5438.   105    DO 110 M = L, N
  5439.             IF (M .EQ. N) GO TO 120
  5440.             TST1 = DABS(D(M)) + DABS(D(M+1))
  5441.             TST2 = TST1 + DABS(E(M))
  5442.             IF (TST2 .EQ. TST1) GO TO 120
  5443.   110    CONTINUE
  5444. C
  5445.   120    P = D(L)
  5446.          IF (M .EQ. L) GO TO 215
  5447.          IF (J .EQ. 30) GO TO 1000
  5448.          J = J + 1
  5449. C     .......... FORM SHIFT ..........
  5450.          G = (D(L+1) - P) / (2.0D0 * E(L))
  5451.          R = PYTHAG(G,1.0D0)
  5452.          G = D(M) - P + E(L) / (G + DSIGN(R,G))
  5453.          S = 1.0D0
  5454.          C = 1.0D0
  5455.          P = 0.0D0
  5456.          MML = M - L
  5457. C     .......... FOR I=M-1 STEP -1 UNTIL L DO -- ..........
  5458.          DO 200 II = 1, MML
  5459.             I = M - II
  5460.             F = S * E(I)
  5461.             B = C * E(I)
  5462.             R = PYTHAG(F,G)
  5463.             E(I+1) = R
  5464.             IF (R .EQ. 0.0D0) GO TO 210
  5465.             S = F / R
  5466.             C = G / R
  5467.             G = D(I+1) - P
  5468.             R = (D(I) - G) * S + 2.0D0 * C * B
  5469.             P = S * R
  5470.             D(I+1) = G + P
  5471.             G = C * R - B
  5472.   200    CONTINUE
  5473. C
  5474.          D(L) = D(L) - P
  5475.          E(L) = G
  5476.          E(M) = 0.0D0
  5477.          GO TO 105
  5478. C     .......... RECOVER FROM UNDERFLOW ..........
  5479.   210    D(I+1) = D(I+1) - P
  5480.          E(M) = 0.0D0
  5481.          GO TO 105
  5482. C     .......... ORDER EIGENVALUES ..........
  5483.   215    IF (L .EQ. 1) GO TO 250
  5484. C     .......... FOR I=L STEP -1 UNTIL 2 DO -- ..........
  5485.          DO 230 II = 2, L
  5486.             I = L + 2 - II
  5487.             IF (P .GE. D(I-1)) GO TO 270
  5488.             D(I) = D(I-1)
  5489.   230    CONTINUE
  5490. C
  5491.   250    I = 1
  5492.   270    D(I) = P
  5493.   290 CONTINUE
  5494. C
  5495.       GO TO 1001
  5496. C     .......... SET ERROR -- NO CONVERGENCE TO AN
  5497. C                EIGENVALUE AFTER 30 ITERATIONS ..........
  5498.  1000 IERR = L
  5499.  1001 RETURN
  5500.       END
  5501.       SUBROUTINE IMTQL2(NM,N,D,E,Z,IERR)
  5502. C
  5503.       INTEGER I,J,K,L,M,N,II,NM,MML,IERR
  5504.       DOUBLE PRECISION D(N),E(N),Z(NM,N)
  5505.       DOUBLE PRECISION B,C,F,G,P,R,S,TST1,TST2,PYTHAG
  5506. C
  5507. C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE IMTQL2,
  5508. C     NUM. MATH. 12, 377-383(1968) BY MARTIN AND WILKINSON,
  5509. C     AS MODIFIED IN NUM. MATH. 15, 450(1970) BY DUBRULLE.
  5510. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 241-248(1971).
  5511. C
  5512. C     THIS SUBROUTINE FINDS THE EIGENVALUES AND EIGENVECTORS
  5513. C     OF A SYMMETRIC TRIDIAGONAL MATRIX BY THE IMPLICIT QL METHOD.
  5514. C     THE EIGENVECTORS OF A FULL SYMMETRIC MATRIX CAN ALSO
  5515. C     BE FOUND IF  TRED2  HAS BEEN USED TO REDUCE THIS
  5516. C     FULL MATRIX TO TRIDIAGONAL FORM.
  5517. C
  5518. C     ON INPUT
  5519. C
  5520. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  5521. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  5522. C          DIMENSION STATEMENT.
  5523. C
  5524. C        N IS THE ORDER OF THE MATRIX.
  5525. C
  5526. C        D CONTAINS THE DIAGONAL ELEMENTS OF THE INPUT MATRIX.
  5527. C
  5528. C        E CONTAINS THE SUBDIAGONAL ELEMENTS OF THE INPUT MATRIX
  5529. C          IN ITS LAST N-1 POSITIONS.  E(1) IS ARBITRARY.
  5530. C
  5531. C        Z CONTAINS THE TRANSFORMATION MATRIX PRODUCED IN THE
  5532. C          REDUCTION BY  TRED2, IF PERFORMED.  IF THE EIGENVECTORS
  5533. C          OF THE TRIDIAGONAL MATRIX ARE DESIRED, Z MUST CONTAIN
  5534. C          THE IDENTITY MATRIX.
  5535. C
  5536. C      ON OUTPUT
  5537. C
  5538. C        D CONTAINS THE EIGENVALUES IN ASCENDING ORDER.  IF AN
  5539. C          ERROR EXIT IS MADE, THE EIGENVALUES ARE CORRECT BUT
  5540. C          UNORDERED FOR INDICES 1,2,...,IERR-1.
  5541. C
  5542. C        E HAS BEEN DESTROYED.
  5543. C
  5544. C        Z CONTAINS ORTHONORMAL EIGENVECTORS OF THE SYMMETRIC
  5545. C          TRIDIAGONAL (OR FULL) MATRIX.  IF AN ERROR EXIT IS MADE,
  5546. C          Z CONTAINS THE EIGENVECTORS ASSOCIATED WITH THE STORED
  5547. C          EIGENVALUES.
  5548. C
  5549. C        IERR IS SET TO
  5550. C          ZERO       FOR NORMAL RETURN,
  5551. C          J          IF THE J-TH EIGENVALUE HAS NOT BEEN
  5552. C                     DETERMINED AFTER 30 ITERATIONS.
  5553. C
  5554. C     CALLS PYTHAG FOR  DSQRT(A*A + B*B) .
  5555. C
  5556. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  5557. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  5558. C
  5559. C     THIS VERSION DATED AUGUST 1983.
  5560. C
  5561. C     ------------------------------------------------------------------
  5562. C
  5563.       IERR = 0
  5564.       IF (N .EQ. 1) GO TO 1001
  5565. C
  5566.       DO 100 I = 2, N
  5567.   100 E(I-1) = E(I)
  5568. C
  5569.       E(N) = 0.0D0
  5570. C
  5571.       DO 240 L = 1, N
  5572.          J = 0
  5573. C     .......... LOOK FOR SMALL SUB-DIAGONAL ELEMENT ..........
  5574.   105    DO 110 M = L, N
  5575.             IF (M .EQ. N) GO TO 120
  5576.             TST1 = DABS(D(M)) + DABS(D(M+1))
  5577.             TST2 = TST1 + DABS(E(M))
  5578.             IF (TST2 .EQ. TST1) GO TO 120
  5579.   110    CONTINUE
  5580. C
  5581.   120    P = D(L)
  5582.          IF (M .EQ. L) GO TO 240
  5583.          IF (J .EQ. 30) GO TO 1000
  5584.          J = J + 1
  5585. C     .......... FORM SHIFT ..........
  5586.          G = (D(L+1) - P) / (2.0D0 * E(L))
  5587.          R = PYTHAG(G,1.0D0)
  5588.          G = D(M) - P + E(L) / (G + DSIGN(R,G))
  5589.          S = 1.0D0
  5590.          C = 1.0D0
  5591.          P = 0.0D0
  5592.          MML = M - L
  5593. C     .......... FOR I=M-1 STEP -1 UNTIL L DO -- ..........
  5594.          DO 200 II = 1, MML
  5595.             I = M - II
  5596.             F = S * E(I)
  5597.             B = C * E(I)
  5598.             R = PYTHAG(F,G)
  5599.             E(I+1) = R
  5600.             IF (R .EQ. 0.0D0) GO TO 210
  5601.             S = F / R
  5602.             C = G / R
  5603.             G = D(I+1) - P
  5604.             R = (D(I) - G) * S + 2.0D0 * C * B
  5605.             P = S * R
  5606.             D(I+1) = G + P
  5607.             G = C * R - B
  5608. C     .......... FORM VECTOR ..........
  5609.             DO 180 K = 1, N
  5610.                F = Z(K,I+1)
  5611.                Z(K,I+1) = S * Z(K,I) + C * F
  5612.                Z(K,I) = C * Z(K,I) - S * F
  5613.   180       CONTINUE
  5614. C
  5615.   200    CONTINUE
  5616. C
  5617.          D(L) = D(L) - P
  5618.          E(L) = G
  5619.          E(M) = 0.0D0
  5620.          GO TO 105
  5621. C     .......... RECOVER FROM UNDERFLOW ..........
  5622.   210    D(I+1) = D(I+1) - P
  5623.          E(M) = 0.0D0
  5624.          GO TO 105
  5625.   240 CONTINUE
  5626. C     .......... ORDER EIGENVALUES AND EIGENVECTORS ..........
  5627.       DO 300 II = 2, N
  5628.          I = II - 1
  5629.          K = I
  5630.          P = D(I)
  5631. C
  5632.          DO 260 J = II, N
  5633.             IF (D(J) .GE. P) GO TO 260
  5634.             K = J
  5635.             P = D(J)
  5636.   260    CONTINUE
  5637. C
  5638.          IF (K .EQ. I) GO TO 300
  5639.          D(K) = D(I)
  5640.          D(I) = P
  5641. C
  5642.          DO 280 J = 1, N
  5643.             P = Z(J,I)
  5644.             Z(J,I) = Z(J,K)
  5645.             Z(J,K) = P
  5646.   280    CONTINUE
  5647. C
  5648.   300 CONTINUE
  5649. C
  5650.       GO TO 1001
  5651. C     .......... SET ERROR -- NO CONVERGENCE TO AN
  5652. C                EIGENVALUE AFTER 30 ITERATIONS ..........
  5653.  1000 IERR = L
  5654.  1001 RETURN
  5655.       END
  5656.       SUBROUTINE IMTQLV(N,D,E,E2,W,IND,IERR,RV1)
  5657. C
  5658.       INTEGER I,J,K,L,M,N,II,MML,TAG,IERR
  5659.       DOUBLE PRECISION D(N),E(N),E2(N),W(N),RV1(N)
  5660.       DOUBLE PRECISION B,C,F,G,P,R,S,TST1,TST2,PYTHAG
  5661.       INTEGER IND(N)
  5662. C
  5663. C     THIS SUBROUTINE IS A VARIANT OF  IMTQL1  WHICH IS A TRANSLATION OF
  5664. C     ALGOL PROCEDURE IMTQL1, NUM. MATH. 12, 377-383(1968) BY MARTIN AND
  5665. C     WILKINSON, AS MODIFIED IN NUM. MATH. 15, 450(1970) BY DUBRULLE.
  5666. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 241-248(1971).
  5667. C
  5668. C     THIS SUBROUTINE FINDS THE EIGENVALUES OF A SYMMETRIC TRIDIAGONAL
  5669. C     MATRIX BY THE IMPLICIT QL METHOD AND ASSOCIATES WITH THEM
  5670. C     THEIR CORRESPONDING SUBMATRIX INDICES.
  5671. C
  5672. C     ON INPUT
  5673. C
  5674. C        N IS THE ORDER OF THE MATRIX.
  5675. C
  5676. C        D CONTAINS THE DIAGONAL ELEMENTS OF THE INPUT MATRIX.
  5677. C
  5678. C        E CONTAINS THE SUBDIAGONAL ELEMENTS OF THE INPUT MATRIX
  5679. C          IN ITS LAST N-1 POSITIONS.  E(1) IS ARBITRARY.
  5680. C
  5681. C        E2 CONTAINS THE SQUARES OF THE CORRESPONDING ELEMENTS OF E.
  5682. C          E2(1) IS ARBITRARY.
  5683. C
  5684. C     ON OUTPUT
  5685. C
  5686. C        D AND E ARE UNALTERED.
  5687. C
  5688. C        ELEMENTS OF E2, CORRESPONDING TO ELEMENTS OF E REGARDED
  5689. C          AS NEGLIGIBLE, HAVE BEEN REPLACED BY ZERO CAUSING THE
  5690. C          MATRIX TO SPLIT INTO A DIRECT SUM OF SUBMATRICES.
  5691. C          E2(1) IS ALSO SET TO ZERO.
  5692. C
  5693. C        W CONTAINS THE EIGENVALUES IN ASCENDING ORDER.  IF AN
  5694. C          ERROR EXIT IS MADE, THE EIGENVALUES ARE CORRECT AND
  5695. C          ORDERED FOR INDICES 1,2,...IERR-1, BUT MAY NOT BE
  5696. C          THE SMALLEST EIGENVALUES.
  5697. C
  5698. C        IND CONTAINS THE SUBMATRIX INDICES ASSOCIATED WITH THE
  5699. C          CORRESPONDING EIGENVALUES IN W -- 1 FOR EIGENVALUES
  5700. C          BELONGING TO THE FIRST SUBMATRIX FROM THE TOP,
  5701. C          2 FOR THOSE BELONGING TO THE SECOND SUBMATRIX, ETC..
  5702. C
  5703. C        IERR IS SET TO
  5704. C          ZERO       FOR NORMAL RETURN,
  5705. C          J          IF THE J-TH EIGENVALUE HAS NOT BEEN
  5706. C                     DETERMINED AFTER 30 ITERATIONS.
  5707. C
  5708. C        RV1 IS A TEMPORARY STORAGE ARRAY.
  5709. C
  5710. C     CALLS PYTHAG FOR  DSQRT(A*A + B*B) .
  5711. C
  5712. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  5713. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  5714. C
  5715. C     THIS VERSION DATED AUGUST 1983.
  5716. C
  5717. C     ------------------------------------------------------------------
  5718. C
  5719.       IERR = 0
  5720.       K = 0
  5721.       TAG = 0
  5722. C
  5723.       DO 100 I = 1, N
  5724.          W(I) = D(I)
  5725.          IF (I .NE. 1) RV1(I-1) = E(I)
  5726.   100 CONTINUE
  5727. C
  5728.       E2(1) = 0.0D0
  5729.       RV1(N) = 0.0D0
  5730. C
  5731.       DO 290 L = 1, N
  5732.          J = 0
  5733. C     .......... LOOK FOR SMALL SUB-DIAGONAL ELEMENT ..........
  5734.   105    DO 110 M = L, N
  5735.             IF (M .EQ. N) GO TO 120
  5736.             TST1 = DABS(W(M)) + DABS(W(M+1))
  5737.             TST2 = TST1 + DABS(RV1(M))
  5738.             IF (TST2 .EQ. TST1) GO TO 120
  5739. C     .......... GUARD AGAINST UNDERFLOWED ELEMENT OF E2 ..........
  5740.             IF (E2(M+1) .EQ. 0.0D0) GO TO 125
  5741.   110    CONTINUE
  5742. C
  5743.   120    IF (M .LE. K) GO TO 130
  5744.          IF (M .NE. N) E2(M+1) = 0.0D0
  5745.   125    K = M
  5746.          TAG = TAG + 1
  5747.   130    P = W(L)
  5748.          IF (M .EQ. L) GO TO 215
  5749.          IF (J .EQ. 30) GO TO 1000
  5750.          J = J + 1
  5751. C     .......... FORM SHIFT ..........
  5752.          G = (W(L+1) - P) / (2.0D0 * RV1(L))
  5753.          R = PYTHAG(G,1.0D0)
  5754.          G = W(M) - P + RV1(L) / (G + DSIGN(R,G))
  5755.          S = 1.0D0
  5756.          C = 1.0D0
  5757.          P = 0.0D0
  5758.          MML = M - L
  5759. C     .......... FOR I=M-1 STEP -1 UNTIL L DO -- ..........
  5760.          DO 200 II = 1, MML
  5761.             I = M - II
  5762.             F = S * RV1(I)
  5763.             B = C * RV1(I)
  5764.             R = PYTHAG(F,G)
  5765.             RV1(I+1) = R
  5766.             IF (R .EQ. 0.0D0) GO TO 210
  5767.             S = F / R
  5768.             C = G / R
  5769.             G = W(I+1) - P
  5770.             R = (W(I) - G) * S + 2.0D0 * C * B
  5771.             P = S * R
  5772.             W(I+1) = G + P
  5773.             G = C * R - B
  5774.   200    CONTINUE
  5775. C
  5776.          W(L) = W(L) - P
  5777.          RV1(L) = G
  5778.          RV1(M) = 0.0D0
  5779.          GO TO 105
  5780. C     .......... RECOVER FROM UNDERFLOW ..........
  5781.   210    W(I+1) = W(I+1) - P
  5782.          RV1(M) = 0.0D0
  5783.          GO TO 105
  5784. C     .......... ORDER EIGENVALUES ..........
  5785.   215    IF (L .EQ. 1) GO TO 250
  5786. C     .......... FOR I=L STEP -1 UNTIL 2 DO -- ..........
  5787.          DO 230 II = 2, L
  5788.             I = L + 2 - II
  5789.             IF (P .GE. W(I-1)) GO TO 270
  5790.             W(I) = W(I-1)
  5791.             IND(I) = IND(I-1)
  5792.   230    CONTINUE
  5793. C
  5794.   250    I = 1
  5795.   270    W(I) = P
  5796.          IND(I) = TAG
  5797.   290 CONTINUE
  5798. C
  5799.       GO TO 1001
  5800. C     .......... SET ERROR -- NO CONVERGENCE TO AN
  5801. C                EIGENVALUE AFTER 30 ITERATIONS ..........
  5802.  1000 IERR = L
  5803.  1001 RETURN
  5804.       END
  5805.       SUBROUTINE INVIT(NM,N,A,WR,WI,SELECT,MM,M,Z,IERR,RM1,RV1,RV2)
  5806. C
  5807.       INTEGER I,J,K,L,M,N,S,II,IP,MM,MP,NM,NS,N1,UK,IP1,ITS,KM1,IERR
  5808.       DOUBLE PRECISION A(NM,N),WR(N),WI(N),Z(NM,MM),RM1(N,N),
  5809.      X       RV1(N),RV2(N)
  5810.       DOUBLE PRECISION T,W,X,Y,EPS3,NORM,NORMV,EPSLON,GROWTO,ILAMBD,
  5811.      X       PYTHAG,RLAMBD,UKROOT
  5812.       LOGICAL SELECT(N)
  5813. C
  5814. C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE INVIT
  5815. C     BY PETERS AND WILKINSON.
  5816. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 418-439(1971).
  5817. C
  5818. C     THIS SUBROUTINE FINDS THOSE EIGENVECTORS OF A REAL UPPER
  5819. C     HESSENBERG MATRIX CORRESPONDING TO SPECIFIED EIGENVALUES,
  5820. C     USING INVERSE ITERATION.
  5821. C
  5822. C     ON INPUT
  5823. C
  5824. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  5825. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  5826. C          DIMENSION STATEMENT.
  5827. C
  5828. C        N IS THE ORDER OF THE MATRIX.
  5829. C
  5830. C        A CONTAINS THE HESSENBERG MATRIX.
  5831. C
  5832. C        WR AND WI CONTAIN THE REAL AND IMAGINARY PARTS, RESPECTIVELY,
  5833. C          OF THE EIGENVALUES OF THE MATRIX.  THE EIGENVALUES MUST BE
  5834. C          STORED IN A MANNER IDENTICAL TO THAT OF SUBROUTINE  HQR,
  5835. C          WHICH RECOGNIZES POSSIBLE SPLITTING OF THE MATRIX.
  5836. C
  5837. C        SELECT SPECIFIES THE EIGENVECTORS TO BE FOUND. THE
  5838. C          EIGENVECTOR CORRESPONDING TO THE J-TH EIGENVALUE IS
  5839. C          SPECIFIED BY SETTING SELECT(J) TO .TRUE..
  5840. C
  5841. C        MM SHOULD BE SET TO AN UPPER BOUND FOR THE NUMBER OF
  5842. C          COLUMNS REQUIRED TO STORE THE EIGENVECTORS TO BE FOUND.
  5843. C          NOTE THAT TWO COLUMNS ARE REQUIRED TO STORE THE
  5844. C          EIGENVECTOR CORRESPONDING TO A COMPLEX EIGENVALUE.
  5845. C
  5846. C     ON OUTPUT
  5847. C
  5848. C        A AND WI ARE UNALTERED.
  5849. C
  5850. C        WR MAY HAVE BEEN ALTERED SINCE CLOSE EIGENVALUES ARE PERTURBED
  5851. C          SLIGHTLY IN SEARCHING FOR INDEPENDENT EIGENVECTORS.
  5852. C
  5853. C        SELECT MAY HAVE BEEN ALTERED.  IF THE ELEMENTS CORRESPONDING
  5854. C          TO A PAIR OF CONJUGATE COMPLEX EIGENVALUES WERE EACH
  5855. C          INITIALLY SET TO .TRUE., THE PROGRAM RESETS THE SECOND OF
  5856. C          THE TWO ELEMENTS TO .FALSE..
  5857. C
  5858. C        M IS THE NUMBER OF COLUMNS ACTUALLY USED TO STORE
  5859. C          THE EIGENVECTORS.
  5860. C
  5861. C        Z CONTAINS THE REAL AND IMAGINARY PARTS OF THE EIGENVECTORS.
  5862. C          IF THE NEXT SELECTED EIGENVALUE IS REAL, THE NEXT COLUMN
  5863. C          OF Z CONTAINS ITS EIGENVECTOR.  IF THE EIGENVALUE IS
  5864. C          COMPLEX, THE NEXT TWO COLUMNS OF Z CONTAIN THE REAL AND
  5865. C          IMAGINARY PARTS OF ITS EIGENVECTOR.  THE EIGENVECTORS ARE
  5866. C          NORMALIZED SO THAT THE COMPONENT OF LARGEST MAGNITUDE IS 1.
  5867. C          ANY VECTOR WHICH FAILS THE ACCEPTANCE TEST IS SET TO ZERO.
  5868. C
  5869. C        IERR IS SET TO
  5870. C          ZERO       FOR NORMAL RETURN,
  5871. C          -(2*N+1)   IF MORE THAN MM COLUMNS OF Z ARE NECESSARY
  5872. C                     TO STORE THE EIGENVECTORS CORRESPONDING TO
  5873. C                     THE SPECIFIED EIGENVALUES.
  5874. C          -K         IF THE ITERATION CORRESPONDING TO THE K-TH
  5875. C                     VALUE FAILS,
  5876. C          -(N+K)     IF BOTH ERROR SITUATIONS OCCUR.
  5877. C
  5878. C        RM1, RV1, AND RV2 ARE TEMPORARY STORAGE ARRAYS.  NOTE THAT RM1
  5879. C          IS SQUARE OF DIMENSION N BY N AND, AUGMENTED BY TWO COLUMNS
  5880. C          OF Z, IS THE TRANSPOSE OF THE CORRESPONDING ALGOL B ARRAY.
  5881. C
  5882. C     THE ALGOL PROCEDURE GUESSVEC APPEARS IN INVIT IN LINE.
  5883. C
  5884. C     CALLS CDIV FOR COMPLEX DIVISION.
  5885. C     CALLS PYTHAG FOR  DSQRT(A*A + B*B) .
  5886. C
  5887. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  5888. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  5889. C
  5890. C     THIS VERSION DATED AUGUST 1983.
  5891. C
  5892. C     ------------------------------------------------------------------
  5893. C
  5894.       IERR = 0
  5895.       UK = 0
  5896.       S = 1
  5897. C     .......... IP = 0, REAL EIGENVALUE
  5898. C                     1, FIRST OF CONJUGATE COMPLEX PAIR
  5899. C                    -1, SECOND OF CONJUGATE COMPLEX PAIR ..........
  5900.       IP = 0
  5901.       N1 = N - 1
  5902. C
  5903.       DO 980 K = 1, N
  5904.          IF (WI(K) .EQ. 0.0D0 .OR. IP .LT. 0) GO TO 100
  5905.          IP = 1
  5906.          IF (SELECT(K) .AND. SELECT(K+1)) SELECT(K+1) = .FALSE.
  5907.   100    IF (.NOT. SELECT(K)) GO TO 960
  5908.          IF (WI(K) .NE. 0.0D0) S = S + 1
  5909.          IF (S .GT. MM) GO TO 1000
  5910.          IF (UK .GE. K) GO TO 200
  5911. C     .......... CHECK FOR POSSIBLE SPLITTING ..........
  5912.          DO 120 UK = K, N
  5913.             IF (UK .EQ. N) GO TO 140
  5914.             IF (A(UK+1,UK) .EQ. 0.0D0) GO TO 140
  5915.   120    CONTINUE
  5916. C     .......... COMPUTE INFINITY NORM OF LEADING UK BY UK
  5917. C                (HESSENBERG) MATRIX ..........
  5918.   140    NORM = 0.0D0
  5919.          MP = 1
  5920. C
  5921.          DO 180 I = 1, UK
  5922.             X = 0.0D0
  5923. C
  5924.             DO 160 J = MP, UK
  5925.   160       X = X + DABS(A(I,J))
  5926. C
  5927.             IF (X .GT. NORM) NORM = X
  5928.             MP = I
  5929.   180    CONTINUE
  5930. C     .......... EPS3 REPLACES ZERO PIVOT IN DECOMPOSITION
  5931. C                AND CLOSE ROOTS ARE MODIFIED BY EPS3 ..........
  5932.          IF (NORM .EQ. 0.0D0) NORM = 1.0D0
  5933.          EPS3 = EPSLON(NORM)
  5934. C     .......... GROWTO IS THE CRITERION FOR THE GROWTH ..........
  5935.          UKROOT = UK
  5936.          UKROOT = DSQRT(UKROOT)
  5937.          GROWTO = 0.1D0 / UKROOT
  5938.   200    RLAMBD = WR(K)
  5939.          ILAMBD = WI(K)
  5940.          IF (K .EQ. 1) GO TO 280
  5941.          KM1 = K - 1
  5942.          GO TO 240
  5943. C     .......... PERTURB EIGENVALUE IF IT IS CLOSE
  5944. C                TO ANY PREVIOUS EIGENVALUE ..........
  5945.   220    RLAMBD = RLAMBD + EPS3
  5946. C     .......... FOR I=K-1 STEP -1 UNTIL 1 DO -- ..........
  5947.   240    DO 260 II = 1, KM1
  5948.             I = K - II
  5949.             IF (SELECT(I) .AND. DABS(WR(I)-RLAMBD) .LT. EPS3 .AND.
  5950.      X         DABS(WI(I)-ILAMBD) .LT. EPS3) GO TO 220
  5951.   260    CONTINUE
  5952. C
  5953.          WR(K) = RLAMBD
  5954. C     .......... PERTURB CONJUGATE EIGENVALUE TO MATCH ..........
  5955.          IP1 = K + IP
  5956.          WR(IP1) = RLAMBD
  5957. C     .......... FORM UPPER HESSENBERG A-RLAMBD*I (TRANSPOSED)
  5958. C                AND INITIAL REAL VECTOR ..........
  5959.   280    MP = 1
  5960. C
  5961.          DO 320 I = 1, UK
  5962. C
  5963.             DO 300 J = MP, UK
  5964.   300       RM1(J,I) = A(I,J)
  5965. C
  5966.             RM1(I,I) = RM1(I,I) - RLAMBD
  5967.             MP = I
  5968.             RV1(I) = EPS3
  5969.   320    CONTINUE
  5970. C
  5971.          ITS = 0
  5972.          IF (ILAMBD .NE. 0.0D0) GO TO 520
  5973. C     .......... REAL EIGENVALUE.
  5974. C                TRIANGULAR DECOMPOSITION WITH INTERCHANGES,
  5975. C                REPLACING ZERO PIVOTS BY EPS3 ..........
  5976.          IF (UK .EQ. 1) GO TO 420
  5977. C
  5978.          DO 400 I = 2, UK
  5979.             MP = I - 1
  5980.             IF (DABS(RM1(MP,I)) .LE. DABS(RM1(MP,MP))) GO TO 360
  5981. C
  5982.             DO 340 J = MP, UK
  5983.                Y = RM1(J,I)
  5984.                RM1(J,I) = RM1(J,MP)
  5985.                RM1(J,MP) = Y
  5986.   340       CONTINUE
  5987. C
  5988.   360       IF (RM1(MP,MP) .EQ. 0.0D0) RM1(MP,MP) = EPS3
  5989.             X = RM1(MP,I) / RM1(MP,MP)
  5990.             IF (X .EQ. 0.0D0) GO TO 400
  5991. C
  5992.             DO 380 J = I, UK
  5993.   380       RM1(J,I) = RM1(J,I) - X * RM1(J,MP)
  5994. C
  5995.   400    CONTINUE
  5996. C
  5997.   420    IF (RM1(UK,UK) .EQ. 0.0D0) RM1(UK,UK) = EPS3
  5998. C     .......... BACK SUBSTITUTION FOR REAL VECTOR
  5999. C                FOR I=UK STEP -1 UNTIL 1 DO -- ..........
  6000.   440    DO 500 II = 1, UK
  6001.             I = UK + 1 - II
  6002.             Y = RV1(I)
  6003.             IF (I .EQ. UK) GO TO 480
  6004.             IP1 = I + 1
  6005. C
  6006.             DO 460 J = IP1, UK
  6007.   460       Y = Y - RM1(J,I) * RV1(J)
  6008. C
  6009.   480       RV1(I) = Y / RM1(I,I)
  6010.   500    CONTINUE
  6011. C
  6012.          GO TO 740
  6013. C     .......... COMPLEX EIGENVALUE.
  6014. C                TRIANGULAR DECOMPOSITION WITH INTERCHANGES,
  6015. C                REPLACING ZERO PIVOTS BY EPS3.  STORE IMAGINARY
  6016. C                PARTS IN UPPER TRIANGLE STARTING AT (1,3) ..........
  6017.   520    NS = N - S
  6018.          Z(1,S-1) = -ILAMBD
  6019.          Z(1,S) = 0.0D0
  6020.          IF (N .EQ. 2) GO TO 550
  6021.          RM1(1,3) = -ILAMBD
  6022.          Z(1,S-1) = 0.0D0
  6023.          IF (N .EQ. 3) GO TO 550
  6024. C
  6025.          DO 540 I = 4, N
  6026.   540    RM1(1,I) = 0.0D0
  6027. C
  6028.   550    DO 640 I = 2, UK
  6029.             MP = I - 1
  6030.             W = RM1(MP,I)
  6031.             IF (I .LT. N) T = RM1(MP,I+1)
  6032.             IF (I .EQ. N) T = Z(MP,S-1)
  6033.             X = RM1(MP,MP) * RM1(MP,MP) + T * T
  6034.             IF (W * W .LE. X) GO TO 580
  6035.             X = RM1(MP,MP) / W
  6036.             Y = T / W
  6037.             RM1(MP,MP) = W
  6038.             IF (I .LT. N) RM1(MP,I+1) = 0.0D0
  6039.             IF (I .EQ. N) Z(MP,S-1) = 0.0D0
  6040. C
  6041.             DO 560 J = I, UK
  6042.                W = RM1(J,I)
  6043.                RM1(J,I) = RM1(J,MP) - X * W
  6044.                RM1(J,MP) = W
  6045.                IF (J .LT. N1) GO TO 555
  6046.                L = J - NS
  6047.                Z(I,L) = Z(MP,L) - Y * W
  6048.                Z(MP,L) = 0.0D0
  6049.                GO TO 560
  6050.   555          RM1(I,J+2) = RM1(MP,J+2) - Y * W
  6051.                RM1(MP,J+2) = 0.0D0
  6052.   560       CONTINUE
  6053. C
  6054.             RM1(I,I) = RM1(I,I) - Y * ILAMBD
  6055.             IF (I .LT. N1) GO TO 570
  6056.             L = I - NS
  6057.             Z(MP,L) = -ILAMBD
  6058.             Z(I,L) = Z(I,L) + X * ILAMBD
  6059.             GO TO 640
  6060.   570       RM1(MP,I+2) = -ILAMBD
  6061.             RM1(I,I+2) = RM1(I,I+2) + X * ILAMBD
  6062.             GO TO 640
  6063.   580       IF (X .NE. 0.0D0) GO TO 600
  6064.             RM1(MP,MP) = EPS3
  6065.             IF (I .LT. N) RM1(MP,I+1) = 0.0D0
  6066.             IF (I .EQ. N) Z(MP,S-1) = 0.0D0
  6067.             T = 0.0D0
  6068.             X = EPS3 * EPS3
  6069.   600       W = W / X
  6070.             X = RM1(MP,MP) * W
  6071.             Y = -T * W
  6072. C
  6073.             DO 620 J = I, UK
  6074.                IF (J .LT. N1) GO TO 610
  6075.                L = J - NS
  6076.                T = Z(MP,L)
  6077.                Z(I,L) = -X * T - Y * RM1(J,MP)
  6078.                GO TO 615
  6079.   610          T = RM1(MP,J+2)
  6080.                RM1(I,J+2) = -X * T - Y * RM1(J,MP)
  6081.   615          RM1(J,I) = RM1(J,I) - X * RM1(J,MP) + Y * T
  6082.   620       CONTINUE
  6083. C
  6084.             IF (I .LT. N1) GO TO 630
  6085.             L = I - NS
  6086.             Z(I,L) = Z(I,L) - ILAMBD
  6087.             GO TO 640
  6088.   630       RM1(I,I+2) = RM1(I,I+2) - ILAMBD
  6089.   640    CONTINUE
  6090. C
  6091.          IF (UK .LT. N1) GO TO 650
  6092.          L = UK - NS
  6093.          T = Z(UK,L)
  6094.          GO TO 655
  6095.   650    T = RM1(UK,UK+2)
  6096.   655    IF (RM1(UK,UK) .EQ. 0.0D0 .AND. T .EQ. 0.0D0) RM1(UK,UK) = EPS3
  6097. C     .......... BACK SUBSTITUTION FOR COMPLEX VECTOR
  6098. C                FOR I=UK STEP -1 UNTIL 1 DO -- ..........
  6099.   660    DO 720 II = 1, UK
  6100.             I = UK + 1 - II
  6101.             X = RV1(I)
  6102.             Y = 0.0D0
  6103.             IF (I .EQ. UK) GO TO 700
  6104.             IP1 = I + 1
  6105. C
  6106.             DO 680 J = IP1, UK
  6107.                IF (J .LT. N1) GO TO 670
  6108.                L = J - NS
  6109.                T = Z(I,L)
  6110.                GO TO 675
  6111.   670          T = RM1(I,J+2)
  6112.   675          X = X - RM1(J,I) * RV1(J) + T * RV2(J)
  6113.                Y = Y - RM1(J,I) * RV2(J) - T * RV1(J)
  6114.   680       CONTINUE
  6115. C
  6116.   700       IF (I .LT. N1) GO TO 710
  6117.             L = I - NS
  6118.             T = Z(I,L)
  6119.             GO TO 715
  6120.   710       T = RM1(I,I+2)
  6121.   715       CALL CDIV(X,Y,RM1(I,I),T,RV1(I),RV2(I))
  6122.   720    CONTINUE
  6123. C     .......... ACCEPTANCE TEST FOR REAL OR COMPLEX
  6124. C                EIGENVECTOR AND NORMALIZATION ..........
  6125.   740    ITS = ITS + 1
  6126.          NORM = 0.0D0
  6127.          NORMV = 0.0D0
  6128. C
  6129.          DO 780 I = 1, UK
  6130.             IF (ILAMBD .EQ. 0.0D0) X = DABS(RV1(I))
  6131.             IF (ILAMBD .NE. 0.0D0) X = PYTHAG(RV1(I),RV2(I))
  6132.             IF (NORMV .GE. X) GO TO 760
  6133.             NORMV = X
  6134.             J = I
  6135.   760       NORM = NORM + X
  6136.   780    CONTINUE
  6137. C
  6138.          IF (NORM .LT. GROWTO) GO TO 840
  6139. C     .......... ACCEPT VECTOR ..........
  6140.          X = RV1(J)
  6141.          IF (ILAMBD .EQ. 0.0D0) X = 1.0D0 / X
  6142.          IF (ILAMBD .NE. 0.0D0) Y = RV2(J)
  6143. C
  6144.          DO 820 I = 1, UK
  6145.             IF (ILAMBD .NE. 0.0D0) GO TO 800
  6146.             Z(I,S) = RV1(I) * X
  6147.             GO TO 820
  6148.   800       CALL CDIV(RV1(I),RV2(I),X,Y,Z(I,S-1),Z(I,S))
  6149.   820    CONTINUE
  6150. C
  6151.          IF (UK .EQ. N) GO TO 940
  6152.          J = UK + 1
  6153.          GO TO 900
  6154. C     .......... IN-LINE PROCEDURE FOR CHOOSING
  6155. C                A NEW STARTING VECTOR ..........
  6156.   840    IF (ITS .GE. UK) GO TO 880
  6157.          X = UKROOT
  6158.          Y = EPS3 / (X + 1.0D0)
  6159.          RV1(1) = EPS3
  6160. C
  6161.          DO 860 I = 2, UK
  6162.   860    RV1(I) = Y
  6163. C
  6164.          J = UK - ITS + 1
  6165.          RV1(J) = RV1(J) - EPS3 * X
  6166.          IF (ILAMBD .EQ. 0.0D0) GO TO 440
  6167.          GO TO 660
  6168. C     .......... SET ERROR -- UNACCEPTED EIGENVECTOR ..........
  6169.   880    J = 1
  6170.          IERR = -K
  6171. C     .......... SET REMAINING VECTOR COMPONENTS TO ZERO ..........
  6172.   900    DO 920 I = J, N
  6173.             Z(I,S) = 0.0D0
  6174.             IF (ILAMBD .NE. 0.0D0) Z(I,S-1) = 0.0D0
  6175.   920    CONTINUE
  6176. C
  6177.   940    S = S + 1
  6178.   960    IF (IP .EQ. (-1)) IP = 0
  6179.          IF (IP .EQ. 1) IP = -1
  6180.   980 CONTINUE
  6181. C
  6182.       GO TO 1001
  6183. C     .......... SET ERROR -- UNDERESTIMATE OF EIGENVECTOR
  6184. C                SPACE REQUIRED ..........
  6185.  1000 IF (IERR .NE. 0) IERR = IERR - N
  6186.       IF (IERR .EQ. 0) IERR = -(2 * N + 1)
  6187.  1001 M = S - 1 - IABS(IP)
  6188.       RETURN
  6189.       END
  6190.       SUBROUTINE MINFIT(NM,M,N,A,W,IP,B,IERR,RV1)
  6191. C
  6192.       INTEGER I,J,K,L,M,N,II,IP,I1,KK,K1,LL,L1,M1,NM,ITS,IERR
  6193.       DOUBLE PRECISION A(NM,N),W(N),B(NM,IP),RV1(N)
  6194.       DOUBLE PRECISION C,F,G,H,S,X,Y,Z,TST1,TST2,SCALE,PYTHAG
  6195. C
  6196. C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE MINFIT,
  6197. C     NUM. MATH. 14, 403-420(1970) BY GOLUB AND REINSCH.
  6198. C     HANDBOOK FOR AUTO. COMP., VOL II-LINEAR ALGEBRA, 134-151(1971).
  6199. C
  6200. C     THIS SUBROUTINE DETERMINES, TOWARDS THE SOLUTION OF THE LINEAR
  6201. C                                                        T
  6202. C     SYSTEM AX=B, THE SINGULAR VALUE DECOMPOSITION A=USV  OF A REAL
  6203. C                                         T
  6204. C     M BY N RECTANGULAR MATRIX, FORMING U B RATHER THAN U.  HOUSEHOLDER
  6205. C     BIDIAGONALIZATION AND A VARIANT OF THE QR ALGORITHM ARE USED.
  6206. C
  6207. C     ON INPUT
  6208. C
  6209. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  6210. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  6211. C          DIMENSION STATEMENT.  NOTE THAT NM MUST BE AT LEAST
  6212. C          AS LARGE AS THE MAXIMUM OF M AND N.
  6213. C
  6214. C        M IS THE NUMBER OF ROWS OF A AND B.
  6215. C
  6216. C        N IS THE NUMBER OF COLUMNS OF A AND THE ORDER OF V.
  6217. C
  6218. C        A CONTAINS THE RECTANGULAR COEFFICIENT MATRIX OF THE SYSTEM.
  6219. C
  6220. C        IP IS THE NUMBER OF COLUMNS OF B.  IP CAN BE ZERO.
  6221. C
  6222. C        B CONTAINS THE CONSTANT COLUMN MATRIX OF THE SYSTEM
  6223. C          IF IP IS NOT ZERO.  OTHERWISE B IS NOT REFERENCED.
  6224. C
  6225. C     ON OUTPUT
  6226. C
  6227. C        A HAS BEEN OVERWRITTEN BY THE MATRIX V (ORTHOGONAL) OF THE
  6228. C          DECOMPOSITION IN ITS FIRST N ROWS AND COLUMNS.  IF AN
  6229. C          ERROR EXIT IS MADE, THE COLUMNS OF V CORRESPONDING TO
  6230. C          INDICES OF CORRECT SINGULAR VALUES SHOULD BE CORRECT.
  6231. C
  6232. C        W CONTAINS THE N (NON-NEGATIVE) SINGULAR VALUES OF A (THE
  6233. C          DIAGONAL ELEMENTS OF S).  THEY ARE UNORDERED.  IF AN
  6234. C          ERROR EXIT IS MADE, THE SINGULAR VALUES SHOULD BE CORRECT
  6235. C          FOR INDICES IERR+1,IERR+2,...,N.
  6236. C
  6237. C                                   T
  6238. C        B HAS BEEN OVERWRITTEN BY U B.  IF AN ERROR EXIT IS MADE,
  6239. C                       T
  6240. C          THE ROWS OF U B CORRESPONDING TO INDICES OF CORRECT
  6241. C          SINGULAR VALUES SHOULD BE CORRECT.
  6242. C
  6243. C        IERR IS SET TO
  6244. C          ZERO       FOR NORMAL RETURN,
  6245. C          K          IF THE K-TH SINGULAR VALUE HAS NOT BEEN
  6246. C                     DETERMINED AFTER 30 ITERATIONS.
  6247. C
  6248. C        RV1 IS A TEMPORARY STORAGE ARRAY.
  6249. C
  6250. C     CALLS PYTHAG FOR  DSQRT(A*A + B*B) .
  6251. C
  6252. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  6253. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  6254. C
  6255. C     THIS VERSION DATED AUGUST 1983.
  6256. C
  6257. C     ------------------------------------------------------------------
  6258. C
  6259.       IERR = 0
  6260. C     .......... HOUSEHOLDER REDUCTION TO BIDIAGONAL FORM ..........
  6261.       G = 0.0D0
  6262.       SCALE = 0.0D0
  6263.       X = 0.0D0
  6264. C
  6265.       DO 300 I = 1, N
  6266.          L = I + 1
  6267.          RV1(I) = SCALE * G
  6268.          G = 0.0D0
  6269.          S = 0.0D0
  6270.          SCALE = 0.0D0
  6271.          IF (I .GT. M) GO TO 210
  6272. C
  6273.          DO 120 K = I, M
  6274.   120    SCALE = SCALE + DABS(A(K,I))
  6275. C
  6276.          IF (SCALE .EQ. 0.0D0) GO TO 210
  6277. C
  6278.          DO 130 K = I, M
  6279.             A(K,I) = A(K,I) / SCALE
  6280.             S = S + A(K,I)**2
  6281.   130    CONTINUE
  6282. C
  6283.          F = A(I,I)
  6284.          G = -DSIGN(DSQRT(S),F)
  6285.          H = F * G - S
  6286.          A(I,I) = F - G
  6287.          IF (I .EQ. N) GO TO 160
  6288. C
  6289.          DO 150 J = L, N
  6290.             S = 0.0D0
  6291. C
  6292.             DO 140 K = I, M
  6293.   140       S = S + A(K,I) * A(K,J)
  6294. C
  6295.             F = S / H
  6296. C
  6297.             DO 150 K = I, M
  6298.                A(K,J) = A(K,J) + F * A(K,I)
  6299.   150    CONTINUE
  6300. C
  6301.   160    IF (IP .EQ. 0) GO TO 190
  6302. C
  6303.          DO 180 J = 1, IP
  6304.             S = 0.0D0
  6305. C
  6306.             DO 170 K = I, M
  6307.   170       S = S + A(K,I) * B(K,J)
  6308. C
  6309.             F = S / H
  6310. C
  6311.             DO 180 K = I, M
  6312.                B(K,J) = B(K,J) + F * A(K,I)
  6313.   180    CONTINUE
  6314. C
  6315.   190    DO 200 K = I, M
  6316.   200    A(K,I) = SCALE * A(K,I)
  6317. C
  6318.   210    W(I) = SCALE * G
  6319.          G = 0.0D0
  6320.          S = 0.0D0
  6321.          SCALE = 0.0D0
  6322.          IF (I .GT. M .OR. I .EQ. N) GO TO 290
  6323. C
  6324.          DO 220 K = L, N
  6325.   220    SCALE = SCALE + DABS(A(I,K))
  6326. C
  6327.          IF (SCALE .EQ. 0.0D0) GO TO 290
  6328. C
  6329.          DO 230 K = L, N
  6330.             A(I,K) = A(I,K) / SCALE
  6331.             S = S + A(I,K)**2
  6332.   230    CONTINUE
  6333. C
  6334.          F = A(I,L)
  6335.          G = -DSIGN(DSQRT(S),F)
  6336.          H = F * G - S
  6337.          A(I,L) = F - G
  6338. C
  6339.          DO 240 K = L, N
  6340.   240    RV1(K) = A(I,K) / H
  6341. C
  6342.          IF (I .EQ. M) GO TO 270
  6343. C
  6344.          DO 260 J = L, M
  6345.             S = 0.0D0
  6346. C
  6347.             DO 250 K = L, N
  6348.   250       S = S + A(J,K) * A(I,K)
  6349. C
  6350.             DO 260 K = L, N
  6351.                A(J,K) = A(J,K) + S * RV1(K)
  6352.   260    CONTINUE
  6353. C
  6354.   270    DO 280 K = L, N
  6355.   280    A(I,K) = SCALE * A(I,K)
  6356. C
  6357.   290    X = DMAX1(X,DABS(W(I))+DABS(RV1(I)))
  6358.   300 CONTINUE
  6359. C     .......... ACCUMULATION OF RIGHT-HAND TRANSFORMATIONS.
  6360. C                FOR I=N STEP -1 UNTIL 1 DO -- ..........
  6361.       DO 400 II = 1, N
  6362.          I = N + 1 - II
  6363.          IF (I .EQ. N) GO TO 390
  6364.          IF (G .EQ. 0.0D0) GO TO 360
  6365. C
  6366.          DO 320 J = L, N
  6367. C     .......... DOUBLE DIVISION AVOIDS POSSIBLE UNDERFLOW ..........
  6368.   320    A(J,I) = (A(I,J) / A(I,L)) / G
  6369. C
  6370.          DO 350 J = L, N
  6371.             S = 0.0D0
  6372. C
  6373.             DO 340 K = L, N
  6374.   340       S = S + A(I,K) * A(K,J)
  6375. C
  6376.             DO 350 K = L, N
  6377.                A(K,J) = A(K,J) + S * A(K,I)
  6378.   350    CONTINUE
  6379. C
  6380.   360    DO 380 J = L, N
  6381.             A(I,J) = 0.0D0
  6382.             A(J,I) = 0.0D0
  6383.   380    CONTINUE
  6384. C
  6385.   390    A(I,I) = 1.0D0
  6386.          G = RV1(I)
  6387.          L = I
  6388.   400 CONTINUE
  6389. C
  6390.       IF (M .GE. N .OR. IP .EQ. 0) GO TO 510
  6391.       M1 = M + 1
  6392. C
  6393.       DO 500 I = M1, N
  6394. C
  6395.          DO 500 J = 1, IP
  6396.             B(I,J) = 0.0D0
  6397.   500 CONTINUE
  6398. C     .......... DIAGONALIZATION OF THE BIDIAGONAL FORM ..........
  6399.   510 TST1 = X
  6400. C     .......... FOR K=N STEP -1 UNTIL 1 DO -- ..........
  6401.       DO 700 KK = 1, N
  6402.          K1 = N - KK
  6403.          K = K1 + 1
  6404.          ITS = 0
  6405. C     .......... TEST FOR SPLITTING.
  6406. C                FOR L=K STEP -1 UNTIL 1 DO -- ..........
  6407.   520    DO 530 LL = 1, K
  6408.             L1 = K - LL
  6409.             L = L1 + 1
  6410.             TST2 = TST1 + DABS(RV1(L))
  6411.             IF (TST2 .EQ. TST1) GO TO 565
  6412. C     .......... RV1(1) IS ALWAYS ZERO, SO THERE IS NO EXIT
  6413. C                THROUGH THE BOTTOM OF THE LOOP ..........
  6414.             TST2 = TST1 + DABS(W(L1))
  6415.             IF (TST2 .EQ. TST1) GO TO 540
  6416.   530    CONTINUE
  6417. C     .......... CANCELLATION OF RV1(L) IF L GREATER THAN 1 ..........
  6418.   540    C = 0.0D0
  6419.          S = 1.0D0
  6420. C
  6421.          DO 560 I = L, K
  6422.             F = S * RV1(I)
  6423.             RV1(I) = C * RV1(I)
  6424.             TST2 = TST1 + DABS(F)
  6425.             IF (TST2 .EQ. TST1) GO TO 565
  6426.             G = W(I)
  6427.             H = PYTHAG(F,G)
  6428.             W(I) = H
  6429.             C = G / H
  6430.             S = -F / H
  6431.             IF (IP .EQ. 0) GO TO 560
  6432. C
  6433.             DO 550 J = 1, IP
  6434.                Y = B(L1,J)
  6435.                Z = B(I,J)
  6436.                B(L1,J) = Y * C + Z * S
  6437.                B(I,J) = -Y * S + Z * C
  6438.   550       CONTINUE
  6439. C
  6440.   560    CONTINUE
  6441. C     .......... TEST FOR CONVERGENCE ..........
  6442.   565    Z = W(K)
  6443.          IF (L .EQ. K) GO TO 650
  6444. C     .......... SHIFT FROM BOTTOM 2 BY 2 MINOR ..........
  6445.          IF (ITS .EQ. 30) GO TO 1000
  6446.          ITS = ITS + 1
  6447.          X = W(L)
  6448.          Y = W(K1)
  6449.          G = RV1(K1)
  6450.          H = RV1(K)
  6451.          F = 0.5D0 * (((G + Z) / H) * ((G - Z) / Y) + Y / H - H / Y)
  6452.          G = PYTHAG(F,1.0D0)
  6453.          F = X - (Z / X) * Z + (H / X) * (Y / (F + DSIGN(G,F)) - H)
  6454. C     .......... NEXT QR TRANSFORMATION ..........
  6455.          C = 1.0D0
  6456.          S = 1.0D0
  6457. C
  6458.          DO 600 I1 = L, K1
  6459.             I = I1 + 1
  6460.             G = RV1(I)
  6461.             Y = W(I)
  6462.             H = S * G
  6463.             G = C * G
  6464.             Z = PYTHAG(F,H)
  6465.             RV1(I1) = Z
  6466.             C = F / Z
  6467.             S = H / Z
  6468.             F = X * C + G * S
  6469.             G = -X * S + G * C
  6470.             H = Y * S
  6471.             Y = Y * C
  6472. C
  6473.             DO 570 J = 1, N
  6474.                X = A(J,I1)
  6475.                Z = A(J,I)
  6476.                A(J,I1) = X * C + Z * S
  6477.                A(J,I) = -X * S + Z * C
  6478.   570       CONTINUE
  6479. C
  6480.             Z = PYTHAG(F,H)
  6481.             W(I1) = Z
  6482. C     .......... ROTATION CAN BE ARBITRARY IF Z IS ZERO ..........
  6483.             IF (Z .EQ. 0.0D0) GO TO 580
  6484.             C = F / Z
  6485.             S = H / Z
  6486.   580       F = C * G + S * Y
  6487.             X = -S * G + C * Y
  6488.             IF (IP .EQ. 0) GO TO 600
  6489. C
  6490.             DO 590 J = 1, IP
  6491.                Y = B(I1,J)
  6492.                Z = B(I,J)
  6493.                B(I1,J) = Y * C + Z * S
  6494.                B(I,J) = -Y * S + Z * C
  6495.   590       CONTINUE
  6496. C
  6497.   600    CONTINUE
  6498. C
  6499.          RV1(L) = 0.0D0
  6500.          RV1(K) = F
  6501.          W(K) = X
  6502.          GO TO 520
  6503. C     .......... CONVERGENCE ..........
  6504.   650    IF (Z .GE. 0.0D0) GO TO 700
  6505. C     .......... W(K) IS MADE NON-NEGATIVE ..........
  6506.          W(K) = -Z
  6507. C
  6508.          DO 690 J = 1, N
  6509.   690    A(J,K) = -A(J,K)
  6510. C
  6511.   700 CONTINUE
  6512. C
  6513.       GO TO 1001
  6514. C     .......... SET ERROR -- NO CONVERGENCE TO A
  6515. C                SINGULAR VALUE AFTER 30 ITERATIONS ..........
  6516.  1000 IERR = K
  6517.  1001 RETURN
  6518.       END
  6519.       SUBROUTINE ORTBAK(NM,LOW,IGH,A,ORT,M,Z)
  6520. C
  6521.       INTEGER I,J,M,LA,MM,MP,NM,IGH,KP1,LOW,MP1
  6522.       DOUBLE PRECISION A(NM,IGH),ORT(IGH),Z(NM,M)
  6523.       DOUBLE PRECISION G
  6524. C
  6525. C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE ORTBAK,
  6526. C     NUM. MATH. 12, 349-368(1968) BY MARTIN AND WILKINSON.
  6527. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 339-358(1971).
  6528. C
  6529. C     THIS SUBROUTINE FORMS THE EIGENVECTORS OF A REAL GENERAL
  6530. C     MATRIX BY BACK TRANSFORMING THOSE OF THE CORRESPONDING
  6531. C     UPPER HESSENBERG MATRIX DETERMINED BY  ORTHES.
  6532. C
  6533. C     ON INPUT
  6534. C
  6535. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  6536. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  6537. C          DIMENSION STATEMENT.
  6538. C
  6539. C        LOW AND IGH ARE INTEGERS DETERMINED BY THE BALANCING
  6540. C          SUBROUTINE  BALANC.  IF  BALANC  HAS NOT BEEN USED,
  6541. C          SET LOW=1 AND IGH EQUAL TO THE ORDER OF THE MATRIX.
  6542. C
  6543. C        A CONTAINS INFORMATION ABOUT THE ORTHOGONAL TRANS-
  6544. C          FORMATIONS USED IN THE REDUCTION BY  ORTHES
  6545. C          IN ITS STRICT LOWER TRIANGLE.
  6546. C
  6547. C        ORT CONTAINS FURTHER INFORMATION ABOUT THE TRANS-
  6548. C          FORMATIONS USED IN THE REDUCTION BY  ORTHES.
  6549. C          ONLY ELEMENTS LOW THROUGH IGH ARE USED.
  6550. C
  6551. C        M IS THE NUMBER OF COLUMNS OF Z TO BE BACK TRANSFORMED.
  6552. C
  6553. C        Z CONTAINS THE REAL AND IMAGINARY PARTS OF THE EIGEN-
  6554. C          VECTORS TO BE BACK TRANSFORMED IN ITS FIRST M COLUMNS.
  6555. C
  6556. C     ON OUTPUT
  6557. C
  6558. C        Z CONTAINS THE REAL AND IMAGINARY PARTS OF THE
  6559. C          TRANSFORMED EIGENVECTORS IN ITS FIRST M COLUMNS.
  6560. C
  6561. C        ORT HAS BEEN ALTERED.
  6562. C
  6563. C     NOTE THAT ORTBAK PRESERVES VECTOR EUCLIDEAN NORMS.
  6564. C
  6565. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  6566. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  6567. C
  6568. C     THIS VERSION DATED AUGUST 1983.
  6569. C
  6570. C     ------------------------------------------------------------------
  6571. C
  6572.       IF (M .EQ. 0) GO TO 200
  6573.       LA = IGH - 1
  6574.       KP1 = LOW + 1
  6575.       IF (LA .LT. KP1) GO TO 200
  6576. C     .......... FOR MP=IGH-1 STEP -1 UNTIL LOW+1 DO -- ..........
  6577.       DO 140 MM = KP1, LA
  6578.          MP = LOW + IGH - MM
  6579.          IF (A(MP,MP-1) .EQ. 0.0D0) GO TO 140
  6580.          MP1 = MP + 1
  6581. C
  6582.          DO 100 I = MP1, IGH
  6583.   100    ORT(I) = A(I,MP-1)
  6584. C
  6585.          DO 130 J = 1, M
  6586.             G = 0.0D0
  6587. C
  6588.             DO 110 I = MP, IGH
  6589.   110       G = G + ORT(I) * Z(I,J)
  6590. C     .......... DIVISOR BELOW IS NEGATIVE OF H FORMED IN ORTHES.
  6591. C                DOUBLE DIVISION AVOIDS POSSIBLE UNDERFLOW ..........
  6592.             G = (G / ORT(MP)) / A(MP,MP-1)
  6593. C
  6594.             DO 120 I = MP, IGH
  6595.   120       Z(I,J) = Z(I,J) + G * ORT(I)
  6596. C
  6597.   130    CONTINUE
  6598. C
  6599.   140 CONTINUE
  6600. C
  6601.   200 RETURN
  6602.       END
  6603.       SUBROUTINE ORTHES(NM,N,LOW,IGH,A,ORT)
  6604. C
  6605.       INTEGER I,J,M,N,II,JJ,LA,MP,NM,IGH,KP1,LOW
  6606.       DOUBLE PRECISION A(NM,N),ORT(IGH)
  6607.       DOUBLE PRECISION F,G,H,SCALE
  6608. C
  6609. C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE ORTHES,
  6610. C     NUM. MATH. 12, 349-368(1968) BY MARTIN AND WILKINSON.
  6611. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 339-358(1971).
  6612. C
  6613. C     GIVEN A REAL GENERAL MATRIX, THIS SUBROUTINE
  6614. C     REDUCES A SUBMATRIX SITUATED IN ROWS AND COLUMNS
  6615. C     LOW THROUGH IGH TO UPPER HESSENBERG FORM BY
  6616. C     ORTHOGONAL SIMILARITY TRANSFORMATIONS.
  6617. C
  6618. C     ON INPUT
  6619. C
  6620. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  6621. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  6622. C          DIMENSION STATEMENT.
  6623. C
  6624. C        N IS THE ORDER OF THE MATRIX.
  6625. C
  6626. C        LOW AND IGH ARE INTEGERS DETERMINED BY THE BALANCING
  6627. C          SUBROUTINE  BALANC.  IF  BALANC  HAS NOT BEEN USED,
  6628. C          SET LOW=1, IGH=N.
  6629. C
  6630. C        A CONTAINS THE INPUT MATRIX.
  6631. C
  6632. C     ON OUTPUT
  6633. C
  6634. C        A CONTAINS THE HESSENBERG MATRIX.  INFORMATION ABOUT
  6635. C          THE ORTHOGONAL TRANSFORMATIONS USED IN THE REDUCTION
  6636. C          IS STORED IN THE REMAINING TRIANGLE UNDER THE
  6637. C          HESSENBERG MATRIX.
  6638. C
  6639. C        ORT CONTAINS FURTHER INFORMATION ABOUT THE TRANSFORMATIONS.
  6640. C          ONLY ELEMENTS LOW THROUGH IGH ARE USED.
  6641. C
  6642. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  6643. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  6644. C
  6645. C     THIS VERSION DATED AUGUST 1983.
  6646. C
  6647. C     ------------------------------------------------------------------
  6648. C
  6649.       LA = IGH - 1
  6650.       KP1 = LOW + 1
  6651.       IF (LA .LT. KP1) GO TO 200
  6652. C
  6653.       DO 180 M = KP1, LA
  6654.          H = 0.0D0
  6655.          ORT(M) = 0.0D0
  6656.          SCALE = 0.0D0
  6657. C     .......... SCALE COLUMN (ALGOL TOL THEN NOT NEEDED) ..........
  6658.          DO 90 I = M, IGH
  6659.    90    SCALE = SCALE + DABS(A(I,M-1))
  6660. C
  6661.          IF (SCALE .EQ. 0.0D0) GO TO 180
  6662.          MP = M + IGH
  6663. C     .......... FOR I=IGH STEP -1 UNTIL M DO -- ..........
  6664.          DO 100 II = M, IGH
  6665.             I = MP - II
  6666.             ORT(I) = A(I,M-1) / SCALE
  6667.             H = H + ORT(I) * ORT(I)
  6668.   100    CONTINUE
  6669. C
  6670.          G = -DSIGN(DSQRT(H),ORT(M))
  6671.          H = H - ORT(M) * G
  6672.          ORT(M) = ORT(M) - G
  6673. C     .......... FORM (I-(U*UT)/H) * A ..........
  6674.          DO 130 J = M, N
  6675.             F = 0.0D0
  6676. C     .......... FOR I=IGH STEP -1 UNTIL M DO -- ..........
  6677.             DO 110 II = M, IGH
  6678.                I = MP - II
  6679.                F = F + ORT(I) * A(I,J)
  6680.   110       CONTINUE
  6681. C
  6682.             F = F / H
  6683. C
  6684.             DO 120 I = M, IGH
  6685.   120       A(I,J) = A(I,J) - F * ORT(I)
  6686. C
  6687.   130    CONTINUE
  6688. C     .......... FORM (I-(U*UT)/H)*A*(I-(U*UT)/H) ..........
  6689.          DO 160 I = 1, IGH
  6690.             F = 0.0D0
  6691. C     .......... FOR J=IGH STEP -1 UNTIL M DO -- ..........
  6692.             DO 140 JJ = M, IGH
  6693.                J = MP - JJ
  6694.                F = F + ORT(J) * A(I,J)
  6695.   140       CONTINUE
  6696. C
  6697.             F = F / H
  6698. C
  6699.             DO 150 J = M, IGH
  6700.   150       A(I,J) = A(I,J) - F * ORT(J)
  6701. C
  6702.   160    CONTINUE
  6703. C
  6704.          ORT(M) = SCALE * ORT(M)
  6705.          A(M,M-1) = SCALE * G
  6706.   180 CONTINUE
  6707. C
  6708.   200 RETURN
  6709.       END
  6710.       SUBROUTINE ORTRAN(NM,N,LOW,IGH,A,ORT,Z)
  6711. C
  6712.       INTEGER I,J,N,KL,MM,MP,NM,IGH,LOW,MP1
  6713.       DOUBLE PRECISION A(NM,IGH),ORT(IGH),Z(NM,N)
  6714.       DOUBLE PRECISION G
  6715. C
  6716. C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE ORTRANS,
  6717. C     NUM. MATH. 16, 181-204(1970) BY PETERS AND WILKINSON.
  6718. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 372-395(1971).
  6719. C
  6720. C     THIS SUBROUTINE ACCUMULATES THE ORTHOGONAL SIMILARITY
  6721. C     TRANSFORMATIONS USED IN THE REDUCTION OF A REAL GENERAL
  6722. C     MATRIX TO UPPER HESSENBERG FORM BY  ORTHES.
  6723. C
  6724. C     ON INPUT
  6725. C
  6726. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  6727. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  6728. C          DIMENSION STATEMENT.
  6729. C
  6730. C        N IS THE ORDER OF THE MATRIX.
  6731. C
  6732. C        LOW AND IGH ARE INTEGERS DETERMINED BY THE BALANCING
  6733. C          SUBROUTINE  BALANC.  IF  BALANC  HAS NOT BEEN USED,
  6734. C          SET LOW=1, IGH=N.
  6735. C
  6736. C        A CONTAINS INFORMATION ABOUT THE ORTHOGONAL TRANS-
  6737. C          FORMATIONS USED IN THE REDUCTION BY  ORTHES
  6738. C          IN ITS STRICT LOWER TRIANGLE.
  6739. C
  6740. C        ORT CONTAINS FURTHER INFORMATION ABOUT THE TRANS-
  6741. C          FORMATIONS USED IN THE REDUCTION BY  ORTHES.
  6742. C          ONLY ELEMENTS LOW THROUGH IGH ARE USED.
  6743. C
  6744. C     ON OUTPUT
  6745. C
  6746. C        Z CONTAINS THE TRANSFORMATION MATRIX PRODUCED IN THE
  6747. C          REDUCTION BY  ORTHES.
  6748. C
  6749. C        ORT HAS BEEN ALTERED.
  6750. C
  6751. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  6752. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  6753. C
  6754. C     THIS VERSION DATED AUGUST 1983.
  6755. C
  6756. C     ------------------------------------------------------------------
  6757. C
  6758. C     .......... INITIALIZE Z TO IDENTITY MATRIX ..........
  6759.       DO 80 J = 1, N
  6760. C
  6761.          DO 60 I = 1, N
  6762.    60    Z(I,J) = 0.0D0
  6763. C
  6764.          Z(J,J) = 1.0D0
  6765.    80 CONTINUE
  6766. C
  6767.       KL = IGH - LOW - 1
  6768.       IF (KL .LT. 1) GO TO 200
  6769. C     .......... FOR MP=IGH-1 STEP -1 UNTIL LOW+1 DO -- ..........
  6770.       DO 140 MM = 1, KL
  6771.          MP = IGH - MM
  6772.          IF (A(MP,MP-1) .EQ. 0.0D0) GO TO 140
  6773.          MP1 = MP + 1
  6774. C
  6775.          DO 100 I = MP1, IGH
  6776.   100    ORT(I) = A(I,MP-1)
  6777. C
  6778.          DO 130 J = MP, IGH
  6779.             G = 0.0D0
  6780. C
  6781.             DO 110 I = MP, IGH
  6782.   110       G = G + ORT(I) * Z(I,J)
  6783. C     .......... DIVISOR BELOW IS NEGATIVE OF H FORMED IN ORTHES.
  6784. C                DOUBLE DIVISION AVOIDS POSSIBLE UNDERFLOW ..........
  6785.             G = (G / ORT(MP)) / A(MP,MP-1)
  6786. C
  6787.             DO 120 I = MP, IGH
  6788.   120       Z(I,J) = Z(I,J) + G * ORT(I)
  6789. C
  6790.   130    CONTINUE
  6791. C
  6792.   140 CONTINUE
  6793. C
  6794.   200 RETURN
  6795.       END
  6796.       SUBROUTINE QZHES(NM,N,A,B,MATZ,Z)
  6797. C
  6798.       INTEGER I,J,K,L,N,LB,L1,NM,NK1,NM1,NM2
  6799.       DOUBLE PRECISION A(NM,N),B(NM,N),Z(NM,N)
  6800.       DOUBLE PRECISION R,S,T,U1,U2,V1,V2,RHO
  6801.       LOGICAL MATZ
  6802. C
  6803. C     THIS SUBROUTINE IS THE FIRST STEP OF THE QZ ALGORITHM
  6804. C     FOR SOLVING GENERALIZED MATRIX EIGENVALUE PROBLEMS,
  6805. C     SIAM J. NUMER. ANAL. 10, 241-256(1973) BY MOLER AND STEWART.
  6806. C
  6807. C     THIS SUBROUTINE ACCEPTS A PAIR OF REAL GENERAL MATRICES AND
  6808. C     REDUCES ONE OF THEM TO UPPER HESSENBERG FORM AND THE OTHER
  6809. C     TO UPPER TRIANGULAR FORM USING ORTHOGONAL TRANSFORMATIONS.
  6810. C     IT IS USUALLY FOLLOWED BY  QZIT,  QZVAL  AND, POSSIBLY,  QZVEC.
  6811. C
  6812. C     ON INPUT
  6813. C
  6814. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  6815. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  6816. C          DIMENSION STATEMENT.
  6817. C
  6818. C        N IS THE ORDER OF THE MATRICES.
  6819. C
  6820. C        A CONTAINS A REAL GENERAL MATRIX.
  6821. C
  6822. C        B CONTAINS A REAL GENERAL MATRIX.
  6823. C
  6824. C        MATZ SHOULD BE SET TO .TRUE. IF THE RIGHT HAND TRANSFORMATIONS
  6825. C          ARE TO BE ACCUMULATED FOR LATER USE IN COMPUTING
  6826. C          EIGENVECTORS, AND TO .FALSE. OTHERWISE.
  6827. C
  6828. C     ON OUTPUT
  6829. C
  6830. C        A HAS BEEN REDUCED TO UPPER HESSENBERG FORM.  THE ELEMENTS
  6831. C          BELOW THE FIRST SUBDIAGONAL HAVE BEEN SET TO ZERO.
  6832. C
  6833. C        B HAS BEEN REDUCED TO UPPER TRIANGULAR FORM.  THE ELEMENTS
  6834. C          BELOW THE MAIN DIAGONAL HAVE BEEN SET TO ZERO.
  6835. C
  6836. C        Z CONTAINS THE PRODUCT OF THE RIGHT HAND TRANSFORMATIONS IF
  6837. C          MATZ HAS BEEN SET TO .TRUE.  OTHERWISE, Z IS NOT REFERENCED.
  6838. C
  6839. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  6840. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  6841. C
  6842. C     THIS VERSION DATED AUGUST 1983.
  6843. C
  6844. C     ------------------------------------------------------------------
  6845. C
  6846. C     .......... INITIALIZE Z ..........
  6847.       IF (.NOT. MATZ) GO TO 10
  6848. C
  6849.       DO 3 J = 1, N
  6850. C
  6851.          DO 2 I = 1, N
  6852.             Z(I,J) = 0.0D0
  6853.     2    CONTINUE
  6854. C
  6855.          Z(J,J) = 1.0D0
  6856.     3 CONTINUE
  6857. C     .......... REDUCE B TO UPPER TRIANGULAR FORM ..........
  6858.    10 IF (N .LE. 1) GO TO 170
  6859.       NM1 = N - 1
  6860. C
  6861.       DO 100 L = 1, NM1
  6862.          L1 = L + 1
  6863.          S = 0.0D0
  6864. C
  6865.          DO 20 I = L1, N
  6866.             S = S + DABS(B(I,L))
  6867.    20    CONTINUE
  6868. C
  6869.          IF (S .EQ. 0.0D0) GO TO 100
  6870.          S = S + DABS(B(L,L))
  6871.          R = 0.0D0
  6872. C
  6873.          DO 25 I = L, N
  6874.             B(I,L) = B(I,L) / S
  6875.             R = R + B(I,L)**2
  6876.    25    CONTINUE
  6877. C
  6878.          R = DSIGN(DSQRT(R),B(L,L))
  6879.          B(L,L) = B(L,L) + R
  6880.          RHO = R * B(L,L)
  6881. C
  6882.          DO 50 J = L1, N
  6883.             T = 0.0D0
  6884. C
  6885.             DO 30 I = L, N
  6886.                T = T + B(I,L) * B(I,J)
  6887.    30       CONTINUE
  6888. C
  6889.             T = -T / RHO
  6890. C
  6891.             DO 40 I = L, N
  6892.                B(I,J) = B(I,J) + T * B(I,L)
  6893.    40       CONTINUE
  6894. C
  6895.    50    CONTINUE
  6896. C
  6897.          DO 80 J = 1, N
  6898.             T = 0.0D0
  6899. C
  6900.             DO 60 I = L, N
  6901.                T = T + B(I,L) * A(I,J)
  6902.    60       CONTINUE
  6903. C
  6904.             T = -T / RHO
  6905. C
  6906.             DO 70 I = L, N
  6907.                A(I,J) = A(I,J) + T * B(I,L)
  6908.    70       CONTINUE
  6909. C
  6910.    80    CONTINUE
  6911. C
  6912.          B(L,L) = -S * R
  6913. C
  6914.          DO 90 I = L1, N
  6915.             B(I,L) = 0.0D0
  6916.    90    CONTINUE
  6917. C
  6918.   100 CONTINUE
  6919. C     .......... REDUCE A TO UPPER HESSENBERG FORM, WHILE
  6920. C                KEEPING B TRIANGULAR ..........
  6921.       IF (N .EQ. 2) GO TO 170
  6922.       NM2 = N - 2
  6923. C
  6924.       DO 160 K = 1, NM2
  6925.          NK1 = NM1 - K
  6926. C     .......... FOR L=N-1 STEP -1 UNTIL K+1 DO -- ..........
  6927.          DO 150 LB = 1, NK1
  6928.             L = N - LB
  6929.             L1 = L + 1
  6930. C     .......... ZERO A(L+1,K) ..........
  6931.             S = DABS(A(L,K)) + DABS(A(L1,K))
  6932.             IF (S .EQ. 0.0D0) GO TO 150
  6933.             U1 = A(L,K) / S
  6934.             U2 = A(L1,K) / S
  6935.             R = DSIGN(DSQRT(U1*U1+U2*U2),U1)
  6936.             V1 =  -(U1 + R) / R
  6937.             V2 = -U2 / R
  6938.             U2 = V2 / V1
  6939. C
  6940.             DO 110 J = K, N
  6941.                T = A(L,J) + U2 * A(L1,J)
  6942.                A(L,J) = A(L,J) + T * V1
  6943.                A(L1,J) = A(L1,J) + T * V2
  6944.   110       CONTINUE
  6945. C
  6946.             A(L1,K) = 0.0D0
  6947. C
  6948.             DO 120 J = L, N
  6949.                T = B(L,J) + U2 * B(L1,J)
  6950.                B(L,J) = B(L,J) + T * V1
  6951.                B(L1,J) = B(L1,J) + T * V2
  6952.   120       CONTINUE
  6953. C     .......... ZERO B(L+1,L) ..........
  6954.             S = DABS(B(L1,L1)) + DABS(B(L1,L))
  6955.             IF (S .EQ. 0.0D0) GO TO 150
  6956.             U1 = B(L1,L1) / S
  6957.             U2 = B(L1,L) / S
  6958.             R = DSIGN(DSQRT(U1*U1+U2*U2),U1)
  6959.             V1 =  -(U1 + R) / R
  6960.             V2 = -U2 / R
  6961.             U2 = V2 / V1
  6962. C
  6963.             DO 130 I = 1, L1
  6964.                T = B(I,L1) + U2 * B(I,L)
  6965.                B(I,L1) = B(I,L1) + T * V1
  6966.                B(I,L) = B(I,L) + T * V2
  6967.   130       CONTINUE
  6968. C
  6969.             B(L1,L) = 0.0D0
  6970. C
  6971.             DO 140 I = 1, N
  6972.                T = A(I,L1) + U2 * A(I,L)
  6973.                A(I,L1) = A(I,L1) + T * V1
  6974.                A(I,L) = A(I,L) + T * V2
  6975.   140       CONTINUE
  6976. C
  6977.             IF (.NOT. MATZ) GO TO 150
  6978. C
  6979.             DO 145 I = 1, N
  6980.                T = Z(I,L1) + U2 * Z(I,L)
  6981.                Z(I,L1) = Z(I,L1) + T * V1
  6982.                Z(I,L) = Z(I,L) + T * V2
  6983.   145       CONTINUE
  6984. C
  6985.   150    CONTINUE
  6986. C
  6987.   160 CONTINUE
  6988. C
  6989.   170 RETURN
  6990.       END
  6991.       SUBROUTINE QZIT(NM,N,A,B,EPS1,MATZ,Z,IERR)
  6992. C
  6993.       INTEGER I,J,K,L,N,EN,K1,K2,LD,LL,L1,NA,NM,ISH,ITN,ITS,KM1,LM1,
  6994.      X        ENM2,IERR,LOR1,ENORN
  6995.       DOUBLE PRECISION A(NM,N),B(NM,N),Z(NM,N)
  6996.       DOUBLE PRECISION R,S,T,A1,A2,A3,EP,SH,U1,U2,U3,V1,V2,V3,ANI,A11,
  6997.      X       A12,A21,A22,A33,A34,A43,A44,BNI,B11,B12,B22,B33,B34,
  6998.      X       B44,EPSA,EPSB,EPS1,ANORM,BNORM,EPSLON
  6999.       LOGICAL MATZ,NOTLAS
  7000. C
  7001. C     THIS SUBROUTINE IS THE SECOND STEP OF THE QZ ALGORITHM
  7002. C     FOR SOLVING GENERALIZED MATRIX EIGENVALUE PROBLEMS,
  7003. C     SIAM J. NUMER. ANAL. 10, 241-256(1973) BY MOLER AND STEWART,
  7004. C     AS MODIFIED IN TECHNICAL NOTE NASA TN D-7305(1973) BY WARD.
  7005. C
  7006. C     THIS SUBROUTINE ACCEPTS A PAIR OF REAL MATRICES, ONE OF THEM
  7007. C     IN UPPER HESSENBERG FORM AND THE OTHER IN UPPER TRIANGULAR FORM.
  7008. C     IT REDUCES THE HESSENBERG MATRIX TO QUASI-TRIANGULAR FORM USING
  7009. C     ORTHOGONAL TRANSFORMATIONS WHILE MAINTAINING THE TRIANGULAR FORM
  7010. C     OF THE OTHER MATRIX.  IT IS USUALLY PRECEDED BY  QZHES  AND
  7011. C     FOLLOWED BY  QZVAL  AND, POSSIBLY,  QZVEC.
  7012. C
  7013. C     ON INPUT
  7014. C
  7015. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  7016. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  7017. C          DIMENSION STATEMENT.
  7018. C
  7019. C        N IS THE ORDER OF THE MATRICES.
  7020. C
  7021. C        A CONTAINS A REAL UPPER HESSENBERG MATRIX.
  7022. C
  7023. C        B CONTAINS A REAL UPPER TRIANGULAR MATRIX.
  7024. C
  7025. C        EPS1 IS A TOLERANCE USED TO DETERMINE NEGLIGIBLE ELEMENTS.
  7026. C          EPS1 = 0.0 (OR NEGATIVE) MAY BE INPUT, IN WHICH CASE AN
  7027. C          ELEMENT WILL BE NEGLECTED ONLY IF IT IS LESS THAN ROUNDOFF
  7028. C          ERROR TIMES THE NORM OF ITS MATRIX.  IF THE INPUT EPS1 IS
  7029. C          POSITIVE, THEN AN ELEMENT WILL BE CONSIDERED NEGLIGIBLE
  7030. C          IF IT IS LESS THAN EPS1 TIMES THE NORM OF ITS MATRIX.  A
  7031. C          POSITIVE VALUE OF EPS1 MAY RESULT IN FASTER EXECUTION,
  7032. C          BUT LESS ACCURATE RESULTS.
  7033. C
  7034. C        MATZ SHOULD BE SET TO .TRUE. IF THE RIGHT HAND TRANSFORMATIONS
  7035. C          ARE TO BE ACCUMULATED FOR LATER USE IN COMPUTING
  7036. C          EIGENVECTORS, AND TO .FALSE. OTHERWISE.
  7037. C
  7038. C        Z CONTAINS, IF MATZ HAS BEEN SET TO .TRUE., THE
  7039. C          TRANSFORMATION MATRIX PRODUCED IN THE REDUCTION
  7040. C          BY  QZHES, IF PERFORMED, OR ELSE THE IDENTITY MATRIX.
  7041. C          IF MATZ HAS BEEN SET TO .FALSE., Z IS NOT REFERENCED.
  7042. C
  7043. C     ON OUTPUT
  7044. C
  7045. C        A HAS BEEN REDUCED TO QUASI-TRIANGULAR FORM.  THE ELEMENTS
  7046. C          BELOW THE FIRST SUBDIAGONAL ARE STILL ZERO AND NO TWO
  7047. C          CONSECUTIVE SUBDIAGONAL ELEMENTS ARE NONZERO.
  7048. C
  7049. C        B IS STILL IN UPPER TRIANGULAR FORM, ALTHOUGH ITS ELEMENTS
  7050. C          HAVE BEEN ALTERED.  THE LOCATION B(N,1) IS USED TO STORE
  7051. C          EPS1 TIMES THE NORM OF B FOR LATER USE BY  QZVAL  AND  QZVEC.
  7052. C
  7053. C        Z CONTAINS THE PRODUCT OF THE RIGHT HAND TRANSFORMATIONS
  7054. C          (FOR BOTH STEPS) IF MATZ HAS BEEN SET TO .TRUE..
  7055. C
  7056. C        IERR IS SET TO
  7057. C          ZERO       FOR NORMAL RETURN,
  7058. C          J          IF THE LIMIT OF 30*N ITERATIONS IS EXHAUSTED
  7059. C                     WHILE THE J-TH EIGENVALUE IS BEING SOUGHT.
  7060. C
  7061. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  7062. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  7063. C
  7064. C     THIS VERSION DATED AUGUST 1983.
  7065. C
  7066. C     ------------------------------------------------------------------
  7067. C
  7068.       IERR = 0
  7069. C     .......... COMPUTE EPSA,EPSB ..........
  7070.       ANORM = 0.0D0
  7071.       BNORM = 0.0D0
  7072. C
  7073.       DO 30 I = 1, N
  7074.          ANI = 0.0D0
  7075.          IF (I .NE. 1) ANI = DABS(A(I,I-1))
  7076.          BNI = 0.0D0
  7077. C
  7078.          DO 20 J = I, N
  7079.             ANI = ANI + DABS(A(I,J))
  7080.             BNI = BNI + DABS(B(I,J))
  7081.    20    CONTINUE
  7082. C
  7083.          IF (ANI .GT. ANORM) ANORM = ANI
  7084.          IF (BNI .GT. BNORM) BNORM = BNI
  7085.    30 CONTINUE
  7086. C
  7087.       IF (ANORM .EQ. 0.0D0) ANORM = 1.0D0
  7088.       IF (BNORM .EQ. 0.0D0) BNORM = 1.0D0
  7089.       EP = EPS1
  7090.       IF (EP .GT. 0.0D0) GO TO 50
  7091. C     .......... USE ROUNDOFF LEVEL IF EPS1 IS ZERO ..........
  7092.       EP = EPSLON(1.0D0)
  7093.    50 EPSA = EP * ANORM
  7094.       EPSB = EP * BNORM
  7095. C     .......... REDUCE A TO QUASI-TRIANGULAR FORM, WHILE
  7096. C                KEEPING B TRIANGULAR ..........
  7097.       LOR1 = 1
  7098.       ENORN = N
  7099.       EN = N
  7100.       ITN = 30*N
  7101. C     .......... BEGIN QZ STEP ..........
  7102.    60 IF (EN .LE. 2) GO TO 1001
  7103.       IF (.NOT. MATZ) ENORN = EN
  7104.       ITS = 0
  7105.       NA = EN - 1
  7106.       ENM2 = NA - 1
  7107.    70 ISH = 2
  7108. C     .......... CHECK FOR CONVERGENCE OR REDUCIBILITY.
  7109. C                FOR L=EN STEP -1 UNTIL 1 DO -- ..........
  7110.       DO 80 LL = 1, EN
  7111.          LM1 = EN - LL
  7112.          L = LM1 + 1
  7113.          IF (L .EQ. 1) GO TO 95
  7114.          IF (DABS(A(L,LM1)) .LE. EPSA) GO TO 90
  7115.    80 CONTINUE
  7116. C
  7117.    90 A(L,LM1) = 0.0D0
  7118.       IF (L .LT. NA) GO TO 95
  7119. C     .......... 1-BY-1 OR 2-BY-2 BLOCK ISOLATED ..........
  7120.       EN = LM1
  7121.       GO TO 60
  7122. C     .......... CHECK FOR SMALL TOP OF B ..........
  7123.    95 LD = L
  7124.   100 L1 = L + 1
  7125.       B11 = B(L,L)
  7126.       IF (DABS(B11) .GT. EPSB) GO TO 120
  7127.       B(L,L) = 0.0D0
  7128.       S = DABS(A(L,L)) + DABS(A(L1,L))
  7129.       U1 = A(L,L) / S
  7130.       U2 = A(L1,L) / S
  7131.       R = DSIGN(DSQRT(U1*U1+U2*U2),U1)
  7132.       V1 = -(U1 + R) / R
  7133.       V2 = -U2 / R
  7134.       U2 = V2 / V1
  7135. C
  7136.       DO 110 J = L, ENORN
  7137.          T = A(L,J) + U2 * A(L1,J)
  7138.          A(L,J) = A(L,J) + T * V1
  7139.          A(L1,J) = A(L1,J) + T * V2
  7140.          T = B(L,J) + U2 * B(L1,J)
  7141.          B(L,J) = B(L,J) + T * V1
  7142.          B(L1,J) = B(L1,J) + T * V2
  7143.   110 CONTINUE
  7144. C
  7145.       IF (L .NE. 1) A(L,LM1) = -A(L,LM1)
  7146.       LM1 = L
  7147.       L = L1
  7148.       GO TO 90
  7149.   120 A11 = A(L,L) / B11
  7150.       A21 = A(L1,L) / B11
  7151.       IF (ISH .EQ. 1) GO TO 140
  7152. C     .......... ITERATION STRATEGY ..........
  7153.       IF (ITN .EQ. 0) GO TO 1000
  7154.       IF (ITS .EQ. 10) GO TO 155
  7155. C     .......... DETERMINE TYPE OF SHIFT ..........
  7156.       B22 = B(L1,L1)
  7157.       IF (DABS(B22) .LT. EPSB) B22 = EPSB
  7158.       B33 = B(NA,NA)
  7159.       IF (DABS(B33) .LT. EPSB) B33 = EPSB
  7160.       B44 = B(EN,EN)
  7161.       IF (DABS(B44) .LT. EPSB) B44 = EPSB
  7162.       A33 = A(NA,NA) / B33
  7163.       A34 = A(NA,EN) / B44
  7164.       A43 = A(EN,NA) / B33
  7165.       A44 = A(EN,EN) / B44
  7166.       B34 = B(NA,EN) / B44
  7167.       T = 0.5D0 * (A43 * B34 - A33 - A44)
  7168.       R = T * T + A34 * A43 - A33 * A44
  7169.       IF (R .LT. 0.0D0) GO TO 150
  7170. C     .......... DETERMINE SINGLE SHIFT ZEROTH COLUMN OF A ..........
  7171.       ISH = 1
  7172.       R = DSQRT(R)
  7173.       SH = -T + R
  7174.       S = -T - R
  7175.       IF (DABS(S-A44) .LT. DABS(SH-A44)) SH = S
  7176. C     .......... LOOK FOR TWO CONSECUTIVE SMALL
  7177. C                SUB-DIAGONAL ELEMENTS OF A.
  7178. C                FOR L=EN-2 STEP -1 UNTIL LD DO -- ..........
  7179.       DO 130 LL = LD, ENM2
  7180.          L = ENM2 + LD - LL
  7181.          IF (L .EQ. LD) GO TO 140
  7182.          LM1 = L - 1
  7183.          L1 = L + 1
  7184.          T = A(L,L)
  7185.          IF (DABS(B(L,L)) .GT. EPSB) T = T - SH * B(L,L)
  7186.          IF (DABS(A(L,LM1)) .LE. DABS(T/A(L1,L)) * EPSA) GO TO 100
  7187.   130 CONTINUE
  7188. C
  7189.   140 A1 = A11 - SH
  7190.       A2 = A21
  7191.       IF (L .NE. LD) A(L,LM1) = -A(L,LM1)
  7192.       GO TO 160
  7193. C     .......... DETERMINE DOUBLE SHIFT ZEROTH COLUMN OF A ..........
  7194.   150 A12 = A(L,L1) / B22
  7195.       A22 = A(L1,L1) / B22
  7196.       B12 = B(L,L1) / B22
  7197.       A1 = ((A33 - A11) * (A44 - A11) - A34 * A43 + A43 * B34 * A11)
  7198.      X     / A21 + A12 - A11 * B12
  7199.       A2 = (A22 - A11) - A21 * B12 - (A33 - A11) - (A44 - A11)
  7200.      X     + A43 * B34
  7201.       A3 = A(L1+1,L1) / B22
  7202.       GO TO 160
  7203. C     .......... AD HOC SHIFT ..........
  7204.   155 A1 = 0.0D0
  7205.       A2 = 1.0D0
  7206.       A3 = 1.1605D0
  7207.   160 ITS = ITS + 1
  7208.       ITN = ITN - 1
  7209.       IF (.NOT. MATZ) LOR1 = LD
  7210. C     .......... MAIN LOOP ..........
  7211.       DO 260 K = L, NA
  7212.          NOTLAS = K .NE. NA .AND. ISH .EQ. 2
  7213.          K1 = K + 1
  7214.          K2 = K + 2
  7215.          KM1 = MAX0(K-1,L)
  7216.          LL = MIN0(EN,K1+ISH)
  7217.          IF (NOTLAS) GO TO 190
  7218. C     .......... ZERO A(K+1,K-1) ..........
  7219.          IF (K .EQ. L) GO TO 170
  7220.          A1 = A(K,KM1)
  7221.          A2 = A(K1,KM1)
  7222.   170    S = DABS(A1) + DABS(A2)
  7223.          IF (S .EQ. 0.0D0) GO TO 70
  7224.          U1 = A1 / S
  7225.          U2 = A2 / S
  7226.          R = DSIGN(DSQRT(U1*U1+U2*U2),U1)
  7227.          V1 = -(U1 + R) / R
  7228.          V2 = -U2 / R
  7229.          U2 = V2 / V1
  7230. C
  7231.          DO 180 J = KM1, ENORN
  7232.             T = A(K,J) + U2 * A(K1,J)
  7233.             A(K,J) = A(K,J) + T * V1
  7234.             A(K1,J) = A(K1,J) + T * V2
  7235.             T = B(K,J) + U2 * B(K1,J)
  7236.             B(K,J) = B(K,J) + T * V1
  7237.             B(K1,J) = B(K1,J) + T * V2
  7238.   180    CONTINUE
  7239. C
  7240.          IF (K .NE. L) A(K1,KM1) = 0.0D0
  7241.          GO TO 240
  7242. C     .......... ZERO A(K+1,K-1) AND A(K+2,K-1) ..........
  7243.   190    IF (K .EQ. L) GO TO 200
  7244.          A1 = A(K,KM1)
  7245.          A2 = A(K1,KM1)
  7246.          A3 = A(K2,KM1)
  7247.   200    S = DABS(A1) + DABS(A2) + DABS(A3)
  7248.          IF (S .EQ. 0.0D0) GO TO 260
  7249.          U1 = A1 / S
  7250.          U2 = A2 / S
  7251.          U3 = A3 / S
  7252.          R = DSIGN(DSQRT(U1*U1+U2*U2+U3*U3),U1)
  7253.          V1 = -(U1 + R) / R
  7254.          V2 = -U2 / R
  7255.          V3 = -U3 / R
  7256.          U2 = V2 / V1
  7257.          U3 = V3 / V1
  7258. C
  7259.          DO 210 J = KM1, ENORN
  7260.             T = A(K,J) + U2 * A(K1,J) + U3 * A(K2,J)
  7261.             A(K,J) = A(K,J) + T * V1
  7262.             A(K1,J) = A(K1,J) + T * V2
  7263.             A(K2,J) = A(K2,J) + T * V3
  7264.             T = B(K,J) + U2 * B(K1,J) + U3 * B(K2,J)
  7265.             B(K,J) = B(K,J) + T * V1
  7266.             B(K1,J) = B(K1,J) + T * V2
  7267.             B(K2,J) = B(K2,J) + T * V3
  7268.   210    CONTINUE
  7269. C
  7270.          IF (K .EQ. L) GO TO 220
  7271.          A(K1,KM1) = 0.0D0
  7272.          A(K2,KM1) = 0.0D0
  7273. C     .......... ZERO B(K+2,K+1) AND B(K+2,K) ..........
  7274.   220    S = DABS(B(K2,K2)) + DABS(B(K2,K1)) + DABS(B(K2,K))
  7275.          IF (S .EQ. 0.0D0) GO TO 240
  7276.          U1 = B(K2,K2) / S
  7277.          U2 = B(K2,K1) / S
  7278.          U3 = B(K2,K) / S
  7279.          R = DSIGN(DSQRT(U1*U1+U2*U2+U3*U3),U1)
  7280.          V1 = -(U1 + R) / R
  7281.          V2 = -U2 / R
  7282.          V3 = -U3 / R
  7283.          U2 = V2 / V1
  7284.          U3 = V3 / V1
  7285. C
  7286.          DO 230 I = LOR1, LL
  7287.             T = A(I,K2) + U2 * A(I,K1) + U3 * A(I,K)
  7288.             A(I,K2) = A(I,K2) + T * V1
  7289.             A(I,K1) = A(I,K1) + T * V2
  7290.             A(I,K) = A(I,K) + T * V3
  7291.             T = B(I,K2) + U2 * B(I,K1) + U3 * B(I,K)
  7292.             B(I,K2) = B(I,K2) + T * V1
  7293.             B(I,K1) = B(I,K1) + T * V2
  7294.             B(I,K) = B(I,K) + T * V3
  7295.   230    CONTINUE
  7296. C
  7297.          B(K2,K) = 0.0D0
  7298.          B(K2,K1) = 0.0D0
  7299.          IF (.NOT. MATZ) GO TO 240
  7300. C
  7301.          DO 235 I = 1, N
  7302.             T = Z(I,K2) + U2 * Z(I,K1) + U3 * Z(I,K)
  7303.             Z(I,K2) = Z(I,K2) + T * V1
  7304.             Z(I,K1) = Z(I,K1) + T * V2
  7305.             Z(I,K) = Z(I,K) + T * V3
  7306.   235    CONTINUE
  7307. C     .......... ZERO B(K+1,K) ..........
  7308.   240    S = DABS(B(K1,K1)) + DABS(B(K1,K))
  7309.          IF (S .EQ. 0.0D0) GO TO 260
  7310.          U1 = B(K1,K1) / S
  7311.          U2 = B(K1,K) / S
  7312.          R = DSIGN(DSQRT(U1*U1+U2*U2),U1)
  7313.          V1 = -(U1 + R) / R
  7314.          V2 = -U2 / R
  7315.          U2 = V2 / V1
  7316. C
  7317.          DO 250 I = LOR1, LL
  7318.             T = A(I,K1) + U2 * A(I,K)
  7319.             A(I,K1) = A(I,K1) + T * V1
  7320.             A(I,K) = A(I,K) + T * V2
  7321.             T = B(I,K1) + U2 * B(I,K)
  7322.             B(I,K1) = B(I,K1) + T * V1
  7323.             B(I,K) = B(I,K) + T * V2
  7324.   250    CONTINUE
  7325. C
  7326.          B(K1,K) = 0.0D0
  7327.          IF (.NOT. MATZ) GO TO 260
  7328. C
  7329.          DO 255 I = 1, N
  7330.             T = Z(I,K1) + U2 * Z(I,K)
  7331.             Z(I,K1) = Z(I,K1) + T * V1
  7332.             Z(I,K) = Z(I,K) + T * V2
  7333.   255    CONTINUE
  7334. C
  7335.   260 CONTINUE
  7336. C     .......... END QZ STEP ..........
  7337.       GO TO 70
  7338. C     .......... SET ERROR -- ALL EIGENVALUES HAVE NOT
  7339. C                CONVERGED AFTER 30*N ITERATIONS ..........
  7340.  1000 IERR = EN
  7341. C     .......... SAVE EPSB FOR USE BY QZVAL AND QZVEC ..........
  7342.  1001 IF (N .GT. 1) B(N,1) = EPSB
  7343.       RETURN
  7344.       END
  7345.       SUBROUTINE QZVAL(NM,N,A,B,ALFR,ALFI,BETA,MATZ,Z)
  7346. C
  7347.       INTEGER I,J,N,EN,NA,NM,NN,ISW
  7348.       DOUBLE PRECISION A(NM,N),B(NM,N),ALFR(N),ALFI(N),BETA(N),Z(NM,N)
  7349.       DOUBLE PRECISION C,D,E,R,S,T,AN,A1,A2,BN,CQ,CZ,DI,DR,EI,TI,TR,U1,
  7350.      X       U2,V1,V2,A1I,A11,A12,A2I,A21,A22,B11,B12,B22,SQI,SQR,
  7351.      X       SSI,SSR,SZI,SZR,A11I,A11R,A12I,A12R,A22I,A22R,EPSB
  7352.       LOGICAL MATZ
  7353. C
  7354. C     THIS SUBROUTINE IS THE THIRD STEP OF THE QZ ALGORITHM
  7355. C     FOR SOLVING GENERALIZED MATRIX EIGENVALUE PROBLEMS,
  7356. C     SIAM J. NUMER. ANAL. 10, 241-256(1973) BY MOLER AND STEWART.
  7357. C
  7358. C     THIS SUBROUTINE ACCEPTS A PAIR OF REAL MATRICES, ONE OF THEM
  7359. C     IN QUASI-TRIANGULAR FORM AND THE OTHER IN UPPER TRIANGULAR FORM.
  7360. C     IT REDUCES THE QUASI-TRIANGULAR MATRIX FURTHER, SO THAT ANY
  7361. C     REMAINING 2-BY-2 BLOCKS CORRESPOND TO PAIRS OF COMPLEX
  7362. C     EIGENVALUES, AND RETURNS QUANTITIES WHOSE RATIOS GIVE THE
  7363. C     GENERALIZED EIGENVALUES.  IT IS USUALLY PRECEDED BY  QZHES
  7364. C     AND  QZIT  AND MAY BE FOLLOWED BY  QZVEC.
  7365. C
  7366. C     ON INPUT
  7367. C
  7368. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  7369. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  7370. C          DIMENSION STATEMENT.
  7371. C
  7372. C        N IS THE ORDER OF THE MATRICES.
  7373. C
  7374. C        A CONTAINS A REAL UPPER QUASI-TRIANGULAR MATRIX.
  7375. C
  7376. C        B CONTAINS A REAL UPPER TRIANGULAR MATRIX.  IN ADDITION,
  7377. C          LOCATION B(N,1) CONTAINS THE TOLERANCE QUANTITY (EPSB)
  7378. C          COMPUTED AND SAVED IN  QZIT.
  7379. C
  7380. C        MATZ SHOULD BE SET TO .TRUE. IF THE RIGHT HAND TRANSFORMATIONS
  7381. C          ARE TO BE ACCUMULATED FOR LATER USE IN COMPUTING
  7382. C          EIGENVECTORS, AND TO .FALSE. OTHERWISE.
  7383. C
  7384. C        Z CONTAINS, IF MATZ HAS BEEN SET TO .TRUE., THE
  7385. C          TRANSFORMATION MATRIX PRODUCED IN THE REDUCTIONS BY QZHES
  7386. C          AND QZIT, IF PERFORMED, OR ELSE THE IDENTITY MATRIX.
  7387. C          IF MATZ HAS BEEN SET TO .FALSE., Z IS NOT REFERENCED.
  7388. C
  7389. C     ON OUTPUT
  7390. C
  7391. C        A HAS BEEN REDUCED FURTHER TO A QUASI-TRIANGULAR MATRIX
  7392. C          IN WHICH ALL NONZERO SUBDIAGONAL ELEMENTS CORRESPOND TO
  7393. C          PAIRS OF COMPLEX EIGENVALUES.
  7394. C
  7395. C        B IS STILL IN UPPER TRIANGULAR FORM, ALTHOUGH ITS ELEMENTS
  7396. C          HAVE BEEN ALTERED.  B(N,1) IS UNALTERED.
  7397. C
  7398. C        ALFR AND ALFI CONTAIN THE REAL AND IMAGINARY PARTS OF THE
  7399. C          DIAGONAL ELEMENTS OF THE TRIANGULAR MATRIX THAT WOULD BE
  7400. C          OBTAINED IF A WERE REDUCED COMPLETELY TO TRIANGULAR FORM
  7401. C          BY UNITARY TRANSFORMATIONS.  NON-ZERO VALUES OF ALFI OCCUR
  7402. C          IN PAIRS, THE FIRST MEMBER POSITIVE AND THE SECOND NEGATIVE.
  7403. C
  7404. C        BETA CONTAINS THE DIAGONAL ELEMENTS OF THE CORRESPONDING B,
  7405. C          NORMALIZED TO BE REAL AND NON-NEGATIVE.  THE GENERALIZED
  7406. C          EIGENVALUES ARE THEN THE RATIOS ((ALFR+I*ALFI)/BETA).
  7407. C
  7408. C        Z CONTAINS THE PRODUCT OF THE RIGHT HAND TRANSFORMATIONS
  7409. C          (FOR ALL THREE STEPS) IF MATZ HAS BEEN SET TO .TRUE.
  7410. C
  7411. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  7412. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  7413. C
  7414. C     THIS VERSION DATED AUGUST 1983.
  7415. C
  7416. C     ------------------------------------------------------------------
  7417. C
  7418.       EPSB = B(N,1)
  7419.       ISW = 1
  7420. C     .......... FIND EIGENVALUES OF QUASI-TRIANGULAR MATRICES.
  7421. C                FOR EN=N STEP -1 UNTIL 1 DO -- ..........
  7422.       DO 510 NN = 1, N
  7423.          EN = N + 1 - NN
  7424.          NA = EN - 1
  7425.          IF (ISW .EQ. 2) GO TO 505
  7426.          IF (EN .EQ. 1) GO TO 410
  7427.          IF (A(EN,NA) .NE. 0.0D0) GO TO 420
  7428. C     .......... 1-BY-1 BLOCK, ONE REAL ROOT ..........
  7429.   410    ALFR(EN) = A(EN,EN)
  7430.          IF (B(EN,EN) .LT. 0.0D0) ALFR(EN) = -ALFR(EN)
  7431.          BETA(EN) = DABS(B(EN,EN))
  7432.          ALFI(EN) = 0.0D0
  7433.          GO TO 510
  7434. C     .......... 2-BY-2 BLOCK ..........
  7435.   420    IF (DABS(B(NA,NA)) .LE. EPSB) GO TO 455
  7436.          IF (DABS(B(EN,EN)) .GT. EPSB) GO TO 430
  7437.          A1 = A(EN,EN)
  7438.          A2 = A(EN,NA)
  7439.          BN = 0.0D0
  7440.          GO TO 435
  7441.   430    AN = DABS(A(NA,NA)) + DABS(A(NA,EN)) + DABS(A(EN,NA))
  7442.      X      + DABS(A(EN,EN))
  7443.          BN = DABS(B(NA,NA)) + DABS(B(NA,EN)) + DABS(B(EN,EN))
  7444.          A11 = A(NA,NA) / AN
  7445.          A12 = A(NA,EN) / AN
  7446.          A21 = A(EN,NA) / AN
  7447.          A22 = A(EN,EN) / AN
  7448.          B11 = B(NA,NA) / BN
  7449.          B12 = B(NA,EN) / BN
  7450.          B22 = B(EN,EN) / BN
  7451.          E = A11 / B11
  7452.          EI = A22 / B22
  7453.          S = A21 / (B11 * B22)
  7454.          T = (A22 - E * B22) / B22
  7455.          IF (DABS(E) .LE. DABS(EI)) GO TO 431
  7456.          E = EI
  7457.          T = (A11 - E * B11) / B11
  7458.   431    C = 0.5D0 * (T - S * B12)
  7459.          D = C * C + S * (A12 - E * B12)
  7460.          IF (D .LT. 0.0D0) GO TO 480
  7461. C     .......... TWO REAL ROOTS.
  7462. C                ZERO BOTH A(EN,NA) AND B(EN,NA) ..........
  7463.          E = E + (C + DSIGN(DSQRT(D),C))
  7464.          A11 = A11 - E * B11
  7465.          A12 = A12 - E * B12
  7466.          A22 = A22 - E * B22
  7467.          IF (DABS(A11) + DABS(A12) .LT.
  7468.      X       DABS(A21) + DABS(A22)) GO TO 432
  7469.          A1 = A12
  7470.          A2 = A11
  7471.          GO TO 435
  7472.   432    A1 = A22
  7473.          A2 = A21
  7474. C     .......... CHOOSE AND APPLY REAL Z ..........
  7475.   435    S = DABS(A1) + DABS(A2)
  7476.          U1 = A1 / S
  7477.          U2 = A2 / S
  7478.          R = DSIGN(DSQRT(U1*U1+U2*U2),U1)
  7479.          V1 = -(U1 + R) / R
  7480.          V2 = -U2 / R
  7481.          U2 = V2 / V1
  7482. C
  7483.          DO 440 I = 1, EN
  7484.             T = A(I,EN) + U2 * A(I,NA)
  7485.             A(I,EN) = A(I,EN) + T * V1
  7486.             A(I,NA) = A(I,NA) + T * V2
  7487.             T = B(I,EN) + U2 * B(I,NA)
  7488.             B(I,EN) = B(I,EN) + T * V1
  7489.             B(I,NA) = B(I,NA) + T * V2
  7490.   440    CONTINUE
  7491. C
  7492.          IF (.NOT. MATZ) GO TO 450
  7493. C
  7494.          DO 445 I = 1, N
  7495.             T = Z(I,EN) + U2 * Z(I,NA)
  7496.             Z(I,EN) = Z(I,EN) + T * V1
  7497.             Z(I,NA) = Z(I,NA) + T * V2
  7498.   445    CONTINUE
  7499. C
  7500.   450    IF (BN .EQ. 0.0D0) GO TO 475
  7501.          IF (AN .LT. DABS(E) * BN) GO TO 455
  7502.          A1 = B(NA,NA)
  7503.          A2 = B(EN,NA)
  7504.          GO TO 460
  7505.   455    A1 = A(NA,NA)
  7506.          A2 = A(EN,NA)
  7507. C     .......... CHOOSE AND APPLY REAL Q ..........
  7508.   460    S = DABS(A1) + DABS(A2)
  7509.          IF (S .EQ. 0.0D0) GO TO 475
  7510.          U1 = A1 / S
  7511.          U2 = A2 / S
  7512.          R = DSIGN(DSQRT(U1*U1+U2*U2),U1)
  7513.          V1 = -(U1 + R) / R
  7514.          V2 = -U2 / R
  7515.          U2 = V2 / V1
  7516. C
  7517.          DO 470 J = NA, N
  7518.             T = A(NA,J) + U2 * A(EN,J)
  7519.             A(NA,J) = A(NA,J) + T * V1
  7520.             A(EN,J) = A(EN,J) + T * V2
  7521.             T = B(NA,J) + U2 * B(EN,J)
  7522.             B(NA,J) = B(NA,J) + T * V1
  7523.             B(EN,J) = B(EN,J) + T * V2
  7524.   470    CONTINUE
  7525. C
  7526.   475    A(EN,NA) = 0.0D0
  7527.          B(EN,NA) = 0.0D0
  7528.          ALFR(NA) = A(NA,NA)
  7529.          ALFR(EN) = A(EN,EN)
  7530.          IF (B(NA,NA) .LT. 0.0D0) ALFR(NA) = -ALFR(NA)
  7531.          IF (B(EN,EN) .LT. 0.0D0) ALFR(EN) = -ALFR(EN)
  7532.          BETA(NA) = DABS(B(NA,NA))
  7533.          BETA(EN) = DABS(B(EN,EN))
  7534.          ALFI(EN) = 0.0D0
  7535.          ALFI(NA) = 0.0D0
  7536.          GO TO 505
  7537. C     .......... TWO COMPLEX ROOTS ..........
  7538.   480    E = E + C
  7539.          EI = DSQRT(-D)
  7540.          A11R = A11 - E * B11
  7541.          A11I = EI * B11
  7542.          A12R = A12 - E * B12
  7543.          A12I = EI * B12
  7544.          A22R = A22 - E * B22
  7545.          A22I = EI * B22
  7546.          IF (DABS(A11R) + DABS(A11I) + DABS(A12R) + DABS(A12I) .LT.
  7547.      X       DABS(A21) + DABS(A22R) + DABS(A22I)) GO TO 482
  7548.          A1 = A12R
  7549.          A1I = A12I
  7550.          A2 = -A11R
  7551.          A2I = -A11I
  7552.          GO TO 485
  7553.   482    A1 = A22R
  7554.          A1I = A22I
  7555.          A2 = -A21
  7556.          A2I = 0.0D0
  7557. C     .......... CHOOSE COMPLEX Z ..........
  7558.   485    CZ = DSQRT(A1*A1+A1I*A1I)
  7559.          IF (CZ .EQ. 0.0D0) GO TO 487
  7560.          SZR = (A1 * A2 + A1I * A2I) / CZ
  7561.          SZI = (A1 * A2I - A1I * A2) / CZ
  7562.          R = DSQRT(CZ*CZ+SZR*SZR+SZI*SZI)
  7563.          CZ = CZ / R
  7564.          SZR = SZR / R
  7565.          SZI = SZI / R
  7566.          GO TO 490
  7567.   487    SZR = 1.0D0
  7568.          SZI = 0.0D0
  7569.   490    IF (AN .LT. (DABS(E) + EI) * BN) GO TO 492
  7570.          A1 = CZ * B11 + SZR * B12
  7571.          A1I = SZI * B12
  7572.          A2 = SZR * B22
  7573.          A2I = SZI * B22
  7574.          GO TO 495
  7575.   492    A1 = CZ * A11 + SZR * A12
  7576.          A1I = SZI * A12
  7577.          A2 = CZ * A21 + SZR * A22
  7578.          A2I = SZI * A22
  7579. C     .......... CHOOSE COMPLEX Q ..........
  7580.   495    CQ = DSQRT(A1*A1+A1I*A1I)
  7581.          IF (CQ .EQ. 0.0D0) GO TO 497
  7582.          SQR = (A1 * A2 + A1I * A2I) / CQ
  7583.          SQI = (A1 * A2I - A1I * A2) / CQ
  7584.          R = DSQRT(CQ*CQ+SQR*SQR+SQI*SQI)
  7585.          CQ = CQ / R
  7586.          SQR = SQR / R
  7587.          SQI = SQI / R
  7588.          GO TO 500
  7589.   497    SQR = 1.0D0
  7590.          SQI = 0.0D0
  7591. C     .......... COMPUTE DIAGONAL ELEMENTS THAT WOULD RESULT
  7592. C                IF TRANSFORMATIONS WERE APPLIED ..........
  7593.   500    SSR = SQR * SZR + SQI * SZI
  7594.          SSI = SQR * SZI - SQI * SZR
  7595.          I = 1
  7596.          TR = CQ * CZ * A11 + CQ * SZR * A12 + SQR * CZ * A21
  7597.      X      + SSR * A22
  7598.          TI = CQ * SZI * A12 - SQI * CZ * A21 + SSI * A22
  7599.          DR = CQ * CZ * B11 + CQ * SZR * B12 + SSR * B22
  7600.          DI = CQ * SZI * B12 + SSI * B22
  7601.          GO TO 503
  7602.   502    I = 2
  7603.          TR = SSR * A11 - SQR * CZ * A12 - CQ * SZR * A21
  7604.      X      + CQ * CZ * A22
  7605.          TI = -SSI * A11 - SQI * CZ * A12 + CQ * SZI * A21
  7606.          DR = SSR * B11 - SQR * CZ * B12 + CQ * CZ * B22
  7607.          DI = -SSI * B11 - SQI * CZ * B12
  7608.   503    T = TI * DR - TR * DI
  7609.          J = NA
  7610.          IF (T .LT. 0.0D0) J = EN
  7611.          R = DSQRT(DR*DR+DI*DI)
  7612.          BETA(J) = BN * R
  7613.          ALFR(J) = AN * (TR * DR + TI * DI) / R
  7614.          ALFI(J) = AN * T / R
  7615.          IF (I .EQ. 1) GO TO 502
  7616.   505    ISW = 3 - ISW
  7617.   510 CONTINUE
  7618.       B(N,1) = EPSB
  7619. C
  7620.       RETURN
  7621.       END
  7622.       SUBROUTINE QZVEC(NM,N,A,B,ALFR,ALFI,BETA,Z)
  7623. C
  7624.       INTEGER I,J,K,M,N,EN,II,JJ,NA,NM,NN,ISW,ENM2
  7625.       DOUBLE PRECISION A(NM,N),B(NM,N),ALFR(N),ALFI(N),BETA(N),Z(NM,N)
  7626.       DOUBLE PRECISION D,Q,R,S,T,W,X,Y,DI,DR,RA,RR,SA,TI,TR,T1,T2,W1,X1,
  7627.      X       ZZ,Z1,ALFM,ALMI,ALMR,BETM,EPSB
  7628. C
  7629. C     THIS SUBROUTINE IS THE OPTIONAL FOURTH STEP OF THE QZ ALGORITHM
  7630. C     FOR SOLVING GENERALIZED MATRIX EIGENVALUE PROBLEMS,
  7631. C     SIAM J. NUMER. ANAL. 10, 241-256(1973) BY MOLER AND STEWART.
  7632. C
  7633. C     THIS SUBROUTINE ACCEPTS A PAIR OF REAL MATRICES, ONE OF THEM IN
  7634. C     QUASI-TRIANGULAR FORM (IN WHICH EACH 2-BY-2 BLOCK CORRESPONDS TO
  7635. C     A PAIR OF COMPLEX EIGENVALUES) AND THE OTHER IN UPPER TRIANGULAR
  7636. C     FORM.  IT COMPUTES THE EIGENVECTORS OF THE TRIANGULAR PROBLEM AND
  7637. C     TRANSFORMS THE RESULTS BACK TO THE ORIGINAL COORDINATE SYSTEM.
  7638. C     IT IS USUALLY PRECEDED BY  QZHES,  QZIT, AND  QZVAL.
  7639. C
  7640. C     ON INPUT
  7641. C
  7642. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  7643. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  7644. C          DIMENSION STATEMENT.
  7645. C
  7646. C        N IS THE ORDER OF THE MATRICES.
  7647. C
  7648. C        A CONTAINS A REAL UPPER QUASI-TRIANGULAR MATRIX.
  7649. C
  7650. C        B CONTAINS A REAL UPPER TRIANGULAR MATRIX.  IN ADDITION,
  7651. C          LOCATION B(N,1) CONTAINS THE TOLERANCE QUANTITY (EPSB)
  7652. C          COMPUTED AND SAVED IN  QZIT.
  7653. C
  7654. C        ALFR, ALFI, AND BETA  ARE VECTORS WITH COMPONENTS WHOSE
  7655. C          RATIOS ((ALFR+I*ALFI)/BETA) ARE THE GENERALIZED
  7656. C          EIGENVALUES.  THEY ARE USUALLY OBTAINED FROM  QZVAL.
  7657. C
  7658. C        Z CONTAINS THE TRANSFORMATION MATRIX PRODUCED IN THE
  7659. C          REDUCTIONS BY  QZHES,  QZIT, AND  QZVAL, IF PERFORMED.
  7660. C          IF THE EIGENVECTORS OF THE TRIANGULAR PROBLEM ARE
  7661. C          DESIRED, Z MUST CONTAIN THE IDENTITY MATRIX.
  7662. C
  7663. C     ON OUTPUT
  7664. C
  7665. C        A IS UNALTERED.  ITS SUBDIAGONAL ELEMENTS PROVIDE INFORMATION
  7666. C           ABOUT THE STORAGE OF THE COMPLEX EIGENVECTORS.
  7667. C
  7668. C        B HAS BEEN DESTROYED.
  7669. C
  7670. C        ALFR, ALFI, AND BETA ARE UNALTERED.
  7671. C
  7672. C        Z CONTAINS THE REAL AND IMAGINARY PARTS OF THE EIGENVECTORS.
  7673. C          IF ALFI(I) .EQ. 0.0, THE I-TH EIGENVALUE IS REAL AND
  7674. C            THE I-TH COLUMN OF Z CONTAINS ITS EIGENVECTOR.
  7675. C          IF ALFI(I) .NE. 0.0, THE I-TH EIGENVALUE IS COMPLEX.
  7676. C            IF ALFI(I) .GT. 0.0, THE EIGENVALUE IS THE FIRST OF
  7677. C              A COMPLEX PAIR AND THE I-TH AND (I+1)-TH COLUMNS
  7678. C              OF Z CONTAIN ITS EIGENVECTOR.
  7679. C            IF ALFI(I) .LT. 0.0, THE EIGENVALUE IS THE SECOND OF
  7680. C              A COMPLEX PAIR AND THE (I-1)-TH AND I-TH COLUMNS
  7681. C              OF Z CONTAIN THE CONJUGATE OF ITS EIGENVECTOR.
  7682. C          EACH EIGENVECTOR IS NORMALIZED SO THAT THE MODULUS
  7683. C          OF ITS LARGEST COMPONENT IS 1.0 .
  7684. C
  7685. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  7686. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  7687. C
  7688. C     THIS VERSION DATED AUGUST 1983.
  7689. C
  7690. C     ------------------------------------------------------------------
  7691. C
  7692.       EPSB = B(N,1)
  7693.       ISW = 1
  7694. C     .......... FOR EN=N STEP -1 UNTIL 1 DO -- ..........
  7695.       DO 800 NN = 1, N
  7696.          EN = N + 1 - NN
  7697.          NA = EN - 1
  7698.          IF (ISW .EQ. 2) GO TO 795
  7699.          IF (ALFI(EN) .NE. 0.0D0) GO TO 710
  7700. C     .......... REAL VECTOR ..........
  7701.          M = EN
  7702.          B(EN,EN) = 1.0D0
  7703.          IF (NA .EQ. 0) GO TO 800
  7704.          ALFM = ALFR(M)
  7705.          BETM = BETA(M)
  7706. C     .......... FOR I=EN-1 STEP -1 UNTIL 1 DO -- ..........
  7707.          DO 700 II = 1, NA
  7708.             I = EN - II
  7709.             W = BETM * A(I,I) - ALFM * B(I,I)
  7710.             R = 0.0D0
  7711. C
  7712.             DO 610 J = M, EN
  7713.   610       R = R + (BETM * A(I,J) - ALFM * B(I,J)) * B(J,EN)
  7714. C
  7715.             IF (I .EQ. 1 .OR. ISW .EQ. 2) GO TO 630
  7716.             IF (BETM * A(I,I-1) .EQ. 0.0D0) GO TO 630
  7717.             ZZ = W
  7718.             S = R
  7719.             GO TO 690
  7720.   630       M = I
  7721.             IF (ISW .EQ. 2) GO TO 640
  7722. C     .......... REAL 1-BY-1 BLOCK ..........
  7723.             T = W
  7724.             IF (W .EQ. 0.0D0) T = EPSB
  7725.             B(I,EN) = -R / T
  7726.             GO TO 700
  7727. C     .......... REAL 2-BY-2 BLOCK ..........
  7728.   640       X = BETM * A(I,I+1) - ALFM * B(I,I+1)
  7729.             Y = BETM * A(I+1,I)
  7730.             Q = W * ZZ - X * Y
  7731.             T = (X * S - ZZ * R) / Q
  7732.             B(I,EN) = T
  7733.             IF (DABS(X) .LE. DABS(ZZ)) GO TO 650
  7734.             B(I+1,EN) = (-R - W * T) / X
  7735.             GO TO 690
  7736.   650       B(I+1,EN) = (-S - Y * T) / ZZ
  7737.   690       ISW = 3 - ISW
  7738.   700    CONTINUE
  7739. C     .......... END REAL VECTOR ..........
  7740.          GO TO 800
  7741. C     .......... COMPLEX VECTOR ..........
  7742.   710    M = NA
  7743.          ALMR = ALFR(M)
  7744.          ALMI = ALFI(M)
  7745.          BETM = BETA(M)
  7746. C     .......... LAST VECTOR COMPONENT CHOSEN IMAGINARY SO THAT
  7747. C                EIGENVECTOR MATRIX IS TRIANGULAR ..........
  7748.          Y = BETM * A(EN,NA)
  7749.          B(NA,NA) = -ALMI * B(EN,EN) / Y
  7750.          B(NA,EN) = (ALMR * B(EN,EN) - BETM * A(EN,EN)) / Y
  7751.          B(EN,NA) = 0.0D0
  7752.          B(EN,EN) = 1.0D0
  7753.          ENM2 = NA - 1
  7754.          IF (ENM2 .EQ. 0) GO TO 795
  7755. C     .......... FOR I=EN-2 STEP -1 UNTIL 1 DO -- ..........
  7756.          DO 790 II = 1, ENM2
  7757.             I = NA - II
  7758.             W = BETM * A(I,I) - ALMR * B(I,I)
  7759.             W1 = -ALMI * B(I,I)
  7760.             RA = 0.0D0
  7761.             SA = 0.0D0
  7762. C
  7763.             DO 760 J = M, EN
  7764.                X = BETM * A(I,J) - ALMR * B(I,J)
  7765.                X1 = -ALMI * B(I,J)
  7766.                RA = RA + X * B(J,NA) - X1 * B(J,EN)
  7767.                SA = SA + X * B(J,EN) + X1 * B(J,NA)
  7768.   760       CONTINUE
  7769. C
  7770.             IF (I .EQ. 1 .OR. ISW .EQ. 2) GO TO 770
  7771.             IF (BETM * A(I,I-1) .EQ. 0.0D0) GO TO 770
  7772.             ZZ = W
  7773.             Z1 = W1
  7774.             R = RA
  7775.             S = SA
  7776.             ISW = 2
  7777.             GO TO 790
  7778.   770       M = I
  7779.             IF (ISW .EQ. 2) GO TO 780
  7780. C     .......... COMPLEX 1-BY-1 BLOCK ..........
  7781.             TR = -RA
  7782.             TI = -SA
  7783.   773       DR = W
  7784.             DI = W1
  7785. C     .......... COMPLEX DIVIDE (T1,T2) = (TR,TI) / (DR,DI) ..........
  7786.   775       IF (DABS(DI) .GT. DABS(DR)) GO TO 777
  7787.             RR = DI / DR
  7788.             D = DR + DI * RR
  7789.             T1 = (TR + TI * RR) / D
  7790.             T2 = (TI - TR * RR) / D
  7791.             GO TO (787,782), ISW
  7792.   777       RR = DR / DI
  7793.             D = DR * RR + DI
  7794.             T1 = (TR * RR + TI) / D
  7795.             T2 = (TI * RR - TR) / D
  7796.             GO TO (787,782), ISW
  7797. C     .......... COMPLEX 2-BY-2 BLOCK ..........
  7798.   780       X = BETM * A(I,I+1) - ALMR * B(I,I+1)
  7799.             X1 = -ALMI * B(I,I+1)
  7800.             Y = BETM * A(I+1,I)
  7801.             TR = Y * RA - W * R + W1 * S
  7802.             TI = Y * SA - W * S - W1 * R
  7803.             DR = W * ZZ - W1 * Z1 - X * Y
  7804.             DI = W * Z1 + W1 * ZZ - X1 * Y
  7805.             IF (DR .EQ. 0.0D0 .AND. DI .EQ. 0.0D0) DR = EPSB
  7806.             GO TO 775
  7807.   782       B(I+1,NA) = T1
  7808.             B(I+1,EN) = T2
  7809.             ISW = 1
  7810.             IF (DABS(Y) .GT. DABS(W) + DABS(W1)) GO TO 785
  7811.             TR = -RA - X * B(I+1,NA) + X1 * B(I+1,EN)
  7812.             TI = -SA - X * B(I+1,EN) - X1 * B(I+1,NA)
  7813.             GO TO 773
  7814.   785       T1 = (-R - ZZ * B(I+1,NA) + Z1 * B(I+1,EN)) / Y
  7815.             T2 = (-S - ZZ * B(I+1,EN) - Z1 * B(I+1,NA)) / Y
  7816.   787       B(I,NA) = T1
  7817.             B(I,EN) = T2
  7818.   790    CONTINUE
  7819. C     .......... END COMPLEX VECTOR ..........
  7820.   795    ISW = 3 - ISW
  7821.   800 CONTINUE
  7822. C     .......... END BACK SUBSTITUTION.
  7823. C                TRANSFORM TO ORIGINAL COORDINATE SYSTEM.
  7824. C                FOR J=N STEP -1 UNTIL 1 DO -- ..........
  7825.       DO 880 JJ = 1, N
  7826.          J = N + 1 - JJ
  7827. C
  7828.          DO 880 I = 1, N
  7829.             ZZ = 0.0D0
  7830. C
  7831.             DO 860 K = 1, J
  7832.   860       ZZ = ZZ + Z(I,K) * B(K,J)
  7833. C
  7834.             Z(I,J) = ZZ
  7835.   880 CONTINUE
  7836. C     .......... NORMALIZE SO THAT MODULUS OF LARGEST
  7837. C                COMPONENT OF EACH VECTOR IS 1.
  7838. C                (ISW IS 1 INITIALLY FROM BEFORE) ..........
  7839.       DO 950 J = 1, N
  7840.          D = 0.0D0
  7841.          IF (ISW .EQ. 2) GO TO 920
  7842.          IF (ALFI(J) .NE. 0.0D0) GO TO 945
  7843. C
  7844.          DO 890 I = 1, N
  7845.             IF (DABS(Z(I,J)) .GT. D) D = DABS(Z(I,J))
  7846.   890    CONTINUE
  7847. C
  7848.          DO 900 I = 1, N
  7849.   900    Z(I,J) = Z(I,J) / D
  7850. C
  7851.          GO TO 950
  7852. C
  7853.   920    DO 930 I = 1, N
  7854.             R = DABS(Z(I,J-1)) + DABS(Z(I,J))
  7855.             IF (R .NE. 0.0D0) R = R * DSQRT((Z(I,J-1)/R)**2
  7856.      X                                     +(Z(I,J)/R)**2)
  7857.             IF (R .GT. D) D = R
  7858.   930    CONTINUE
  7859. C
  7860.          DO 940 I = 1, N
  7861.             Z(I,J-1) = Z(I,J-1) / D
  7862.             Z(I,J) = Z(I,J) / D
  7863.   940    CONTINUE
  7864. C
  7865.   945    ISW = 3 - ISW
  7866.   950 CONTINUE
  7867. C
  7868.       RETURN
  7869.       END
  7870.       SUBROUTINE RATQR(N,EPS1,D,E,E2,M,W,IND,BD,TYPE,IDEF,IERR)
  7871. C
  7872.       INTEGER I,J,K,M,N,II,JJ,K1,IDEF,IERR,JDEF
  7873.       DOUBLE PRECISION D(N),E(N),E2(N),W(N),BD(N)
  7874.       DOUBLE PRECISION F,P,Q,R,S,EP,QP,ERR,TOT,EPS1,DELTA,EPSLON
  7875.       INTEGER IND(N)
  7876.       LOGICAL TYPE
  7877. C
  7878. C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE RATQR,
  7879. C     NUM. MATH. 11, 264-272(1968) BY REINSCH AND BAUER.
  7880. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 257-265(1971).
  7881. C
  7882. C     THIS SUBROUTINE FINDS THE ALGEBRAICALLY SMALLEST OR LARGEST
  7883. C     EIGENVALUES OF A SYMMETRIC TRIDIAGONAL MATRIX BY THE
  7884. C     RATIONAL QR METHOD WITH NEWTON CORRECTIONS.
  7885. C
  7886. C     ON INPUT
  7887. C
  7888. C        N IS THE ORDER OF THE MATRIX.
  7889. C
  7890. C        EPS1 IS A THEORETICAL ABSOLUTE ERROR TOLERANCE FOR THE
  7891. C          COMPUTED EIGENVALUES.  IF THE INPUT EPS1 IS NON-POSITIVE,
  7892. C          OR INDEED SMALLER THAN ITS DEFAULT VALUE, IT IS RESET
  7893. C          AT EACH ITERATION TO THE RESPECTIVE DEFAULT VALUE,
  7894. C          NAMELY, THE PRODUCT OF THE RELATIVE MACHINE PRECISION
  7895. C          AND THE MAGNITUDE OF THE CURRENT EIGENVALUE ITERATE.
  7896. C          THE THEORETICAL ABSOLUTE ERROR IN THE K-TH EIGENVALUE
  7897. C          IS USUALLY NOT GREATER THAN K TIMES EPS1.
  7898. C
  7899. C        D CONTAINS THE DIAGONAL ELEMENTS OF THE INPUT MATRIX.
  7900. C
  7901. C        E CONTAINS THE SUBDIAGONAL ELEMENTS OF THE INPUT MATRIX
  7902. C          IN ITS LAST N-1 POSITIONS.  E(1) IS ARBITRARY.
  7903. C
  7904. C        E2 CONTAINS THE SQUARES OF THE CORRESPONDING ELEMENTS OF E.
  7905. C          E2(1) IS ARBITRARY.
  7906. C
  7907. C        M IS THE NUMBER OF EIGENVALUES TO BE FOUND.
  7908. C
  7909. C        IDEF SHOULD BE SET TO 1 IF THE INPUT MATRIX IS KNOWN TO BE
  7910. C          POSITIVE DEFINITE, TO -1 IF THE INPUT MATRIX IS KNOWN TO
  7911. C          BE NEGATIVE DEFINITE, AND TO 0 OTHERWISE.
  7912. C
  7913. C        TYPE SHOULD BE SET TO .TRUE. IF THE SMALLEST EIGENVALUES
  7914. C          ARE TO BE FOUND, AND TO .FALSE. IF THE LARGEST EIGENVALUES
  7915. C          ARE TO BE FOUND.
  7916. C
  7917. C     ON OUTPUT
  7918. C
  7919. C        EPS1 IS UNALTERED UNLESS IT HAS BEEN RESET TO ITS
  7920. C          (LAST) DEFAULT VALUE.
  7921. C
  7922. C        D AND E ARE UNALTERED (UNLESS W OVERWRITES D).
  7923. C
  7924. C        ELEMENTS OF E2, CORRESPONDING TO ELEMENTS OF E REGARDED
  7925. C          AS NEGLIGIBLE, HAVE BEEN REPLACED BY ZERO CAUSING THE
  7926. C          MATRIX TO SPLIT INTO A DIRECT SUM OF SUBMATRICES.
  7927. C          E2(1) IS SET TO 0.0D0 IF THE SMALLEST EIGENVALUES HAVE BEEN
  7928. C          FOUND, AND TO 2.0D0 IF THE LARGEST EIGENVALUES HAVE BEEN
  7929. C          FOUND.  E2 IS OTHERWISE UNALTERED (UNLESS OVERWRITTEN BY BD).
  7930. C
  7931. C        W CONTAINS THE M ALGEBRAICALLY SMALLEST EIGENVALUES IN
  7932. C          ASCENDING ORDER, OR THE M LARGEST EIGENVALUES IN
  7933. C          DESCENDING ORDER.  IF AN ERROR EXIT IS MADE BECAUSE OF
  7934. C          AN INCORRECT SPECIFICATION OF IDEF, NO EIGENVALUES
  7935. C          ARE FOUND.  IF THE NEWTON ITERATES FOR A PARTICULAR
  7936. C          EIGENVALUE ARE NOT MONOTONE, THE BEST ESTIMATE OBTAINED
  7937. C          IS RETURNED AND IERR IS SET.  W MAY COINCIDE WITH D.
  7938. C
  7939. C        IND CONTAINS IN ITS FIRST M POSITIONS THE SUBMATRIX INDICES
  7940. C          ASSOCIATED WITH THE CORRESPONDING EIGENVALUES IN W --
  7941. C          1 FOR EIGENVALUES BELONGING TO THE FIRST SUBMATRIX FROM
  7942. C          THE TOP, 2 FOR THOSE BELONGING TO THE SECOND SUBMATRIX, ETC..
  7943. C
  7944. C        BD CONTAINS REFINED BOUNDS FOR THE THEORETICAL ERRORS OF THE
  7945. C          CORRESPONDING EIGENVALUES IN W.  THESE BOUNDS ARE USUALLY
  7946. C          WITHIN THE TOLERANCE SPECIFIED BY EPS1.  BD MAY COINCIDE
  7947. C          WITH E2.
  7948. C
  7949. C        IERR IS SET TO
  7950. C          ZERO       FOR NORMAL RETURN,
  7951. C          6*N+1      IF  IDEF  IS SET TO 1 AND  TYPE  TO .TRUE.
  7952. C                     WHEN THE MATRIX IS NOT POSITIVE DEFINITE, OR
  7953. C                     IF  IDEF  IS SET TO -1 AND  TYPE  TO .FALSE.
  7954. C                     WHEN THE MATRIX IS NOT NEGATIVE DEFINITE,
  7955. C          5*N+K      IF SUCCESSIVE ITERATES TO THE K-TH EIGENVALUE
  7956. C                     ARE NOT MONOTONE INCREASING, WHERE K REFERS
  7957. C                     TO THE LAST SUCH OCCURRENCE.
  7958. C
  7959. C     NOTE THAT SUBROUTINE TRIDIB IS GENERALLY FASTER AND MORE
  7960. C     ACCURATE THAN RATQR IF THE EIGENVALUES ARE CLUSTERED.
  7961. C
  7962. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  7963. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  7964. C
  7965. C     THIS VERSION DATED AUGUST 1983.
  7966. C
  7967. C     ------------------------------------------------------------------
  7968. C
  7969.       IERR = 0
  7970.       JDEF = IDEF
  7971. C     .......... COPY D ARRAY INTO W ..........
  7972.       DO 20 I = 1, N
  7973.    20 W(I) = D(I)
  7974. C
  7975.       IF (TYPE) GO TO 40
  7976.       J = 1
  7977.       GO TO 400
  7978.    40 ERR = 0.0D0
  7979.       S = 0.0D0
  7980. C     .......... LOOK FOR SMALL SUB-DIAGONAL ENTRIES AND DEFINE
  7981. C                INITIAL SHIFT FROM LOWER GERSCHGORIN BOUND.
  7982. C                COPY E2 ARRAY INTO BD ..........
  7983.       TOT = W(1)
  7984.       Q = 0.0D0
  7985.       J = 0
  7986. C
  7987.       DO 100 I = 1, N
  7988.          P = Q
  7989.          IF (I .EQ. 1) GO TO 60
  7990.          IF (P .GT. EPSLON(DABS(D(I)) + DABS(D(I-1)))) GO TO 80
  7991.    60    E2(I) = 0.0D0
  7992.    80    BD(I) = E2(I)
  7993. C     .......... COUNT ALSO IF ELEMENT OF E2 HAS UNDERFLOWED ..........
  7994.          IF (E2(I) .EQ. 0.0D0) J = J + 1
  7995.          IND(I) = J
  7996.          Q = 0.0D0
  7997.          IF (I .NE. N) Q = DABS(E(I+1))
  7998.          TOT = DMIN1(W(I)-P-Q,TOT)
  7999.   100 CONTINUE
  8000. C
  8001.       IF (JDEF .EQ. 1 .AND. TOT .LT. 0.0D0) GO TO 140
  8002. C
  8003.       DO 110 I = 1, N
  8004.   110 W(I) = W(I) - TOT
  8005. C
  8006.       GO TO 160
  8007.   140 TOT = 0.0D0
  8008. C
  8009.   160 DO 360 K = 1, M
  8010. C     .......... NEXT QR TRANSFORMATION ..........
  8011.   180    TOT = TOT + S
  8012.          DELTA = W(N) - S
  8013.          I = N
  8014.          F = DABS(EPSLON(TOT))
  8015.          IF (EPS1 .LT. F) EPS1 = F
  8016.          IF (DELTA .GT. EPS1) GO TO 190
  8017.          IF (DELTA .LT. (-EPS1)) GO TO 1000
  8018.          GO TO 300
  8019. C     .......... REPLACE SMALL SUB-DIAGONAL SQUARES BY ZERO
  8020. C                TO REDUCE THE INCIDENCE OF UNDERFLOWS ..........
  8021.   190    IF (K .EQ. N) GO TO 210
  8022.          K1 = K + 1
  8023.          DO 200 J = K1, N
  8024.             IF (BD(J) .LE. (EPSLON(W(J)+W(J-1))) ** 2) BD(J) = 0.0D0
  8025.   200    CONTINUE
  8026. C
  8027.   210    F = BD(N) / DELTA
  8028.          QP = DELTA + F
  8029.          P = 1.0D0
  8030.          IF (K .EQ. N) GO TO 260
  8031.          K1 = N - K
  8032. C     .......... FOR I=N-1 STEP -1 UNTIL K DO -- ..........
  8033.          DO 240 II = 1, K1
  8034.             I = N - II
  8035.             Q = W(I) - S - F
  8036.             R = Q / QP
  8037.             P = P * R + 1.0D0
  8038.             EP = F * R
  8039.             W(I+1) = QP + EP
  8040.             DELTA = Q - EP
  8041.             IF (DELTA .GT. EPS1) GO TO 220
  8042.             IF (DELTA .LT. (-EPS1)) GO TO 1000
  8043.             GO TO 300
  8044.   220       F = BD(I) / Q
  8045.             QP = DELTA + F
  8046.             BD(I+1) = QP * EP
  8047.   240    CONTINUE
  8048. C
  8049.   260    W(K) = QP
  8050.          S = QP / P
  8051.          IF (TOT + S .GT. TOT) GO TO 180
  8052. C     .......... SET ERROR -- IRREGULAR END OF ITERATION.
  8053. C                DEFLATE MINIMUM DIAGONAL ELEMENT ..........
  8054.          IERR = 5 * N + K
  8055.          S = 0.0D0
  8056.          DELTA = QP
  8057. C
  8058.          DO 280 J = K, N
  8059.             IF (W(J) .GT. DELTA) GO TO 280
  8060.             I = J
  8061.             DELTA = W(J)
  8062.   280    CONTINUE
  8063. C     .......... CONVERGENCE ..........
  8064.   300    IF (I .LT. N) BD(I+1) = BD(I) * F / QP
  8065.          II = IND(I)
  8066.          IF (I .EQ. K) GO TO 340
  8067.          K1 = I - K
  8068. C     .......... FOR J=I-1 STEP -1 UNTIL K DO -- ..........
  8069.          DO 320 JJ = 1, K1
  8070.             J = I - JJ
  8071.             W(J+1) = W(J) - S
  8072.             BD(J+1) = BD(J)
  8073.             IND(J+1) = IND(J)
  8074.   320    CONTINUE
  8075. C
  8076.   340    W(K) = TOT
  8077.          ERR = ERR + DABS(DELTA)
  8078.          BD(K) = ERR
  8079.          IND(K) = II
  8080.   360 CONTINUE
  8081. C
  8082.       IF (TYPE) GO TO 1001
  8083.       F = BD(1)
  8084.       E2(1) = 2.0D0
  8085.       BD(1) = F
  8086.       J = 2
  8087. C     .......... NEGATE ELEMENTS OF W FOR LARGEST VALUES ..........
  8088.   400 DO 500 I = 1, N
  8089.   500 W(I) = -W(I)
  8090. C
  8091.       JDEF = -JDEF
  8092.       GO TO (40,1001), J
  8093. C     .......... SET ERROR -- IDEF SPECIFIED INCORRECTLY ..........
  8094.  1000 IERR = 6 * N + 1
  8095.  1001 RETURN
  8096.       END
  8097.       SUBROUTINE REBAK(NM,N,B,DL,M,Z)
  8098. C
  8099.       INTEGER I,J,K,M,N,I1,II,NM
  8100.       DOUBLE PRECISION B(NM,N),DL(N),Z(NM,M)
  8101.       DOUBLE PRECISION X
  8102. C
  8103. C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE REBAKA,
  8104. C     NUM. MATH. 11, 99-110(1968) BY MARTIN AND WILKINSON.
  8105. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 303-314(1971).
  8106. C
  8107. C     THIS SUBROUTINE FORMS THE EIGENVECTORS OF A GENERALIZED
  8108. C     SYMMETRIC EIGENSYSTEM BY BACK TRANSFORMING THOSE OF THE
  8109. C     DERIVED SYMMETRIC MATRIX DETERMINED BY  REDUC.
  8110. C
  8111. C     ON INPUT
  8112. C
  8113. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  8114. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  8115. C          DIMENSION STATEMENT.
  8116. C
  8117. C        N IS THE ORDER OF THE MATRIX SYSTEM.
  8118. C
  8119. C        B CONTAINS INFORMATION ABOUT THE SIMILARITY TRANSFORMATION
  8120. C          (CHOLESKY DECOMPOSITION) USED IN THE REDUCTION BY  REDUC
  8121. C          IN ITS STRICT LOWER TRIANGLE.
  8122. C
  8123. C        DL CONTAINS FURTHER INFORMATION ABOUT THE TRANSFORMATION.
  8124. C
  8125. C        M IS THE NUMBER OF EIGENVECTORS TO BE BACK TRANSFORMED.
  8126. C
  8127. C        Z CONTAINS THE EIGENVECTORS TO BE BACK TRANSFORMED
  8128. C          IN ITS FIRST M COLUMNS.
  8129. C
  8130. C     ON OUTPUT
  8131. C
  8132. C        Z CONTAINS THE TRANSFORMED EIGENVECTORS
  8133. C          IN ITS FIRST M COLUMNS.
  8134. C
  8135. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  8136. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  8137. C
  8138. C     THIS VERSION DATED AUGUST 1983.
  8139. C
  8140. C     ------------------------------------------------------------------
  8141. C
  8142.       IF (M .EQ. 0) GO TO 200
  8143. C
  8144.       DO 100 J = 1, M
  8145. C     .......... FOR I=N STEP -1 UNTIL 1 DO -- ..........
  8146.          DO 100 II = 1, N
  8147.             I = N + 1 - II
  8148.             I1 = I + 1
  8149.             X = Z(I,J)
  8150.             IF (I .EQ. N) GO TO 80
  8151. C
  8152.             DO 60 K = I1, N
  8153.    60       X = X - B(K,I) * Z(K,J)
  8154. C
  8155.    80       Z(I,J) = X / DL(I)
  8156.   100 CONTINUE
  8157. C
  8158.   200 RETURN
  8159.       END
  8160.       SUBROUTINE REBAKB(NM,N,B,DL,M,Z)
  8161. C
  8162.       INTEGER I,J,K,M,N,I1,II,NM
  8163.       DOUBLE PRECISION B(NM,N),DL(N),Z(NM,M)
  8164.       DOUBLE PRECISION X
  8165. C
  8166. C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE REBAKB,
  8167. C     NUM. MATH. 11, 99-110(1968) BY MARTIN AND WILKINSON.
  8168. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 303-314(1971).
  8169. C
  8170. C     THIS SUBROUTINE FORMS THE EIGENVECTORS OF A GENERALIZED
  8171. C     SYMMETRIC EIGENSYSTEM BY BACK TRANSFORMING THOSE OF THE
  8172. C     DERIVED SYMMETRIC MATRIX DETERMINED BY  REDUC2.
  8173. C
  8174. C     ON INPUT
  8175. C
  8176. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  8177. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  8178. C          DIMENSION STATEMENT.
  8179. C
  8180. C        N IS THE ORDER OF THE MATRIX SYSTEM.
  8181. C
  8182. C        B CONTAINS INFORMATION ABOUT THE SIMILARITY TRANSFORMATION
  8183. C          (CHOLESKY DECOMPOSITION) USED IN THE REDUCTION BY  REDUC2
  8184. C          IN ITS STRICT LOWER TRIANGLE.
  8185. C
  8186. C        DL CONTAINS FURTHER INFORMATION ABOUT THE TRANSFORMATION.
  8187. C
  8188. C        M IS THE NUMBER OF EIGENVECTORS TO BE BACK TRANSFORMED.
  8189. C
  8190. C        Z CONTAINS THE EIGENVECTORS TO BE BACK TRANSFORMED
  8191. C          IN ITS FIRST M COLUMNS.
  8192. C
  8193. C     ON OUTPUT
  8194. C
  8195. C        Z CONTAINS THE TRANSFORMED EIGENVECTORS
  8196. C          IN ITS FIRST M COLUMNS.
  8197. C
  8198. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  8199. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  8200. C
  8201. C     THIS VERSION DATED AUGUST 1983.
  8202. C
  8203. C     ------------------------------------------------------------------
  8204. C
  8205.       IF (M .EQ. 0) GO TO 200
  8206. C
  8207.       DO 100 J = 1, M
  8208. C     .......... FOR I=N STEP -1 UNTIL 1 DO -- ..........
  8209.          DO 100 II = 1, N
  8210.             I1 = N - II
  8211.             I = I1 + 1
  8212.             X = DL(I) * Z(I,J)
  8213.             IF (I .EQ. 1) GO TO 80
  8214. C
  8215.             DO 60 K = 1, I1
  8216.    60       X = X + B(I,K) * Z(K,J)
  8217. C
  8218.    80       Z(I,J) = X
  8219.   100 CONTINUE
  8220. C
  8221.   200 RETURN
  8222.       END
  8223.       SUBROUTINE REDUC(NM,N,A,B,DL,IERR)
  8224. C
  8225.       INTEGER I,J,K,N,I1,J1,NM,NN,IERR
  8226.       DOUBLE PRECISION A(NM,N),B(NM,N),DL(N)
  8227.       DOUBLE PRECISION X,Y
  8228. C
  8229. C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE REDUC1,
  8230. C     NUM. MATH. 11, 99-110(1968) BY MARTIN AND WILKINSON.
  8231. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 303-314(1971).
  8232. C
  8233. C     THIS SUBROUTINE REDUCES THE GENERALIZED SYMMETRIC EIGENPROBLEM
  8234. C     AX=(LAMBDA)BX, WHERE B IS POSITIVE DEFINITE, TO THE STANDARD
  8235. C     SYMMETRIC EIGENPROBLEM USING THE CHOLESKY FACTORIZATION OF B.
  8236. C
  8237. C     ON INPUT
  8238. C
  8239. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  8240. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  8241. C          DIMENSION STATEMENT.
  8242. C
  8243. C        N IS THE ORDER OF THE MATRICES A AND B.  IF THE CHOLESKY
  8244. C          FACTOR L OF B IS ALREADY AVAILABLE, N SHOULD BE PREFIXED
  8245. C          WITH A MINUS SIGN.
  8246. C
  8247. C        A AND B CONTAIN THE REAL SYMMETRIC INPUT MATRICES.  ONLY THE
  8248. C          FULL UPPER TRIANGLES OF THE MATRICES NEED BE SUPPLIED.  IF
  8249. C          N IS NEGATIVE, THE STRICT LOWER TRIANGLE OF B CONTAINS,
  8250. C          INSTEAD, THE STRICT LOWER TRIANGLE OF ITS CHOLESKY FACTOR L.
  8251. C
  8252. C        DL CONTAINS, IF N IS NEGATIVE, THE DIAGONAL ELEMENTS OF L.
  8253. C
  8254. C     ON OUTPUT
  8255. C
  8256. C        A CONTAINS IN ITS FULL LOWER TRIANGLE THE FULL LOWER TRIANGLE
  8257. C          OF THE SYMMETRIC MATRIX DERIVED FROM THE REDUCTION TO THE
  8258. C          STANDARD FORM.  THE STRICT UPPER TRIANGLE OF A IS UNALTERED.
  8259. C
  8260. C        B CONTAINS IN ITS STRICT LOWER TRIANGLE THE STRICT LOWER
  8261. C          TRIANGLE OF ITS CHOLESKY FACTOR L.  THE FULL UPPER
  8262. C          TRIANGLE OF B IS UNALTERED.
  8263. C
  8264. C        DL CONTAINS THE DIAGONAL ELEMENTS OF L.
  8265. C
  8266. C        IERR IS SET TO
  8267. C          ZERO       FOR NORMAL RETURN,
  8268. C          7*N+1      IF B IS NOT POSITIVE DEFINITE.
  8269. C
  8270. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  8271. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  8272. C
  8273. C     THIS VERSION DATED AUGUST 1983.
  8274. C
  8275. C     ------------------------------------------------------------------
  8276. C
  8277.       IERR = 0
  8278.       NN = IABS(N)
  8279.       IF (N .LT. 0) GO TO 100
  8280. C     .......... FORM L IN THE ARRAYS B AND DL ..........
  8281.       DO 80 I = 1, N
  8282.          I1 = I - 1
  8283. C
  8284.          DO 80 J = I, N
  8285.             X = B(I,J)
  8286.             IF (I .EQ. 1) GO TO 40
  8287. C
  8288.             DO 20 K = 1, I1
  8289.    20       X = X - B(I,K) * B(J,K)
  8290. C
  8291.    40       IF (J .NE. I) GO TO 60
  8292.             IF (X .LE. 0.0D0) GO TO 1000
  8293.             Y = DSQRT(X)
  8294.             DL(I) = Y
  8295.             GO TO 80
  8296.    60       B(J,I) = X / Y
  8297.    80 CONTINUE
  8298. C     .......... FORM THE TRANSPOSE OF THE UPPER TRIANGLE OF INV(L)*A
  8299. C                IN THE LOWER TRIANGLE OF THE ARRAY A ..........
  8300.   100 DO 200 I = 1, NN
  8301.          I1 = I - 1
  8302.          Y = DL(I)
  8303. C
  8304.          DO 200 J = I, NN
  8305.             X = A(I,J)
  8306.             IF (I .EQ. 1) GO TO 180
  8307. C
  8308.             DO 160 K = 1, I1
  8309.   160       X = X - B(I,K) * A(J,K)
  8310. C
  8311.   180       A(J,I) = X / Y
  8312.   200 CONTINUE
  8313. C     .......... PRE-MULTIPLY BY INV(L) AND OVERWRITE ..........
  8314.       DO 300 J = 1, NN
  8315.          J1 = J - 1
  8316. C
  8317.          DO 300 I = J, NN
  8318.             X = A(I,J)
  8319.             IF (I .EQ. J) GO TO 240
  8320.             I1 = I - 1
  8321. C
  8322.             DO 220 K = J, I1
  8323.   220       X = X - A(K,J) * B(I,K)
  8324. C
  8325.   240       IF (J .EQ. 1) GO TO 280
  8326. C
  8327.             DO 260 K = 1, J1
  8328.   260       X = X - A(J,K) * B(I,K)
  8329. C
  8330.   280       A(I,J) = X / DL(I)
  8331.   300 CONTINUE
  8332. C
  8333.       GO TO 1001
  8334. C     .......... SET ERROR -- B IS NOT POSITIVE DEFINITE ..........
  8335.  1000 IERR = 7 * N + 1
  8336.  1001 RETURN
  8337.       END
  8338.       SUBROUTINE REDUC2(NM,N,A,B,DL,IERR)
  8339. C
  8340.       INTEGER I,J,K,N,I1,J1,NM,NN,IERR
  8341.       DOUBLE PRECISION A(NM,N),B(NM,N),DL(N)
  8342.       DOUBLE PRECISION X,Y
  8343. C
  8344. C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE REDUC2,
  8345. C     NUM. MATH. 11, 99-110(1968) BY MARTIN AND WILKINSON.
  8346. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 303-314(1971).
  8347. C
  8348. C     THIS SUBROUTINE REDUCES THE GENERALIZED SYMMETRIC EIGENPROBLEMS
  8349. C     ABX=(LAMBDA)X OR BAY=(LAMBDA)Y, WHERE B IS POSITIVE DEFINITE,
  8350. C     TO THE STANDARD SYMMETRIC EIGENPROBLEM USING THE CHOLESKY
  8351. C     FACTORIZATION OF B.
  8352. C
  8353. C     ON INPUT
  8354. C
  8355. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  8356. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  8357. C          DIMENSION STATEMENT.
  8358. C
  8359. C        N IS THE ORDER OF THE MATRICES A AND B.  IF THE CHOLESKY
  8360. C          FACTOR L OF B IS ALREADY AVAILABLE, N SHOULD BE PREFIXED
  8361. C          WITH A MINUS SIGN.
  8362. C
  8363. C        A AND B CONTAIN THE REAL SYMMETRIC INPUT MATRICES.  ONLY THE
  8364. C          FULL UPPER TRIANGLES OF THE MATRICES NEED BE SUPPLIED.  IF
  8365. C          N IS NEGATIVE, THE STRICT LOWER TRIANGLE OF B CONTAINS,
  8366. C          INSTEAD, THE STRICT LOWER TRIANGLE OF ITS CHOLESKY FACTOR L.
  8367. C
  8368. C        DL CONTAINS, IF N IS NEGATIVE, THE DIAGONAL ELEMENTS OF L.
  8369. C
  8370. C     ON OUTPUT
  8371. C
  8372. C        A CONTAINS IN ITS FULL LOWER TRIANGLE THE FULL LOWER TRIANGLE
  8373. C          OF THE SYMMETRIC MATRIX DERIVED FROM THE REDUCTION TO THE
  8374. C          STANDARD FORM.  THE STRICT UPPER TRIANGLE OF A IS UNALTERED.
  8375. C
  8376. C        B CONTAINS IN ITS STRICT LOWER TRIANGLE THE STRICT LOWER
  8377. C          TRIANGLE OF ITS CHOLESKY FACTOR L.  THE FULL UPPER
  8378. C          TRIANGLE OF B IS UNALTERED.
  8379. C
  8380. C        DL CONTAINS THE DIAGONAL ELEMENTS OF L.
  8381. C
  8382. C        IERR IS SET TO
  8383. C          ZERO       FOR NORMAL RETURN,
  8384. C          7*N+1      IF B IS NOT POSITIVE DEFINITE.
  8385. C
  8386. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  8387. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  8388. C
  8389. C     THIS VERSION DATED AUGUST 1983.
  8390. C
  8391. C     ------------------------------------------------------------------
  8392. C
  8393.       IERR = 0
  8394.       NN = IABS(N)
  8395.       IF (N .LT. 0) GO TO 100
  8396. C     .......... FORM L IN THE ARRAYS B AND DL ..........
  8397.       DO 80 I = 1, N
  8398.          I1 = I - 1
  8399. C
  8400.          DO 80 J = I, N
  8401.             X = B(I,J)
  8402.             IF (I .EQ. 1) GO TO 40
  8403. C
  8404.             DO 20 K = 1, I1
  8405.    20       X = X - B(I,K) * B(J,K)
  8406. C
  8407.    40       IF (J .NE. I) GO TO 60
  8408.             IF (X .LE. 0.0D0) GO TO 1000
  8409.             Y = DSQRT(X)
  8410.             DL(I) = Y
  8411.             GO TO 80
  8412.    60       B(J,I) = X / Y
  8413.    80 CONTINUE
  8414. C     .......... FORM THE LOWER TRIANGLE OF A*L
  8415. C                IN THE LOWER TRIANGLE OF THE ARRAY A ..........
  8416.   100 DO 200 I = 1, NN
  8417.          I1 = I + 1
  8418. C
  8419.          DO 200 J = 1, I
  8420.             X = A(J,I) * DL(J)
  8421.             IF (J .EQ. I) GO TO 140
  8422.             J1 = J + 1
  8423. C
  8424.             DO 120 K = J1, I
  8425.   120       X = X + A(K,I) * B(K,J)
  8426. C
  8427.   140       IF (I .EQ. NN) GO TO 180
  8428. C
  8429.             DO 160 K = I1, NN
  8430.   160       X = X + A(I,K) * B(K,J)
  8431. C
  8432.   180       A(I,J) = X
  8433.   200 CONTINUE
  8434. C     .......... PRE-MULTIPLY BY TRANSPOSE(L) AND OVERWRITE ..........
  8435.       DO 300 I = 1, NN
  8436.          I1 = I + 1
  8437.          Y = DL(I)
  8438. C
  8439.          DO 300 J = 1, I
  8440.             X = Y * A(I,J)
  8441.             IF (I .EQ. NN) GO TO 280
  8442. C
  8443.             DO 260 K = I1, NN
  8444.   260       X = X + A(K,J) * B(K,I)
  8445. C
  8446.   280       A(I,J) = X
  8447.   300 CONTINUE
  8448. C
  8449.       GO TO 1001
  8450. C     .......... SET ERROR -- B IS NOT POSITIVE DEFINITE ..........
  8451.  1000 IERR = 7 * N + 1
  8452.  1001 RETURN
  8453.       END
  8454.       SUBROUTINE RG(NM,N,A,WR,WI,MATZ,Z,IV1,FV1,IERR)
  8455. C
  8456.       INTEGER N,NM,IS1,IS2,IERR,MATZ
  8457.       DOUBLE PRECISION A(NM,N),WR(N),WI(N),Z(NM,N),FV1(N)
  8458.       INTEGER IV1(N)
  8459. C
  8460. C     THIS SUBROUTINE CALLS THE RECOMMENDED SEQUENCE OF
  8461. C     SUBROUTINES FROM THE EIGENSYSTEM SUBROUTINE PACKAGE (EISPACK)
  8462. C     TO FIND THE EIGENVALUES AND EIGENVECTORS (IF DESIRED)
  8463. C     OF A REAL GENERAL MATRIX.
  8464. C
  8465. C     ON INPUT
  8466. C
  8467. C        NM  MUST BE SET TO THE ROW DIMENSION OF THE TWO-DIMENSIONAL
  8468. C        ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  8469. C        DIMENSION STATEMENT.
  8470. C
  8471. C        N  IS THE ORDER OF THE MATRIX  A.
  8472. C
  8473. C        A  CONTAINS THE REAL GENERAL MATRIX.
  8474. C
  8475. C        MATZ  IS AN INTEGER VARIABLE SET EQUAL TO ZERO IF
  8476. C        ONLY EIGENVALUES ARE DESIRED.  OTHERWISE IT IS SET TO
  8477. C        ANY NON-ZERO INTEGER FOR BOTH EIGENVALUES AND EIGENVECTORS.
  8478. C
  8479. C     ON OUTPUT
  8480. C
  8481. C        WR  AND  WI  CONTAIN THE REAL AND IMAGINARY PARTS,
  8482. C        RESPECTIVELY, OF THE EIGENVALUES.  COMPLEX CONJUGATE
  8483. C        PAIRS OF EIGENVALUES APPEAR CONSECUTIVELY WITH THE
  8484. C        EIGENVALUE HAVING THE POSITIVE IMAGINARY PART FIRST.
  8485. C
  8486. C        Z  CONTAINS THE REAL AND IMAGINARY PARTS OF THE EIGENVECTORS
  8487. C        IF MATZ IS NOT ZERO.  IF THE J-TH EIGENVALUE IS REAL, THE
  8488. C        J-TH COLUMN OF  Z  CONTAINS ITS EIGENVECTOR.  IF THE J-TH
  8489. C        EIGENVALUE IS COMPLEX WITH POSITIVE IMAGINARY PART, THE
  8490. C        J-TH AND (J+1)-TH COLUMNS OF  Z  CONTAIN THE REAL AND
  8491. C        IMAGINARY PARTS OF ITS EIGENVECTOR.  THE CONJUGATE OF THIS
  8492. C        VECTOR IS THE EIGENVECTOR FOR THE CONJUGATE EIGENVALUE.
  8493. C
  8494. C        IERR  IS AN INTEGER OUTPUT VARIABLE SET EQUAL TO AN ERROR
  8495. C           COMPLETION CODE DESCRIBED IN THE DOCUMENTATION FOR HQR
  8496. C           AND HQR2.  THE NORMAL COMPLETION CODE IS ZERO.
  8497. C
  8498. C        IV1  AND  FV1  ARE TEMPORARY STORAGE ARRAYS.
  8499. C
  8500. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  8501. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  8502. C
  8503. C     THIS VERSION DATED AUGUST 1983.
  8504. C
  8505. C     ------------------------------------------------------------------
  8506. C
  8507.       IF (N .LE. NM) GO TO 10
  8508.       IERR = 10 * N
  8509.       GO TO 50
  8510. C
  8511.    10 CALL  BALANC(NM,N,A,IS1,IS2,FV1)
  8512.       CALL  ELMHES(NM,N,IS1,IS2,A,IV1)
  8513.       IF (MATZ .NE. 0) GO TO 20
  8514. C     .......... FIND EIGENVALUES ONLY ..........
  8515.       CALL  HQR(NM,N,IS1,IS2,A,WR,WI,IERR)
  8516.       GO TO 50
  8517. C     .......... FIND BOTH EIGENVALUES AND EIGENVECTORS ..........
  8518.    20 CALL  ELTRAN(NM,N,IS1,IS2,A,IV1,Z)
  8519.       CALL  HQR2(NM,N,IS1,IS2,A,WR,WI,Z,IERR)
  8520.       IF (IERR .NE. 0) GO TO 50
  8521.       CALL  BALBAK(NM,N,IS1,IS2,FV1,N,Z)
  8522.    50 RETURN
  8523.       END
  8524.       SUBROUTINE RGG(NM,N,A,B,ALFR,ALFI,BETA,MATZ,Z,IERR)
  8525. C
  8526.       INTEGER N,NM,IERR,MATZ
  8527.       DOUBLE PRECISION A(NM,N),B(NM,N),ALFR(N),ALFI(N),BETA(N),Z(NM,N)
  8528.       LOGICAL TF
  8529. C
  8530. C     THIS SUBROUTINE CALLS THE RECOMMENDED SEQUENCE OF
  8531. C     SUBROUTINES FROM THE EIGENSYSTEM SUBROUTINE PACKAGE (EISPACK)
  8532. C     TO FIND THE EIGENVALUES AND EIGENVECTORS (IF DESIRED)
  8533. C     FOR THE REAL GENERAL GENERALIZED EIGENPROBLEM  AX = (LAMBDA)BX.
  8534. C
  8535. C     ON INPUT
  8536. C
  8537. C        NM  MUST BE SET TO THE ROW DIMENSION OF THE TWO-DIMENSIONAL
  8538. C        ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  8539. C        DIMENSION STATEMENT.
  8540. C
  8541. C        N  IS THE ORDER OF THE MATRICES  A  AND  B.
  8542. C
  8543. C        A  CONTAINS A REAL GENERAL MATRIX.
  8544. C
  8545. C        B  CONTAINS A REAL GENERAL MATRIX.
  8546. C
  8547. C        MATZ  IS AN INTEGER VARIABLE SET EQUAL TO ZERO IF
  8548. C        ONLY EIGENVALUES ARE DESIRED.  OTHERWISE IT IS SET TO
  8549. C        ANY NON-ZERO INTEGER FOR BOTH EIGENVALUES AND EIGENVECTORS.
  8550. C
  8551. C     ON OUTPUT
  8552. C
  8553. C        ALFR  AND  ALFI  CONTAIN THE REAL AND IMAGINARY PARTS,
  8554. C        RESPECTIVELY, OF THE NUMERATORS OF THE EIGENVALUES.
  8555. C
  8556. C        BETA  CONTAINS THE DENOMINATORS OF THE EIGENVALUES,
  8557. C        WHICH ARE THUS GIVEN BY THE RATIOS  (ALFR+I*ALFI)/BETA.
  8558. C        COMPLEX CONJUGATE PAIRS OF EIGENVALUES APPEAR CONSECUTIVELY
  8559. C        WITH THE EIGENVALUE HAVING THE POSITIVE IMAGINARY PART FIRST.
  8560. C
  8561. C        Z  CONTAINS THE REAL AND IMAGINARY PARTS OF THE EIGENVECTORS
  8562. C        IF MATZ IS NOT ZERO.  IF THE J-TH EIGENVALUE IS REAL, THE
  8563. C        J-TH COLUMN OF  Z  CONTAINS ITS EIGENVECTOR.  IF THE J-TH
  8564. C        EIGENVALUE IS COMPLEX WITH POSITIVE IMAGINARY PART, THE
  8565. C        J-TH AND (J+1)-TH COLUMNS OF  Z  CONTAIN THE REAL AND
  8566. C        IMAGINARY PARTS OF ITS EIGENVECTOR.  THE CONJUGATE OF THIS
  8567. C        VECTOR IS THE EIGENVECTOR FOR THE CONJUGATE EIGENVALUE.
  8568. C
  8569. C        IERR  IS AN INTEGER OUTPUT VARIABLE SET EQUAL TO AN ERROR
  8570. C           COMPLETION CODE DESCRIBED IN THE DOCUMENTATION FOR QZIT.
  8571. C           THE NORMAL COMPLETION CODE IS ZERO.
  8572. C
  8573. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  8574. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  8575. C
  8576. C     THIS VERSION DATED AUGUST 1983.
  8577. C
  8578. C     ------------------------------------------------------------------
  8579. C
  8580.       IF (N .LE. NM) GO TO 10
  8581.       IERR = 10 * N
  8582.       GO TO 50
  8583. C
  8584.    10 IF (MATZ .NE. 0) GO TO 20
  8585. C     .......... FIND EIGENVALUES ONLY ..........
  8586.       TF = .FALSE.
  8587.       CALL  QZHES(NM,N,A,B,TF,Z)
  8588.       CALL  QZIT(NM,N,A,B,0.0D0,TF,Z,IERR)
  8589.       CALL  QZVAL(NM,N,A,B,ALFR,ALFI,BETA,TF,Z)
  8590.       GO TO 50
  8591. C     .......... FIND BOTH EIGENVALUES AND EIGENVECTORS ..........
  8592.    20 TF = .TRUE.
  8593.       CALL  QZHES(NM,N,A,B,TF,Z)
  8594.       CALL  QZIT(NM,N,A,B,0.0D0,TF,Z,IERR)
  8595.       CALL  QZVAL(NM,N,A,B,ALFR,ALFI,BETA,TF,Z)
  8596.       IF (IERR .NE. 0) GO TO 50
  8597.       CALL  QZVEC(NM,N,A,B,ALFR,ALFI,BETA,Z)
  8598.    50 RETURN
  8599.       END
  8600.       SUBROUTINE RS(NM,N,A,W,MATZ,Z,FV1,FV2,IERR)
  8601. C
  8602.       INTEGER N,NM,IERR,MATZ
  8603.       DOUBLE PRECISION A(NM,N),W(N),Z(NM,N),FV1(N),FV2(N)
  8604. C
  8605. C     THIS SUBROUTINE CALLS THE RECOMMENDED SEQUENCE OF
  8606. C     SUBROUTINES FROM THE EIGENSYSTEM SUBROUTINE PACKAGE (EISPACK)
  8607. C     TO FIND THE EIGENVALUES AND EIGENVECTORS (IF DESIRED)
  8608. C     OF A REAL SYMMETRIC MATRIX.
  8609. C
  8610. C     ON INPUT
  8611. C
  8612. C        NM  MUST BE SET TO THE ROW DIMENSION OF THE TWO-DIMENSIONAL
  8613. C        ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  8614. C        DIMENSION STATEMENT.
  8615. C
  8616. C        N  IS THE ORDER OF THE MATRIX  A.
  8617. C
  8618. C        A  CONTAINS THE REAL SYMMETRIC MATRIX.
  8619. C
  8620. C        MATZ  IS AN INTEGER VARIABLE SET EQUAL TO ZERO IF
  8621. C        ONLY EIGENVALUES ARE DESIRED.  OTHERWISE IT IS SET TO
  8622. C        ANY NON-ZERO INTEGER FOR BOTH EIGENVALUES AND EIGENVECTORS.
  8623. C
  8624. C     ON OUTPUT
  8625. C
  8626. C        W  CONTAINS THE EIGENVALUES IN ASCENDING ORDER.
  8627. C
  8628. C        Z  CONTAINS THE EIGENVECTORS IF MATZ IS NOT ZERO.
  8629. C
  8630. C        IERR  IS AN INTEGER OUTPUT VARIABLE SET EQUAL TO AN ERROR
  8631. C           COMPLETION CODE DESCRIBED IN THE DOCUMENTATION FOR TQLRAT
  8632. C           AND TQL2.  THE NORMAL COMPLETION CODE IS ZERO.
  8633. C
  8634. C        FV1  AND  FV2  ARE TEMPORARY STORAGE ARRAYS.
  8635. C
  8636. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  8637. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  8638. C
  8639. C     THIS VERSION DATED AUGUST 1983.
  8640. C
  8641. C     ------------------------------------------------------------------
  8642. C
  8643.       IF (N .LE. NM) GO TO 10
  8644.       IERR = 10 * N
  8645.       GO TO 50
  8646. C
  8647.    10 IF (MATZ .NE. 0) GO TO 20
  8648. C     .......... FIND EIGENVALUES ONLY ..........
  8649.       CALL  TRED1(NM,N,A,W,FV1,FV2)
  8650.       CALL  TQLRAT(N,W,FV2,IERR)
  8651.       GO TO 50
  8652. C     .......... FIND BOTH EIGENVALUES AND EIGENVECTORS ..........
  8653.    20 CALL  TRED2(NM,N,A,W,FV1,Z)
  8654.       CALL  TQL2(NM,N,W,FV1,Z,IERR)
  8655.    50 RETURN
  8656.       END
  8657.       SUBROUTINE RSB(NM,N,MB,A,W,MATZ,Z,FV1,FV2,IERR)
  8658. C
  8659.       INTEGER N,MB,NM,IERR,MATZ
  8660.       DOUBLE PRECISION A(NM,MB),W(N),Z(NM,N),FV1(N),FV2(N)
  8661.       LOGICAL TF
  8662. C
  8663. C     THIS SUBROUTINE CALLS THE RECOMMENDED SEQUENCE OF
  8664. C     SUBROUTINES FROM THE EIGENSYSTEM SUBROUTINE PACKAGE (EISPACK)
  8665. C     TO FIND THE EIGENVALUES AND EIGENVECTORS (IF DESIRED)
  8666. C     OF A REAL SYMMETRIC BAND MATRIX.
  8667. C
  8668. C     ON INPUT
  8669. C
  8670. C        NM  MUST BE SET TO THE ROW DIMENSION OF THE TWO-DIMENSIONAL
  8671. C        ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  8672. C        DIMENSION STATEMENT.
  8673. C
  8674. C        N  IS THE ORDER OF THE MATRIX  A.
  8675. C
  8676. C        MB  IS THE HALF BAND WIDTH OF THE MATRIX, DEFINED AS THE
  8677. C        NUMBER OF ADJACENT DIAGONALS, INCLUDING THE PRINCIPAL
  8678. C        DIAGONAL, REQUIRED TO SPECIFY THE NON-ZERO PORTION OF THE
  8679. C        LOWER TRIANGLE OF THE MATRIX.
  8680. C
  8681. C        A  CONTAINS THE LOWER TRIANGLE OF THE REAL SYMMETRIC
  8682. C        BAND MATRIX.  ITS LOWEST SUBDIAGONAL IS STORED IN THE
  8683. C        LAST  N+1-MB  POSITIONS OF THE FIRST COLUMN, ITS NEXT
  8684. C        SUBDIAGONAL IN THE LAST  N+2-MB  POSITIONS OF THE
  8685. C        SECOND COLUMN, FURTHER SUBDIAGONALS SIMILARLY, AND
  8686. C        FINALLY ITS PRINCIPAL DIAGONAL IN THE  N  POSITIONS
  8687. C        OF THE LAST COLUMN.  CONTENTS OF STORAGES NOT PART
  8688. C        OF THE MATRIX ARE ARBITRARY.
  8689. C
  8690. C        MATZ  IS AN INTEGER VARIABLE SET EQUAL TO ZERO IF
  8691. C        ONLY EIGENVALUES ARE DESIRED.  OTHERWISE IT IS SET TO
  8692. C        ANY NON-ZERO INTEGER FOR BOTH EIGENVALUES AND EIGENVECTORS.
  8693. C
  8694. C     ON OUTPUT
  8695. C
  8696. C        W  CONTAINS THE EIGENVALUES IN ASCENDING ORDER.
  8697. C
  8698. C        Z  CONTAINS THE EIGENVECTORS IF MATZ IS NOT ZERO.
  8699. C
  8700. C        IERR  IS AN INTEGER OUTPUT VARIABLE SET EQUAL TO AN ERROR
  8701. C           COMPLETION CODE DESCRIBED IN THE DOCUMENTATION FOR TQLRAT
  8702. C           AND TQL2.  THE NORMAL COMPLETION CODE IS ZERO.
  8703. C
  8704. C        FV1  AND  FV2  ARE TEMPORARY STORAGE ARRAYS.
  8705. C
  8706. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  8707. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  8708. C
  8709. C     THIS VERSION DATED AUGUST 1983.
  8710. C
  8711. C     ------------------------------------------------------------------
  8712. C
  8713.       IF (N .LE. NM) GO TO 5
  8714.       IERR = 10 * N
  8715.       GO TO 50
  8716.     5 IF (MB .GT. 0) GO TO 10
  8717.       IERR = 12 * N
  8718.       GO TO 50
  8719.    10 IF (MB .LE. N) GO TO 15
  8720.       IERR = 12 * N
  8721.       GO TO 50
  8722. C
  8723.    15 IF (MATZ .NE. 0) GO TO 20
  8724. C     .......... FIND EIGENVALUES ONLY ..........
  8725.       TF = .FALSE.
  8726.       CALL  BANDR(NM,N,MB,A,W,FV1,FV2,TF,Z)
  8727.       CALL  TQLRAT(N,W,FV2,IERR)
  8728.       GO TO 50
  8729. C     .......... FIND BOTH EIGENVALUES AND EIGENVECTORS ..........
  8730.    20 TF = .TRUE.
  8731.       CALL  BANDR(NM,N,MB,A,W,FV1,FV1,TF,Z)
  8732.       CALL  TQL2(NM,N,W,FV1,Z,IERR)
  8733.    50 RETURN
  8734.       END
  8735.       SUBROUTINE RSG(NM,N,A,B,W,MATZ,Z,FV1,FV2,IERR)
  8736. C
  8737.       INTEGER N,NM,IERR,MATZ
  8738.       DOUBLE PRECISION A(NM,N),B(NM,N),W(N),Z(NM,N),FV1(N),FV2(N)
  8739. C
  8740. C     THIS SUBROUTINE CALLS THE RECOMMENDED SEQUENCE OF
  8741. C     SUBROUTINES FROM THE EIGENSYSTEM SUBROUTINE PACKAGE (EISPACK)
  8742. C     TO FIND THE EIGENVALUES AND EIGENVECTORS (IF DESIRED)
  8743. C     FOR THE REAL SYMMETRIC GENERALIZED EIGENPROBLEM  AX = (LAMBDA)BX.
  8744. C
  8745. C     ON INPUT
  8746. C
  8747. C        NM  MUST BE SET TO THE ROW DIMENSION OF THE TWO-DIMENSIONAL
  8748. C        ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  8749. C        DIMENSION STATEMENT.
  8750. C
  8751. C        N  IS THE ORDER OF THE MATRICES  A  AND  B.
  8752. C
  8753. C        A  CONTAINS A REAL SYMMETRIC MATRIX.
  8754. C
  8755. C        B  CONTAINS A POSITIVE DEFINITE REAL SYMMETRIC MATRIX.
  8756. C
  8757. C        MATZ  IS AN INTEGER VARIABLE SET EQUAL TO ZERO IF
  8758. C        ONLY EIGENVALUES ARE DESIRED.  OTHERWISE IT IS SET TO
  8759. C        ANY NON-ZERO INTEGER FOR BOTH EIGENVALUES AND EIGENVECTORS.
  8760. C
  8761. C     ON OUTPUT
  8762. C
  8763. C        W  CONTAINS THE EIGENVALUES IN ASCENDING ORDER.
  8764. C
  8765. C        Z  CONTAINS THE EIGENVECTORS IF MATZ IS NOT ZERO.
  8766. C
  8767. C        IERR  IS AN INTEGER OUTPUT VARIABLE SET EQUAL TO AN ERROR
  8768. C           COMPLETION CODE DESCRIBED IN THE DOCUMENTATION FOR TQLRAT
  8769. C           AND TQL2.  THE NORMAL COMPLETION CODE IS ZERO.
  8770. C
  8771. C        FV1  AND  FV2  ARE TEMPORARY STORAGE ARRAYS.
  8772. C
  8773. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  8774. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  8775. C
  8776. C     THIS VERSION DATED AUGUST 1983.
  8777. C
  8778. C     ------------------------------------------------------------------
  8779. C
  8780.       IF (N .LE. NM) GO TO 10
  8781.       IERR = 10 * N
  8782.       GO TO 50
  8783. C
  8784.    10 CALL  REDUC(NM,N,A,B,FV2,IERR)
  8785.       IF (IERR .NE. 0) GO TO 50
  8786.       IF (MATZ .NE. 0) GO TO 20
  8787. C     .......... FIND EIGENVALUES ONLY ..........
  8788.       CALL  TRED1(NM,N,A,W,FV1,FV2)
  8789.       CALL  TQLRAT(N,W,FV2,IERR)
  8790.       GO TO 50
  8791. C     .......... FIND BOTH EIGENVALUES AND EIGENVECTORS ..........
  8792.    20 CALL  TRED2(NM,N,A,W,FV1,Z)
  8793.       CALL  TQL2(NM,N,W,FV1,Z,IERR)
  8794.       IF (IERR .NE. 0) GO TO 50
  8795.       CALL  REBAK(NM,N,B,FV2,N,Z)
  8796.    50 RETURN
  8797.       END
  8798.       SUBROUTINE RSGAB(NM,N,A,B,W,MATZ,Z,FV1,FV2,IERR)
  8799. C
  8800.       INTEGER N,NM,IERR,MATZ
  8801.       DOUBLE PRECISION A(NM,N),B(NM,N),W(N),Z(NM,N),FV1(N),FV2(N)
  8802. C
  8803. C     THIS SUBROUTINE CALLS THE RECOMMENDED SEQUENCE OF
  8804. C     SUBROUTINES FROM THE EIGENSYSTEM SUBROUTINE PACKAGE (EISPACK)
  8805. C     TO FIND THE EIGENVALUES AND EIGENVECTORS (IF DESIRED)
  8806. C     FOR THE REAL SYMMETRIC GENERALIZED EIGENPROBLEM  ABX = (LAMBDA)X.
  8807. C
  8808. C     ON INPUT
  8809. C
  8810. C        NM  MUST BE SET TO THE ROW DIMENSION OF THE TWO-DIMENSIONAL
  8811. C        ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  8812. C        DIMENSION STATEMENT.
  8813. C
  8814. C        N  IS THE ORDER OF THE MATRICES  A  AND  B.
  8815. C
  8816. C        A  CONTAINS A REAL SYMMETRIC MATRIX.
  8817. C
  8818. C        B  CONTAINS A POSITIVE DEFINITE REAL SYMMETRIC MATRIX.
  8819. C
  8820. C        MATZ  IS AN INTEGER VARIABLE SET EQUAL TO ZERO IF
  8821. C        ONLY EIGENVALUES ARE DESIRED.  OTHERWISE IT IS SET TO
  8822. C        ANY NON-ZERO INTEGER FOR BOTH EIGENVALUES AND EIGENVECTORS.
  8823. C
  8824. C     ON OUTPUT
  8825. C
  8826. C        W  CONTAINS THE EIGENVALUES IN ASCENDING ORDER.
  8827. C
  8828. C        Z  CONTAINS THE EIGENVECTORS IF MATZ IS NOT ZERO.
  8829. C
  8830. C        IERR  IS AN INTEGER OUTPUT VARIABLE SET EQUAL TO AN ERROR
  8831. C           COMPLETION CODE DESCRIBED IN THE DOCUMENTATION FOR TQLRAT
  8832. C           AND TQL2.  THE NORMAL COMPLETION CODE IS ZERO.
  8833. C
  8834. C        FV1  AND  FV2  ARE TEMPORARY STORAGE ARRAYS.
  8835. C
  8836. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  8837. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  8838. C
  8839. C     THIS VERSION DATED AUGUST 1983.
  8840. C
  8841. C     ------------------------------------------------------------------
  8842. C
  8843.       IF (N .LE. NM) GO TO 10
  8844.       IERR = 10 * N
  8845.       GO TO 50
  8846. C
  8847.    10 CALL  REDUC2(NM,N,A,B,FV2,IERR)
  8848.       IF (IERR .NE. 0) GO TO 50
  8849.       IF (MATZ .NE. 0) GO TO 20
  8850. C     .......... FIND EIGENVALUES ONLY ..........
  8851.       CALL  TRED1(NM,N,A,W,FV1,FV2)
  8852.       CALL  TQLRAT(N,W,FV2,IERR)
  8853.       GO TO 50
  8854. C     .......... FIND BOTH EIGENVALUES AND EIGENVECTORS ..........
  8855.    20 CALL  TRED2(NM,N,A,W,FV1,Z)
  8856.       CALL  TQL2(NM,N,W,FV1,Z,IERR)
  8857.       IF (IERR .NE. 0) GO TO 50
  8858.       CALL  REBAK(NM,N,B,FV2,N,Z)
  8859.    50 RETURN
  8860.       END
  8861.       SUBROUTINE RSGBA(NM,N,A,B,W,MATZ,Z,FV1,FV2,IERR)
  8862. C
  8863.       INTEGER N,NM,IERR,MATZ
  8864.       DOUBLE PRECISION A(NM,N),B(NM,N),W(N),Z(NM,N),FV1(N),FV2(N)
  8865. C
  8866. C     THIS SUBROUTINE CALLS THE RECOMMENDED SEQUENCE OF
  8867. C     SUBROUTINES FROM THE EIGENSYSTEM SUBROUTINE PACKAGE (EISPACK)
  8868. C     TO FIND THE EIGENVALUES AND EIGENVECTORS (IF DESIRED)
  8869. C     FOR THE REAL SYMMETRIC GENERALIZED EIGENPROBLEM  BAX = (LAMBDA)X.
  8870. C
  8871. C     ON INPUT
  8872. C
  8873. C        NM  MUST BE SET TO THE ROW DIMENSION OF THE TWO-DIMENSIONAL
  8874. C        ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  8875. C        DIMENSION STATEMENT.
  8876. C
  8877. C        N  IS THE ORDER OF THE MATRICES  A  AND  B.
  8878. C
  8879. C        A  CONTAINS A REAL SYMMETRIC MATRIX.
  8880. C
  8881. C        B  CONTAINS A POSITIVE DEFINITE REAL SYMMETRIC MATRIX.
  8882. C
  8883. C        MATZ  IS AN INTEGER VARIABLE SET EQUAL TO ZERO IF
  8884. C        ONLY EIGENVALUES ARE DESIRED.  OTHERWISE IT IS SET TO
  8885. C        ANY NON-ZERO INTEGER FOR BOTH EIGENVALUES AND EIGENVECTORS.
  8886. C
  8887. C     ON OUTPUT
  8888. C
  8889. C        W  CONTAINS THE EIGENVALUES IN ASCENDING ORDER.
  8890. C
  8891. C        Z  CONTAINS THE EIGENVECTORS IF MATZ IS NOT ZERO.
  8892. C
  8893. C        IERR  IS AN INTEGER OUTPUT VARIABLE SET EQUAL TO AN ERROR
  8894. C           COMPLETION CODE DESCRIBED IN THE DOCUMENTATION FOR TQLRAT
  8895. C           AND TQL2.  THE NORMAL COMPLETION CODE IS ZERO.
  8896. C
  8897. C        FV1  AND  FV2  ARE TEMPORARY STORAGE ARRAYS.
  8898. C
  8899. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  8900. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  8901. C
  8902. C     THIS VERSION DATED AUGUST 1983.
  8903. C
  8904. C     ------------------------------------------------------------------
  8905. C
  8906.       IF (N .LE. NM) GO TO 10
  8907.       IERR = 10 * N
  8908.       GO TO 50
  8909. C
  8910.    10 CALL  REDUC2(NM,N,A,B,FV2,IERR)
  8911.       IF (IERR .NE. 0) GO TO 50
  8912.       IF (MATZ .NE. 0) GO TO 20
  8913. C     .......... FIND EIGENVALUES ONLY ..........
  8914.       CALL  TRED1(NM,N,A,W,FV1,FV2)
  8915.       CALL  TQLRAT(N,W,FV2,IERR)
  8916.       GO TO 50
  8917. C     .......... FIND BOTH EIGENVALUES AND EIGENVECTORS ..........
  8918.    20 CALL  TRED2(NM,N,A,W,FV1,Z)
  8919.       CALL  TQL2(NM,N,W,FV1,Z,IERR)
  8920.       IF (IERR .NE. 0) GO TO 50
  8921.       CALL  REBAKB(NM,N,B,FV2,N,Z)
  8922.    50 RETURN
  8923.       END
  8924.       SUBROUTINE RSM(NM,N,A,W,M,Z,FWORK,IWORK,IERR)
  8925.       INTEGER N,NM,M,IWORK(N),IERR
  8926.       DOUBLE PRECISION A(NM,N),W(N),Z(NM,M),FWORK(1)
  8927. C
  8928. C     THIS SUBROUTINE CALLS THE RECOMMENDED SEQUENCE OF
  8929. C     SUBROUTINES FROM THE EIGENSYSTEM SUBROUTINE PACKAGE (EISPACK)
  8930. C     TO FIND ALL OF THE EIGENVALUES AND SOME OF THE EIGENVECTORS
  8931. C     OF A REAL SYMMETRIC MATRIX.
  8932. C
  8933. C     ON INPUT
  8934. C
  8935. C        NM  MUST BE SET TO THE ROW DIMENSION OF THE TWO-DIMENSIONAL
  8936. C        ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  8937. C        DIMENSION STATEMENT.
  8938. C
  8939. C        N  IS THE ORDER OF THE MATRIX  A.
  8940. C
  8941. C        A  CONTAINS THE REAL SYMMETRIC MATRIX.
  8942. C
  8943. C        M  THE EIGENVECTORS CORRESPONDING TO THE FIRST M EIGENVALUES
  8944. C           ARE TO BE COMPUTED.
  8945. C           IF M = 0 THEN NO EIGENVECTORS ARE COMPUTED.
  8946. C           IF M = N THEN ALL OF THE EIGENVECTORS ARE COMPUTED.
  8947. C
  8948. C     ON OUTPUT
  8949. C
  8950. C        W  CONTAINS ALL N EIGENVALUES IN ASCENDING ORDER.
  8951. C
  8952. C        Z  CONTAINS THE ORTHONORMAL EIGENVECTORS ASSOCIATED WITH
  8953. C           THE FIRST M EIGENVALUES.
  8954. C
  8955. C        IERR  IS AN INTEGER OUTPUT VARIABLE SET EQUAL TO AN ERROR
  8956. C           COMPLETION CODE DESCRIBED IN THE DOCUMENTATION FOR TQLRAT,
  8957. C           IMTQLV AND TINVIT.  THE NORMAL COMPLETION CODE IS ZERO.
  8958. C
  8959. C        FWORK  IS A TEMPORARY STORAGE ARRAY OF DIMENSION 8*N.
  8960. C
  8961. C        IWORK  IS AN INTEGER TEMPORARY STORAGE ARRAY OF DIMENSION N.
  8962. C
  8963. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  8964. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  8965. C
  8966. C     THIS VERSION DATED AUGUST 1983.
  8967. C
  8968. C     ------------------------------------------------------------------
  8969. C
  8970.       IERR = 10 * N
  8971.       IF (N .GT. NM .OR. M .GT. NM) GO TO 50
  8972.       K1 = 1
  8973.       K2 = K1 + N
  8974.       K3 = K2 + N
  8975.       K4 = K3 + N
  8976.       K5 = K4 + N
  8977.       K6 = K5 + N
  8978.       K7 = K6 + N
  8979.       K8 = K7 + N
  8980.       IF (M .GT. 0) GO TO 10
  8981. C     .......... FIND EIGENVALUES ONLY ..........
  8982.       CALL  TRED1(NM,N,A,W,FWORK(K1),FWORK(K2))
  8983.       CALL  TQLRAT(N,W,FWORK(K2),IERR)
  8984.       GO TO 50
  8985. C     .......... FIND ALL EIGENVALUES AND M EIGENVECTORS ..........
  8986.    10 CALL  TRED1(NM,N,A,FWORK(K1),FWORK(K2),FWORK(K3))
  8987.       CALL  IMTQLV(N,FWORK(K1),FWORK(K2),FWORK(K3),W,IWORK,
  8988.      X             IERR,FWORK(K4))
  8989.       CALL  TINVIT(NM,N,FWORK(K1),FWORK(K2),FWORK(K3),M,W,IWORK,Z,IERR,
  8990.      X             FWORK(K4),FWORK(K5),FWORK(K6),FWORK(K7),FWORK(K8))
  8991.       CALL  TRBAK1(NM,N,A,FWORK(K2),M,Z)
  8992.    50 RETURN
  8993.       END
  8994.       SUBROUTINE RSP(NM,N,NV,A,W,MATZ,Z,FV1,FV2,IERR)
  8995. C
  8996.       INTEGER I,J,N,NM,NV,IERR,MATZ
  8997.       DOUBLE PRECISION A(NV),W(N),Z(NM,N),FV1(N),FV2(N)
  8998. C
  8999. C     THIS SUBROUTINE CALLS THE RECOMMENDED SEQUENCE OF
  9000. C     SUBROUTINES FROM THE EIGENSYSTEM SUBROUTINE PACKAGE (EISPACK)
  9001. C     TO FIND THE EIGENVALUES AND EIGENVECTORS (IF DESIRED)
  9002. C     OF A REAL SYMMETRIC PACKED MATRIX.
  9003. C
  9004. C     ON INPUT
  9005. C
  9006. C        NM  MUST BE SET TO THE ROW DIMENSION OF THE TWO-DIMENSIONAL
  9007. C        ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  9008. C        DIMENSION STATEMENT.
  9009. C
  9010. C        N  IS THE ORDER OF THE MATRIX  A.
  9011. C
  9012. C        NV  IS AN INTEGER VARIABLE SET EQUAL TO THE
  9013. C        DIMENSION OF THE ARRAY  A  AS SPECIFIED FOR
  9014. C        A  IN THE CALLING PROGRAM.  NV  MUST NOT BE
  9015. C        LESS THAN  N*(N+1)/2.
  9016. C
  9017. C        A  CONTAINS THE LOWER TRIANGLE OF THE REAL SYMMETRIC
  9018. C        PACKED MATRIX STORED ROW-WISE.
  9019. C
  9020. C        MATZ  IS AN INTEGER VARIABLE SET EQUAL TO ZERO IF
  9021. C        ONLY EIGENVALUES ARE DESIRED.  OTHERWISE IT IS SET TO
  9022. C        ANY NON-ZERO INTEGER FOR BOTH EIGENVALUES AND EIGENVECTORS.
  9023. C
  9024. C     ON OUTPUT
  9025. C
  9026. C        W  CONTAINS THE EIGENVALUES IN ASCENDING ORDER.
  9027. C
  9028. C        Z  CONTAINS THE EIGENVECTORS IF MATZ IS NOT ZERO.
  9029. C
  9030. C        IERR  IS AN INTEGER OUTPUT VARIABLE SET EQUAL TO AN ERROR
  9031. C           COMPLETION CODE DESCRIBED IN THE DOCUMENTATION FOR TQLRAT
  9032. C           AND TQL2.  THE NORMAL COMPLETION CODE IS ZERO.
  9033. C
  9034. C        FV1  AND  FV2  ARE TEMPORARY STORAGE ARRAYS.
  9035. C
  9036. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  9037. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  9038. C
  9039. C     THIS VERSION DATED AUGUST 1983.
  9040. C
  9041. C     ------------------------------------------------------------------
  9042. C
  9043.       IF (N .LE. NM) GO TO 5
  9044.       IERR = 10 * N
  9045.       GO TO 50
  9046.     5 IF (NV .GE. (N * (N + 1)) / 2) GO TO 10
  9047.       IERR = 20 * N
  9048.       GO TO 50
  9049. C
  9050.    10 CALL  TRED3(N,NV,A,W,FV1,FV2)
  9051.       IF (MATZ .NE. 0) GO TO 20
  9052. C     .......... FIND EIGENVALUES ONLY ..........
  9053.       CALL  TQLRAT(N,W,FV2,IERR)
  9054.       GO TO 50
  9055. C     .......... FIND BOTH EIGENVALUES AND EIGENVECTORS ..........
  9056.    20 DO 40 I = 1, N
  9057. C
  9058.          DO 30 J = 1, N
  9059.             Z(J,I) = 0.0D0
  9060.    30    CONTINUE
  9061. C
  9062.          Z(I,I) = 1.0D0
  9063.    40 CONTINUE
  9064. C
  9065.       CALL  TQL2(NM,N,W,FV1,Z,IERR)
  9066.       IF (IERR .NE. 0) GO TO 50
  9067.       CALL  TRBAK3(NM,N,NV,A,N,Z)
  9068.    50 RETURN
  9069.       END
  9070.       SUBROUTINE RST(NM,N,W,E,MATZ,Z,IERR)
  9071. C
  9072.       INTEGER I,J,N,NM,IERR,MATZ
  9073.       DOUBLE PRECISION W(N),E(N),Z(NM,N)
  9074. C
  9075. C     THIS SUBROUTINE CALLS THE RECOMMENDED SEQUENCE OF
  9076. C     SUBROUTINES FROM THE EIGENSYSTEM SUBROUTINE PACKAGE (EISPACK)
  9077. C     TO FIND THE EIGENVALUES AND EIGENVECTORS (IF DESIRED)
  9078. C     OF A REAL SYMMETRIC TRIDIAGONAL MATRIX.
  9079. C
  9080. C     ON INPUT
  9081. C
  9082. C        NM  MUST BE SET TO THE ROW DIMENSION OF THE TWO-DIMENSIONAL
  9083. C        ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  9084. C        DIMENSION STATEMENT.
  9085. C
  9086. C        N  IS THE ORDER OF THE MATRIX.
  9087. C
  9088. C        W  CONTAINS THE DIAGONAL ELEMENTS OF THE REAL
  9089. C        SYMMETRIC TRIDIAGONAL MATRIX.
  9090. C
  9091. C        E  CONTAINS THE SUBDIAGONAL ELEMENTS OF THE MATRIX IN
  9092. C        ITS LAST N-1 POSITIONS.  E(1) IS ARBITRARY.
  9093. C
  9094. C        MATZ  IS AN INTEGER VARIABLE SET EQUAL TO ZERO IF
  9095. C        ONLY EIGENVALUES ARE DESIRED.  OTHERWISE IT IS SET TO
  9096. C        ANY NON-ZERO INTEGER FOR BOTH EIGENVALUES AND EIGENVECTORS.
  9097. C
  9098. C     ON OUTPUT
  9099. C
  9100. C        W  CONTAINS THE EIGENVALUES IN ASCENDING ORDER.
  9101. C
  9102. C        Z  CONTAINS THE EIGENVECTORS IF MATZ IS NOT ZERO.
  9103. C
  9104. C        IERR  IS AN INTEGER OUTPUT VARIABLE SET EQUAL TO AN ERROR
  9105. C           COMPLETION CODE DESCRIBED IN THE DOCUMENTATION FOR IMTQL1
  9106. C           AND IMTQL2.  THE NORMAL COMPLETION CODE IS ZERO.
  9107. C
  9108. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  9109. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  9110. C
  9111. C     THIS VERSION DATED AUGUST 1983.
  9112. C
  9113. C     ------------------------------------------------------------------
  9114. C
  9115.       IF (N .LE. NM) GO TO 10
  9116.       IERR = 10 * N
  9117.       GO TO 50
  9118. C
  9119.    10 IF (MATZ .NE. 0) GO TO 20
  9120. C     .......... FIND EIGENVALUES ONLY ..........
  9121.       CALL  IMTQL1(N,W,E,IERR)
  9122.       GO TO 50
  9123. C     .......... FIND BOTH EIGENVALUES AND EIGENVECTORS ..........
  9124.    20 DO 40 I = 1, N
  9125. C
  9126.          DO 30 J = 1, N
  9127.             Z(J,I) = 0.0D0
  9128.    30    CONTINUE
  9129. C
  9130.          Z(I,I) = 1.0D0
  9131.    40 CONTINUE
  9132. C
  9133.       CALL  IMTQL2(NM,N,W,E,Z,IERR)
  9134.    50 RETURN
  9135.       END
  9136.       SUBROUTINE RT(NM,N,A,W,MATZ,Z,FV1,IERR)
  9137. C
  9138.       INTEGER N,NM,IERR,MATZ
  9139.       DOUBLE PRECISION A(NM,3),W(N),Z(NM,N),FV1(N)
  9140. C
  9141. C     THIS SUBROUTINE CALLS THE RECOMMENDED SEQUENCE OF
  9142. C     SUBROUTINES FROM THE EIGENSYSTEM SUBROUTINE PACKAGE (EISPACK)
  9143. C     TO FIND THE EIGENVALUES AND EIGENVECTORS (IF DESIRED)
  9144. C     OF A SPECIAL REAL TRIDIAGONAL MATRIX.
  9145. C
  9146. C     ON INPUT
  9147. C
  9148. C        NM  MUST BE SET TO THE ROW DIMENSION OF THE TWO-DIMENSIONAL
  9149. C        ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  9150. C        DIMENSION STATEMENT.
  9151. C
  9152. C        N  IS THE ORDER OF THE MATRIX  A.
  9153. C
  9154. C        A  CONTAINS THE SPECIAL REAL TRIDIAGONAL MATRIX IN ITS
  9155. C        FIRST THREE COLUMNS.  THE SUBDIAGONAL ELEMENTS ARE STORED
  9156. C        IN THE LAST  N-1  POSITIONS OF THE FIRST COLUMN, THE
  9157. C        DIAGONAL ELEMENTS IN THE SECOND COLUMN, AND THE SUPERDIAGONAL
  9158. C        ELEMENTS IN THE FIRST  N-1  POSITIONS OF THE THIRD COLUMN.
  9159. C        ELEMENTS  A(1,1)  AND  A(N,3)  ARE ARBITRARY.
  9160. C
  9161. C        MATZ  IS AN INTEGER VARIABLE SET EQUAL TO ZERO IF
  9162. C        ONLY EIGENVALUES ARE DESIRED.  OTHERWISE IT IS SET TO
  9163. C        ANY NON-ZERO INTEGER FOR BOTH EIGENVALUES AND EIGENVECTORS.
  9164. C
  9165. C     ON OUTPUT
  9166. C
  9167. C        W  CONTAINS THE EIGENVALUES IN ASCENDING ORDER.
  9168. C
  9169. C        Z  CONTAINS THE EIGENVECTORS IF MATZ IS NOT ZERO.
  9170. C
  9171. C        IERR  IS AN INTEGER OUTPUT VARIABLE SET EQUAL TO AN ERROR
  9172. C           COMPLETION CODE DESCRIBED IN THE DOCUMENTATION FOR IMTQL1
  9173. C           AND IMTQL2.  THE NORMAL COMPLETION CODE IS ZERO.
  9174. C
  9175. C        FV1  IS A TEMPORARY STORAGE ARRAY.
  9176. C
  9177. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  9178. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  9179. C
  9180. C     THIS VERSION DATED AUGUST 1983.
  9181. C
  9182. C     ------------------------------------------------------------------
  9183. C
  9184.       IF (N .LE. NM) GO TO 10
  9185.       IERR = 10 * N
  9186.       GO TO 50
  9187. C
  9188.    10 IF (MATZ .NE. 0) GO TO 20
  9189. C     .......... FIND EIGENVALUES ONLY ..........
  9190.       CALL  FIGI(NM,N,A,W,FV1,FV1,IERR)
  9191.       IF (IERR .GT. 0) GO TO 50
  9192.       CALL  IMTQL1(N,W,FV1,IERR)
  9193.       GO TO 50
  9194. C     .......... FIND BOTH EIGENVALUES AND EIGENVECTORS ..........
  9195.    20 CALL  FIGI2(NM,N,A,W,FV1,Z,IERR)
  9196.       IF (IERR .NE. 0) GO TO 50
  9197.       CALL  IMTQL2(NM,N,W,FV1,Z,IERR)
  9198.    50 RETURN
  9199.       END
  9200.       SUBROUTINE SVD(NM,M,N,A,W,MATU,U,MATV,V,IERR,RV1)
  9201. C
  9202.       INTEGER I,J,K,L,M,N,II,I1,KK,K1,LL,L1,MN,NM,ITS,IERR
  9203.       DOUBLE PRECISION A(NM,N),W(N),U(NM,N),V(NM,N),RV1(N)
  9204.       DOUBLE PRECISION C,F,G,H,S,X,Y,Z,TST1,TST2,SCALE,PYTHAG
  9205.       LOGICAL MATU,MATV
  9206. C
  9207. C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE SVD,
  9208. C     NUM. MATH. 14, 403-420(1970) BY GOLUB AND REINSCH.
  9209. C     HANDBOOK FOR AUTO. COMP., VOL II-LINEAR ALGEBRA, 134-151(1971).
  9210. C
  9211. C     THIS SUBROUTINE DETERMINES THE SINGULAR VALUE DECOMPOSITION
  9212. C          T
  9213. C     A=USV  OF A REAL M BY N RECTANGULAR MATRIX.  HOUSEHOLDER
  9214. C     BIDIAGONALIZATION AND A VARIANT OF THE QR ALGORITHM ARE USED.
  9215. C
  9216. C     ON INPUT
  9217. C
  9218. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  9219. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  9220. C          DIMENSION STATEMENT.  NOTE THAT NM MUST BE AT LEAST
  9221. C          AS LARGE AS THE MAXIMUM OF M AND N.
  9222. C
  9223. C        M IS THE NUMBER OF ROWS OF A (AND U).
  9224. C
  9225. C        N IS THE NUMBER OF COLUMNS OF A (AND U) AND THE ORDER OF V.
  9226. C
  9227. C        A CONTAINS THE RECTANGULAR INPUT MATRIX TO BE DECOMPOSED.
  9228. C
  9229. C        MATU SHOULD BE SET TO .TRUE. IF THE U MATRIX IN THE
  9230. C          DECOMPOSITION IS DESIRED, AND TO .FALSE. OTHERWISE.
  9231. C
  9232. C        MATV SHOULD BE SET TO .TRUE. IF THE V MATRIX IN THE
  9233. C          DECOMPOSITION IS DESIRED, AND TO .FALSE. OTHERWISE.
  9234. C
  9235. C     ON OUTPUT
  9236. C
  9237. C        A IS UNALTERED (UNLESS OVERWRITTEN BY U OR V).
  9238. C
  9239. C        W CONTAINS THE N (NON-NEGATIVE) SINGULAR VALUES OF A (THE
  9240. C          DIAGONAL ELEMENTS OF S).  THEY ARE UNORDERED.  IF AN
  9241. C          ERROR EXIT IS MADE, THE SINGULAR VALUES SHOULD BE CORRECT
  9242. C          FOR INDICES IERR+1,IERR+2,...,N.
  9243. C
  9244. C        U CONTAINS THE MATRIX U (ORTHOGONAL COLUMN VECTORS) OF THE
  9245. C          DECOMPOSITION IF MATU HAS BEEN SET TO .TRUE.  OTHERWISE
  9246. C          U IS USED AS A TEMPORARY ARRAY.  U MAY COINCIDE WITH A.
  9247. C          IF AN ERROR EXIT IS MADE, THE COLUMNS OF U CORRESPONDING
  9248. C          TO INDICES OF CORRECT SINGULAR VALUES SHOULD BE CORRECT.
  9249. C
  9250. C        V CONTAINS THE MATRIX V (ORTHOGONAL) OF THE DECOMPOSITION IF
  9251. C          MATV HAS BEEN SET TO .TRUE.  OTHERWISE V IS NOT REFERENCED.
  9252. C          V MAY ALSO COINCIDE WITH A IF U IS NOT NEEDED.  IF AN ERROR
  9253. C          EXIT IS MADE, THE COLUMNS OF V CORRESPONDING TO INDICES OF
  9254. C          CORRECT SINGULAR VALUES SHOULD BE CORRECT.
  9255. C
  9256. C        IERR IS SET TO
  9257. C          ZERO       FOR NORMAL RETURN,
  9258. C          K          IF THE K-TH SINGULAR VALUE HAS NOT BEEN
  9259. C                     DETERMINED AFTER 30 ITERATIONS.
  9260. C
  9261. C        RV1 IS A TEMPORARY STORAGE ARRAY.
  9262. C
  9263. C     CALLS PYTHAG FOR  DSQRT(A*A + B*B) .
  9264. C
  9265. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  9266. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  9267. C
  9268. C     THIS VERSION DATED AUGUST 1983.
  9269. C
  9270. C     ------------------------------------------------------------------
  9271. C
  9272.       IERR = 0
  9273. C
  9274.       DO 100 I = 1, M
  9275. C
  9276.          DO 100 J = 1, N
  9277.             U(I,J) = A(I,J)
  9278.   100 CONTINUE
  9279. C     .......... HOUSEHOLDER REDUCTION TO BIDIAGONAL FORM ..........
  9280.       G = 0.0D0
  9281.       SCALE = 0.0D0
  9282.       X = 0.0D0
  9283. C
  9284.       DO 300 I = 1, N
  9285.          L = I + 1
  9286.          RV1(I) = SCALE * G
  9287.          G = 0.0D0
  9288.          S = 0.0D0
  9289.          SCALE = 0.0D0
  9290.          IF (I .GT. M) GO TO 210
  9291. C
  9292.          DO 120 K = I, M
  9293.   120    SCALE = SCALE + DABS(U(K,I))
  9294. C
  9295.          IF (SCALE .EQ. 0.0D0) GO TO 210
  9296. C
  9297.          DO 130 K = I, M
  9298.             U(K,I) = U(K,I) / SCALE
  9299.             S = S + U(K,I)**2
  9300.   130    CONTINUE
  9301. C
  9302.          F = U(I,I)
  9303.          G = -DSIGN(DSQRT(S),F)
  9304.          H = F * G - S
  9305.          U(I,I) = F - G
  9306.          IF (I .EQ. N) GO TO 190
  9307. C
  9308.          DO 150 J = L, N
  9309.             S = 0.0D0
  9310. C
  9311.             DO 140 K = I, M
  9312.   140       S = S + U(K,I) * U(K,J)
  9313. C
  9314.             F = S / H
  9315. C
  9316.             DO 150 K = I, M
  9317.                U(K,J) = U(K,J) + F * U(K,I)
  9318.   150    CONTINUE
  9319. C
  9320.   190    DO 200 K = I, M
  9321.   200    U(K,I) = SCALE * U(K,I)
  9322. C
  9323.   210    W(I) = SCALE * G
  9324.          G = 0.0D0
  9325.          S = 0.0D0
  9326.          SCALE = 0.0D0
  9327.          IF (I .GT. M .OR. I .EQ. N) GO TO 290
  9328. C
  9329.          DO 220 K = L, N
  9330.   220    SCALE = SCALE + DABS(U(I,K))
  9331. C
  9332.          IF (SCALE .EQ. 0.0D0) GO TO 290
  9333. C
  9334.          DO 230 K = L, N
  9335.             U(I,K) = U(I,K) / SCALE
  9336.             S = S + U(I,K)**2
  9337.   230    CONTINUE
  9338. C
  9339.          F = U(I,L)
  9340.          G = -DSIGN(DSQRT(S),F)
  9341.          H = F * G - S
  9342.          U(I,L) = F - G
  9343. C
  9344.          DO 240 K = L, N
  9345.   240    RV1(K) = U(I,K) / H
  9346. C
  9347.          IF (I .EQ. M) GO TO 270
  9348. C
  9349.          DO 260 J = L, M
  9350.             S = 0.0D0
  9351. C
  9352.             DO 250 K = L, N
  9353.   250       S = S + U(J,K) * U(I,K)
  9354. C
  9355.             DO 260 K = L, N
  9356.                U(J,K) = U(J,K) + S * RV1(K)
  9357.   260    CONTINUE
  9358. C
  9359.   270    DO 280 K = L, N
  9360.   280    U(I,K) = SCALE * U(I,K)
  9361. C
  9362.   290    X = DMAX1(X,DABS(W(I))+DABS(RV1(I)))
  9363.   300 CONTINUE
  9364. C     .......... ACCUMULATION OF RIGHT-HAND TRANSFORMATIONS ..........
  9365.       IF (.NOT. MATV) GO TO 410
  9366. C     .......... FOR I=N STEP -1 UNTIL 1 DO -- ..........
  9367.       DO 400 II = 1, N
  9368.          I = N + 1 - II
  9369.          IF (I .EQ. N) GO TO 390
  9370.          IF (G .EQ. 0.0D0) GO TO 360
  9371. C
  9372.          DO 320 J = L, N
  9373. C     .......... DOUBLE DIVISION AVOIDS POSSIBLE UNDERFLOW ..........
  9374.   320    V(J,I) = (U(I,J) / U(I,L)) / G
  9375. C
  9376.          DO 350 J = L, N
  9377.             S = 0.0D0
  9378. C
  9379.             DO 340 K = L, N
  9380.   340       S = S + U(I,K) * V(K,J)
  9381. C
  9382.             DO 350 K = L, N
  9383.                V(K,J) = V(K,J) + S * V(K,I)
  9384.   350    CONTINUE
  9385. C
  9386.   360    DO 380 J = L, N
  9387.             V(I,J) = 0.0D0
  9388.             V(J,I) = 0.0D0
  9389.   380    CONTINUE
  9390. C
  9391.   390    V(I,I) = 1.0D0
  9392.          G = RV1(I)
  9393.          L = I
  9394.   400 CONTINUE
  9395. C     .......... ACCUMULATION OF LEFT-HAND TRANSFORMATIONS ..........
  9396.   410 IF (.NOT. MATU) GO TO 510
  9397. C     ..........FOR I=MIN(M,N) STEP -1 UNTIL 1 DO -- ..........
  9398.       MN = N
  9399.       IF (M .LT. N) MN = M
  9400. C
  9401.       DO 500 II = 1, MN
  9402.          I = MN + 1 - II
  9403.          L = I + 1
  9404.          G = W(I)
  9405.          IF (I .EQ. N) GO TO 430
  9406. C
  9407.          DO 420 J = L, N
  9408.   420    U(I,J) = 0.0D0
  9409. C
  9410.   430    IF (G .EQ. 0.0D0) GO TO 475
  9411.          IF (I .EQ. MN) GO TO 460
  9412. C
  9413.          DO 450 J = L, N
  9414.             S = 0.0D0
  9415. C
  9416.             DO 440 K = L, M
  9417.   440       S = S + U(K,I) * U(K,J)
  9418. C     .......... DOUBLE DIVISION AVOIDS POSSIBLE UNDERFLOW ..........
  9419.             F = (S / U(I,I)) / G
  9420. C
  9421.             DO 450 K = I, M
  9422.                U(K,J) = U(K,J) + F * U(K,I)
  9423.   450    CONTINUE
  9424. C
  9425.   460    DO 470 J = I, M
  9426.   470    U(J,I) = U(J,I) / G
  9427. C
  9428.          GO TO 490
  9429. C
  9430.   475    DO 480 J = I, M
  9431.   480    U(J,I) = 0.0D0
  9432. C
  9433.   490    U(I,I) = U(I,I) + 1.0D0
  9434.   500 CONTINUE
  9435. C     .......... DIAGONALIZATION OF THE BIDIAGONAL FORM ..........
  9436.   510 TST1 = X
  9437. C     .......... FOR K=N STEP -1 UNTIL 1 DO -- ..........
  9438.       DO 700 KK = 1, N
  9439.          K1 = N - KK
  9440.          K = K1 + 1
  9441.          ITS = 0
  9442. C     .......... TEST FOR SPLITTING.
  9443. C                FOR L=K STEP -1 UNTIL 1 DO -- ..........
  9444.   520    DO 530 LL = 1, K
  9445.             L1 = K - LL
  9446.             L = L1 + 1
  9447.             TST2 = TST1 + DABS(RV1(L))
  9448.             IF (TST2 .EQ. TST1) GO TO 565
  9449. C     .......... RV1(1) IS ALWAYS ZERO, SO THERE IS NO EXIT
  9450. C                THROUGH THE BOTTOM OF THE LOOP ..........
  9451.             TST2 = TST1 + DABS(W(L1))
  9452.             IF (TST2 .EQ. TST1) GO TO 540
  9453.   530    CONTINUE
  9454. C     .......... CANCELLATION OF RV1(L) IF L GREATER THAN 1 ..........
  9455.   540    C = 0.0D0
  9456.          S = 1.0D0
  9457. C
  9458.          DO 560 I = L, K
  9459.             F = S * RV1(I)
  9460.             RV1(I) = C * RV1(I)
  9461.             TST2 = TST1 + DABS(F)
  9462.             IF (TST2 .EQ. TST1) GO TO 565
  9463.             G = W(I)
  9464.             H = PYTHAG(F,G)
  9465.             W(I) = H
  9466.             C = G / H
  9467.             S = -F / H
  9468.             IF (.NOT. MATU) GO TO 560
  9469. C
  9470.             DO 550 J = 1, M
  9471.                Y = U(J,L1)
  9472.                Z = U(J,I)
  9473.                U(J,L1) = Y * C + Z * S
  9474.                U(J,I) = -Y * S + Z * C
  9475.   550       CONTINUE
  9476. C
  9477.   560    CONTINUE
  9478. C     .......... TEST FOR CONVERGENCE ..........
  9479.   565    Z = W(K)
  9480.          IF (L .EQ. K) GO TO 650
  9481. C     .......... SHIFT FROM BOTTOM 2 BY 2 MINOR ..........
  9482.          IF (ITS .EQ. 30) GO TO 1000
  9483.          ITS = ITS + 1
  9484.          X = W(L)
  9485.          Y = W(K1)
  9486.          G = RV1(K1)
  9487.          H = RV1(K)
  9488.          F = 0.5D0 * (((G + Z) / H) * ((G - Z) / Y) + Y / H - H / Y)
  9489.          G = PYTHAG(F,1.0D0)
  9490.          F = X - (Z / X) * Z + (H / X) * (Y / (F + DSIGN(G,F)) - H)
  9491. C     .......... NEXT QR TRANSFORMATION ..........
  9492.          C = 1.0D0
  9493.          S = 1.0D0
  9494. C
  9495.          DO 600 I1 = L, K1
  9496.             I = I1 + 1
  9497.             G = RV1(I)
  9498.             Y = W(I)
  9499.             H = S * G
  9500.             G = C * G
  9501.             Z = PYTHAG(F,H)
  9502.             RV1(I1) = Z
  9503.             C = F / Z
  9504.             S = H / Z
  9505.             F = X * C + G * S
  9506.             G = -X * S + G * C
  9507.             H = Y * S
  9508.             Y = Y * C
  9509.             IF (.NOT. MATV) GO TO 575
  9510. C
  9511.             DO 570 J = 1, N
  9512.                X = V(J,I1)
  9513.                Z = V(J,I)
  9514.                V(J,I1) = X * C + Z * S
  9515.                V(J,I) = -X * S + Z * C
  9516.   570       CONTINUE
  9517. C
  9518.   575       Z = PYTHAG(F,H)
  9519.             W(I1) = Z
  9520. C     .......... ROTATION CAN BE ARBITRARY IF Z IS ZERO ..........
  9521.             IF (Z .EQ. 0.0D0) GO TO 580
  9522.             C = F / Z
  9523.             S = H / Z
  9524.   580       F = C * G + S * Y
  9525.             X = -S * G + C * Y
  9526.             IF (.NOT. MATU) GO TO 600
  9527. C
  9528.             DO 590 J = 1, M
  9529.                Y = U(J,I1)
  9530.                Z = U(J,I)
  9531.                U(J,I1) = Y * C + Z * S
  9532.                U(J,I) = -Y * S + Z * C
  9533.   590       CONTINUE
  9534. C
  9535.   600    CONTINUE
  9536. C
  9537.          RV1(L) = 0.0D0
  9538.          RV1(K) = F
  9539.          W(K) = X
  9540.          GO TO 520
  9541. C     .......... CONVERGENCE ..........
  9542.   650    IF (Z .GE. 0.0D0) GO TO 700
  9543. C     .......... W(K) IS MADE NON-NEGATIVE ..........
  9544.          W(K) = -Z
  9545.          IF (.NOT. MATV) GO TO 700
  9546. C
  9547.          DO 690 J = 1, N
  9548.   690    V(J,K) = -V(J,K)
  9549. C
  9550.   700 CONTINUE
  9551. C
  9552.       GO TO 1001
  9553. C     .......... SET ERROR -- NO CONVERGENCE TO A
  9554. C                SINGULAR VALUE AFTER 30 ITERATIONS ..........
  9555.  1000 IERR = K
  9556.  1001 RETURN
  9557.       END
  9558.       SUBROUTINE TINVIT(NM,N,D,E,E2,M,W,IND,Z,
  9559.      X                  IERR,RV1,RV2,RV3,RV4,RV6)
  9560. C
  9561.       INTEGER I,J,M,N,P,Q,R,S,II,IP,JJ,NM,ITS,TAG,IERR,GROUP
  9562.       DOUBLE PRECISION D(N),E(N),E2(N),W(M),Z(NM,M),
  9563.      X       RV1(N),RV2(N),RV3(N),RV4(N),RV6(N)
  9564.       DOUBLE PRECISION U,V,UK,XU,X0,X1,EPS2,EPS3,EPS4,NORM,ORDER,EPSLON,
  9565.      X       PYTHAG
  9566.       INTEGER IND(M)
  9567. C
  9568. C     THIS SUBROUTINE IS A TRANSLATION OF THE INVERSE ITERATION TECH-
  9569. C     NIQUE IN THE ALGOL PROCEDURE TRISTURM BY PETERS AND WILKINSON.
  9570. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 418-439(1971).
  9571. C
  9572. C     THIS SUBROUTINE FINDS THOSE EIGENVECTORS OF A TRIDIAGONAL
  9573. C     SYMMETRIC MATRIX CORRESPONDING TO SPECIFIED EIGENVALUES,
  9574. C     USING INVERSE ITERATION.
  9575. C
  9576. C     ON INPUT
  9577. C
  9578. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  9579. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  9580. C          DIMENSION STATEMENT.
  9581. C
  9582. C        N IS THE ORDER OF THE MATRIX.
  9583. C
  9584. C        D CONTAINS THE DIAGONAL ELEMENTS OF THE INPUT MATRIX.
  9585. C
  9586. C        E CONTAINS THE SUBDIAGONAL ELEMENTS OF THE INPUT MATRIX
  9587. C          IN ITS LAST N-1 POSITIONS.  E(1) IS ARBITRARY.
  9588. C
  9589. C        E2 CONTAINS THE SQUARES OF THE CORRESPONDING ELEMENTS OF E,
  9590. C          WITH ZEROS CORRESPONDING TO NEGLIGIBLE ELEMENTS OF E.
  9591. C          E(I) IS CONSIDERED NEGLIGIBLE IF IT IS NOT LARGER THAN
  9592. C          THE PRODUCT OF THE RELATIVE MACHINE PRECISION AND THE SUM
  9593. C          OF THE MAGNITUDES OF D(I) AND D(I-1).  E2(1) MUST CONTAIN
  9594. C          0.0D0 IF THE EIGENVALUES ARE IN ASCENDING ORDER, OR 2.0D0
  9595. C          IF THE EIGENVALUES ARE IN DESCENDING ORDER.  IF  BISECT,
  9596. C          TRIDIB, OR  IMTQLV  HAS BEEN USED TO FIND THE EIGENVALUES,
  9597. C          THEIR OUTPUT E2 ARRAY IS EXACTLY WHAT IS EXPECTED HERE.
  9598. C
  9599. C        M IS THE NUMBER OF SPECIFIED EIGENVALUES.
  9600. C
  9601. C        W CONTAINS THE M EIGENVALUES IN ASCENDING OR DESCENDING ORDER.
  9602. C
  9603. C        IND CONTAINS IN ITS FIRST M POSITIONS THE SUBMATRIX INDICES
  9604. C          ASSOCIATED WITH THE CORRESPONDING EIGENVALUES IN W --
  9605. C          1 FOR EIGENVALUES BELONGING TO THE FIRST SUBMATRIX FROM
  9606. C          THE TOP, 2 FOR THOSE BELONGING TO THE SECOND SUBMATRIX, ETC.
  9607. C
  9608. C     ON OUTPUT
  9609. C
  9610. C        ALL INPUT ARRAYS ARE UNALTERED.
  9611. C
  9612. C        Z CONTAINS THE ASSOCIATED SET OF ORTHONORMAL EIGENVECTORS.
  9613. C          ANY VECTOR WHICH FAILS TO CONVERGE IS SET TO ZERO.
  9614. C
  9615. C        IERR IS SET TO
  9616. C          ZERO       FOR NORMAL RETURN,
  9617. C          -R         IF THE EIGENVECTOR CORRESPONDING TO THE R-TH
  9618. C                     EIGENVALUE FAILS TO CONVERGE IN 5 ITERATIONS.
  9619. C
  9620. C        RV1, RV2, RV3, RV4, AND RV6 ARE TEMPORARY STORAGE ARRAYS.
  9621. C
  9622. C     CALLS PYTHAG FOR  DSQRT(A*A + B*B) .
  9623. C
  9624. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  9625. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  9626. C
  9627. C     THIS VERSION DATED AUGUST 1983.
  9628. C
  9629. C     ------------------------------------------------------------------
  9630. C
  9631.       IERR = 0
  9632.       IF (M .EQ. 0) GO TO 1001
  9633.       TAG = 0
  9634.       ORDER = 1.0D0 - E2(1)
  9635.       Q = 0
  9636. C     .......... ESTABLISH AND PROCESS NEXT SUBMATRIX ..........
  9637.   100 P = Q + 1
  9638. C
  9639.       DO 120 Q = P, N
  9640.          IF (Q .EQ. N) GO TO 140
  9641.          IF (E2(Q+1) .EQ. 0.0D0) GO TO 140
  9642.   120 CONTINUE
  9643. C     .......... FIND VECTORS BY INVERSE ITERATION ..........
  9644.   140 TAG = TAG + 1
  9645.       S = 0
  9646. C
  9647.       DO 920 R = 1, M
  9648.          IF (IND(R) .NE. TAG) GO TO 920
  9649.          ITS = 1
  9650.          X1 = W(R)
  9651.          IF (S .NE. 0) GO TO 510
  9652. C     .......... CHECK FOR ISOLATED ROOT ..........
  9653.          XU = 1.0D0
  9654.          IF (P .NE. Q) GO TO 490
  9655.          RV6(P) = 1.0D0
  9656.          GO TO 870
  9657.   490    NORM = DABS(D(P))
  9658.          IP = P + 1
  9659. C
  9660.          DO 500 I = IP, Q
  9661.   500    NORM = DMAX1(NORM, DABS(D(I))+DABS(E(I)))
  9662. C     .......... EPS2 IS THE CRITERION FOR GROUPING,
  9663. C                EPS3 REPLACES ZERO PIVOTS AND EQUAL
  9664. C                ROOTS ARE MODIFIED BY EPS3,
  9665. C                EPS4 IS TAKEN VERY SMALL TO AVOID OVERFLOW ..........
  9666.          EPS2 = 1.0D-3 * NORM
  9667.          EPS3 = EPSLON(NORM)
  9668.          UK = Q - P + 1
  9669.          EPS4 = UK * EPS3
  9670.          UK = EPS4 / DSQRT(UK)
  9671.          S = P
  9672.   505    GROUP = 0
  9673.          GO TO 520
  9674. C     .......... LOOK FOR CLOSE OR COINCIDENT ROOTS ..........
  9675.   510    IF (DABS(X1-X0) .GE. EPS2) GO TO 505
  9676.          GROUP = GROUP + 1
  9677.          IF (ORDER * (X1 - X0) .LE. 0.0D0) X1 = X0 + ORDER * EPS3
  9678. C     .......... ELIMINATION WITH INTERCHANGES AND
  9679. C                INITIALIZATION OF VECTOR ..........
  9680.   520    V = 0.0D0
  9681. C
  9682.          DO 580 I = P, Q
  9683.             RV6(I) = UK
  9684.             IF (I .EQ. P) GO TO 560
  9685.             IF (DABS(E(I)) .LT. DABS(U)) GO TO 540
  9686. C     .......... WARNING -- A DIVIDE CHECK MAY OCCUR HERE IF
  9687. C                E2 ARRAY HAS NOT BEEN SPECIFIED CORRECTLY ..........
  9688.             XU = U / E(I)
  9689.             RV4(I) = XU
  9690.             RV1(I-1) = E(I)
  9691.             RV2(I-1) = D(I) - X1
  9692.             RV3(I-1) = 0.0D0
  9693.             IF (I .NE. Q) RV3(I-1) = E(I+1)
  9694.             U = V - XU * RV2(I-1)
  9695.             V = -XU * RV3(I-1)
  9696.             GO TO 580
  9697.   540       XU = E(I) / U
  9698.             RV4(I) = XU
  9699.             RV1(I-1) = U
  9700.             RV2(I-1) = V
  9701.             RV3(I-1) = 0.0D0
  9702.   560       U = D(I) - X1 - XU * V
  9703.             IF (I .NE. Q) V = E(I+1)
  9704.   580    CONTINUE
  9705. C
  9706.          IF (U .EQ. 0.0D0) U = EPS3
  9707.          RV1(Q) = U
  9708.          RV2(Q) = 0.0D0
  9709.          RV3(Q) = 0.0D0
  9710. C     .......... BACK SUBSTITUTION
  9711. C                FOR I=Q STEP -1 UNTIL P DO -- ..........
  9712.   600    DO 620 II = P, Q
  9713.             I = P + Q - II
  9714.             RV6(I) = (RV6(I) - U * RV2(I) - V * RV3(I)) / RV1(I)
  9715.             V = U
  9716.             U = RV6(I)
  9717.   620    CONTINUE
  9718. C     .......... ORTHOGONALIZE WITH RESPECT TO PREVIOUS
  9719. C                MEMBERS OF GROUP ..........
  9720.          IF (GROUP .EQ. 0) GO TO 700
  9721.          J = R
  9722. C
  9723.          DO 680 JJ = 1, GROUP
  9724.   630       J = J - 1
  9725.             IF (IND(J) .NE. TAG) GO TO 630
  9726.             XU = 0.0D0
  9727. C
  9728.             DO 640 I = P, Q
  9729.   640       XU = XU + RV6(I) * Z(I,J)
  9730. C
  9731.             DO 660 I = P, Q
  9732.   660       RV6(I) = RV6(I) - XU * Z(I,J)
  9733. C
  9734.   680    CONTINUE
  9735. C
  9736.   700    NORM = 0.0D0
  9737. C
  9738.          DO 720 I = P, Q
  9739.   720    NORM = NORM + DABS(RV6(I))
  9740. C
  9741.          IF (NORM .GE. 1.0D0) GO TO 840
  9742. C     .......... FORWARD SUBSTITUTION ..........
  9743.          IF (ITS .EQ. 5) GO TO 830
  9744.          IF (NORM .NE. 0.0D0) GO TO 740
  9745.          RV6(S) = EPS4
  9746.          S = S + 1
  9747.          IF (S .GT. Q) S = P
  9748.          GO TO 780
  9749.   740    XU = EPS4 / NORM
  9750. C
  9751.          DO 760 I = P, Q
  9752.   760    RV6(I) = RV6(I) * XU
  9753. C     .......... ELIMINATION OPERATIONS ON NEXT VECTOR
  9754. C                ITERATE ..........
  9755.   780    DO 820 I = IP, Q
  9756.             U = RV6(I)
  9757. C     .......... IF RV1(I-1) .EQ. E(I), A ROW INTERCHANGE
  9758. C                WAS PERFORMED EARLIER IN THE
  9759. C                TRIANGULARIZATION PROCESS ..........
  9760.             IF (RV1(I-1) .NE. E(I)) GO TO 800
  9761.             U = RV6(I-1)
  9762.             RV6(I-1) = RV6(I)
  9763.   800       RV6(I) = U - RV4(I) * RV6(I-1)
  9764.   820    CONTINUE
  9765. C
  9766.          ITS = ITS + 1
  9767.          GO TO 600
  9768. C     .......... SET ERROR -- NON-CONVERGED EIGENVECTOR ..........
  9769.   830    IERR = -R
  9770.          XU = 0.0D0
  9771.          GO TO 870
  9772. C     .......... NORMALIZE SO THAT SUM OF SQUARES IS
  9773. C                1 AND EXPAND TO FULL ORDER ..........
  9774.   840    U = 0.0D0
  9775. C
  9776.          DO 860 I = P, Q
  9777.   860    U = PYTHAG(U,RV6(I))
  9778. C
  9779.          XU = 1.0D0 / U
  9780. C
  9781.   870    DO 880 I = 1, N
  9782.   880    Z(I,R) = 0.0D0
  9783. C
  9784.          DO 900 I = P, Q
  9785.   900    Z(I,R) = RV6(I) * XU
  9786. C
  9787.          X0 = X1
  9788.   920 CONTINUE
  9789. C
  9790.       IF (Q .LT. N) GO TO 100
  9791.  1001 RETURN
  9792.       END
  9793.       SUBROUTINE TQL1(N,D,E,IERR)
  9794. C
  9795.       INTEGER I,J,L,M,N,II,L1,L2,MML,IERR
  9796.       DOUBLE PRECISION D(N),E(N)
  9797.       DOUBLE PRECISION C,C2,C3,DL1,EL1,F,G,H,P,R,S,S2,TST1,TST2,PYTHAG
  9798. C
  9799. C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE TQL1,
  9800. C     NUM. MATH. 11, 293-306(1968) BY BOWDLER, MARTIN, REINSCH, AND
  9801. C     WILKINSON.
  9802. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 227-240(1971).
  9803. C
  9804. C     THIS SUBROUTINE FINDS THE EIGENVALUES OF A SYMMETRIC
  9805. C     TRIDIAGONAL MATRIX BY THE QL METHOD.
  9806. C
  9807. C     ON INPUT
  9808. C
  9809. C        N IS THE ORDER OF THE MATRIX.
  9810. C
  9811. C        D CONTAINS THE DIAGONAL ELEMENTS OF THE INPUT MATRIX.
  9812. C
  9813. C        E CONTAINS THE SUBDIAGONAL ELEMENTS OF THE INPUT MATRIX
  9814. C          IN ITS LAST N-1 POSITIONS.  E(1) IS ARBITRARY.
  9815. C
  9816. C      ON OUTPUT
  9817. C
  9818. C        D CONTAINS THE EIGENVALUES IN ASCENDING ORDER.  IF AN
  9819. C          ERROR EXIT IS MADE, THE EIGENVALUES ARE CORRECT AND
  9820. C          ORDERED FOR INDICES 1,2,...IERR-1, BUT MAY NOT BE
  9821. C          THE SMALLEST EIGENVALUES.
  9822. C
  9823. C        E HAS BEEN DESTROYED.
  9824. C
  9825. C        IERR IS SET TO
  9826. C          ZERO       FOR NORMAL RETURN,
  9827. C          J          IF THE J-TH EIGENVALUE HAS NOT BEEN
  9828. C                     DETERMINED AFTER 30 ITERATIONS.
  9829. C
  9830. C     CALLS PYTHAG FOR  DSQRT(A*A + B*B) .
  9831. C
  9832. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  9833. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  9834. C
  9835. C     THIS VERSION DATED AUGUST 1983.
  9836. C
  9837. C     ------------------------------------------------------------------
  9838. C
  9839.       IERR = 0
  9840.       IF (N .EQ. 1) GO TO 1001
  9841. C
  9842.       DO 100 I = 2, N
  9843.   100 E(I-1) = E(I)
  9844. C
  9845.       F = 0.0D0
  9846.       TST1 = 0.0D0
  9847.       E(N) = 0.0D0
  9848. C
  9849.       DO 290 L = 1, N
  9850.          J = 0
  9851.          H = DABS(D(L)) + DABS(E(L))
  9852.          IF (TST1 .LT. H) TST1 = H
  9853. C     .......... LOOK FOR SMALL SUB-DIAGONAL ELEMENT ..........
  9854.          DO 110 M = L, N
  9855.             TST2 = TST1 + DABS(E(M))
  9856.             IF (TST2 .EQ. TST1) GO TO 120
  9857. C     .......... E(N) IS ALWAYS ZERO, SO THERE IS NO EXIT
  9858. C                THROUGH THE BOTTOM OF THE LOOP ..........
  9859.   110    CONTINUE
  9860. C
  9861.   120    IF (M .EQ. L) GO TO 210
  9862.   130    IF (J .EQ. 30) GO TO 1000
  9863.          J = J + 1
  9864. C     .......... FORM SHIFT ..........
  9865.          L1 = L + 1
  9866.          L2 = L1 + 1
  9867.          G = D(L)
  9868.          P = (D(L1) - G) / (2.0D0 * E(L))
  9869.          R = PYTHAG(P,1.0D0)
  9870.          D(L) = E(L) / (P + DSIGN(R,P))
  9871.          D(L1) = E(L) * (P + DSIGN(R,P))
  9872.          DL1 = D(L1)
  9873.          H = G - D(L)
  9874.          IF (L2 .GT. N) GO TO 145
  9875. C
  9876.          DO 140 I = L2, N
  9877.   140    D(I) = D(I) - H
  9878. C
  9879.   145    F = F + H
  9880. C     .......... QL TRANSFORMATION ..........
  9881.          P = D(M)
  9882.          C = 1.0D0
  9883.          C2 = C
  9884.          EL1 = E(L1)
  9885.          S = 0.0D0
  9886.          MML = M - L
  9887. C     .......... FOR I=M-1 STEP -1 UNTIL L DO -- ..........
  9888.          DO 200 II = 1, MML
  9889.             C3 = C2
  9890.             C2 = C
  9891.             S2 = S
  9892.             I = M - II
  9893.             G = C * E(I)
  9894.             H = C * P
  9895.             R = PYTHAG(P,E(I))
  9896.             E(I+1) = S * R
  9897.             S = E(I) / R
  9898.             C = P / R
  9899.             P = C * D(I) - S * G
  9900.             D(I+1) = H + S * (C * G + S * D(I))
  9901.   200    CONTINUE
  9902. C
  9903.          P = -S * S2 * C3 * EL1 * E(L) / DL1
  9904.          E(L) = S * P
  9905.          D(L) = C * P
  9906.          TST2 = TST1 + DABS(E(L))
  9907.          IF (TST2 .GT. TST1) GO TO 130
  9908.   210    P = D(L) + F
  9909. C     .......... ORDER EIGENVALUES ..........
  9910.          IF (L .EQ. 1) GO TO 250
  9911. C     .......... FOR I=L STEP -1 UNTIL 2 DO -- ..........
  9912.          DO 230 II = 2, L
  9913.             I = L + 2 - II
  9914.             IF (P .GE. D(I-1)) GO TO 270
  9915.             D(I) = D(I-1)
  9916.   230    CONTINUE
  9917. C
  9918.   250    I = 1
  9919.   270    D(I) = P
  9920.   290 CONTINUE
  9921. C
  9922.       GO TO 1001
  9923. C     .......... SET ERROR -- NO CONVERGENCE TO AN
  9924. C                EIGENVALUE AFTER 30 ITERATIONS ..........
  9925.  1000 IERR = L
  9926.  1001 RETURN
  9927.       END
  9928.       SUBROUTINE TQL2(NM,N,D,E,Z,IERR)
  9929. C
  9930.       INTEGER I,J,K,L,M,N,II,L1,L2,NM,MML,IERR
  9931.       DOUBLE PRECISION D(N),E(N),Z(NM,N)
  9932.       DOUBLE PRECISION C,C2,C3,DL1,EL1,F,G,H,P,R,S,S2,TST1,TST2,PYTHAG
  9933. C
  9934. C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE TQL2,
  9935. C     NUM. MATH. 11, 293-306(1968) BY BOWDLER, MARTIN, REINSCH, AND
  9936. C     WILKINSON.
  9937. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 227-240(1971).
  9938. C
  9939. C     THIS SUBROUTINE FINDS THE EIGENVALUES AND EIGENVECTORS
  9940. C     OF A SYMMETRIC TRIDIAGONAL MATRIX BY THE QL METHOD.
  9941. C     THE EIGENVECTORS OF A FULL SYMMETRIC MATRIX CAN ALSO
  9942. C     BE FOUND IF  TRED2  HAS BEEN USED TO REDUCE THIS
  9943. C     FULL MATRIX TO TRIDIAGONAL FORM.
  9944. C
  9945. C     ON INPUT
  9946. C
  9947. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  9948. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  9949. C          DIMENSION STATEMENT.
  9950. C
  9951. C        N IS THE ORDER OF THE MATRIX.
  9952. C
  9953. C        D CONTAINS THE DIAGONAL ELEMENTS OF THE INPUT MATRIX.
  9954. C
  9955. C        E CONTAINS THE SUBDIAGONAL ELEMENTS OF THE INPUT MATRIX
  9956. C          IN ITS LAST N-1 POSITIONS.  E(1) IS ARBITRARY.
  9957. C
  9958. C        Z CONTAINS THE TRANSFORMATION MATRIX PRODUCED IN THE
  9959. C          REDUCTION BY  TRED2, IF PERFORMED.  IF THE EIGENVECTORS
  9960. C          OF THE TRIDIAGONAL MATRIX ARE DESIRED, Z MUST CONTAIN
  9961. C          THE IDENTITY MATRIX.
  9962. C
  9963. C      ON OUTPUT
  9964. C
  9965. C        D CONTAINS THE EIGENVALUES IN ASCENDING ORDER.  IF AN
  9966. C          ERROR EXIT IS MADE, THE EIGENVALUES ARE CORRECT BUT
  9967. C          UNORDERED FOR INDICES 1,2,...,IERR-1.
  9968. C
  9969. C        E HAS BEEN DESTROYED.
  9970. C
  9971. C        Z CONTAINS ORTHONORMAL EIGENVECTORS OF THE SYMMETRIC
  9972. C          TRIDIAGONAL (OR FULL) MATRIX.  IF AN ERROR EXIT IS MADE,
  9973. C          Z CONTAINS THE EIGENVECTORS ASSOCIATED WITH THE STORED
  9974. C          EIGENVALUES.
  9975. C
  9976. C        IERR IS SET TO
  9977. C          ZERO       FOR NORMAL RETURN,
  9978. C          J          IF THE J-TH EIGENVALUE HAS NOT BEEN
  9979. C                     DETERMINED AFTER 30 ITERATIONS.
  9980. C
  9981. C     CALLS PYTHAG FOR  DSQRT(A*A + B*B) .
  9982. C
  9983. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  9984. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  9985. C
  9986. C     THIS VERSION DATED AUGUST 1983.
  9987. C
  9988. C     ------------------------------------------------------------------
  9989. C
  9990.       IERR = 0
  9991.       IF (N .EQ. 1) GO TO 1001
  9992. C
  9993.       DO 100 I = 2, N
  9994.   100 E(I-1) = E(I)
  9995. C
  9996.       F = 0.0D0
  9997.       TST1 = 0.0D0
  9998.       E(N) = 0.0D0
  9999. C
  10000.       DO 240 L = 1, N
  10001.          J = 0
  10002.          H = DABS(D(L)) + DABS(E(L))
  10003.          IF (TST1 .LT. H) TST1 = H
  10004. C     .......... LOOK FOR SMALL SUB-DIAGONAL ELEMENT ..........
  10005.          DO 110 M = L, N
  10006.             TST2 = TST1 + DABS(E(M))
  10007.             IF (TST2 .EQ. TST1) GO TO 120
  10008. C     .......... E(N) IS ALWAYS ZERO, SO THERE IS NO EXIT
  10009. C                THROUGH THE BOTTOM OF THE LOOP ..........
  10010.   110    CONTINUE
  10011. C
  10012.   120    IF (M .EQ. L) GO TO 220
  10013.   130    IF (J .EQ. 30) GO TO 1000
  10014.          J = J + 1
  10015. C     .......... FORM SHIFT ..........
  10016.          L1 = L + 1
  10017.          L2 = L1 + 1
  10018.          G = D(L)
  10019.          P = (D(L1) - G) / (2.0D0 * E(L))
  10020.          R = PYTHAG(P,1.0D0)
  10021.          D(L) = E(L) / (P + DSIGN(R,P))
  10022.          D(L1) = E(L) * (P + DSIGN(R,P))
  10023.          DL1 = D(L1)
  10024.          H = G - D(L)
  10025.          IF (L2 .GT. N) GO TO 145
  10026. C
  10027.          DO 140 I = L2, N
  10028.   140    D(I) = D(I) - H
  10029. C
  10030.   145    F = F + H
  10031. C     .......... QL TRANSFORMATION ..........
  10032.          P = D(M)
  10033.          C = 1.0D0
  10034.          C2 = C
  10035.          EL1 = E(L1)
  10036.          S = 0.0D0
  10037.          MML = M - L
  10038. C     .......... FOR I=M-1 STEP -1 UNTIL L DO -- ..........
  10039.          DO 200 II = 1, MML
  10040.             C3 = C2
  10041.             C2 = C
  10042.             S2 = S
  10043.             I = M - II
  10044.             G = C * E(I)
  10045.             H = C * P
  10046.             R = PYTHAG(P,E(I))
  10047.             E(I+1) = S * R
  10048.             S = E(I) / R
  10049.             C = P / R
  10050.             P = C * D(I) - S * G
  10051.             D(I+1) = H + S * (C * G + S * D(I))
  10052. C     .......... FORM VECTOR ..........
  10053.             DO 180 K = 1, N
  10054.                H = Z(K,I+1)
  10055.                Z(K,I+1) = S * Z(K,I) + C * H
  10056.                Z(K,I) = C * Z(K,I) - S * H
  10057.   180       CONTINUE
  10058. C
  10059.   200    CONTINUE
  10060. C
  10061.          P = -S * S2 * C3 * EL1 * E(L) / DL1
  10062.          E(L) = S * P
  10063.          D(L) = C * P
  10064.          TST2 = TST1 + DABS(E(L))
  10065.          IF (TST2 .GT. TST1) GO TO 130
  10066.   220    D(L) = D(L) + F
  10067.   240 CONTINUE
  10068. C     .......... ORDER EIGENVALUES AND EIGENVECTORS ..........
  10069.       DO 300 II = 2, N
  10070.          I = II - 1
  10071.          K = I
  10072.          P = D(I)
  10073. C
  10074.          DO 260 J = II, N
  10075.             IF (D(J) .GE. P) GO TO 260
  10076.             K = J
  10077.             P = D(J)
  10078.   260    CONTINUE
  10079. C
  10080.          IF (K .EQ. I) GO TO 300
  10081.          D(K) = D(I)
  10082.          D(I) = P
  10083. C
  10084.          DO 280 J = 1, N
  10085.             P = Z(J,I)
  10086.             Z(J,I) = Z(J,K)
  10087.             Z(J,K) = P
  10088.   280    CONTINUE
  10089. C
  10090.   300 CONTINUE
  10091. C
  10092.       GO TO 1001
  10093. C     .......... SET ERROR -- NO CONVERGENCE TO AN
  10094. C                EIGENVALUE AFTER 30 ITERATIONS ..........
  10095.  1000 IERR = L
  10096.  1001 RETURN
  10097.       END
  10098.       SUBROUTINE TQLRAT(N,D,E2,IERR)
  10099. C
  10100.       INTEGER I,J,L,M,N,II,L1,MML,IERR
  10101.       DOUBLE PRECISION D(N),E2(N)
  10102.       DOUBLE PRECISION B,C,F,G,H,P,R,S,T,EPSLON,PYTHAG
  10103. C
  10104. C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE TQLRAT,
  10105. C     ALGORITHM 464, COMM. ACM 16, 689(1973) BY REINSCH.
  10106. C
  10107. C     THIS SUBROUTINE FINDS THE EIGENVALUES OF A SYMMETRIC
  10108. C     TRIDIAGONAL MATRIX BY THE RATIONAL QL METHOD.
  10109. C
  10110. C     ON INPUT
  10111. C
  10112. C        N IS THE ORDER OF THE MATRIX.
  10113. C
  10114. C        D CONTAINS THE DIAGONAL ELEMENTS OF THE INPUT MATRIX.
  10115. C
  10116. C        E2 CONTAINS THE SQUARES OF THE SUBDIAGONAL ELEMENTS OF THE
  10117. C          INPUT MATRIX IN ITS LAST N-1 POSITIONS.  E2(1) IS ARBITRARY.
  10118. C
  10119. C      ON OUTPUT
  10120. C
  10121. C        D CONTAINS THE EIGENVALUES IN ASCENDING ORDER.  IF AN
  10122. C          ERROR EXIT IS MADE, THE EIGENVALUES ARE CORRECT AND
  10123. C          ORDERED FOR INDICES 1,2,...IERR-1, BUT MAY NOT BE
  10124. C          THE SMALLEST EIGENVALUES.
  10125. C
  10126. C        E2 HAS BEEN DESTROYED.
  10127. C
  10128. C        IERR IS SET TO
  10129. C          ZERO       FOR NORMAL RETURN,
  10130. C          J          IF THE J-TH EIGENVALUE HAS NOT BEEN
  10131. C                     DETERMINED AFTER 30 ITERATIONS.
  10132. C
  10133. C     CALLS PYTHAG FOR  DSQRT(A*A + B*B) .
  10134. C
  10135. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  10136. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  10137. C
  10138. C     THIS VERSION DATED AUGUST 1983.
  10139. C
  10140. C     ------------------------------------------------------------------
  10141. C
  10142.       IERR = 0
  10143.       IF (N .EQ. 1) GO TO 1001
  10144. C
  10145.       DO 100 I = 2, N
  10146.   100 E2(I-1) = E2(I)
  10147. C
  10148.       F = 0.0D0
  10149.       T = 0.0D0
  10150.       E2(N) = 0.0D0
  10151. C
  10152.       DO 290 L = 1, N
  10153.          J = 0
  10154.          H = DABS(D(L)) + DSQRT(E2(L))
  10155.          IF (T .GT. H) GO TO 105
  10156.          T = H
  10157.          B = EPSLON(T)
  10158.          C = B * B
  10159. C     .......... LOOK FOR SMALL SQUARED SUB-DIAGONAL ELEMENT ..........
  10160.   105    DO 110 M = L, N
  10161.             IF (E2(M) .LE. C) GO TO 120
  10162. C     .......... E2(N) IS ALWAYS ZERO, SO THERE IS NO EXIT
  10163. C                THROUGH THE BOTTOM OF THE LOOP ..........
  10164.   110    CONTINUE
  10165. C
  10166.   120    IF (M .EQ. L) GO TO 210
  10167.   130    IF (J .EQ. 30) GO TO 1000
  10168.          J = J + 1
  10169. C     .......... FORM SHIFT ..........
  10170.          L1 = L + 1
  10171.          S = DSQRT(E2(L))
  10172.          G = D(L)
  10173.          P = (D(L1) - G) / (2.0D0 * S)
  10174.          R = PYTHAG(P,1.0D0)
  10175.          D(L) = S / (P + DSIGN(R,P))
  10176.          H = G - D(L)
  10177. C
  10178.          DO 140 I = L1, N
  10179.   140    D(I) = D(I) - H
  10180. C
  10181.          F = F + H
  10182. C     .......... RATIONAL QL TRANSFORMATION ..........
  10183.          G = D(M)
  10184.          IF (G .EQ. 0.0D0) G = B
  10185.          H = G
  10186.          S = 0.0D0
  10187.          MML = M - L
  10188. C     .......... FOR I=M-1 STEP -1 UNTIL L DO -- ..........
  10189.          DO 200 II = 1, MML
  10190.             I = M - II
  10191.             P = G * H
  10192.             R = P + E2(I)
  10193.             E2(I+1) = S * R
  10194.             S = E2(I) / R
  10195.             D(I+1) = H + S * (H + D(I))
  10196.             G = D(I) - E2(I) / G
  10197.             IF (G .EQ. 0.0D0) G = B
  10198.             H = G * P / R
  10199.   200    CONTINUE
  10200. C
  10201.          E2(L) = S * G
  10202.          D(L) = H
  10203. C     .......... GUARD AGAINST UNDERFLOW IN CONVERGENCE TEST ..........
  10204.          IF (H .EQ. 0.0D0) GO TO 210
  10205.          IF (DABS(E2(L)) .LE. DABS(C/H)) GO TO 210
  10206.          E2(L) = H * E2(L)
  10207.          IF (E2(L) .NE. 0.0D0) GO TO 130
  10208.   210    P = D(L) + F
  10209. C     .......... ORDER EIGENVALUES ..........
  10210.          IF (L .EQ. 1) GO TO 250
  10211. C     .......... FOR I=L STEP -1 UNTIL 2 DO -- ..........
  10212.          DO 230 II = 2, L
  10213.             I = L + 2 - II
  10214.             IF (P .GE. D(I-1)) GO TO 270
  10215.             D(I) = D(I-1)
  10216.   230    CONTINUE
  10217. C
  10218.   250    I = 1
  10219.   270    D(I) = P
  10220.   290 CONTINUE
  10221. C
  10222.       GO TO 1001
  10223. C     .......... SET ERROR -- NO CONVERGENCE TO AN
  10224. C                EIGENVALUE AFTER 30 ITERATIONS ..........
  10225.  1000 IERR = L
  10226.  1001 RETURN
  10227.       END
  10228.       SUBROUTINE TRBAK1(NM,N,A,E,M,Z)
  10229. C
  10230.       INTEGER I,J,K,L,M,N,NM
  10231.       DOUBLE PRECISION A(NM,N),E(N),Z(NM,M)
  10232.       DOUBLE PRECISION S
  10233. C
  10234. C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE TRBAK1,
  10235. C     NUM. MATH. 11, 181-195(1968) BY MARTIN, REINSCH, AND WILKINSON.
  10236. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 212-226(1971).
  10237. C
  10238. C     THIS SUBROUTINE FORMS THE EIGENVECTORS OF A REAL SYMMETRIC
  10239. C     MATRIX BY BACK TRANSFORMING THOSE OF THE CORRESPONDING
  10240. C     SYMMETRIC TRIDIAGONAL MATRIX DETERMINED BY  TRED1.
  10241. C
  10242. C     ON INPUT
  10243. C
  10244. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  10245. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  10246. C          DIMENSION STATEMENT.
  10247. C
  10248. C        N IS THE ORDER OF THE MATRIX.
  10249. C
  10250. C        A CONTAINS INFORMATION ABOUT THE ORTHOGONAL TRANS-
  10251. C          FORMATIONS USED IN THE REDUCTION BY  TRED1
  10252. C          IN ITS STRICT LOWER TRIANGLE.
  10253. C
  10254. C        E CONTAINS THE SUBDIAGONAL ELEMENTS OF THE TRIDIAGONAL
  10255. C          MATRIX IN ITS LAST N-1 POSITIONS.  E(1) IS ARBITRARY.
  10256. C
  10257. C        M IS THE NUMBER OF EIGENVECTORS TO BE BACK TRANSFORMED.
  10258. C
  10259. C        Z CONTAINS THE EIGENVECTORS TO BE BACK TRANSFORMED
  10260. C          IN ITS FIRST M COLUMNS.
  10261. C
  10262. C     ON OUTPUT
  10263. C
  10264. C        Z CONTAINS THE TRANSFORMED EIGENVECTORS
  10265. C          IN ITS FIRST M COLUMNS.
  10266. C
  10267. C     NOTE THAT TRBAK1 PRESERVES VECTOR EUCLIDEAN NORMS.
  10268. C
  10269. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  10270. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  10271. C
  10272. C     THIS VERSION DATED AUGUST 1983.
  10273. C
  10274. C     ------------------------------------------------------------------
  10275. C
  10276.       IF (M .EQ. 0) GO TO 200
  10277.       IF (N .EQ. 1) GO TO 200
  10278. C
  10279.       DO 140 I = 2, N
  10280.          L = I - 1
  10281.          IF (E(I) .EQ. 0.0D0) GO TO 140
  10282. C
  10283.          DO 130 J = 1, M
  10284.             S = 0.0D0
  10285. C
  10286.             DO 110 K = 1, L
  10287.   110       S = S + A(I,K) * Z(K,J)
  10288. C     .......... DIVISOR BELOW IS NEGATIVE OF H FORMED IN TRED1.
  10289. C                DOUBLE DIVISION AVOIDS POSSIBLE UNDERFLOW ..........
  10290.             S = (S / A(I,L)) / E(I)
  10291. C
  10292.             DO 120 K = 1, L
  10293.   120       Z(K,J) = Z(K,J) + S * A(I,K)
  10294. C
  10295.   130    CONTINUE
  10296. C
  10297.   140 CONTINUE
  10298. C
  10299.   200 RETURN
  10300.       END
  10301.       SUBROUTINE TRBAK3(NM,N,NV,A,M,Z)
  10302. C
  10303.       INTEGER I,J,K,L,M,N,IK,IZ,NM,NV
  10304.       DOUBLE PRECISION A(NV),Z(NM,M)
  10305.       DOUBLE PRECISION H,S
  10306. C
  10307. C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE TRBAK3,
  10308. C     NUM. MATH. 11, 181-195(1968) BY MARTIN, REINSCH, AND WILKINSON.
  10309. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 212-226(1971).
  10310. C
  10311. C     THIS SUBROUTINE FORMS THE EIGENVECTORS OF A REAL SYMMETRIC
  10312. C     MATRIX BY BACK TRANSFORMING THOSE OF THE CORRESPONDING
  10313. C     SYMMETRIC TRIDIAGONAL MATRIX DETERMINED BY  TRED3.
  10314. C
  10315. C     ON INPUT
  10316. C
  10317. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  10318. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  10319. C          DIMENSION STATEMENT.
  10320. C
  10321. C        N IS THE ORDER OF THE MATRIX.
  10322. C
  10323. C        NV MUST BE SET TO THE DIMENSION OF THE ARRAY PARAMETER A
  10324. C          AS DECLARED IN THE CALLING PROGRAM DIMENSION STATEMENT.
  10325. C
  10326. C        A CONTAINS INFORMATION ABOUT THE ORTHOGONAL TRANSFORMATIONS
  10327. C          USED IN THE REDUCTION BY  TRED3  IN ITS FIRST
  10328. C          N*(N+1)/2 POSITIONS.
  10329. C
  10330. C        M IS THE NUMBER OF EIGENVECTORS TO BE BACK TRANSFORMED.
  10331. C
  10332. C        Z CONTAINS THE EIGENVECTORS TO BE BACK TRANSFORMED
  10333. C          IN ITS FIRST M COLUMNS.
  10334. C
  10335. C     ON OUTPUT
  10336. C
  10337. C        Z CONTAINS THE TRANSFORMED EIGENVECTORS
  10338. C          IN ITS FIRST M COLUMNS.
  10339. C
  10340. C     NOTE THAT TRBAK3 PRESERVES VECTOR EUCLIDEAN NORMS.
  10341. C
  10342. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  10343. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  10344. C
  10345. C     THIS VERSION DATED AUGUST 1983.
  10346. C
  10347. C     ------------------------------------------------------------------
  10348. C
  10349.       IF (M .EQ. 0) GO TO 200
  10350.       IF (N .EQ. 1) GO TO 200
  10351. C
  10352.       DO 140 I = 2, N
  10353.          L = I - 1
  10354.          IZ = (I * L) / 2
  10355.          IK = IZ + I
  10356.          H = A(IK)
  10357.          IF (H .EQ. 0.0D0) GO TO 140
  10358. C
  10359.          DO 130 J = 1, M
  10360.             S = 0.0D0
  10361.             IK = IZ
  10362. C
  10363.             DO 110 K = 1, L
  10364.                IK = IK + 1
  10365.                S = S + A(IK) * Z(K,J)
  10366.   110       CONTINUE
  10367. C     .......... DOUBLE DIVISION AVOIDS POSSIBLE UNDERFLOW ..........
  10368.             S = (S / H) / H
  10369.             IK = IZ
  10370. C
  10371.             DO 120 K = 1, L
  10372.                IK = IK + 1
  10373.                Z(K,J) = Z(K,J) - S * A(IK)
  10374.   120       CONTINUE
  10375. C
  10376.   130    CONTINUE
  10377. C
  10378.   140 CONTINUE
  10379. C
  10380.   200 RETURN
  10381.       END
  10382.       SUBROUTINE TRED1(NM,N,A,D,E,E2)
  10383. C
  10384.       INTEGER I,J,K,L,N,II,NM,JP1
  10385.       DOUBLE PRECISION A(NM,N),D(N),E(N),E2(N)
  10386.       DOUBLE PRECISION F,G,H,SCALE
  10387. C
  10388. C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE TRED1,
  10389. C     NUM. MATH. 11, 181-195(1968) BY MARTIN, REINSCH, AND WILKINSON.
  10390. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 212-226(1971).
  10391. C
  10392. C     THIS SUBROUTINE REDUCES A REAL SYMMETRIC MATRIX
  10393. C     TO A SYMMETRIC TRIDIAGONAL MATRIX USING
  10394. C     ORTHOGONAL SIMILARITY TRANSFORMATIONS.
  10395. C
  10396. C     ON INPUT
  10397. C
  10398. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  10399. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  10400. C          DIMENSION STATEMENT.
  10401. C
  10402. C        N IS THE ORDER OF THE MATRIX.
  10403. C
  10404. C        A CONTAINS THE REAL SYMMETRIC INPUT MATRIX.  ONLY THE
  10405. C          LOWER TRIANGLE OF THE MATRIX NEED BE SUPPLIED.
  10406. C
  10407. C     ON OUTPUT
  10408. C
  10409. C        A CONTAINS INFORMATION ABOUT THE ORTHOGONAL TRANS-
  10410. C          FORMATIONS USED IN THE REDUCTION IN ITS STRICT LOWER
  10411. C          TRIANGLE.  THE FULL UPPER TRIANGLE OF A IS UNALTERED.
  10412. C
  10413. C        D CONTAINS THE DIAGONAL ELEMENTS OF THE TRIDIAGONAL MATRIX.
  10414. C
  10415. C        E CONTAINS THE SUBDIAGONAL ELEMENTS OF THE TRIDIAGONAL
  10416. C          MATRIX IN ITS LAST N-1 POSITIONS.  E(1) IS SET TO ZERO.
  10417. C
  10418. C        E2 CONTAINS THE SQUARES OF THE CORRESPONDING ELEMENTS OF E.
  10419. C          E2 MAY COINCIDE WITH E IF THE SQUARES ARE NOT NEEDED.
  10420. C
  10421. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  10422. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  10423. C
  10424. C     THIS VERSION DATED AUGUST 1983.
  10425. C
  10426. C     ------------------------------------------------------------------
  10427. C
  10428.       DO 100 I = 1, N
  10429.          D(I) = A(N,I)
  10430.          A(N,I) = A(I,I)
  10431.   100 CONTINUE
  10432. C     .......... FOR I=N STEP -1 UNTIL 1 DO -- ..........
  10433.       DO 300 II = 1, N
  10434.          I = N + 1 - II
  10435.          L = I - 1
  10436.          H = 0.0D0
  10437.          SCALE = 0.0D0
  10438.          IF (L .LT. 1) GO TO 130
  10439. C     .......... SCALE ROW (ALGOL TOL THEN NOT NEEDED) ..........
  10440.          DO 120 K = 1, L
  10441.   120    SCALE = SCALE + DABS(D(K))
  10442. C
  10443.          IF (SCALE .NE. 0.0D0) GO TO 140
  10444. C
  10445.          DO 125 J = 1, L
  10446.             D(J) = A(L,J)
  10447.             A(L,J) = A(I,J)
  10448.             A(I,J) = 0.0D0
  10449.   125    CONTINUE
  10450. C
  10451.   130    E(I) = 0.0D0
  10452.          E2(I) = 0.0D0
  10453.          GO TO 300
  10454. C
  10455.   140    DO 150 K = 1, L
  10456.             D(K) = D(K) / SCALE
  10457.             H = H + D(K) * D(K)
  10458.   150    CONTINUE
  10459. C
  10460.          E2(I) = SCALE * SCALE * H
  10461.          F = D(L)
  10462.          G = -DSIGN(DSQRT(H),F)
  10463.          E(I) = SCALE * G
  10464.          H = H - F * G
  10465.          D(L) = F - G
  10466.          IF (L .EQ. 1) GO TO 285
  10467. C     .......... FORM A*U ..........
  10468.          DO 170 J = 1, L
  10469.   170    E(J) = 0.0D0
  10470. C
  10471.          DO 240 J = 1, L
  10472.             F = D(J)
  10473.             G = E(J) + A(J,J) * F
  10474.             JP1 = J + 1
  10475.             IF (L .LT. JP1) GO TO 220
  10476. C
  10477.             DO 200 K = JP1, L
  10478.                G = G + A(K,J) * D(K)
  10479.                E(K) = E(K) + A(K,J) * F
  10480.   200       CONTINUE
  10481. C
  10482.   220       E(J) = G
  10483.   240    CONTINUE
  10484. C     .......... FORM P ..........
  10485.          F = 0.0D0
  10486. C
  10487.          DO 245 J = 1, L
  10488.             E(J) = E(J) / H
  10489.             F = F + E(J) * D(J)
  10490.   245    CONTINUE
  10491. C
  10492.          H = F / (H + H)
  10493. C     .......... FORM Q ..........
  10494.          DO 250 J = 1, L
  10495.   250    E(J) = E(J) - H * D(J)
  10496. C     .......... FORM REDUCED A ..........
  10497.          DO 280 J = 1, L
  10498.             F = D(J)
  10499.             G = E(J)
  10500. C
  10501.             DO 260 K = J, L
  10502.   260       A(K,J) = A(K,J) - F * E(K) - G * D(K)
  10503. C
  10504.   280    CONTINUE
  10505. C
  10506.   285    DO 290 J = 1, L
  10507.             F = D(J)
  10508.             D(J) = A(L,J)
  10509.             A(L,J) = A(I,J)
  10510.             A(I,J) = F * SCALE
  10511.   290    CONTINUE
  10512. C
  10513.   300 CONTINUE
  10514. C
  10515.       RETURN
  10516.       END
  10517.       SUBROUTINE TRED2(NM,N,A,D,E,Z)
  10518. C
  10519.       INTEGER I,J,K,L,N,II,NM,JP1
  10520.       DOUBLE PRECISION A(NM,N),D(N),E(N),Z(NM,N)
  10521.       DOUBLE PRECISION F,G,H,HH,SCALE
  10522. C
  10523. C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE TRED2,
  10524. C     NUM. MATH. 11, 181-195(1968) BY MARTIN, REINSCH, AND WILKINSON.
  10525. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 212-226(1971).
  10526. C
  10527. C     THIS SUBROUTINE REDUCES A REAL SYMMETRIC MATRIX TO A
  10528. C     SYMMETRIC TRIDIAGONAL MATRIX USING AND ACCUMULATING
  10529. C     ORTHOGONAL SIMILARITY TRANSFORMATIONS.
  10530. C
  10531. C     ON INPUT
  10532. C
  10533. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  10534. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  10535. C          DIMENSION STATEMENT.
  10536. C
  10537. C        N IS THE ORDER OF THE MATRIX.
  10538. C
  10539. C        A CONTAINS THE REAL SYMMETRIC INPUT MATRIX.  ONLY THE
  10540. C          LOWER TRIANGLE OF THE MATRIX NEED BE SUPPLIED.
  10541. C
  10542. C     ON OUTPUT
  10543. C
  10544. C        D CONTAINS THE DIAGONAL ELEMENTS OF THE TRIDIAGONAL MATRIX.
  10545. C
  10546. C        E CONTAINS THE SUBDIAGONAL ELEMENTS OF THE TRIDIAGONAL
  10547. C          MATRIX IN ITS LAST N-1 POSITIONS.  E(1) IS SET TO ZERO.
  10548. C
  10549. C        Z CONTAINS THE ORTHOGONAL TRANSFORMATION MATRIX
  10550. C          PRODUCED IN THE REDUCTION.
  10551. C
  10552. C        A AND Z MAY COINCIDE.  IF DISTINCT, A IS UNALTERED.
  10553. C
  10554. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  10555. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  10556. C
  10557. C     THIS VERSION DATED AUGUST 1983.
  10558. C
  10559. C     ------------------------------------------------------------------
  10560. C
  10561.       DO 100 I = 1, N
  10562. C
  10563.          DO 80 J = I, N
  10564.    80    Z(J,I) = A(J,I)
  10565. C
  10566.          D(I) = A(N,I)
  10567.   100 CONTINUE
  10568. C
  10569.       IF (N .EQ. 1) GO TO 510
  10570. C     .......... FOR I=N STEP -1 UNTIL 2 DO -- ..........
  10571.       DO 300 II = 2, N
  10572.          I = N + 2 - II
  10573.          L = I - 1
  10574.          H = 0.0D0
  10575.          SCALE = 0.0D0
  10576.          IF (L .LT. 2) GO TO 130
  10577. C     .......... SCALE ROW (ALGOL TOL THEN NOT NEEDED) ..........
  10578.          DO 120 K = 1, L
  10579.   120    SCALE = SCALE + DABS(D(K))
  10580. C
  10581.          IF (SCALE .NE. 0.0D0) GO TO 140
  10582.   130    E(I) = D(L)
  10583. C
  10584.          DO 135 J = 1, L
  10585.             D(J) = Z(L,J)
  10586.             Z(I,J) = 0.0D0
  10587.             Z(J,I) = 0.0D0
  10588.   135    CONTINUE
  10589. C
  10590.          GO TO 290
  10591. C
  10592.   140    DO 150 K = 1, L
  10593.             D(K) = D(K) / SCALE
  10594.             H = H + D(K) * D(K)
  10595.   150    CONTINUE
  10596. C
  10597.          F = D(L)
  10598.          G = -DSIGN(DSQRT(H),F)
  10599.          E(I) = SCALE * G
  10600.          H = H - F * G
  10601.          D(L) = F - G
  10602. C     .......... FORM A*U ..........
  10603.          DO 170 J = 1, L
  10604.   170    E(J) = 0.0D0
  10605. C
  10606.          DO 240 J = 1, L
  10607.             F = D(J)
  10608.             Z(J,I) = F
  10609.             G = E(J) + Z(J,J) * F
  10610.             JP1 = J + 1
  10611.             IF (L .LT. JP1) GO TO 220
  10612. C
  10613.             DO 200 K = JP1, L
  10614.                G = G + Z(K,J) * D(K)
  10615.                E(K) = E(K) + Z(K,J) * F
  10616.   200       CONTINUE
  10617. C
  10618.   220       E(J) = G
  10619.   240    CONTINUE
  10620. C     .......... FORM P ..........
  10621.          F = 0.0D0
  10622. C
  10623.          DO 245 J = 1, L
  10624.             E(J) = E(J) / H
  10625.             F = F + E(J) * D(J)
  10626.   245    CONTINUE
  10627. C
  10628.          HH = F / (H + H)
  10629. C     .......... FORM Q ..........
  10630.          DO 250 J = 1, L
  10631.   250    E(J) = E(J) - HH * D(J)
  10632. C     .......... FORM REDUCED A ..........
  10633.          DO 280 J = 1, L
  10634.             F = D(J)
  10635.             G = E(J)
  10636. C
  10637.             DO 260 K = J, L
  10638.   260       Z(K,J) = Z(K,J) - F * E(K) - G * D(K)
  10639. C
  10640.             D(J) = Z(L,J)
  10641.             Z(I,J) = 0.0D0
  10642.   280    CONTINUE
  10643. C
  10644.   290    D(I) = H
  10645.   300 CONTINUE
  10646. C     .......... ACCUMULATION OF TRANSFORMATION MATRICES ..........
  10647.       DO 500 I = 2, N
  10648.          L = I - 1
  10649.          Z(N,L) = Z(L,L)
  10650.          Z(L,L) = 1.0D0
  10651.          H = D(I)
  10652.          IF (H .EQ. 0.0D0) GO TO 380
  10653. C
  10654.          DO 330 K = 1, L
  10655.   330    D(K) = Z(K,I) / H
  10656. C
  10657.          DO 360 J = 1, L
  10658.             G = 0.0D0
  10659. C
  10660.             DO 340 K = 1, L
  10661.   340       G = G + Z(K,I) * Z(K,J)
  10662. C
  10663.             DO 360 K = 1, L
  10664.                Z(K,J) = Z(K,J) - G * D(K)
  10665.   360    CONTINUE
  10666. C
  10667.   380    DO 400 K = 1, L
  10668.   400    Z(K,I) = 0.0D0
  10669. C
  10670.   500 CONTINUE
  10671. C
  10672.   510 DO 520 I = 1, N
  10673.          D(I) = Z(N,I)
  10674.          Z(N,I) = 0.0D0
  10675.   520 CONTINUE
  10676. C
  10677.       Z(N,N) = 1.0D0
  10678.       E(1) = 0.0D0
  10679.       RETURN
  10680.       END
  10681.       SUBROUTINE TRED3(N,NV,A,D,E,E2)
  10682. C
  10683.       INTEGER I,J,K,L,N,II,IZ,JK,NV,JM1
  10684.       DOUBLE PRECISION A(NV),D(N),E(N),E2(N)
  10685.       DOUBLE PRECISION F,G,H,HH,SCALE
  10686. C
  10687. C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE TRED3,
  10688. C     NUM. MATH. 11, 181-195(1968) BY MARTIN, REINSCH, AND WILKINSON.
  10689. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 212-226(1971).
  10690. C
  10691. C     THIS SUBROUTINE REDUCES A REAL SYMMETRIC MATRIX, STORED AS
  10692. C     A ONE-DIMENSIONAL ARRAY, TO A SYMMETRIC TRIDIAGONAL MATRIX
  10693. C     USING ORTHOGONAL SIMILARITY TRANSFORMATIONS.
  10694. C
  10695. C     ON INPUT
  10696. C
  10697. C        N IS THE ORDER OF THE MATRIX.
  10698. C
  10699. C        NV MUST BE SET TO THE DIMENSION OF THE ARRAY PARAMETER A
  10700. C          AS DECLARED IN THE CALLING PROGRAM DIMENSION STATEMENT.
  10701. C
  10702. C        A CONTAINS THE LOWER TRIANGLE OF THE REAL SYMMETRIC
  10703. C          INPUT MATRIX, STORED ROW-WISE AS A ONE-DIMENSIONAL
  10704. C          ARRAY, IN ITS FIRST N*(N+1)/2 POSITIONS.
  10705. C
  10706. C     ON OUTPUT
  10707. C
  10708. C        A CONTAINS INFORMATION ABOUT THE ORTHOGONAL
  10709. C          TRANSFORMATIONS USED IN THE REDUCTION.
  10710. C
  10711. C        D CONTAINS THE DIAGONAL ELEMENTS OF THE TRIDIAGONAL MATRIX.
  10712. C
  10713. C        E CONTAINS THE SUBDIAGONAL ELEMENTS OF THE TRIDIAGONAL
  10714. C          MATRIX IN ITS LAST N-1 POSITIONS.  E(1) IS SET TO ZERO.
  10715. C
  10716. C        E2 CONTAINS THE SQUARES OF THE CORRESPONDING ELEMENTS OF E.
  10717. C          E2 MAY COINCIDE WITH E IF THE SQUARES ARE NOT NEEDED.
  10718. C
  10719. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  10720. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  10721. C
  10722. C     THIS VERSION DATED AUGUST 1983.
  10723. C
  10724. C     ------------------------------------------------------------------
  10725. C
  10726. C     .......... FOR I=N STEP -1 UNTIL 1 DO -- ..........
  10727.       DO 300 II = 1, N
  10728.          I = N + 1 - II
  10729.          L = I - 1
  10730.          IZ = (I * L) / 2
  10731.          H = 0.0D0
  10732.          SCALE = 0.0D0
  10733.          IF (L .LT. 1) GO TO 130
  10734. C     .......... SCALE ROW (ALGOL TOL THEN NOT NEEDED) ..........
  10735.          DO 120 K = 1, L
  10736.             IZ = IZ + 1
  10737.             D(K) = A(IZ)
  10738.             SCALE = SCALE + DABS(D(K))
  10739.   120    CONTINUE
  10740. C
  10741.          IF (SCALE .NE. 0.0D0) GO TO 140
  10742.   130    E(I) = 0.0D0
  10743.          E2(I) = 0.0D0
  10744.          GO TO 290
  10745. C
  10746.   140    DO 150 K = 1, L
  10747.             D(K) = D(K) / SCALE
  10748.             H = H + D(K) * D(K)
  10749.   150    CONTINUE
  10750. C
  10751.          E2(I) = SCALE * SCALE * H
  10752.          F = D(L)
  10753.          G = -DSIGN(DSQRT(H),F)
  10754.          E(I) = SCALE * G
  10755.          H = H - F * G
  10756.          D(L) = F - G
  10757.          A(IZ) = SCALE * D(L)
  10758.          IF (L .EQ. 1) GO TO 290
  10759.          JK = 1
  10760. C
  10761.          DO 240 J = 1, L
  10762.             F = D(J)
  10763.             G = 0.0D0
  10764.             JM1 = J - 1
  10765.             IF (JM1 .LT. 1) GO TO 220
  10766. C
  10767.             DO 200 K = 1, JM1
  10768.                G = G + A(JK) * D(K)
  10769.                E(K) = E(K) + A(JK) * F
  10770.                JK = JK + 1
  10771.   200       CONTINUE
  10772. C     
  10773.   220       E(J) = G + A(JK) * F
  10774.             JK = JK + 1
  10775.   240    CONTINUE
  10776. C     .......... FORM P ..........
  10777.          F = 0.0D0
  10778. C
  10779.          DO 245 J = 1, L
  10780.             E(J) = E(J) / H
  10781.             F = F + E(J) * D(J)
  10782.   245    CONTINUE
  10783. C
  10784.          HH = F / (H + H)
  10785. C     .......... FORM Q ..........
  10786.          DO 250 J = 1, L
  10787.   250    E(J) = E(J) - HH * D(J)
  10788. C
  10789.          JK = 1
  10790. C     .......... FORM REDUCED A ..........
  10791.          DO 280 J = 1, L
  10792.             F = D(J)
  10793.             G = E(J)
  10794. C
  10795.             DO 260 K = 1, J
  10796.                A(JK) = A(JK) - F * E(K) - G * D(K)
  10797.                JK = JK + 1
  10798.   260       CONTINUE
  10799. C
  10800.   280    CONTINUE
  10801. C
  10802.   290    D(I) = A(IZ+1)
  10803.          A(IZ+1) = SCALE * DSQRT(H)
  10804.   300 CONTINUE
  10805. C
  10806.       RETURN
  10807.       END
  10808.       SUBROUTINE TRIDIB(N,EPS1,D,E,E2,LB,UB,M11,M,W,IND,IERR,RV4,RV5)
  10809. C
  10810.       INTEGER I,J,K,L,M,N,P,Q,R,S,II,M1,M2,M11,M22,TAG,IERR,ISTURM
  10811.       DOUBLE PRECISION D(N),E(N),E2(N),W(M),RV4(N),RV5(N)
  10812.       DOUBLE PRECISION U,V,LB,T1,T2,UB,XU,X0,X1,EPS1,TST1,TST2,EPSLON
  10813.       INTEGER IND(M)
  10814. C
  10815. C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE BISECT,
  10816. C     NUM. MATH. 9, 386-393(1967) BY BARTH, MARTIN, AND WILKINSON.
  10817. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 249-256(1971).
  10818. C
  10819. C     THIS SUBROUTINE FINDS THOSE EIGENVALUES OF A TRIDIAGONAL
  10820. C     SYMMETRIC MATRIX BETWEEN SPECIFIED BOUNDARY INDICES,
  10821. C     USING BISECTION.
  10822. C
  10823. C     ON INPUT
  10824. C
  10825. C        N IS THE ORDER OF THE MATRIX.
  10826. C
  10827. C        EPS1 IS AN ABSOLUTE ERROR TOLERANCE FOR THE COMPUTED
  10828. C          EIGENVALUES.  IF THE INPUT EPS1 IS NON-POSITIVE,
  10829. C          IT IS RESET FOR EACH SUBMATRIX TO A DEFAULT VALUE,
  10830. C          NAMELY, MINUS THE PRODUCT OF THE RELATIVE MACHINE
  10831. C          PRECISION AND THE 1-NORM OF THE SUBMATRIX.
  10832. C
  10833. C        D CONTAINS THE DIAGONAL ELEMENTS OF THE INPUT MATRIX.
  10834. C
  10835. C        E CONTAINS THE SUBDIAGONAL ELEMENTS OF THE INPUT MATRIX
  10836. C          IN ITS LAST N-1 POSITIONS.  E(1) IS ARBITRARY.
  10837. C
  10838. C        E2 CONTAINS THE SQUARES OF THE CORRESPONDING ELEMENTS OF E.
  10839. C          E2(1) IS ARBITRARY.
  10840. C
  10841. C        M11 SPECIFIES THE LOWER BOUNDARY INDEX FOR THE DESIRED
  10842. C          EIGENVALUES.
  10843. C
  10844. C        M SPECIFIES THE NUMBER OF EIGENVALUES DESIRED.  THE UPPER
  10845. C          BOUNDARY INDEX M22 IS THEN OBTAINED AS M22=M11+M-1.
  10846. C
  10847. C     ON OUTPUT
  10848. C
  10849. C        EPS1 IS UNALTERED UNLESS IT HAS BEEN RESET TO ITS
  10850. C          (LAST) DEFAULT VALUE.
  10851. C
  10852. C        D AND E ARE UNALTERED.
  10853. C
  10854. C        ELEMENTS OF E2, CORRESPONDING TO ELEMENTS OF E REGARDED
  10855. C          AS NEGLIGIBLE, HAVE BEEN REPLACED BY ZERO CAUSING THE
  10856. C          MATRIX TO SPLIT INTO A DIRECT SUM OF SUBMATRICES.
  10857. C          E2(1) IS ALSO SET TO ZERO.
  10858. C
  10859. C        LB AND UB DEFINE AN INTERVAL CONTAINING EXACTLY THE DESIRED
  10860. C          EIGENVALUES.
  10861. C
  10862. C        W CONTAINS, IN ITS FIRST M POSITIONS, THE EIGENVALUES
  10863. C          BETWEEN INDICES M11 AND M22 IN ASCENDING ORDER.
  10864. C
  10865. C        IND CONTAINS IN ITS FIRST M POSITIONS THE SUBMATRIX INDICES
  10866. C          ASSOCIATED WITH THE CORRESPONDING EIGENVALUES IN W --
  10867. C          1 FOR EIGENVALUES BELONGING TO THE FIRST SUBMATRIX FROM
  10868. C          THE TOP, 2 FOR THOSE BELONGING TO THE SECOND SUBMATRIX, ETC..
  10869. C
  10870. C        IERR IS SET TO
  10871. C          ZERO       FOR NORMAL RETURN,
  10872. C          3*N+1      IF MULTIPLE EIGENVALUES AT INDEX M11 MAKE
  10873. C                     UNIQUE SELECTION IMPOSSIBLE,
  10874. C          3*N+2      IF MULTIPLE EIGENVALUES AT INDEX M22 MAKE
  10875. C                     UNIQUE SELECTION IMPOSSIBLE.
  10876. C
  10877. C        RV4 AND RV5 ARE TEMPORARY STORAGE ARRAYS.
  10878. C
  10879. C     NOTE THAT SUBROUTINE TQL1, IMTQL1, OR TQLRAT IS GENERALLY FASTER
  10880. C     THAN TRIDIB, IF MORE THAN N/4 EIGENVALUES ARE TO BE FOUND.
  10881. C
  10882. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  10883. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  10884. C
  10885. C     THIS VERSION DATED AUGUST 1983.
  10886. C
  10887. C     ------------------------------------------------------------------
  10888. C
  10889.       IERR = 0
  10890.       TAG = 0
  10891.       XU = D(1)
  10892.       X0 = D(1)
  10893.       U = 0.0D0
  10894. C     .......... LOOK FOR SMALL SUB-DIAGONAL ENTRIES AND DETERMINE AN
  10895. C                INTERVAL CONTAINING ALL THE EIGENVALUES ..........
  10896.       DO 40 I = 1, N
  10897.          X1 = U
  10898.          U = 0.0D0
  10899.          IF (I .NE. N) U = DABS(E(I+1))
  10900.          XU = DMIN1(D(I)-(X1+U),XU)
  10901.          X0 = DMAX1(D(I)+(X1+U),X0)
  10902.          IF (I .EQ. 1) GO TO 20
  10903.          TST1 = DABS(D(I)) + DABS(D(I-1))
  10904.          TST2 = TST1 + DABS(E(I))
  10905.          IF (TST2 .GT. TST1) GO TO 40
  10906.    20    E2(I) = 0.0D0
  10907.    40 CONTINUE
  10908. C
  10909.       X1 = N
  10910.       X1 = X1 * EPSLON(DMAX1(DABS(XU),DABS(X0)))
  10911.       XU = XU - X1
  10912.       T1 = XU
  10913.       X0 = X0 + X1
  10914.       T2 = X0
  10915. C     .......... DETERMINE AN INTERVAL CONTAINING EXACTLY
  10916. C                THE DESIRED EIGENVALUES ..........
  10917.       P = 1
  10918.       Q = N
  10919.       M1 = M11 - 1
  10920.       IF (M1 .EQ. 0) GO TO 75
  10921.       ISTURM = 1
  10922.    50 V = X1
  10923.       X1 = XU + (X0 - XU) * 0.5D0
  10924.       IF (X1 .EQ. V) GO TO 980
  10925.       GO TO 320
  10926.    60 IF (S - M1) 65, 73, 70
  10927.    65 XU = X1
  10928.       GO TO 50
  10929.    70 X0 = X1
  10930.       GO TO 50
  10931.    73 XU = X1
  10932.       T1 = X1
  10933.    75 M22 = M1 + M
  10934.       IF (M22 .EQ. N) GO TO 90
  10935.       X0 = T2
  10936.       ISTURM = 2
  10937.       GO TO 50
  10938.    80 IF (S - M22) 65, 85, 70
  10939.    85 T2 = X1
  10940.    90 Q = 0
  10941.       R = 0
  10942. C     .......... ESTABLISH AND PROCESS NEXT SUBMATRIX, REFINING
  10943. C                INTERVAL BY THE GERSCHGORIN BOUNDS ..........
  10944.   100 IF (R .EQ. M) GO TO 1001
  10945.       TAG = TAG + 1
  10946.       P = Q + 1
  10947.       XU = D(P)
  10948.       X0 = D(P)
  10949.       U = 0.0D0
  10950. C
  10951.       DO 120 Q = P, N
  10952.          X1 = U
  10953.          U = 0.0D0
  10954.          V = 0.0D0
  10955.          IF (Q .EQ. N) GO TO 110
  10956.          U = DABS(E(Q+1))
  10957.          V = E2(Q+1)
  10958.   110    XU = DMIN1(D(Q)-(X1+U),XU)
  10959.          X0 = DMAX1(D(Q)+(X1+U),X0)
  10960.          IF (V .EQ. 0.0D0) GO TO 140
  10961.   120 CONTINUE
  10962. C
  10963.   140 X1 = EPSLON(DMAX1(DABS(XU),DABS(X0)))
  10964.       IF (EPS1 .LE. 0.0D0) EPS1 = -X1
  10965.       IF (P .NE. Q) GO TO 180
  10966. C     .......... CHECK FOR ISOLATED ROOT WITHIN INTERVAL ..........
  10967.       IF (T1 .GT. D(P) .OR. D(P) .GE. T2) GO TO 940
  10968.       M1 = P
  10969.       M2 = P
  10970.       RV5(P) = D(P)
  10971.       GO TO 900
  10972.   180 X1 = X1 * (Q - P + 1)
  10973.       LB = DMAX1(T1,XU-X1)
  10974.       UB = DMIN1(T2,X0+X1)
  10975.       X1 = LB
  10976.       ISTURM = 3
  10977.       GO TO 320
  10978.   200 M1 = S + 1
  10979.       X1 = UB
  10980.       ISTURM = 4
  10981.       GO TO 320
  10982.   220 M2 = S
  10983.       IF (M1 .GT. M2) GO TO 940
  10984. C     .......... FIND ROOTS BY BISECTION ..........
  10985.       X0 = UB
  10986.       ISTURM = 5
  10987. C
  10988.       DO 240 I = M1, M2
  10989.          RV5(I) = UB
  10990.          RV4(I) = LB
  10991.   240 CONTINUE
  10992. C     .......... LOOP FOR K-TH EIGENVALUE
  10993. C                FOR K=M2 STEP -1 UNTIL M1 DO --
  10994. C                (-DO- NOT USED TO LEGALIZE -COMPUTED GO TO-) ..........
  10995.       K = M2
  10996.   250    XU = LB
  10997. C     .......... FOR I=K STEP -1 UNTIL M1 DO -- ..........
  10998.          DO 260 II = M1, K
  10999.             I = M1 + K - II
  11000.             IF (XU .GE. RV4(I)) GO TO 260
  11001.             XU = RV4(I)
  11002.             GO TO 280
  11003.   260    CONTINUE
  11004. C
  11005.   280    IF (X0 .GT. RV5(K)) X0 = RV5(K)
  11006. C     .......... NEXT BISECTION STEP ..........
  11007.   300    X1 = (XU + X0) * 0.5D0
  11008.          IF ((X0 - XU) .LE. DABS(EPS1)) GO TO 420
  11009.          TST1 = 2.0D0 * (DABS(XU) + DABS(X0))
  11010.          TST2 = TST1 + (X0 - XU)
  11011.          IF (TST2 .EQ. TST1) GO TO 420
  11012. C     .......... IN-LINE PROCEDURE FOR STURM SEQUENCE ..........
  11013.   320    S = P - 1
  11014.          U = 1.0D0
  11015. C
  11016.          DO 340 I = P, Q
  11017.             IF (U .NE. 0.0D0) GO TO 325
  11018.             V = DABS(E(I)) / EPSLON(1.0D0)
  11019.             IF (E2(I) .EQ. 0.0D0) V = 0.0D0
  11020.             GO TO 330
  11021.   325       V = E2(I) / U
  11022.   330       U = D(I) - X1 - V
  11023.             IF (U .LT. 0.0D0) S = S + 1
  11024.   340    CONTINUE
  11025. C
  11026.          GO TO (60,80,200,220,360), ISTURM
  11027. C     .......... REFINE INTERVALS ..........
  11028.   360    IF (S .GE. K) GO TO 400
  11029.          XU = X1
  11030.          IF (S .GE. M1) GO TO 380
  11031.          RV4(M1) = X1
  11032.          GO TO 300
  11033.   380    RV4(S+1) = X1
  11034.          IF (RV5(S) .GT. X1) RV5(S) = X1
  11035.          GO TO 300
  11036.   400    X0 = X1
  11037.          GO TO 300
  11038. C     .......... K-TH EIGENVALUE FOUND ..........
  11039.   420    RV5(K) = X1
  11040.       K = K - 1
  11041.       IF (K .GE. M1) GO TO 250
  11042. C     .......... ORDER EIGENVALUES TAGGED WITH THEIR
  11043. C                SUBMATRIX ASSOCIATIONS ..........
  11044.   900 S = R
  11045.       R = R + M2 - M1 + 1
  11046.       J = 1
  11047.       K = M1
  11048. C
  11049.       DO 920 L = 1, R
  11050.          IF (J .GT. S) GO TO 910
  11051.          IF (K .GT. M2) GO TO 940
  11052.          IF (RV5(K) .GE. W(L)) GO TO 915
  11053. C
  11054.          DO 905 II = J, S
  11055.             I = L + S - II
  11056.             W(I+1) = W(I)
  11057.             IND(I+1) = IND(I)
  11058.   905    CONTINUE
  11059. C
  11060.   910    W(L) = RV5(K)
  11061.          IND(L) = TAG
  11062.          K = K + 1
  11063.          GO TO 920
  11064.   915    J = J + 1
  11065.   920 CONTINUE
  11066. C
  11067.   940 IF (Q .LT. N) GO TO 100
  11068.       GO TO 1001
  11069. C     .......... SET ERROR -- INTERVAL CANNOT BE FOUND CONTAINING
  11070. C                EXACTLY THE DESIRED EIGENVALUES ..........
  11071.   980 IERR = 3 * N + ISTURM
  11072.  1001 LB = T1
  11073.       UB = T2
  11074.       RETURN
  11075.       END
  11076.       SUBROUTINE TSTURM(NM,N,EPS1,D,E,E2,LB,UB,MM,M,W,Z,
  11077.      X                  IERR,RV1,RV2,RV3,RV4,RV5,RV6)
  11078. C
  11079.       INTEGER I,J,K,M,N,P,Q,R,S,II,IP,JJ,MM,M1,M2,NM,ITS,
  11080.      X        IERR,GROUP,ISTURM
  11081.       DOUBLE PRECISION D(N),E(N),E2(N),W(MM),Z(NM,MM),
  11082.      X       RV1(N),RV2(N),RV3(N),RV4(N),RV5(N),RV6(N)
  11083.       DOUBLE PRECISION U,V,LB,T1,T2,UB,UK,XU,X0,X1,EPS1,EPS2,EPS3,EPS4,
  11084.      X       NORM,TST1,TST2,EPSLON,PYTHAG
  11085. C
  11086. C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE TRISTURM
  11087. C     BY PETERS AND WILKINSON.
  11088. C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 418-439(1971).
  11089. C
  11090. C     THIS SUBROUTINE FINDS THOSE EIGENVALUES OF A TRIDIAGONAL
  11091. C     SYMMETRIC MATRIX WHICH LIE IN A SPECIFIED INTERVAL AND THEIR
  11092. C     ASSOCIATED EIGENVECTORS, USING BISECTION AND INVERSE ITERATION.
  11093. C
  11094. C     ON INPUT
  11095. C
  11096. C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
  11097. C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
  11098. C          DIMENSION STATEMENT.
  11099. C
  11100. C        N IS THE ORDER OF THE MATRIX.
  11101. C
  11102. C        EPS1 IS AN ABSOLUTE ERROR TOLERANCE FOR THE COMPUTED
  11103. C          EIGENVALUES.  IT SHOULD BE CHOSEN COMMENSURATE WITH
  11104. C          RELATIVE PERTURBATIONS IN THE MATRIX ELEMENTS OF THE
  11105. C          ORDER OF THE RELATIVE MACHINE PRECISION.  IF THE
  11106. C          INPUT EPS1 IS NON-POSITIVE, IT IS RESET FOR EACH
  11107. C          SUBMATRIX TO A DEFAULT VALUE, NAMELY, MINUS THE
  11108. C          PRODUCT OF THE RELATIVE MACHINE PRECISION AND THE
  11109. C          1-NORM OF THE SUBMATRIX.
  11110. C
  11111. C        D CONTAINS THE DIAGONAL ELEMENTS OF THE INPUT MATRIX.
  11112. C
  11113. C        E CONTAINS THE SUBDIAGONAL ELEMENTS OF THE INPUT MATRIX
  11114. C          IN ITS LAST N-1 POSITIONS.  E(1) IS ARBITRARY.
  11115. C
  11116. C        E2 CONTAINS THE SQUARES OF THE CORRESPONDING ELEMENTS OF E.
  11117. C          E2(1) IS ARBITRARY.
  11118. C
  11119. C        LB AND UB DEFINE THE INTERVAL TO BE SEARCHED FOR EIGENVALUES.
  11120. C          IF LB IS NOT LESS THAN UB, NO EIGENVALUES WILL BE FOUND.
  11121. C
  11122. C        MM SHOULD BE SET TO AN UPPER BOUND FOR THE NUMBER OF
  11123. C          EIGENVALUES IN THE INTERVAL.  WARNING. IF MORE THAN
  11124. C          MM EIGENVALUES ARE DETERMINED TO LIE IN THE INTERVAL,
  11125. C          AN ERROR RETURN IS MADE WITH NO VALUES OR VECTORS FOUND.
  11126. C
  11127. C     ON OUTPUT
  11128. C
  11129. C        EPS1 IS UNALTERED UNLESS IT HAS BEEN RESET TO ITS
  11130. C          (LAST) DEFAULT VALUE.
  11131. C
  11132. C        D AND E ARE UNALTERED.
  11133. C
  11134. C        ELEMENTS OF E2, CORRESPONDING TO ELEMENTS OF E REGARDED
  11135. C          AS NEGLIGIBLE, HAVE BEEN REPLACED BY ZERO CAUSING THE
  11136. C          MATRIX TO SPLIT INTO A DIRECT SUM OF SUBMATRICES.
  11137. C          E2(1) IS ALSO SET TO ZERO.
  11138. C
  11139. C        M IS THE NUMBER OF EIGENVALUES DETERMINED TO LIE IN (LB,UB).
  11140. C
  11141. C        W CONTAINS THE M EIGENVALUES IN ASCENDING ORDER IF THE MATRIX
  11142. C          DOES NOT SPLIT.  IF THE MATRIX SPLITS, THE EIGENVALUES ARE
  11143. C          IN ASCENDING ORDER FOR EACH SUBMATRIX.  IF A VECTOR ERROR
  11144. C          EXIT IS MADE, W CONTAINS THOSE VALUES ALREADY FOUND.
  11145. C
  11146. C        Z CONTAINS THE ASSOCIATED SET OF ORTHONORMAL EIGENVECTORS.
  11147. C          IF AN ERROR EXIT IS MADE, Z CONTAINS THOSE VECTORS
  11148. C          ALREADY FOUND.
  11149. C
  11150. C        IERR IS SET TO
  11151. C          ZERO       FOR NORMAL RETURN,
  11152. C          3*N+1      IF M EXCEEDS MM.
  11153. C          4*N+R      IF THE EIGENVECTOR CORRESPONDING TO THE R-TH
  11154. C                     EIGENVALUE FAILS TO CONVERGE IN 5 ITERATIONS.
  11155. C
  11156. C        RV1, RV2, RV3, RV4, RV5, AND RV6 ARE TEMPORARY STORAGE ARRAYS.
  11157. C
  11158. C     THE ALGOL PROCEDURE STURMCNT CONTAINED IN TRISTURM
  11159. C     APPEARS IN TSTURM IN-LINE.
  11160. C
  11161. C     CALLS PYTHAG FOR  DSQRT(A*A + B*B) .
  11162. C
  11163. C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
  11164. C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
  11165. C
  11166. C     THIS VERSION DATED AUGUST 1983.
  11167. C
  11168. C     ------------------------------------------------------------------
  11169. C
  11170.       IERR = 0
  11171.       T1 = LB
  11172.       T2 = UB
  11173. C     .......... LOOK FOR SMALL SUB-DIAGONAL ENTRIES ..........
  11174.       DO 40 I = 1, N
  11175.          IF (I .EQ. 1) GO TO 20
  11176.          TST1 = DABS(D(I)) + DABS(D(I-1))
  11177.          TST2 = TST1 + DABS(E(I))
  11178.          IF (TST2 .GT. TST1) GO TO 40
  11179.    20    E2(I) = 0.0D0
  11180.    40 CONTINUE
  11181. C     .......... DETERMINE THE NUMBER OF EIGENVALUES
  11182. C                IN THE INTERVAL ..........
  11183.       P = 1
  11184.       Q = N
  11185.       X1 = UB
  11186.       ISTURM = 1
  11187.       GO TO 320
  11188.    60 M = S
  11189.       X1 = LB
  11190.       ISTURM = 2
  11191.       GO TO 320
  11192.    80 M = M - S
  11193.       IF (M .GT. MM) GO TO 980
  11194.       Q = 0
  11195.       R = 0
  11196. C     .......... ESTABLISH AND PROCESS NEXT SUBMATRIX, REFINING
  11197. C                INTERVAL BY THE GERSCHGORIN BOUNDS ..........
  11198.   100 IF (R .EQ. M) GO TO 1001
  11199.       P = Q + 1
  11200.       XU = D(P)
  11201.       X0 = D(P)
  11202.       U = 0.0D0
  11203. C
  11204.       DO 120 Q = P, N
  11205.          X1 = U
  11206.          U = 0.0D0
  11207.          V = 0.0D0
  11208.          IF (Q .EQ. N) GO TO 110
  11209.          U = DABS(E(Q+1))
  11210.          V = E2(Q+1)
  11211.   110    XU = DMIN1(D(Q)-(X1+U),XU)
  11212.          X0 = DMAX1(D(Q)+(X1+U),X0)
  11213.          IF (V .EQ. 0.0D0) GO TO 140
  11214.   120 CONTINUE
  11215. C
  11216.   140 X1 = EPSLON(DMAX1(DABS(XU),DABS(X0)))
  11217.       IF (EPS1 .LE. 0.0D0) EPS1 = -X1
  11218.       IF (P .NE. Q) GO TO 180
  11219. C     .......... CHECK FOR ISOLATED ROOT WITHIN INTERVAL ..........
  11220.       IF (T1 .GT. D(P) .OR. D(P) .GE. T2) GO TO 940
  11221.       R = R + 1
  11222. C
  11223.       DO 160 I = 1, N
  11224.   160 Z(I,R) = 0.0D0
  11225. C
  11226.       W(R) = D(P)
  11227.       Z(P,R) = 1.0D0
  11228.       GO TO 940
  11229.   180 U = Q-P+1
  11230.       X1 = U * X1
  11231.       LB = DMAX1(T1,XU-X1)
  11232.       UB = DMIN1(T2,X0+X1)
  11233.       X1 = LB
  11234.       ISTURM = 3
  11235.       GO TO 320
  11236.   200 M1 = S + 1
  11237.       X1 = UB
  11238.       ISTURM = 4
  11239.       GO TO 320
  11240.   220 M2 = S
  11241.       IF (M1 .GT. M2) GO TO 940
  11242. C     .......... FIND ROOTS BY BISECTION ..........
  11243.       X0 = UB
  11244.       ISTURM = 5
  11245. C
  11246.       DO 240 I = M1, M2
  11247.          RV5(I) = UB
  11248.          RV4(I) = LB
  11249.   240 CONTINUE
  11250. C     .......... LOOP FOR K-TH EIGENVALUE
  11251. C                FOR K=M2 STEP -1 UNTIL M1 DO --
  11252. C                (-DO- NOT USED TO LEGALIZE -COMPUTED GO TO-) ..........
  11253.       K = M2
  11254.   250    XU = LB
  11255. C     .......... FOR I=K STEP -1 UNTIL M1 DO -- ..........
  11256.          DO 260 II = M1, K
  11257.             I = M1 + K - II
  11258.             IF (XU .GE. RV4(I)) GO TO 260
  11259.             XU = RV4(I)
  11260.             GO TO 280
  11261.   260    CONTINUE
  11262. C
  11263.   280    IF (X0 .GT. RV5(K)) X0 = RV5(K)
  11264. C     .......... NEXT BISECTION STEP ..........
  11265.   300    X1 = (XU + X0) * 0.5D0
  11266.          IF ((X0 - XU) .LE. DABS(EPS1)) GO TO 420
  11267.          TST1 = 2.0D0 * (DABS(XU) + DABS(X0))
  11268.          TST2 = TST1 + (X0 - XU)
  11269.          IF (TST2 .EQ. TST1) GO TO 420
  11270. C     .......... IN-LINE PROCEDURE FOR STURM SEQUENCE ..........
  11271.   320    S = P - 1
  11272.          U = 1.0D0
  11273. C
  11274.          DO 340 I = P, Q
  11275.             IF (U .NE. 0.0D0) GO TO 325
  11276.             V = DABS(E(I)) / EPSLON(1.0D0)
  11277.             IF (E2(I) .EQ. 0.0D0) V = 0.0D0
  11278.             GO TO 330
  11279.   325       V = E2(I) / U
  11280.   330       U = D(I) - X1 - V
  11281.             IF (U .LT. 0.0D0) S = S + 1
  11282.   340    CONTINUE
  11283. C
  11284.          GO TO (60,80,200,220,360), ISTURM
  11285. C     .......... REFINE INTERVALS ..........
  11286.   360    IF (S .GE. K) GO TO 400
  11287.          XU = X1
  11288.          IF (S .GE. M1) GO TO 380
  11289.          RV4(M1) = X1
  11290.          GO TO 300
  11291.   380    RV4(S+1) = X1
  11292.          IF (RV5(S) .GT. X1) RV5(S) = X1
  11293.          GO TO 300
  11294.   400    X0 = X1
  11295.          GO TO 300
  11296. C     .......... K-TH EIGENVALUE FOUND ..........
  11297.   420    RV5(K) = X1
  11298.       K = K - 1
  11299.       IF (K .GE. M1) GO TO 250
  11300. C     .......... FIND VECTORS BY INVERSE ITERATION ..........
  11301.       NORM = DABS(D(P))
  11302.       IP = P + 1
  11303. C
  11304.       DO 500 I = IP, Q
  11305.   500 NORM = DMAX1(NORM, DABS(D(I)) + DABS(E(I)))
  11306. C     .......... EPS2 IS THE CRITERION FOR GROUPING,
  11307. C                EPS3 REPLACES ZERO PIVOTS AND EQUAL
  11308. C                ROOTS ARE MODIFIED BY EPS3,
  11309. C                EPS4 IS TAKEN VERY SMALL TO AVOID OVERFLOW ..........
  11310.       EPS2 = 1.0D-3 * NORM
  11311.       EPS3 = EPSLON(NORM)
  11312.       UK = Q - P + 1
  11313.       EPS4 = UK * EPS3
  11314.       UK = EPS4 / DSQRT(UK)
  11315.       GROUP = 0
  11316.       S = P
  11317. C
  11318.       DO 920 K = M1, M2
  11319.          R = R + 1
  11320.          ITS = 1
  11321.          W(R) = RV5(K)
  11322.          X1 = RV5(K)
  11323. C     .......... LOOK FOR CLOSE OR COINCIDENT ROOTS ..........
  11324.          IF (K .EQ. M1) GO TO 520
  11325.          IF (X1 - X0 .GE. EPS2) GROUP = -1
  11326.          GROUP = GROUP + 1
  11327.          IF (X1 .LE. X0) X1 = X0 + EPS3
  11328. C     .......... ELIMINATION WITH INTERCHANGES AND
  11329. C                INITIALIZATION OF VECTOR ..........
  11330.   520    V = 0.0D0
  11331. C
  11332.          DO 580 I = P, Q
  11333.             RV6(I) = UK
  11334.             IF (I .EQ. P) GO TO 560
  11335.             IF (DABS(E(I)) .LT. DABS(U)) GO TO 540
  11336.             XU = U / E(I)
  11337.             RV4(I) = XU
  11338.             RV1(I-1) = E(I)
  11339.             RV2(I-1) = D(I) - X1
  11340.             RV3(I-1) = 0.0D0
  11341.             IF (I .NE. Q) RV3(I-1) = E(I+1)
  11342.             U = V - XU * RV2(I-1)
  11343.             V = -XU * RV3(I-1)
  11344.             GO TO 580
  11345.   540       XU = E(I) / U
  11346.             RV4(I) = XU
  11347.             RV1(I-1) = U
  11348.             RV2(I-1) = V
  11349.             RV3(I-1) = 0.0D0
  11350.   560       U = D(I) - X1 - XU * V
  11351.             IF (I .NE. Q) V = E(I+1)
  11352.   580    CONTINUE
  11353. C
  11354.          IF (U .EQ. 0.0D0) U = EPS3
  11355.          RV1(Q) = U
  11356.          RV2(Q) = 0.0D0
  11357.          RV3(Q) = 0.0D0
  11358. C     .......... BACK SUBSTITUTION
  11359. C                FOR I=Q STEP -1 UNTIL P DO -- ..........
  11360.   600    DO 620 II = P, Q
  11361.             I = P + Q - II
  11362.             RV6(I) = (RV6(I) - U * RV2(I) - V * RV3(I)) / RV1(I)
  11363.             V = U
  11364.             U = RV6(I)
  11365.   620    CONTINUE
  11366. C     .......... ORTHOGONALIZE WITH RESPECT TO PREVIOUS
  11367. C                MEMBERS OF GROUP ..........
  11368.          IF (GROUP .EQ. 0) GO TO 700
  11369. C
  11370.          DO 680 JJ = 1, GROUP
  11371.             J = R - GROUP - 1 + JJ
  11372.             XU = 0.0D0
  11373. C
  11374.             DO 640 I = P, Q
  11375.   640       XU = XU + RV6(I) * Z(I,J)
  11376. C
  11377.             DO 660 I = P, Q
  11378.   660       RV6(I) = RV6(I) - XU * Z(I,J)
  11379. C
  11380.   680    CONTINUE
  11381. C
  11382.   700    NORM = 0.0D0
  11383. C
  11384.          DO 720 I = P, Q
  11385.   720    NORM = NORM + DABS(RV6(I))
  11386. C
  11387.          IF (NORM .GE. 1.0D0) GO TO 840
  11388. C     .......... FORWARD SUBSTITUTION ..........
  11389.          IF (ITS .EQ. 5) GO TO 960
  11390.          IF (NORM .NE. 0.0D0) GO TO 740
  11391.          RV6(S) = EPS4
  11392.          S = S + 1
  11393.          IF (S .GT. Q) S = P
  11394.          GO TO 780
  11395.   740    XU = EPS4 / NORM
  11396. C
  11397.          DO 760 I = P, Q
  11398.   760    RV6(I) = RV6(I) * XU
  11399. C     .......... ELIMINATION OPERATIONS ON NEXT VECTOR
  11400. C                ITERATE ..........
  11401.   780    DO 820 I = IP, Q
  11402.             U = RV6(I)
  11403. C     .......... IF RV1(I-1) .EQ. E(I), A ROW INTERCHANGE
  11404. C                WAS PERFORMED EARLIER IN THE
  11405. C                TRIANGULARIZATION PROCESS ..........
  11406.             IF (RV1(I-1) .NE. E(I)) GO TO 800
  11407.             U = RV6(I-1)
  11408.             RV6(I-1) = RV6(I)
  11409.   800       RV6(I) = U - RV4(I) * RV6(I-1)
  11410.   820    CONTINUE
  11411. C
  11412.          ITS = ITS + 1
  11413.          GO TO 600
  11414. C     .......... NORMALIZE SO THAT SUM OF SQUARES IS
  11415. C                1 AND EXPAND TO FULL ORDER ..........
  11416.   840    U = 0.0D0
  11417. C
  11418.          DO 860 I = P, Q
  11419.   860    U = PYTHAG(U,RV6(I))
  11420. C
  11421.          XU = 1.0D0 / U
  11422. C
  11423.          DO 880 I = 1, N
  11424.   880    Z(I,R) = 0.0D0
  11425. C
  11426.          DO 900 I = P, Q
  11427.   900    Z(I,R) = RV6(I) * XU
  11428. C
  11429.          X0 = X1
  11430.   920 CONTINUE
  11431. C
  11432.   940 IF (Q .LT. N) GO TO 100
  11433.       GO TO 1001
  11434. C     .......... SET ERROR -- NON-CONVERGED EIGENVECTOR ..........
  11435.   960 IERR = 4 * N + R
  11436.       GO TO 1001
  11437. C     .......... SET ERROR -- UNDERESTIMATE OF NUMBER OF
  11438. C                EIGENVALUES IN INTERVAL ..........
  11439.   980 IERR = 3 * N + 1
  11440.  1001 LB = T1
  11441.       UB = T2
  11442.       RETURN
  11443.       END
  11444.