5 * Revision 1.1.1.1 1996/04/01 15:02:37 mclareni
10 SUBROUTINE INVIT(NM,N,A,WR,WI,SELECT,MM,M,Z,IERR,RM3,RV1,RV2)
11 INTEGER I,J,K,M,N,S,II,IP,MM,MP,NM,UK,IP1,ITS,KM1,IERR
12 REAL A(NM,N),WR(N),WI(N),Z(NM,MM),RM3(N,*),RV1(N),RV2(N)
13 REAL W,X,Y,EPS3,NORM,NORMV,GROWTO,ILAMBD,MACHEP,RLAMBD,UKROOT
17 EQUIVALENCE (Z3,T3(1))
18 #if defined(CERNLIB_CDC)
21 #if !defined(CERNLIB_CDC)
29 IF (WI(K) .EQ. 0.0 .OR. IP .LT. 0) GO TO 100
31 IF (SELECT(K) .AND. SELECT(K+1)) SELECT(K+1) = .FALSE.
32 100 IF (.NOT. SELECT(K)) GO TO 960
33 IF (WI(K) .NE. 0.0) S = S + 1
34 IF (S .GT. MM) GO TO 1000
35 IF (UK .GE. K) GO TO 200
37 IF (UK .EQ. N) GO TO 140
38 IF (A(UK+1,UK) .EQ. 0.0) GO TO 140
45 160 X = X + ABS(A(I,J))
46 IF (X .GT. NORM) NORM = X
49 IF (NORM .EQ. 0.0) NORM = 1.0
51 UKROOT = SQRT(REAL(UK))
52 GROWTO = 1.0E-1 / UKROOT
55 IF (K .EQ. 1) GO TO 280
58 220 RLAMBD = RLAMBD + EPS3
59 240 DO 260 II = 1, KM1
61 IF (SELECT(I) .AND. ABS(WR(I)-RLAMBD) .LT. EPS3 .AND.
62 X ABS(WI(I)-ILAMBD) .LT. EPS3) GO TO 220
71 RM3(I,I) = RM3(I,I) - RLAMBD
76 IF (ILAMBD .NE. 0.0) GO TO 520
77 IF (UK .EQ. 1) GO TO 420
80 IF (ABS(RM3(MP,I)) .LE. ABS(RM3(MP,MP))) GO TO 360
86 360 IF (RM3(MP,MP) .EQ. 0.0) RM3(MP,MP) = EPS3
87 X = RM3(MP,I) / RM3(MP,MP)
88 IF (X .EQ. 0.0) GO TO 400
90 380 RM3(J,I) = RM3(J,I) - X * RM3(J,MP)
92 420 IF (RM3(UK,UK) .EQ. 0.0) RM3(UK,UK) = EPS3
96 IF (I .EQ. UK) GO TO 480
99 460 Y = Y - RM3(J,I) * RV1(J)
100 480 RV1(I) = Y / RM3(I,I)
103 520 RM3(1,3) = -ILAMBD
109 X = RM3(MP,MP) * RM3(MP,MP) + RM3(MP,I+1) * RM3(MP,I+1)
110 IF (W * W .LE. X) GO TO 580
117 RM3(J,I) = RM3(J,MP) - X * W
119 RM3(I,J+2) = RM3(MP,J+2) - Y * W
122 RM3(MP,I+2) = -ILAMBD
123 RM3(I,I) = RM3(I,I) - Y * ILAMBD
124 RM3(I,I+2) = RM3(I,I+2) + X * ILAMBD
126 580 IF (X .NE. 0.0) GO TO 600
134 RM3(J,I) = RM3(J,I) - X * RM3(J,MP) + Y * RM3(MP,J+2)
135 RM3(I,J+2) = -X * RM3(MP,J+2) - Y * RM3(J,MP)
137 RM3(I,I+2) = RM3(I,I+2) - ILAMBD
139 IF (RM3(UK,UK) .EQ. 0.0 .AND.
140 X RM3(UK,UK+2) .EQ. 0.0) RM3(UK,UK) = EPS3
141 660 DO 720 II = 1, UK
145 IF (I .EQ. UK) GO TO 700
148 X = X - RM3(J,I) * RV1(J) + RM3(I,J+2) * RV2(J)
149 Y = Y - RM3(J,I) * RV2(J) - RM3(I,J+2) * RV1(J)
151 700 Z3 = CMPLX(X,Y) / CMPLX(RM3(I,I),RM3(I,I+2))
159 IF (ILAMBD .EQ. 0.0) X = ABS(RV1(I))
160 IF (ILAMBD .NE. 0.0) X = ABS(CMPLX(RV1(I),RV2(I)))
161 IF (NORMV .GE. X) GO TO 760
166 IF (NORM .LT. GROWTO) GO TO 840
168 IF (ILAMBD .EQ. 0.0) X = 1.0 / X
169 IF (ILAMBD .NE. 0.0) Y = RV2(J)
171 IF (ILAMBD .NE. 0.0) GO TO 800
174 800 Z3 = CMPLX(RV1(I),RV2(I)) / CMPLX(X,Y)
178 IF (UK .EQ. N) GO TO 940
181 840 IF (ITS .GE. UK) GO TO 880
188 RV1(J) = RV1(J) - EPS3 * X
189 IF (ILAMBD .EQ. 0.0) GO TO 440
195 IF (ILAMBD .NE. 0.0) Z(I,S-1) = 0.0
198 960 IF (IP .EQ. (-1)) IP = 0
199 IF (IP .EQ. 1) IP = -1
202 1000 IF (IERR .NE. 0) IERR = IERR - N
203 IF (IERR .EQ. 0) IERR = -(2 * N + 1)
204 1001 M = S - 1 - ABS(IP)