Skip to content

Commit 09abbd0

Browse files
GECON returns 1 if RCOND is NaN
1 parent 3a6f462 commit 09abbd0

File tree

4 files changed

+44
-8
lines changed

4 files changed

+44
-8
lines changed

SRC/cgecon.f

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@
106106
*> INFO is INTEGER
107107
*> = 0: successful exit
108108
*> < 0: if INFO = -i, the i-th argument had an illegal value
109-
*> =-5: if ANORM is NAN or negative.
109+
*> = 1: RCOND = NaN.
110110
*> \endverbatim
111111
*
112112
* Authors:
@@ -183,7 +183,7 @@ SUBROUTINE CGECON( NORM, N, A, LDA, ANORM, RCOND, WORK, RWORK,
183183
INFO = -2
184184
ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
185185
INFO = -4
186-
ELSE IF( ANORM.LT.ZERO .OR. SISNAN( ANORM ) ) THEN
186+
ELSE IF( ANORM.LT.ZERO ) THEN
187187
INFO = -5
188188
END IF
189189
IF( INFO.NE.0 ) THEN
@@ -199,6 +199,10 @@ SUBROUTINE CGECON( NORM, N, A, LDA, ANORM, RCOND, WORK, RWORK,
199199
RETURN
200200
ELSE IF( ANORM.EQ.ZERO ) THEN
201201
RETURN
202+
ELSE IF( SISNAN( ANORM ) ) THEN
203+
RCOND = ANORM
204+
INFO = 1
205+
RETURN
202206
END IF
203207
*
204208
SMLNUM = SLAMCH( 'Safe minimum' )
@@ -258,6 +262,11 @@ SUBROUTINE CGECON( NORM, N, A, LDA, ANORM, RCOND, WORK, RWORK,
258262
*
259263
IF( AINVNM.NE.ZERO )
260264
$ RCOND = ( ONE / AINVNM ) / ANORM
265+
*
266+
* Check for NaNs
267+
*
268+
IF( SISNAN( RCOND ) )
269+
$ INFO = 1
261270
*
262271
20 CONTINUE
263272
RETURN

SRC/dgecon.f

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@
106106
*> INFO is INTEGER
107107
*> = 0: successful exit
108108
*> < 0: if INFO = -i, the i-th argument had an illegal value
109-
*> =-5: if ANORM is NAN or negative.
109+
*> = 1: RCOND = NaN.
110110
*> \endverbatim
111111
*
112112
* Authors:
@@ -176,7 +176,7 @@ SUBROUTINE DGECON( NORM, N, A, LDA, ANORM, RCOND, WORK, IWORK,
176176
INFO = -2
177177
ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
178178
INFO = -4
179-
ELSE IF( ANORM.LT.ZERO .OR. DISNAN( ANORM ) ) THEN
179+
ELSE IF( ANORM.LT.ZERO ) THEN
180180
INFO = -5
181181
END IF
182182
IF( INFO.NE.0 ) THEN
@@ -192,6 +192,10 @@ SUBROUTINE DGECON( NORM, N, A, LDA, ANORM, RCOND, WORK, IWORK,
192192
RETURN
193193
ELSE IF( ANORM.EQ.ZERO ) THEN
194194
RETURN
195+
ELSE IF( DISNAN( ANORM ) ) THEN
196+
RCOND = ANORM
197+
INFO = 1
198+
RETURN
195199
END IF
196200
*
197201
SMLNUM = DLAMCH( 'Safe minimum' )
@@ -250,6 +254,11 @@ SUBROUTINE DGECON( NORM, N, A, LDA, ANORM, RCOND, WORK, IWORK,
250254
*
251255
IF( AINVNM.NE.ZERO )
252256
$ RCOND = ( ONE / AINVNM ) / ANORM
257+
*
258+
* Check for NaNs
259+
*
260+
IF( DISNAN( RCOND ) )
261+
$ INFO = 1
253262
*
254263
20 CONTINUE
255264
RETURN

SRC/sgecon.f

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@
106106
*> INFO is INTEGER
107107
*> = 0: successful exit
108108
*> < 0: if INFO = -i, the i-th argument had an illegal value
109-
*> =-5: if ANORM is NAN or negative.
109+
*> = 1: RCOND = NaN.
110110
*> \endverbatim
111111
*
112112
* Authors:
@@ -176,7 +176,7 @@ SUBROUTINE SGECON( NORM, N, A, LDA, ANORM, RCOND, WORK, IWORK,
176176
INFO = -2
177177
ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
178178
INFO = -4
179-
ELSE IF( ANORM.LT.ZERO .OR. SISNAN( ANORM ) ) THEN
179+
ELSE IF( ANORM.LT.ZERO ) THEN
180180
INFO = -5
181181
END IF
182182
IF( INFO.NE.0 ) THEN
@@ -192,6 +192,10 @@ SUBROUTINE SGECON( NORM, N, A, LDA, ANORM, RCOND, WORK, IWORK,
192192
RETURN
193193
ELSE IF( ANORM.EQ.ZERO ) THEN
194194
RETURN
195+
ELSE IF( SISNAN( ANORM ) ) THEN
196+
RCOND = ANORM
197+
INFO = 1
198+
RETURN
195199
END IF
196200
*
197201
SMLNUM = SLAMCH( 'Safe minimum' )
@@ -250,6 +254,11 @@ SUBROUTINE SGECON( NORM, N, A, LDA, ANORM, RCOND, WORK, IWORK,
250254
*
251255
IF( AINVNM.NE.ZERO )
252256
$ RCOND = ( ONE / AINVNM ) / ANORM
257+
*
258+
* Check for NaNs
259+
*
260+
IF( SISNAN( RCOND ) )
261+
$ INFO = 1
253262
*
254263
20 CONTINUE
255264
RETURN

SRC/zgecon.f

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@
106106
*> INFO is INTEGER
107107
*> = 0: successful exit
108108
*> < 0: if INFO = -i, the i-th argument had an illegal value
109-
*> =-5: if ANORM is NAN or negative.
109+
*> = 1: RCOND = NaN.
110110
*> \endverbatim
111111
*
112112
* Authors:
@@ -183,7 +183,7 @@ SUBROUTINE ZGECON( NORM, N, A, LDA, ANORM, RCOND, WORK, RWORK,
183183
INFO = -2
184184
ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
185185
INFO = -4
186-
ELSE IF( ANORM.LT.ZERO .OR. DISNAN( ANORM ) ) THEN
186+
ELSE IF( ANORM.LT.ZERO ) THEN
187187
INFO = -5
188188
END IF
189189
IF( INFO.NE.0 ) THEN
@@ -199,6 +199,10 @@ SUBROUTINE ZGECON( NORM, N, A, LDA, ANORM, RCOND, WORK, RWORK,
199199
RETURN
200200
ELSE IF( ANORM.EQ.ZERO ) THEN
201201
RETURN
202+
ELSE IF( DISNAN( ANORM ) ) THEN
203+
RCOND = ANORM
204+
INFO = 1
205+
RETURN
202206
END IF
203207
*
204208
SMLNUM = DLAMCH( 'Safe minimum' )
@@ -258,6 +262,11 @@ SUBROUTINE ZGECON( NORM, N, A, LDA, ANORM, RCOND, WORK, RWORK,
258262
*
259263
IF( AINVNM.NE.ZERO )
260264
$ RCOND = ( ONE / AINVNM ) / ANORM
265+
*
266+
* Check for NaNs
267+
*
268+
IF( DISNAN( RCOND ) )
269+
$ INFO = 1
261270
*
262271
20 CONTINUE
263272
RETURN

0 commit comments

Comments
 (0)