Merge pull request #4309 from martin-frbg/lapack926
Change ?GECON to return INFO=1 if RCOND is NaN (Reference-LAPACK PR 926)
This commit is contained in:
commit
feeb10435b
|
@ -105,8 +105,15 @@
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> INFO is INTEGER
|
*> INFO is INTEGER
|
||||||
*> = 0: successful exit
|
*> = 0: successful exit
|
||||||
*> < 0: if INFO = -i, the i-th argument had an illegal value
|
*> < 0: if INFO = -i, the i-th argument had an illegal value.
|
||||||
*> =-5: if ANORM is NAN or negative.
|
*> NaNs are illegal values for ANORM, and they propagate to
|
||||||
|
*> the output parameter RCOND.
|
||||||
|
*> Infinity is illegal for ANORM, and it propagates to the output
|
||||||
|
*> parameter RCOND as 0.
|
||||||
|
*> = 1: if RCOND = NaN, or
|
||||||
|
*> RCOND = Inf, or
|
||||||
|
*> the computed norm of the inverse of A is 0.
|
||||||
|
*> In the latter, RCOND = 0 is returned.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*
|
*
|
||||||
* Authors:
|
* Authors:
|
||||||
|
@ -117,7 +124,7 @@
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \ingroup complexGEcomputational
|
*> \ingroup gecon
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE CGECON( NORM, N, A, LDA, ANORM, RCOND, WORK, RWORK,
|
SUBROUTINE CGECON( NORM, N, A, LDA, ANORM, RCOND, WORK, RWORK,
|
||||||
|
@ -147,7 +154,7 @@
|
||||||
LOGICAL ONENRM
|
LOGICAL ONENRM
|
||||||
CHARACTER NORMIN
|
CHARACTER NORMIN
|
||||||
INTEGER IX, KASE, KASE1
|
INTEGER IX, KASE, KASE1
|
||||||
REAL AINVNM, SCALE, SL, SMLNUM, SU
|
REAL AINVNM, SCALE, SL, SMLNUM, SU, HUGEVAL
|
||||||
COMPLEX ZDUM
|
COMPLEX ZDUM
|
||||||
* ..
|
* ..
|
||||||
* .. Local Arrays ..
|
* .. Local Arrays ..
|
||||||
|
@ -172,6 +179,8 @@
|
||||||
CABS1( ZDUM ) = ABS( REAL( ZDUM ) ) + ABS( AIMAG( ZDUM ) )
|
CABS1( ZDUM ) = ABS( REAL( ZDUM ) ) + ABS( AIMAG( ZDUM ) )
|
||||||
* ..
|
* ..
|
||||||
* .. Executable Statements ..
|
* .. Executable Statements ..
|
||||||
|
*
|
||||||
|
HUGEVAL = SLAMCH( 'Overflow' )
|
||||||
*
|
*
|
||||||
* Test the input parameters.
|
* Test the input parameters.
|
||||||
*
|
*
|
||||||
|
@ -183,7 +192,7 @@
|
||||||
INFO = -2
|
INFO = -2
|
||||||
ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
|
ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
|
||||||
INFO = -4
|
INFO = -4
|
||||||
ELSE IF( ANORM.LT.ZERO .OR. SISNAN( ANORM ) ) THEN
|
ELSE IF( ANORM.LT.ZERO ) THEN
|
||||||
INFO = -5
|
INFO = -5
|
||||||
END IF
|
END IF
|
||||||
IF( INFO.NE.0 ) THEN
|
IF( INFO.NE.0 ) THEN
|
||||||
|
@ -199,6 +208,13 @@
|
||||||
RETURN
|
RETURN
|
||||||
ELSE IF( ANORM.EQ.ZERO ) THEN
|
ELSE IF( ANORM.EQ.ZERO ) THEN
|
||||||
RETURN
|
RETURN
|
||||||
|
ELSE IF( SISNAN( ANORM ) ) THEN
|
||||||
|
RCOND = ANORM
|
||||||
|
INFO = -5
|
||||||
|
RETURN
|
||||||
|
ELSE IF( ANORM.GT.HUGEVAL ) THEN
|
||||||
|
INFO = -5
|
||||||
|
RETURN
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
SMLNUM = SLAMCH( 'Safe minimum' )
|
SMLNUM = SLAMCH( 'Safe minimum' )
|
||||||
|
@ -256,8 +272,17 @@
|
||||||
*
|
*
|
||||||
* Compute the estimate of the reciprocal condition number.
|
* Compute the estimate of the reciprocal condition number.
|
||||||
*
|
*
|
||||||
IF( AINVNM.NE.ZERO )
|
IF( AINVNM.NE.ZERO ) THEN
|
||||||
$ RCOND = ( ONE / AINVNM ) / ANORM
|
RCOND = ( ONE / AINVNM ) / ANORM
|
||||||
|
ELSE
|
||||||
|
INFO = 1
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Check for NaNs and Infs
|
||||||
|
*
|
||||||
|
IF( SISNAN( RCOND ) .OR. RCOND.GT.HUGEVAL )
|
||||||
|
$ INFO = 1
|
||||||
*
|
*
|
||||||
20 CONTINUE
|
20 CONTINUE
|
||||||
RETURN
|
RETURN
|
||||||
|
|
|
@ -105,8 +105,15 @@
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> INFO is INTEGER
|
*> INFO is INTEGER
|
||||||
*> = 0: successful exit
|
*> = 0: successful exit
|
||||||
*> < 0: if INFO = -i, the i-th argument had an illegal value
|
*> < 0: if INFO = -i, the i-th argument had an illegal value.
|
||||||
*> =-5: if ANORM is NAN or negative.
|
*> NaNs are illegal values for ANORM, and they propagate to
|
||||||
|
*> the output parameter RCOND.
|
||||||
|
*> Infinity is illegal for ANORM, and it propagates to the output
|
||||||
|
*> parameter RCOND as 0.
|
||||||
|
*> = 1: if RCOND = NaN, or
|
||||||
|
*> RCOND = Inf, or
|
||||||
|
*> the computed norm of the inverse of A is 0.
|
||||||
|
*> In the latter, RCOND = 0 is returned.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*
|
*
|
||||||
* Authors:
|
* Authors:
|
||||||
|
@ -117,7 +124,7 @@
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \ingroup doubleGEcomputational
|
*> \ingroup gecon
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE DGECON( NORM, N, A, LDA, ANORM, RCOND, WORK, IWORK,
|
SUBROUTINE DGECON( NORM, N, A, LDA, ANORM, RCOND, WORK, IWORK,
|
||||||
|
@ -147,7 +154,7 @@
|
||||||
LOGICAL ONENRM
|
LOGICAL ONENRM
|
||||||
CHARACTER NORMIN
|
CHARACTER NORMIN
|
||||||
INTEGER IX, KASE, KASE1
|
INTEGER IX, KASE, KASE1
|
||||||
DOUBLE PRECISION AINVNM, SCALE, SL, SMLNUM, SU
|
DOUBLE PRECISION AINVNM, SCALE, SL, SMLNUM, SU, HUGEVAL
|
||||||
* ..
|
* ..
|
||||||
* .. Local Arrays ..
|
* .. Local Arrays ..
|
||||||
INTEGER ISAVE( 3 )
|
INTEGER ISAVE( 3 )
|
||||||
|
@ -165,6 +172,8 @@
|
||||||
INTRINSIC ABS, MAX
|
INTRINSIC ABS, MAX
|
||||||
* ..
|
* ..
|
||||||
* .. Executable Statements ..
|
* .. Executable Statements ..
|
||||||
|
*
|
||||||
|
HUGEVAL = DLAMCH( 'Overflow' )
|
||||||
*
|
*
|
||||||
* Test the input parameters.
|
* Test the input parameters.
|
||||||
*
|
*
|
||||||
|
@ -176,7 +185,7 @@
|
||||||
INFO = -2
|
INFO = -2
|
||||||
ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
|
ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
|
||||||
INFO = -4
|
INFO = -4
|
||||||
ELSE IF( ANORM.LT.ZERO .OR. DISNAN( ANORM ) ) THEN
|
ELSE IF( ANORM.LT.ZERO ) THEN
|
||||||
INFO = -5
|
INFO = -5
|
||||||
END IF
|
END IF
|
||||||
IF( INFO.NE.0 ) THEN
|
IF( INFO.NE.0 ) THEN
|
||||||
|
@ -192,6 +201,13 @@
|
||||||
RETURN
|
RETURN
|
||||||
ELSE IF( ANORM.EQ.ZERO ) THEN
|
ELSE IF( ANORM.EQ.ZERO ) THEN
|
||||||
RETURN
|
RETURN
|
||||||
|
ELSE IF( DISNAN( ANORM ) ) THEN
|
||||||
|
RCOND = ANORM
|
||||||
|
INFO = -5
|
||||||
|
RETURN
|
||||||
|
ELSE IF( ANORM.GT.HUGEVAL ) THEN
|
||||||
|
INFO = -5
|
||||||
|
RETURN
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
SMLNUM = DLAMCH( 'Safe minimum' )
|
SMLNUM = DLAMCH( 'Safe minimum' )
|
||||||
|
@ -248,8 +264,17 @@
|
||||||
*
|
*
|
||||||
* Compute the estimate of the reciprocal condition number.
|
* Compute the estimate of the reciprocal condition number.
|
||||||
*
|
*
|
||||||
IF( AINVNM.NE.ZERO )
|
IF( AINVNM.NE.ZERO ) THEN
|
||||||
$ RCOND = ( ONE / AINVNM ) / ANORM
|
RCOND = ( ONE / AINVNM ) / ANORM
|
||||||
|
ELSE
|
||||||
|
INFO = 1
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Check for NaNs and Infs
|
||||||
|
*
|
||||||
|
IF( DISNAN( RCOND ) .OR. RCOND.GT.HUGEVAL )
|
||||||
|
$ INFO = 1
|
||||||
*
|
*
|
||||||
20 CONTINUE
|
20 CONTINUE
|
||||||
RETURN
|
RETURN
|
||||||
|
|
|
@ -105,8 +105,15 @@
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> INFO is INTEGER
|
*> INFO is INTEGER
|
||||||
*> = 0: successful exit
|
*> = 0: successful exit
|
||||||
*> < 0: if INFO = -i, the i-th argument had an illegal value
|
*> < 0: if INFO = -i, the i-th argument had an illegal value.
|
||||||
*> =-5: if ANORM is NAN or negative.
|
*> NaNs are illegal values for ANORM, and they propagate to
|
||||||
|
*> the output parameter RCOND.
|
||||||
|
*> Infinity is illegal for ANORM, and it propagates to the output
|
||||||
|
*> parameter RCOND as 0.
|
||||||
|
*> = 1: if RCOND = NaN, or
|
||||||
|
*> RCOND = Inf, or
|
||||||
|
*> the computed norm of the inverse of A is 0.
|
||||||
|
*> In the latter, RCOND = 0 is returned.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*
|
*
|
||||||
* Authors:
|
* Authors:
|
||||||
|
@ -117,7 +124,7 @@
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \ingroup realGEcomputational
|
*> \ingroup gecon
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE SGECON( NORM, N, A, LDA, ANORM, RCOND, WORK, IWORK,
|
SUBROUTINE SGECON( NORM, N, A, LDA, ANORM, RCOND, WORK, IWORK,
|
||||||
|
@ -147,7 +154,7 @@
|
||||||
LOGICAL ONENRM
|
LOGICAL ONENRM
|
||||||
CHARACTER NORMIN
|
CHARACTER NORMIN
|
||||||
INTEGER IX, KASE, KASE1
|
INTEGER IX, KASE, KASE1
|
||||||
REAL AINVNM, SCALE, SL, SMLNUM, SU
|
REAL AINVNM, SCALE, SL, SMLNUM, SU, HUGEVAL
|
||||||
* ..
|
* ..
|
||||||
* .. Local Arrays ..
|
* .. Local Arrays ..
|
||||||
INTEGER ISAVE( 3 )
|
INTEGER ISAVE( 3 )
|
||||||
|
@ -165,6 +172,8 @@
|
||||||
INTRINSIC ABS, MAX
|
INTRINSIC ABS, MAX
|
||||||
* ..
|
* ..
|
||||||
* .. Executable Statements ..
|
* .. Executable Statements ..
|
||||||
|
*
|
||||||
|
HUGEVAL = SLAMCH( 'Overflow' )
|
||||||
*
|
*
|
||||||
* Test the input parameters.
|
* Test the input parameters.
|
||||||
*
|
*
|
||||||
|
@ -176,7 +185,7 @@
|
||||||
INFO = -2
|
INFO = -2
|
||||||
ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
|
ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
|
||||||
INFO = -4
|
INFO = -4
|
||||||
ELSE IF( ANORM.LT.ZERO .OR. SISNAN( ANORM ) ) THEN
|
ELSE IF( ANORM.LT.ZERO ) THEN
|
||||||
INFO = -5
|
INFO = -5
|
||||||
END IF
|
END IF
|
||||||
IF( INFO.NE.0 ) THEN
|
IF( INFO.NE.0 ) THEN
|
||||||
|
@ -192,6 +201,13 @@
|
||||||
RETURN
|
RETURN
|
||||||
ELSE IF( ANORM.EQ.ZERO ) THEN
|
ELSE IF( ANORM.EQ.ZERO ) THEN
|
||||||
RETURN
|
RETURN
|
||||||
|
ELSE IF( SISNAN( ANORM ) ) THEN
|
||||||
|
RCOND = ANORM
|
||||||
|
INFO = -5
|
||||||
|
RETURN
|
||||||
|
ELSE IF( ANORM.GT.HUGEVAL ) THEN
|
||||||
|
INFO = -5
|
||||||
|
RETURN
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
SMLNUM = SLAMCH( 'Safe minimum' )
|
SMLNUM = SLAMCH( 'Safe minimum' )
|
||||||
|
@ -248,8 +264,17 @@
|
||||||
*
|
*
|
||||||
* Compute the estimate of the reciprocal condition number.
|
* Compute the estimate of the reciprocal condition number.
|
||||||
*
|
*
|
||||||
IF( AINVNM.NE.ZERO )
|
IF( AINVNM.NE.ZERO ) THEN
|
||||||
$ RCOND = ( ONE / AINVNM ) / ANORM
|
RCOND = ( ONE / AINVNM ) / ANORM
|
||||||
|
ELSE
|
||||||
|
INFO = 1
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Check for NaNs and Infs
|
||||||
|
*
|
||||||
|
IF( SISNAN( RCOND ) .OR. RCOND.GT.HUGEVAL )
|
||||||
|
$ INFO = 1
|
||||||
*
|
*
|
||||||
20 CONTINUE
|
20 CONTINUE
|
||||||
RETURN
|
RETURN
|
||||||
|
|
|
@ -105,8 +105,15 @@
|
||||||
*> \verbatim
|
*> \verbatim
|
||||||
*> INFO is INTEGER
|
*> INFO is INTEGER
|
||||||
*> = 0: successful exit
|
*> = 0: successful exit
|
||||||
*> < 0: if INFO = -i, the i-th argument had an illegal value
|
*> < 0: if INFO = -i, the i-th argument had an illegal value.
|
||||||
*> =-5: if ANORM is NAN or negative.
|
*> NaNs are illegal values for ANORM, and they propagate to
|
||||||
|
*> the output parameter RCOND.
|
||||||
|
*> Infinity is illegal for ANORM, and it propagates to the output
|
||||||
|
*> parameter RCOND as 0.
|
||||||
|
*> = 1: if RCOND = NaN, or
|
||||||
|
*> RCOND = Inf, or
|
||||||
|
*> the computed norm of the inverse of A is 0.
|
||||||
|
*> In the latter, RCOND = 0 is returned.
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
*
|
*
|
||||||
* Authors:
|
* Authors:
|
||||||
|
@ -117,7 +124,7 @@
|
||||||
*> \author Univ. of Colorado Denver
|
*> \author Univ. of Colorado Denver
|
||||||
*> \author NAG Ltd.
|
*> \author NAG Ltd.
|
||||||
*
|
*
|
||||||
*> \ingroup complex16GEcomputational
|
*> \ingroup gecon
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
SUBROUTINE ZGECON( NORM, N, A, LDA, ANORM, RCOND, WORK, RWORK,
|
SUBROUTINE ZGECON( NORM, N, A, LDA, ANORM, RCOND, WORK, RWORK,
|
||||||
|
@ -147,7 +154,7 @@
|
||||||
LOGICAL ONENRM
|
LOGICAL ONENRM
|
||||||
CHARACTER NORMIN
|
CHARACTER NORMIN
|
||||||
INTEGER IX, KASE, KASE1
|
INTEGER IX, KASE, KASE1
|
||||||
DOUBLE PRECISION AINVNM, SCALE, SL, SMLNUM, SU
|
DOUBLE PRECISION AINVNM, SCALE, SL, SMLNUM, SU, HUGEVAL
|
||||||
COMPLEX*16 ZDUM
|
COMPLEX*16 ZDUM
|
||||||
* ..
|
* ..
|
||||||
* .. Local Arrays ..
|
* .. Local Arrays ..
|
||||||
|
@ -172,6 +179,8 @@
|
||||||
CABS1( ZDUM ) = ABS( DBLE( ZDUM ) ) + ABS( DIMAG( ZDUM ) )
|
CABS1( ZDUM ) = ABS( DBLE( ZDUM ) ) + ABS( DIMAG( ZDUM ) )
|
||||||
* ..
|
* ..
|
||||||
* .. Executable Statements ..
|
* .. Executable Statements ..
|
||||||
|
*
|
||||||
|
HUGEVAL = DLAMCH( 'Overflow' )
|
||||||
*
|
*
|
||||||
* Test the input parameters.
|
* Test the input parameters.
|
||||||
*
|
*
|
||||||
|
@ -183,7 +192,7 @@
|
||||||
INFO = -2
|
INFO = -2
|
||||||
ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
|
ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
|
||||||
INFO = -4
|
INFO = -4
|
||||||
ELSE IF( ANORM.LT.ZERO .OR. DISNAN( ANORM ) ) THEN
|
ELSE IF( ANORM.LT.ZERO ) THEN
|
||||||
INFO = -5
|
INFO = -5
|
||||||
END IF
|
END IF
|
||||||
IF( INFO.NE.0 ) THEN
|
IF( INFO.NE.0 ) THEN
|
||||||
|
@ -199,6 +208,13 @@
|
||||||
RETURN
|
RETURN
|
||||||
ELSE IF( ANORM.EQ.ZERO ) THEN
|
ELSE IF( ANORM.EQ.ZERO ) THEN
|
||||||
RETURN
|
RETURN
|
||||||
|
ELSE IF( DISNAN( ANORM ) ) THEN
|
||||||
|
RCOND = ANORM
|
||||||
|
INFO = -5
|
||||||
|
RETURN
|
||||||
|
ELSE IF( ANORM.GT.HUGEVAL ) THEN
|
||||||
|
INFO = -5
|
||||||
|
RETURN
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
SMLNUM = DLAMCH( 'Safe minimum' )
|
SMLNUM = DLAMCH( 'Safe minimum' )
|
||||||
|
@ -256,8 +272,17 @@
|
||||||
*
|
*
|
||||||
* Compute the estimate of the reciprocal condition number.
|
* Compute the estimate of the reciprocal condition number.
|
||||||
*
|
*
|
||||||
IF( AINVNM.NE.ZERO )
|
IF( AINVNM.NE.ZERO ) THEN
|
||||||
$ RCOND = ( ONE / AINVNM ) / ANORM
|
RCOND = ( ONE / AINVNM ) / ANORM
|
||||||
|
ELSE
|
||||||
|
INFO = 1
|
||||||
|
RETURN
|
||||||
|
END IF
|
||||||
|
*
|
||||||
|
* Check for NaNs and Infs
|
||||||
|
*
|
||||||
|
IF( DISNAN( RCOND ) .OR. RCOND.GT.HUGEVAL )
|
||||||
|
$ INFO = 1
|
||||||
*
|
*
|
||||||
20 CONTINUE
|
20 CONTINUE
|
||||||
RETURN
|
RETURN
|
||||||
|
|
Loading…
Reference in New Issue