Skip to content

Commit 00880c7

Browse files
authored
Merge pull request #3087 from martin-frbg/lapack477
Apply Reference-LAPACK PR 477 for convergence problems in CHGEQZ/ZHGEQZ
2 parents 10094bd + 856bc36 commit 00880c7

File tree

2 files changed

+16
-4
lines changed

2 files changed

+16
-4
lines changed

lapack-netlib/SRC/chgeqz.f

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -743,8 +743,14 @@ SUBROUTINE CHGEQZ( JOB, COMPQ, COMPZ, N, ILO, IHI, H, LDH, T, LDT,
743743
*
744744
* Exceptional shift. Chosen for no particularly good reason.
745745
*
746-
ESHIFT = ESHIFT + (ASCALE*H(ILAST,ILAST-1))/
747-
$ (BSCALE*T(ILAST-1,ILAST-1))
746+
IF( ( IITER / 20 )*20.EQ.IITER .AND.
747+
$ BSCALE*ABS1(T( ILAST, ILAST )).GT.SAFMIN ) THEN
748+
ESHIFT = ESHIFT + ( ASCALE*H( ILAST,
749+
$ ILAST ) )/( BSCALE*T( ILAST, ILAST ) )
750+
ELSE
751+
ESHIFT = ESHIFT + ( ASCALE*H( ILAST,
752+
$ ILAST-1 ) )/( BSCALE*T( ILAST-1, ILAST-1 ) )
753+
END IF
748754
SHIFT = ESHIFT
749755
END IF
750756
*

lapack-netlib/SRC/zhgeqz.f

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -744,8 +744,14 @@ SUBROUTINE ZHGEQZ( JOB, COMPQ, COMPZ, N, ILO, IHI, H, LDH, T, LDT,
744744
*
745745
* Exceptional shift. Chosen for no particularly good reason.
746746
*
747-
ESHIFT = ESHIFT + (ASCALE*H(ILAST,ILAST-1))/
748-
$ (BSCALE*T(ILAST-1,ILAST-1))
747+
IF( ( IITER / 20 )*20.EQ.IITER .AND.
748+
$ BSCALE*ABS1(T( ILAST, ILAST )).GT.SAFMIN ) THEN
749+
ESHIFT = ESHIFT + ( ASCALE*H( ILAST,
750+
$ ILAST ) )/( BSCALE*T( ILAST, ILAST ) )
751+
ELSE
752+
ESHIFT = ESHIFT + ( ASCALE*H( ILAST,
753+
$ ILAST-1 ) )/( BSCALE*T( ILAST-1, ILAST-1 ) )
754+
END IF
749755
SHIFT = ESHIFT
750756
END IF
751757
*

0 commit comments

Comments
 (0)