aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--SRC/dhgeqz.f14
-rw-r--r--SRC/shgeqz.f14
2 files changed, 24 insertions, 4 deletions
diff --git a/SRC/dhgeqz.f b/SRC/dhgeqz.f
index f6989aae..9836a29d 100644
--- a/SRC/dhgeqz.f
+++ b/SRC/dhgeqz.f
@@ -739,9 +739,9 @@
* Exceptional shift. Chosen for no particularly good reason.
* (Single shift only.)
*
- IF( ( DBLE( MAXIT )*SAFMIN )*ABS( H( ILAST-1, ILAST ) ).LT.
+ IF( ( DBLE( MAXIT )*SAFMIN )*ABS( H( ILAST, ILAST-1 ) ).LT.
$ ABS( T( ILAST-1, ILAST-1 ) ) ) THEN
- ESHIFT = ESHIFT + H( ILAST, ILAST-1 ) /
+ ESHIFT = H( ILAST, ILAST-1 ) /
$ T( ILAST-1, ILAST-1 )
ELSE
ESHIFT = ESHIFT + ONE / ( SAFMIN*DBLE( MAXIT ) )
@@ -759,6 +759,16 @@
$ T( ILAST-1, ILAST-1 ), LDT, SAFMIN*SAFETY, S1,
$ S2, WR, WR2, WI )
*
+ IF ( ABS( (WR/S1)*T( ILAST, ILAST ) - H( ILAST, ILAST ) )
+ $ .GT. ABS( (WR2/S2)*T( ILAST, ILAST )
+ $ - H( ILAST, ILAST ) ) ) THEN
+ TEMP = WR
+ WR = WR2
+ WR2 = TEMP
+ TEMP = S1
+ S1 = S2
+ S2 = TEMP
+ END IF
TEMP = MAX( S1, SAFMIN*MAX( ONE, ABS( WR ), ABS( WI ) ) )
IF( WI.NE.ZERO )
$ GO TO 200
diff --git a/SRC/shgeqz.f b/SRC/shgeqz.f
index 4bd1a1de..6fb82a28 100644
--- a/SRC/shgeqz.f
+++ b/SRC/shgeqz.f
@@ -739,9 +739,9 @@
* Exceptional shift. Chosen for no particularly good reason.
* (Single shift only.)
*
- IF( ( REAL( MAXIT )*SAFMIN )*ABS( H( ILAST-1, ILAST ) ).LT.
+ IF( ( REAL( MAXIT )*SAFMIN )*ABS( H( ILAST, ILAST-1 ) ).LT.
$ ABS( T( ILAST-1, ILAST-1 ) ) ) THEN
- ESHIFT = ESHIFT + H( ILAST, ILAST-1 ) /
+ ESHIFT = H( ILAST, ILAST-1 ) /
$ T( ILAST-1, ILAST-1 )
ELSE
ESHIFT = ESHIFT + ONE / ( SAFMIN*REAL( MAXIT ) )
@@ -759,6 +759,16 @@
$ T( ILAST-1, ILAST-1 ), LDT, SAFMIN*SAFETY, S1,
$ S2, WR, WR2, WI )
*
+ IF ( ABS( (WR/S1)*T( ILAST, ILAST ) - H( ILAST, ILAST ) )
+ $ .GT. ABS( (WR2/S2)*T( ILAST, ILAST )
+ $ - H( ILAST, ILAST ) ) ) THEN
+ TEMP = WR
+ WR = WR2
+ WR2 = TEMP
+ TEMP = S1
+ S1 = S2
+ S2 = TEMP
+ END IF
TEMP = MAX( S1, SAFMIN*MAX( ONE, ABS( WR ), ABS( WI ) ) )
IF( WI.NE.ZERO )
$ GO TO 200