Skip to content

add NaN checks for input matrix A in GEEV, return error if NaN are in matrix A, NaNs in input are detected with LANGE (needed for scaling) #1136

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 12 additions & 8 deletions SRC/cgeev.f
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@
SUBROUTINE CGEEV( JOBVL, JOBVR, N, A, LDA, W, VL, LDVL, VR,
$ LDVR,
$ WORK, LWORK, RWORK, INFO )
implicit none
IMPLICIT NONE
*
* -- LAPACK driver routine --
* -- LAPACK is a software package provided by Univ. of Tennessee, --
Expand All @@ -187,28 +187,28 @@ SUBROUTINE CGEEV( JOBVL, JOBVR, N, A, LDA, W, VL, LDVL, VR,
INTEGER INFO, LDA, LDVL, LDVR, LWORK, N
* ..
* .. Array Arguments ..
REAL RWORK( * )
COMPLEX A( LDA, * ), VL( LDVL, * ), VR( LDVR, * ),
REAL RWORK( * )
COMPLEX A( LDA, * ), VL( LDVL, * ), VR( LDVR, * ),
$ W( * ), WORK( * )
* ..
*
* =====================================================================
*
* .. Parameters ..
REAL ZERO, ONE
REAL ZERO, ONE
PARAMETER ( ZERO = 0.0E0, ONE = 1.0E0 )
* ..
* .. Local Scalars ..
LOGICAL LQUERY, SCALEA, WANTVL, WANTVR
CHARACTER SIDE
INTEGER HSWORK, I, IBAL, IERR, IHI, ILO, IRWORK, ITAU,
$ IWRK, K, LWORK_TREVC, MAXWRK, MINWRK, NOUT
REAL ANRM, BIGNUM, CSCALE, EPS, SCL, SMLNUM
COMPLEX TMP
REAL ANRM, BIGNUM, CSCALE, EPS, SCL, SMLNUM
COMPLEX TMP
* ..
* .. Local Arrays ..
LOGICAL SELECT( 1 )
REAL DUM( 1 )
REAL DUM( 1 )
* ..
* .. External Subroutines ..
EXTERNAL XERBLA, CSSCAL, CGEBAK,
Expand All @@ -217,7 +217,7 @@ SUBROUTINE CGEEV( JOBVL, JOBVR, N, A, LDA, W, VL, LDVL, VR,
$ CTREVC3, CUNGHR
* ..
* .. External Functions ..
LOGICAL LSAME
LOGICAL LSAME, SISNAN
INTEGER ISAMAX, ILAENV
REAL SLAMCH, SCNRM2, CLANGE,
$ SROUNDUP_LWORK
Expand Down Expand Up @@ -335,6 +335,10 @@ SUBROUTINE CGEEV( JOBVL, JOBVR, N, A, LDA, W, VL, LDVL, VR,
ELSE IF( ANRM.GT.BIGNUM ) THEN
SCALEA = .TRUE.
CSCALE = BIGNUM
ELSE IF( SISNAN( ANRM ) ) THEN
INFO = -4
CALL XERBLA( 'CGEEV ', -INFO )
RETURN
END IF
IF( SCALEA )
$ CALL CLASCL( 'G', 0, 0, ANRM, CSCALE, N, N, A, LDA, IERR )
Expand Down
8 changes: 6 additions & 2 deletions SRC/dgeev.f
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@
SUBROUTINE DGEEV( JOBVL, JOBVR, N, A, LDA, WR, WI, VL, LDVL,
$ VR,
$ LDVR, WORK, LWORK, INFO )
implicit none
IMPLICIT NONE
*
* -- LAPACK driver routine --
* -- LAPACK is a software package provided by Univ. of Tennessee, --
Expand Down Expand Up @@ -227,7 +227,7 @@ SUBROUTINE DGEEV( JOBVL, JOBVR, N, A, LDA, WR, WI, VL, LDVL,
$ DLASCL, DORGHR, DROT, DSCAL, DTREVC3, XERBLA
* ..
* .. External Functions ..
LOGICAL LSAME
LOGICAL LSAME, DISNAN
INTEGER IDAMAX, ILAENV
DOUBLE PRECISION DLAMCH, DLANGE, DLAPY2, DNRM2
EXTERNAL LSAME, IDAMAX, ILAENV, DLAMCH, DLANGE,
Expand Down Expand Up @@ -353,6 +353,10 @@ SUBROUTINE DGEEV( JOBVL, JOBVR, N, A, LDA, WR, WI, VL, LDVL,
ELSE IF( ANRM.GT.BIGNUM ) THEN
SCALEA = .TRUE.
CSCALE = BIGNUM
ELSE IF( DISNAN( ANRM ) ) THEN
INFO = -4
CALL XERBLA( 'DGEEV ', -INFO )
RETURN
END IF
IF( SCALEA )
$ CALL DLASCL( 'G', 0, 0, ANRM, CSCALE, N, N, A, LDA, IERR )
Expand Down
16 changes: 10 additions & 6 deletions SRC/sgeev.f
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@
SUBROUTINE SGEEV( JOBVL, JOBVR, N, A, LDA, WR, WI, VL, LDVL,
$ VR,
$ LDVR, WORK, LWORK, INFO )
implicit none
IMPLICIT NONE
*
* -- LAPACK driver routine --
* -- LAPACK is a software package provided by Univ. of Tennessee, --
Expand All @@ -199,27 +199,27 @@ SUBROUTINE SGEEV( JOBVL, JOBVR, N, A, LDA, WR, WI, VL, LDVL,
INTEGER INFO, LDA, LDVL, LDVR, LWORK, N
* ..
* .. Array Arguments ..
REAL A( LDA, * ), VL( LDVL, * ), VR( LDVR, * ),
REAL A( LDA, * ), VL( LDVL, * ), VR( LDVR, * ),
$ WI( * ), WORK( * ), WR( * )
* ..
*
* =====================================================================
*
* .. Parameters ..
REAL ZERO, ONE
REAL ZERO, ONE
PARAMETER ( ZERO = 0.0E0, ONE = 1.0E0 )
* ..
* .. Local Scalars ..
LOGICAL LQUERY, SCALEA, WANTVL, WANTVR
CHARACTER SIDE
INTEGER HSWORK, I, IBAL, IERR, IHI, ILO, ITAU, IWRK, K,
$ LWORK_TREVC, MAXWRK, MINWRK, NOUT
REAL ANRM, BIGNUM, CS, CSCALE, EPS, R, SCL, SMLNUM,
REAL ANRM, BIGNUM, CS, CSCALE, EPS, R, SCL, SMLNUM,
$ SN
* ..
* .. Local Arrays ..
LOGICAL SELECT( 1 )
REAL DUM( 1 )
REAL DUM( 1 )
* ..
* .. External Subroutines ..
EXTERNAL SGEBAK, SGEBAL, SGEHRD,
Expand All @@ -228,7 +228,7 @@ SUBROUTINE SGEEV( JOBVL, JOBVR, N, A, LDA, WR, WI, VL, LDVL,
$ SSCAL, STREVC3, XERBLA
* ..
* .. External Functions ..
LOGICAL LSAME
LOGICAL LSAME, SISNAN
INTEGER ISAMAX, ILAENV
REAL SLAMCH, SLANGE, SLAPY2, SNRM2,
$ SROUNDUP_LWORK
Expand Down Expand Up @@ -355,6 +355,10 @@ SUBROUTINE SGEEV( JOBVL, JOBVR, N, A, LDA, WR, WI, VL, LDVL,
ELSE IF( ANRM.GT.BIGNUM ) THEN
SCALEA = .TRUE.
CSCALE = BIGNUM
ELSE IF( SISNAN( ANRM ) ) THEN
INFO = -4
CALL XERBLA( 'SGEEV ', -INFO )
RETURN
END IF
IF( SCALEA )
$ CALL SLASCL( 'G', 0, 0, ANRM, CSCALE, N, N, A, LDA, IERR )
Expand Down
8 changes: 6 additions & 2 deletions SRC/zgeev.f
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@
SUBROUTINE ZGEEV( JOBVL, JOBVR, N, A, LDA, W, VL, LDVL, VR,
$ LDVR,
$ WORK, LWORK, RWORK, INFO )
implicit none
IMPLICIT NONE
*
* -- LAPACK driver routine --
* -- LAPACK is a software package provided by Univ. of Tennessee, --
Expand Down Expand Up @@ -216,7 +216,7 @@ SUBROUTINE ZGEEV( JOBVL, JOBVR, N, A, LDA, W, VL, LDVL, VR,
$ ZLACPY, ZLASCL, ZSCAL, ZTREVC3, ZUNGHR
* ..
* .. External Functions ..
LOGICAL LSAME
LOGICAL LSAME, DISNAN
INTEGER IDAMAX, ILAENV
DOUBLE PRECISION DLAMCH, DZNRM2, ZLANGE
EXTERNAL LSAME, IDAMAX, ILAENV, DLAMCH, DZNRM2,
Expand Down Expand Up @@ -332,6 +332,10 @@ SUBROUTINE ZGEEV( JOBVL, JOBVR, N, A, LDA, W, VL, LDVL, VR,
ELSE IF( ANRM.GT.BIGNUM ) THEN
SCALEA = .TRUE.
CSCALE = BIGNUM
ELSE IF( DISNAN( ANRM ) ) THEN
INFO = -4
CALL XERBLA( 'ZGEEV ', -INFO )
RETURN
END IF
IF( SCALEA )
$ CALL ZLASCL( 'G', 0, 0, ANRM, CSCALE, N, N, A, LDA, IERR )
Expand Down