| @@ -299,7 +299,7 @@ | |||||
| PARAMETER( ZERO = 0.0, ONE = 1.0, HALF = 0.5 ) | PARAMETER( ZERO = 0.0, ONE = 1.0, HALF = 0.5 ) | ||||
| * Local scalars | * Local scalars | ||||
| REAL :: SMLNUM, ULP, SAFMIN, SAFMAX, C1, TEMPR | |||||
| REAL :: SMLNUM, ULP, SAFMIN, SAFMAX, C1, TEMPR, BNORM, BTOL | |||||
| COMPLEX :: ESHIFT, S1, TEMP | COMPLEX :: ESHIFT, S1, TEMP | ||||
| INTEGER :: ISTART, ISTOP, IITER, MAXIT, ISTART2, K, LD, NSHIFTS, | INTEGER :: ISTART, ISTOP, IITER, MAXIT, ISTART2, K, LD, NSHIFTS, | ||||
| $ NBLOCK, NW, NMIN, NIBBLE, N_UNDEFLATED, N_DEFLATED, | $ NBLOCK, NW, NMIN, NIBBLE, N_UNDEFLATED, N_DEFLATED, | ||||
| @@ -312,7 +312,7 @@ | |||||
| * External Functions | * External Functions | ||||
| EXTERNAL :: XERBLA, CHGEQZ, CLAQZ2, CLAQZ3, CLASET, SLABAD, | EXTERNAL :: XERBLA, CHGEQZ, CLAQZ2, CLAQZ3, CLASET, SLABAD, | ||||
| $ CLARTG, CROT | $ CLARTG, CROT | ||||
| REAL, EXTERNAL :: SLAMCH | |||||
| REAL, EXTERNAL :: SLAMCH, CLANHS | |||||
| LOGICAL, EXTERNAL :: LSAME | LOGICAL, EXTERNAL :: LSAME | ||||
| INTEGER, EXTERNAL :: ILAENV | INTEGER, EXTERNAL :: ILAENV | ||||
| @@ -466,6 +466,9 @@ | |||||
| ULP = SLAMCH( 'PRECISION' ) | ULP = SLAMCH( 'PRECISION' ) | ||||
| SMLNUM = SAFMIN*( REAL( N )/ULP ) | SMLNUM = SAFMIN*( REAL( N )/ULP ) | ||||
| BNORM = CLANHS( 'F', IHI-ILO+1, B( ILO, ILO ), LDB, RWORK ) | |||||
| BTOL = MAX( SAFMIN, ULP*BNORM ) | |||||
| ISTART = ILO | ISTART = ILO | ||||
| ISTOP = IHI | ISTOP = IHI | ||||
| MAXIT = 30*( IHI-ILO+1 ) | MAXIT = 30*( IHI-ILO+1 ) | ||||
| @@ -528,15 +531,8 @@ | |||||
| * slow down the method when many infinite eigenvalues are present | * slow down the method when many infinite eigenvalues are present | ||||
| K = ISTOP | K = ISTOP | ||||
| DO WHILE ( K.GE.ISTART2 ) | DO WHILE ( K.GE.ISTART2 ) | ||||
| TEMPR = ZERO | |||||
| IF( K .LT. ISTOP ) THEN | |||||
| TEMPR = TEMPR+ABS( B( K, K+1 ) ) | |||||
| END IF | |||||
| IF( K .GT. ISTART2 ) THEN | |||||
| TEMPR = TEMPR+ABS( B( K-1, K ) ) | |||||
| END IF | |||||
| IF( ABS( B( K, K ) ) .LT. MAX( SMLNUM, ULP*TEMPR ) ) THEN | |||||
| IF( ABS( B( K, K ) ) .LT. BTOL ) THEN | |||||
| * A diagonal element of B is negligable, move it | * A diagonal element of B is negligable, move it | ||||
| * to the top and deflate it | * to the top and deflate it | ||||
| @@ -322,7 +322,7 @@ | |||||
| * Local scalars | * Local scalars | ||||
| DOUBLE PRECISION :: SMLNUM, ULP, ESHIFT, SAFMIN, SAFMAX, C1, S1, | DOUBLE PRECISION :: SMLNUM, ULP, ESHIFT, SAFMIN, SAFMAX, C1, S1, | ||||
| $ TEMP, SWAP | |||||
| $ TEMP, SWAP, BNORM, BTOL | |||||
| INTEGER :: ISTART, ISTOP, IITER, MAXIT, ISTART2, K, LD, NSHIFTS, | INTEGER :: ISTART, ISTOP, IITER, MAXIT, ISTART2, K, LD, NSHIFTS, | ||||
| $ NBLOCK, NW, NMIN, NIBBLE, N_UNDEFLATED, N_DEFLATED, | $ NBLOCK, NW, NMIN, NIBBLE, N_UNDEFLATED, N_DEFLATED, | ||||
| $ NS, SWEEP_INFO, SHIFTPOS, LWORKREQ, K2, ISTARTM, | $ NS, SWEEP_INFO, SHIFTPOS, LWORKREQ, K2, ISTARTM, | ||||
| @@ -334,7 +334,7 @@ | |||||
| * External Functions | * External Functions | ||||
| EXTERNAL :: XERBLA, DHGEQZ, DLASET, DLAQZ3, DLAQZ4, DLABAD, | EXTERNAL :: XERBLA, DHGEQZ, DLASET, DLAQZ3, DLAQZ4, DLABAD, | ||||
| $ DLARTG, DROT | $ DLARTG, DROT | ||||
| DOUBLE PRECISION, EXTERNAL :: DLAMCH | |||||
| DOUBLE PRECISION, EXTERNAL :: DLAMCH, DLANHS | |||||
| LOGICAL, EXTERNAL :: LSAME | LOGICAL, EXTERNAL :: LSAME | ||||
| INTEGER, EXTERNAL :: ILAENV | INTEGER, EXTERNAL :: ILAENV | ||||
| @@ -486,6 +486,9 @@ | |||||
| ULP = DLAMCH( 'PRECISION' ) | ULP = DLAMCH( 'PRECISION' ) | ||||
| SMLNUM = SAFMIN*( DBLE( N )/ULP ) | SMLNUM = SAFMIN*( DBLE( N )/ULP ) | ||||
| BNORM = DLANHS( 'F', IHI-ILO+1, B( ILO, ILO ), LDB, WORK ) | |||||
| BTOL = MAX( SAFMIN, ULP*BNORM ) | |||||
| ISTART = ILO | ISTART = ILO | ||||
| ISTOP = IHI | ISTOP = IHI | ||||
| MAXIT = 3*( IHI-ILO+1 ) | MAXIT = 3*( IHI-ILO+1 ) | ||||
| @@ -562,15 +565,8 @@ | |||||
| * slow down the method when many infinite eigenvalues are present | * slow down the method when many infinite eigenvalues are present | ||||
| K = ISTOP | K = ISTOP | ||||
| DO WHILE ( K.GE.ISTART2 ) | DO WHILE ( K.GE.ISTART2 ) | ||||
| TEMP = ZERO | |||||
| IF( K .LT. ISTOP ) THEN | |||||
| TEMP = TEMP+ABS( B( K, K+1 ) ) | |||||
| END IF | |||||
| IF( K .GT. ISTART2 ) THEN | |||||
| TEMP = TEMP+ABS( B( K-1, K ) ) | |||||
| END IF | |||||
| IF( ABS( B( K, K ) ) .LT. MAX( SMLNUM, ULP*TEMP ) ) THEN | |||||
| IF( ABS( B( K, K ) ) .LT. BTOL ) THEN | |||||
| * A diagonal element of B is negligable, move it | * A diagonal element of B is negligable, move it | ||||
| * to the top and deflate it | * to the top and deflate it | ||||
| @@ -318,7 +318,8 @@ | |||||
| PARAMETER( ZERO = 0.0, ONE = 1.0, HALF = 0.5 ) | PARAMETER( ZERO = 0.0, ONE = 1.0, HALF = 0.5 ) | ||||
| * Local scalars | * Local scalars | ||||
| REAL :: SMLNUM, ULP, ESHIFT, SAFMIN, SAFMAX, C1, S1, TEMP, SWAP | |||||
| REAL :: SMLNUM, ULP, ESHIFT, SAFMIN, SAFMAX, C1, S1, TEMP, SWAP, | |||||
| $ BNORM, BTOL | |||||
| INTEGER :: ISTART, ISTOP, IITER, MAXIT, ISTART2, K, LD, NSHIFTS, | INTEGER :: ISTART, ISTOP, IITER, MAXIT, ISTART2, K, LD, NSHIFTS, | ||||
| $ NBLOCK, NW, NMIN, NIBBLE, N_UNDEFLATED, N_DEFLATED, | $ NBLOCK, NW, NMIN, NIBBLE, N_UNDEFLATED, N_DEFLATED, | ||||
| $ NS, SWEEP_INFO, SHIFTPOS, LWORKREQ, K2, ISTARTM, | $ NS, SWEEP_INFO, SHIFTPOS, LWORKREQ, K2, ISTARTM, | ||||
| @@ -330,7 +331,7 @@ | |||||
| * External Functions | * External Functions | ||||
| EXTERNAL :: XERBLA, SHGEQZ, SLAQZ3, SLAQZ4, SLASET, SLABAD, | EXTERNAL :: XERBLA, SHGEQZ, SLAQZ3, SLAQZ4, SLASET, SLABAD, | ||||
| $ SLARTG, SROT | $ SLARTG, SROT | ||||
| REAL, EXTERNAL :: SLAMCH | |||||
| REAL, EXTERNAL :: SLAMCH, SLANHS | |||||
| LOGICAL, EXTERNAL :: LSAME | LOGICAL, EXTERNAL :: LSAME | ||||
| INTEGER, EXTERNAL :: ILAENV | INTEGER, EXTERNAL :: ILAENV | ||||
| @@ -482,6 +483,9 @@ | |||||
| ULP = SLAMCH( 'PRECISION' ) | ULP = SLAMCH( 'PRECISION' ) | ||||
| SMLNUM = SAFMIN*( REAL( N )/ULP ) | SMLNUM = SAFMIN*( REAL( N )/ULP ) | ||||
| BNORM = SLANHS( 'F', IHI-ILO+1, B( ILO, ILO ), LDB, WORK ) | |||||
| BTOL = MAX( SAFMIN, ULP*BNORM ) | |||||
| ISTART = ILO | ISTART = ILO | ||||
| ISTOP = IHI | ISTOP = IHI | ||||
| MAXIT = 3*( IHI-ILO+1 ) | MAXIT = 3*( IHI-ILO+1 ) | ||||
| @@ -558,15 +562,8 @@ | |||||
| * slow down the method when many infinite eigenvalues are present | * slow down the method when many infinite eigenvalues are present | ||||
| K = ISTOP | K = ISTOP | ||||
| DO WHILE ( K.GE.ISTART2 ) | DO WHILE ( K.GE.ISTART2 ) | ||||
| TEMP = ZERO | |||||
| IF( K .LT. ISTOP ) THEN | |||||
| TEMP = TEMP+ABS( B( K, K+1 ) ) | |||||
| END IF | |||||
| IF( K .GT. ISTART2 ) THEN | |||||
| TEMP = TEMP+ABS( B( K-1, K ) ) | |||||
| END IF | |||||
| IF( ABS( B( K, K ) ) .LT. MAX( SMLNUM, ULP*TEMP ) ) THEN | |||||
| IF( ABS( B( K, K ) ) .LT. BTOL ) THEN | |||||
| * A diagonal element of B is negligable, move it | * A diagonal element of B is negligable, move it | ||||
| * to the top and deflate it | * to the top and deflate it | ||||
| @@ -300,7 +300,8 @@ | |||||
| PARAMETER( ZERO = 0.0D0, ONE = 1.0D0, HALF = 0.5D0 ) | PARAMETER( ZERO = 0.0D0, ONE = 1.0D0, HALF = 0.5D0 ) | ||||
| * Local scalars | * Local scalars | ||||
| DOUBLE PRECISION :: SMLNUM, ULP, SAFMIN, SAFMAX, C1, TEMPR | |||||
| DOUBLE PRECISION :: SMLNUM, ULP, SAFMIN, SAFMAX, C1, TEMPR, | |||||
| $ BNORM, BTOL | |||||
| COMPLEX*16 :: ESHIFT, S1, TEMP | COMPLEX*16 :: ESHIFT, S1, TEMP | ||||
| INTEGER :: ISTART, ISTOP, IITER, MAXIT, ISTART2, K, LD, NSHIFTS, | INTEGER :: ISTART, ISTOP, IITER, MAXIT, ISTART2, K, LD, NSHIFTS, | ||||
| $ NBLOCK, NW, NMIN, NIBBLE, N_UNDEFLATED, N_DEFLATED, | $ NBLOCK, NW, NMIN, NIBBLE, N_UNDEFLATED, N_DEFLATED, | ||||
| @@ -313,7 +314,7 @@ | |||||
| * External Functions | * External Functions | ||||
| EXTERNAL :: XERBLA, ZHGEQZ, ZLAQZ2, ZLAQZ3, ZLASET, DLABAD, | EXTERNAL :: XERBLA, ZHGEQZ, ZLAQZ2, ZLAQZ3, ZLASET, DLABAD, | ||||
| $ ZLARTG, ZROT | $ ZLARTG, ZROT | ||||
| DOUBLE PRECISION, EXTERNAL :: DLAMCH | |||||
| DOUBLE PRECISION, EXTERNAL :: DLAMCH, ZLANHS | |||||
| LOGICAL, EXTERNAL :: LSAME | LOGICAL, EXTERNAL :: LSAME | ||||
| INTEGER, EXTERNAL :: ILAENV | INTEGER, EXTERNAL :: ILAENV | ||||
| @@ -467,6 +468,9 @@ | |||||
| ULP = DLAMCH( 'PRECISION' ) | ULP = DLAMCH( 'PRECISION' ) | ||||
| SMLNUM = SAFMIN*( DBLE( N )/ULP ) | SMLNUM = SAFMIN*( DBLE( N )/ULP ) | ||||
| BNORM = ZLANHS( 'F', IHI-ILO+1, B( ILO, ILO ), LDB, RWORK ) | |||||
| BTOL = MAX( SAFMIN, ULP*BNORM ) | |||||
| ISTART = ILO | ISTART = ILO | ||||
| ISTOP = IHI | ISTOP = IHI | ||||
| MAXIT = 30*( IHI-ILO+1 ) | MAXIT = 30*( IHI-ILO+1 ) | ||||
| @@ -529,15 +533,8 @@ | |||||
| * slow down the method when many infinite eigenvalues are present | * slow down the method when many infinite eigenvalues are present | ||||
| K = ISTOP | K = ISTOP | ||||
| DO WHILE ( K.GE.ISTART2 ) | DO WHILE ( K.GE.ISTART2 ) | ||||
| TEMPR = ZERO | |||||
| IF( K .LT. ISTOP ) THEN | |||||
| TEMPR = TEMPR+ABS( B( K, K+1 ) ) | |||||
| END IF | |||||
| IF( K .GT. ISTART2 ) THEN | |||||
| TEMPR = TEMPR+ABS( B( K-1, K ) ) | |||||
| END IF | |||||
| IF( ABS( B( K, K ) ) .LT. MAX( SMLNUM, ULP*TEMPR ) ) THEN | |||||
| IF( ABS( B( K, K ) ) .LT. BTOL ) THEN | |||||
| * A diagonal element of B is negligable, move it | * A diagonal element of B is negligable, move it | ||||
| * to the top and deflate it | * to the top and deflate it | ||||