Skip to content

Commit 0918f47

Browse files
committed
follow @angsch idea - add a check for NaN in input matrix A in geev
see issue #1128
1 parent 25802f2 commit 0918f47

File tree

4 files changed

+20
-4
lines changed

4 files changed

+20
-4
lines changed

SRC/cgeev.f

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ SUBROUTINE CGEEV( JOBVL, JOBVR, N, A, LDA, W, VL, LDVL, VR,
217217
$ CTREVC3, CUNGHR
218218
* ..
219219
* .. External Functions ..
220-
LOGICAL LSAME
220+
LOGICAL LSAME, SISNAN
221221
INTEGER ISAMAX, ILAENV
222222
REAL SLAMCH, SCNRM2, CLANGE,
223223
$ SROUNDUP_LWORK
@@ -335,6 +335,10 @@ SUBROUTINE CGEEV( JOBVL, JOBVR, N, A, LDA, W, VL, LDVL, VR,
335335
ELSE IF( ANRM.GT.BIGNUM ) THEN
336336
SCALEA = .TRUE.
337337
CSCALE = BIGNUM
338+
ELSE IF( SISNAN( ANRM ) ) THEN
339+
INFO = -4
340+
CALL XERBLA( 'CGEEV ', -INFO )
341+
RETURN
338342
END IF
339343
IF( SCALEA )
340344
$ CALL CLASCL( 'G', 0, 0, ANRM, CSCALE, N, N, A, LDA, IERR )

SRC/dgeev.f

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ SUBROUTINE DGEEV( JOBVL, JOBVR, N, A, LDA, WR, WI, VL, LDVL,
227227
$ DLASCL, DORGHR, DROT, DSCAL, DTREVC3, XERBLA
228228
* ..
229229
* .. External Functions ..
230-
LOGICAL LSAME
230+
LOGICAL LSAME, DISNAN
231231
INTEGER IDAMAX, ILAENV
232232
DOUBLE PRECISION DLAMCH, DLANGE, DLAPY2, DNRM2
233233
EXTERNAL LSAME, IDAMAX, ILAENV, DLAMCH, DLANGE,
@@ -353,6 +353,10 @@ SUBROUTINE DGEEV( JOBVL, JOBVR, N, A, LDA, WR, WI, VL, LDVL,
353353
ELSE IF( ANRM.GT.BIGNUM ) THEN
354354
SCALEA = .TRUE.
355355
CSCALE = BIGNUM
356+
ELSE IF( DISNAN( ANRM ) ) THEN
357+
INFO = -4
358+
CALL XERBLA( 'DGEEV ', -INFO )
359+
RETURN
356360
END IF
357361
IF( SCALEA )
358362
$ CALL DLASCL( 'G', 0, 0, ANRM, CSCALE, N, N, A, LDA, IERR )

SRC/sgeev.f

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ SUBROUTINE SGEEV( JOBVL, JOBVR, N, A, LDA, WR, WI, VL, LDVL,
228228
$ SSCAL, STREVC3, XERBLA
229229
* ..
230230
* .. External Functions ..
231-
LOGICAL LSAME
231+
LOGICAL LSAME, SISNAN
232232
INTEGER ISAMAX, ILAENV
233233
REAL SLAMCH, SLANGE, SLAPY2, SNRM2,
234234
$ SROUNDUP_LWORK
@@ -355,6 +355,10 @@ SUBROUTINE SGEEV( JOBVL, JOBVR, N, A, LDA, WR, WI, VL, LDVL,
355355
ELSE IF( ANRM.GT.BIGNUM ) THEN
356356
SCALEA = .TRUE.
357357
CSCALE = BIGNUM
358+
ELSE IF( SISNAN( ANRM ) ) THEN
359+
INFO = -4
360+
CALL XERBLA( 'SGEEV ', -INFO )
361+
RETURN
358362
END IF
359363
IF( SCALEA )
360364
$ CALL SLASCL( 'G', 0, 0, ANRM, CSCALE, N, N, A, LDA, IERR )

SRC/zgeev.f

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ SUBROUTINE ZGEEV( JOBVL, JOBVR, N, A, LDA, W, VL, LDVL, VR,
216216
$ ZLACPY, ZLASCL, ZSCAL, ZTREVC3, ZUNGHR
217217
* ..
218218
* .. External Functions ..
219-
LOGICAL LSAME
219+
LOGICAL LSAME, DISNAN
220220
INTEGER IDAMAX, ILAENV
221221
DOUBLE PRECISION DLAMCH, DZNRM2, ZLANGE
222222
EXTERNAL LSAME, IDAMAX, ILAENV, DLAMCH, DZNRM2,
@@ -332,6 +332,10 @@ SUBROUTINE ZGEEV( JOBVL, JOBVR, N, A, LDA, W, VL, LDVL, VR,
332332
ELSE IF( ANRM.GT.BIGNUM ) THEN
333333
SCALEA = .TRUE.
334334
CSCALE = BIGNUM
335+
ELSE IF( DISNAN( ANRM ) ) THEN
336+
INFO = -4
337+
CALL XERBLA( 'ZGEEV ', -INFO )
338+
RETURN
335339
END IF
336340
IF( SCALEA )
337341
$ CALL ZLASCL( 'G', 0, 0, ANRM, CSCALE, N, N, A, LDA, IERR )

0 commit comments

Comments
 (0)