summaryrefslogtreecommitdiff
path: root/SRC/cggevx.f
diff options
context:
space:
mode:
authorjulie <julielangou@users.noreply.github.com>2012-03-20 21:31:07 +0000
committerjulie <julielangou@users.noreply.github.com>2012-03-20 21:31:07 +0000
commit97230bb34e502c85bafbd14a08b479019001f323 (patch)
treeca1db4ba1fe3ec5d19faba7abaeb0f146895b596 /SRC/cggevx.f
parentcbc56266969dc907689f442191b4052cda37abdb (diff)
downloadlapack-97230bb34e502c85bafbd14a08b479019001f323.tar.gz
lapack-97230bb34e502c85bafbd14a08b479019001f323.tar.bz2
lapack-97230bb34e502c85bafbd14a08b479019001f323.zip
Correct bug 0090 Need to unscale if necessary when there is an error in DHGEQZ (QZ iteration failed)
* bug report by Hong Bo Peng Sandgren, on 03-19-2012. * See link:http://icl.cs.utk.edu/lapack-forum/archives/lapack/msg01257.html[LAPACK Mailing list msg 01257] I am doing some work with DGGEV. When I check the return msg and the actual code, I found something may be wrong. Here is part of comments in the header of DGGEV.F. * INFO (output) INTEGER * = 0: successful exit * < 0: if INFO = -i, the i-th argument had an illegal value. * = 1,...,N: * The QZ iteration failed. No eigenvectors have been * calculated, but ALPHAR(j), ALPHAI(j), and BETA(j) * should be correct for j=INFO+1,...,N. * > N: =N+1: other than QZ iteration failed in DHGEQZ. * =N+2: error return from DTGEVC. When INFO = 1...N, there is an error in DHGEQZ (QZ iteration failed). From the code, we can see it jumps to label 110 then set WORK(1) and return. But in case of we scaled the matrix, we still need to undo scale for the output array ALPHAR, ALPHAI and BETA for those values j=INFO+1,...,N. In DGEEVX, we can see that it jumps to label 50 in case of DHSEQR failure and then undo scale before return.
Diffstat (limited to 'SRC/cggevx.f')
-rw-r--r--SRC/cggevx.f4
1 files changed, 2 insertions, 2 deletions
diff --git a/SRC/cggevx.f b/SRC/cggevx.f
index fe09a24f..cf4b5cee 100644
--- a/SRC/cggevx.f
+++ b/SRC/cggevx.f
@@ -788,15 +788,15 @@
*
* Undo scaling if necessary
*
+ 90 CONTINUE
+*
IF( ILASCL )
$ CALL CLASCL( 'G', 0, 0, ANRMTO, ANRM, N, 1, ALPHA, N, IERR )
*
IF( ILBSCL )
$ CALL CLASCL( 'G', 0, 0, BNRMTO, BNRM, N, 1, BETA, N, IERR )
*
- 90 CONTINUE
WORK( 1 ) = MAXWRK
-*
RETURN
*
* End of CGGEVX