5 * Revision 1.1.1.1 1996/04/01 15:02:33 mclareni
10 SUBROUTINE COMLR(NM,N,LOW,IGH,HR,HI,WR,WI,IERR)
11 INTEGER I,J,L,M,N,EN,LL,MM,NM,IGH,IM1,ITS,LOW,MP1,ENM1,IERR
12 REAL HR(NM,N),HI(NM,N),WR(N),WI(N)
13 REAL SI,SR,TI,TR,XI,XR,YI,YR,ZZI,ZZR,MACHEP
15 REAL T1(2),T2(2),T3(2)
16 EQUIVALENCE (X,T1(1),XR),(T1(2),XI),(Y,T2(1),YR),(T2(2),YI),
17 X (Z,T3(1),ZZR),(T3(2),ZZI)
18 #if defined(CERNLIB_CDC)
21 #if !defined(CERNLIB_CDC)
25 C*UL 180 DO 200 I = 1, N
27 IF (I .GE. LOW .AND. I .LE. IGH) GO TO 200
34 220 IF (EN .LT. LOW) GO TO 1001
37 240 DO 260 LL = LOW, EN
39 IF (L .EQ. LOW) GO TO 300
40 IF (ABS(HR(L,L-1)) + ABS(HI(L,L-1)) .LE.
41 X MACHEP * (ABS(HR(L-1,L-1)) + ABS(HI(L-1,L-1))
42 X + ABS(HR(L,L)) +ABS(HI(L,L)))) GO TO 300
44 300 IF (L .EQ. EN) GO TO 660
45 IF (ITS .EQ. 30) GO TO 1000
46 IF (ITS .EQ. 10 .OR. ITS .EQ. 20) GO TO 320
49 XR = HR(ENM1,EN) * HR(EN,ENM1) - HI(ENM1,EN) * HI(EN,ENM1)
50 XI = HR(ENM1,EN) * HI(EN,ENM1) + HI(ENM1,EN) * HR(EN,ENM1)
51 IF (XR .EQ. 0.0 .AND. XI .EQ. 0.0) GO TO 340
52 YR = (HR(ENM1,ENM1) - SR) / 2.0
53 YI = (HI(ENM1,ENM1) - SI) / 2.0
54 Z = SQRT(CMPLX(YR**2-YI**2+XR,2.0*YR*YI+XI))
55 IF (YR * ZZR + YI * ZZI .LT. 0.0) Z = -Z
60 320 SR = ABS(HR(EN,ENM1)) + ABS(HR(ENM1,EN-2))
61 SI = ABS(HI(EN,ENM1)) + ABS(HI(ENM1,EN-2))
62 340 DO 360 I = LOW, EN
63 HR(I,I) = HR(I,I) - SR
64 HI(I,I) = HI(I,I) - SI
69 XR = ABS(HR(ENM1,ENM1)) + ABS(HI(ENM1,ENM1))
70 YR = ABS(HR(EN,ENM1)) + ABS(HI(EN,ENM1))
71 ZZR = ABS(HR(EN,EN)) + ABS(HI(EN,EN))
74 IF (M .EQ. L) GO TO 420
76 YR = ABS(HR(M,M-1)) + ABS(HI(M,M-1))
79 XR = ABS(HR(M-1,M-1)) + ABS(HI(M-1,M-1))
80 IF (YR .LE. MACHEP * ZZR / YI * (ZZR + XR + XI)) GO TO 420
89 IF (ABS(XR) + ABS(XI) .GE. ABS(YR) + ABS(YI)) GO TO 460
106 HR(I,J) = HR(I,J) - ZZR * HR(IM1,J) + ZZI * HI(IM1,J)
107 HI(I,J) = HI(I,J) - ZZR * HI(IM1,J) - ZZI * HR(IM1,J)
115 IF (WR(J) .LE. 0.0) GO TO 580
125 HR(I,J-1) = HR(I,J-1) + XR * HR(I,J) - XI * HI(I,J)
126 HI(I,J-1) = HI(I,J-1) + XR * HI(I,J) + XI * HR(I,J)
130 660 WR(EN) = HR(EN,EN) + TR
131 WI(EN) = HI(EN,EN) + TI