From 0918f47cbd960fb28bbcc0ecf2110a8a89660bf9 Mon Sep 17 00:00:00 2001 From: Julien Langou Date: Sun, 15 Jun 2025 12:15:39 -0600 Subject: [PATCH] follow @angsch idea - add a check for NaN in input matrix A in geev see issue #1128 --- SRC/cgeev.f | 6 +++++- SRC/dgeev.f | 6 +++++- SRC/sgeev.f | 6 +++++- SRC/zgeev.f | 6 +++++- 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/SRC/cgeev.f b/SRC/cgeev.f index dd08258be..3adec15a1 100644 --- a/SRC/cgeev.f +++ b/SRC/cgeev.f @@ -217,7 +217,7 @@ $ CTREVC3, CUNGHR * .. * .. External Functions .. - LOGICAL LSAME + LOGICAL LSAME, SISNAN INTEGER ISAMAX, ILAENV REAL SLAMCH, SCNRM2, CLANGE, $ SROUNDUP_LWORK @@ -335,6 +335,10 @@ 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 ) diff --git a/SRC/dgeev.f b/SRC/dgeev.f index 0f32c0671..3e7d135c0 100644 --- a/SRC/dgeev.f +++ b/SRC/dgeev.f @@ -227,7 +227,7 @@ $ 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, @@ -353,6 +353,10 @@ 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 ) diff --git a/SRC/sgeev.f b/SRC/sgeev.f index fc8a93bdd..88a1cbe24 100644 --- a/SRC/sgeev.f +++ b/SRC/sgeev.f @@ -228,7 +228,7 @@ $ SSCAL, STREVC3, XERBLA * .. * .. External Functions .. - LOGICAL LSAME + LOGICAL LSAME, SISNAN INTEGER ISAMAX, ILAENV REAL SLAMCH, SLANGE, SLAPY2, SNRM2, $ SROUNDUP_LWORK @@ -355,6 +355,10 @@ 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 ) diff --git a/SRC/zgeev.f b/SRC/zgeev.f index 29c9ae0f2..ea75b49aa 100644 --- a/SRC/zgeev.f +++ b/SRC/zgeev.f @@ -216,7 +216,7 @@ $ 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, @@ -332,6 +332,10 @@ 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 )