|
|
|
@@ -320,12 +320,13 @@ |
|
|
|
$ C, SAFMIN, TEMP, TEMP2, TEMPR, ULP |
|
|
|
COMPLEX*16 ABI22, AD11, AD12, AD21, AD22, CTEMP, CTEMP2, |
|
|
|
$ CTEMP3, ESHIFT, RTDISC, S, SHIFT, SIGNBC, T1, |
|
|
|
$ U12, X |
|
|
|
$ U12, X, ABI12, Y |
|
|
|
* .. |
|
|
|
* .. External Functions .. |
|
|
|
COMPLEX*16 ZLADIV |
|
|
|
LOGICAL LSAME |
|
|
|
DOUBLE PRECISION DLAMCH, ZLANHS |
|
|
|
EXTERNAL LSAME, DLAMCH, ZLANHS |
|
|
|
EXTERNAL ZLADIV, LSAME, DLAMCH, ZLANHS |
|
|
|
* .. |
|
|
|
* .. External Subroutines .. |
|
|
|
EXTERNAL XERBLA, ZLARTG, ZLASET, ZROT, ZSCAL |
|
|
|
@@ -730,15 +731,21 @@ |
|
|
|
AD22 = ( ASCALE*H( ILAST, ILAST ) ) / |
|
|
|
$ ( BSCALE*T( ILAST, ILAST ) ) |
|
|
|
ABI22 = AD22 - U12*AD21 |
|
|
|
ABI12 = AD12 - U12*AD11 |
|
|
|
* |
|
|
|
T1 = HALF*( AD11+ABI22 ) |
|
|
|
RTDISC = SQRT( T1**2+AD12*AD21-AD11*AD22 ) |
|
|
|
TEMP = DBLE( T1-ABI22 )*DBLE( RTDISC ) + |
|
|
|
$ DIMAG( T1-ABI22 )*DIMAG( RTDISC ) |
|
|
|
IF( TEMP.LE.ZERO ) THEN |
|
|
|
SHIFT = T1 + RTDISC |
|
|
|
ELSE |
|
|
|
SHIFT = T1 - RTDISC |
|
|
|
SHIFT = ABI22 |
|
|
|
CTEMP = SQRT( ABI12 )*SQRT( AD21 ) |
|
|
|
TEMP = ABS1( CTEMP ) |
|
|
|
IF( CTEMP.NE.ZERO ) THEN |
|
|
|
X = HALF*( AD11-SHIFT ) |
|
|
|
TEMP2 = ABS1( X ) |
|
|
|
TEMP = MAX( TEMP, ABS1( X ) ) |
|
|
|
Y = TEMP*SQRT( ( X / TEMP )**2+( CTEMP / TEMP )**2 ) |
|
|
|
IF( TEMP2.GT.ZERO ) THEN |
|
|
|
IF( DBLE( X / TEMP2 )*DBLE( Y )+ |
|
|
|
$ DIMAG( X / TEMP2 )*DIMAG( Y ).LT.ZERO )Y = -Y |
|
|
|
END IF |
|
|
|
SHIFT = SHIFT - CTEMP*ZLADIV( CTEMP, ( X+Y ) ) |
|
|
|
END IF |
|
|
|
ELSE |
|
|
|
* |
|
|
|
|