Skip to content

Commit 9c5165c

Browse files
Updates DGGEV to use @thijssteel's new routine DGLAQZ0, and DGGHD3 instead of DGGHRD
1 parent 93fd62f commit 9c5165c

File tree

1 file changed

+11
-8
lines changed

1 file changed

+11
-8
lines changed

SRC/dggev.f

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@
206206
*> The QZ iteration failed. No eigenvectors have been
207207
*> calculated, but ALPHAR(j), ALPHAI(j), and BETA(j)
208208
*> should be correct for j=INFO+1,...,N.
209-
*> > N: =N+1: other than QZ iteration failed in DHGEQZ.
209+
*> > N: =N+1: other than QZ iteration failed in DLAQZ0.
210210
*> =N+2: error return from DTGEVC.
211211
*> \endverbatim
212212
*
@@ -260,7 +260,7 @@ SUBROUTINE DGGEV( JOBVL, JOBVR, N, A, LDA, B, LDB, ALPHAR, ALPHAI,
260260
LOGICAL LDUMMA( 1 )
261261
* ..
262262
* .. External Subroutines ..
263-
EXTERNAL DGEQRF, DGGBAK, DGGBAL, DGGHRD, DHGEQZ, DLABAD,
263+
EXTERNAL DGEQRF, DGGBAK, DGGBAL, DGGHD3, DLAQZ0, DLABAD,
264264
$ DLACPY,DLASCL, DLASET, DORGQR, DORMQR, DTGEVC,
265265
$ XERBLA
266266
* ..
@@ -337,6 +337,8 @@ SUBROUTINE DGGEV( JOBVL, JOBVR, N, A, LDA, B, LDB, ALPHAR, ALPHAI,
337337
IF( ILVL ) THEN
338338
MAXWRK = MAX( MAXWRK, N*( 7 +
339339
$ ILAENV( 1, 'DORGQR', ' ', N, 1, N, -1 ) ) )
340+
MAXWRK = MAX( MAXWRK, N*( 7 +
341+
$ ILAENV( 1, 'DGGHD3', ' ', N, 1, N, 0 ) ) )
340342
END IF
341343
WORK( 1 ) = MAXWRK
342344
*
@@ -448,11 +450,12 @@ SUBROUTINE DGGEV( JOBVL, JOBVR, N, A, LDA, B, LDB, ALPHAR, ALPHAI,
448450
*
449451
* Eigenvectors requested -- work on whole matrix.
450452
*
451-
CALL DGGHRD( JOBVL, JOBVR, N, ILO, IHI, A, LDA, B, LDB, VL,
452-
$ LDVL, VR, LDVR, IERR )
453+
CALL DGGHD3( JOBVL, JOBVR, N, ILO, IHI, A, LDA, B, LDB, VL,
454+
$ LDVL, VR, LDVR, WORK, LWORK+1-IWRK, IERR )
453455
ELSE
454-
CALL DGGHRD( 'N', 'N', IROWS, 1, IROWS, A( ILO, ILO ), LDA,
455-
$ B( ILO, ILO ), LDB, VL, LDVL, VR, LDVR, IERR )
456+
CALL DGGHD3( 'N', 'N', IROWS, 1, IROWS, A( ILO, ILO ), LDA,
457+
$ B( ILO, ILO ), LDB, VL, LDVL, VR, LDVR,
458+
$ WORK, LWORK+1-IWRK, IERR )
456459
END IF
457460
*
458461
* Perform QZ algorithm (Compute eigenvalues, and optionally, the
@@ -465,9 +468,9 @@ SUBROUTINE DGGEV( JOBVL, JOBVR, N, A, LDA, B, LDB, ALPHAR, ALPHAI,
465468
ELSE
466469
CHTEMP = 'E'
467470
END IF
468-
CALL DHGEQZ( CHTEMP, JOBVL, JOBVR, N, ILO, IHI, A, LDA, B, LDB,
471+
CALL DLAQZ0( CHTEMP, JOBVL, JOBVR, N, ILO, IHI, A, LDA, B, LDB,
469472
$ ALPHAR, ALPHAI, BETA, VL, LDVL, VR, LDVR,
470-
$ WORK( IWRK ), LWORK+1-IWRK, IERR )
473+
$ WORK( IWRK ), LWORK+1-IWRK, 0, IERR )
471474
IF( IERR.NE.0 ) THEN
472475
IF( IERR.GT.0 .AND. IERR.LE.N ) THEN
473476
INFO = IERR

0 commit comments

Comments
 (0)