191 COMPLEX*16 a(na,n), b(nb,n), eiga(n), eigb(n)
192 COMPLEX*16 s, w, y, z, cdsqrt
195 COMPLEX*16 annm1, alfm, betm, d, sl, den, num, anm1m1
196 REAL*8 epsa, epsb, ss, r, anorm, bnorm, ani, bni, c
197 REAL*8 d0, d1, d2, e0, e1
207 ani = ani + dabs(dreal(y)) + dabs(dimag(y))
210 ani = ani + dabs(dreal(a(i,j))) + dabs(dimag(a(i,j)))
211 bni = bni + dabs(dreal(b(i,j))) + dabs(dimag(b(i,j)))
213 IF (ani.GT.anorm) anorm = ani
214 IF (bni.GT.bnorm) bnorm = bni
216 IF (anorm.EQ.0.d0) anorm = 1.d0
217 IF (bnorm.EQ.0.d0) bnorm = 1.d0
223 IF (c.GT.anorm)
GO TO 40
224 IF (n.LE.1)
GO TO 320
228 60 d2 = dabs(dreal(a(nn,nn))) + dabs(dimag(a(nn,nn)))
233 d2 = dabs(dreal(y)) + dabs(dimag(y))
236 r = ss + dabs(dreal(y)) + dabs(dimag(y))
237 IF (r.EQ.ss)
GO TO 80
240 80
IF (l.EQ.nn)
GO TO 320
241 IF (its.LT.30)
GO TO 90
243 IF (dabs(dreal(a(nn,nm1)))+dabs(dimag(a(nn,nm1))).GT.0.8d0*
244 * dabs(dreal(annm1))+dabs(dimag(annm1)))
RETURN 245 90
IF (its.EQ.10 .OR. its.EQ.20)
GO TO 110
249 s = a(nn,nn)*b(nm1,nm1) - annm1*b(nm1,nn)
250 w = annm1*b(nn,nn)*(a(nm1,nn)*b(nm1,nm1)-b(nm1,nn)*anm1m1)
251 y = (anm1m1*b(nn,nn)-s)/2.
253 IF (dreal(z).EQ.0.d0 .AND. dimag(z).EQ.0.d0)
GO TO 100
255 IF (d0.LT.0.d0) z = -z
256 100 den = (y+z)*b(nm1,nm1)*b(nn,nn)
257 IF (dreal(den).EQ.0.d0 .AND. dimag(den).EQ.0.d0) den =
263 num = cmplx(dabs(dreal(annm1))+dabs(dimag(annm1)),dabs(dreal(y))
267 120
IF (nn.EQ.l+1)
GO TO 140
268 d2 = dabs(dreal(a(nm1,nm1))) + dabs(dimag(a(nm1,nm1)))
269 e1 = dabs(dreal(annm1)) + dabs(dimag(annm1))
270 d1 = dabs(dreal(a(nn,nn))) + dabs(dimag(a(nn,nn)))
276 e1 = dabs(dreal(y)) + dabs(dimag(y))
280 d2 = dabs(dreal(y)) + dabs(dimag(y))
281 y = a(m,m)*den - b(m,m)*num
282 d0 = (d0+d1+d2)*(dabs(dreal(y))+dabs(dimag(y)))
283 e0 = e0*e1*(dabs(dreal(den))+dabs(dimag(den))) + d0
284 IF (e0.EQ.d0)
GO TO 150
289 w = a(m,m)*den - b(m,m)*num
291 d1 = dabs(dreal(z)) + dabs(dimag(z))
292 d2 = dabs(dreal(w)) + dabs(dimag(w))
297 IF (.NOT.wantx)
GO TO 160
305 IF (i.EQ.m)
GO TO 170
308 d1 = dabs(dreal(z)) + dabs(dimag(z))
309 d2 = dabs(dreal(w)) + dabs(dimag(w))
310 IF (d1.EQ.0.d0)
GO TO 60
311 170
IF (d2.GT.d1)
GO TO 190
321 IF (i.GT.m) a(i,i-1) = a(j,i-1)
322 IF (d2.EQ.0.d0)
GO TO 220
325 y = cmplx(dreal(w)/d1,dimag(w)/d1)/cmplx(dreal(z)/d1,dimag(z)/
328 190 y = cmplx(dreal(z)/d2,dimag(z)/d2)/cmplx(dreal(w)/d2,dimag(w)/
331 a(j,k) = a(j,k) - y*a(i,k)
332 b(j,k) = b(j,k) - y*b(i,k)
334 220
IF (i.GT.m) a(j,i-1) = (0.d0,0.d0)
340 d2 = dabs(dreal(w)) + dabs(dimag(w))
341 d1 = dabs(dreal(z)) + dabs(dimag(z))
342 IF (d1.EQ.0.d0)
GO TO 60
343 IF (d2.GT.d1)
GO TO 270
353 IF (i.EQ.nm1)
GO TO 240
357 240
IF (.NOT.wantx)
GO TO 260
363 260
IF (d2.EQ.0.d0)
GO TO 310
364 z = cmplx(dreal(w)/d1,dimag(w)/d1)/cmplx(dreal(z)/d1,dimag(z)/
367 270 z = cmplx(dreal(z)/d2,dimag(z)/d2)/cmplx(dreal(w)/d2,dimag(w)/
370 a(k,i) = a(k,i) - z*a(k,j)
371 b(k,i) = b(k,i) - z*b(k,j)
374 IF (i.LT.nm1) a(i+2,i) = a(i+2,i) - z*a(i+2,j)
375 IF (.NOT.wantx)
GO TO 310
377 x(k,i) = x(k,i) - z*x(k,j)
384 IF (nn.EQ.1)
GO TO 330
387 IF (nn.GT.1)
GO TO 50
391 330
IF (.NOT.wantx)
RETURN 398 IF (l.EQ.0)
GO TO 370
403 sl = sl + (betm*a(l,j)-alfm*b(l,j))*b(j,m)
405 y = betm*a(l,l) - alfm*b(l,l)
406 IF (dreal(y).EQ.0.d0 .AND. dimag(y).EQ.0.d0) y =
407 * cmplx((epsa+epsb)/2.d0,0.d0)
410 370
IF (l.GT.0)
GO TO 350
412 IF (m.GT.0)
GO TO 340
419 s = s + x(i,j)*b(j,m)
424 IF (m.GT.0)
GO TO 380
430 r = dabs(dreal(x(i,m))) + dabs(dimag(x(i,m)))
431 IF (r.LT.ss)
GO TO 420
435 IF (ss.EQ.0.d0)
GO TO 440
440 IF (m.GT.0)
GO TO 410