Change ?GECON to return INFO=1 if RCOND is NaN (Reference-LAPACK PR 926)tags/v0.3.25^2
| @@ -105,8 +105,15 @@ | |||
| *> \verbatim | |||
| *> INFO is INTEGER | |||
| *> = 0: successful exit | |||
| *> < 0: if INFO = -i, the i-th argument had an illegal value | |||
| *> =-5: if ANORM is NAN or negative. | |||
| *> < 0: if INFO = -i, the i-th argument had an illegal value. | |||
| *> 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 | |||
| * | |||
| * Authors: | |||
| @@ -117,7 +124,7 @@ | |||
| *> \author Univ. of Colorado Denver | |||
| *> \author NAG Ltd. | |||
| * | |||
| *> \ingroup complexGEcomputational | |||
| *> \ingroup gecon | |||
| * | |||
| * ===================================================================== | |||
| SUBROUTINE CGECON( NORM, N, A, LDA, ANORM, RCOND, WORK, RWORK, | |||
| @@ -147,7 +154,7 @@ | |||
| LOGICAL ONENRM | |||
| CHARACTER NORMIN | |||
| INTEGER IX, KASE, KASE1 | |||
| REAL AINVNM, SCALE, SL, SMLNUM, SU | |||
| REAL AINVNM, SCALE, SL, SMLNUM, SU, HUGEVAL | |||
| COMPLEX ZDUM | |||
| * .. | |||
| * .. Local Arrays .. | |||
| @@ -172,6 +179,8 @@ | |||
| CABS1( ZDUM ) = ABS( REAL( ZDUM ) ) + ABS( AIMAG( ZDUM ) ) | |||
| * .. | |||
| * .. Executable Statements .. | |||
| * | |||
| HUGEVAL = SLAMCH( 'Overflow' ) | |||
| * | |||
| * Test the input parameters. | |||
| * | |||
| @@ -183,7 +192,7 @@ | |||
| INFO = -2 | |||
| ELSE IF( LDA.LT.MAX( 1, N ) ) THEN | |||
| INFO = -4 | |||
| ELSE IF( ANORM.LT.ZERO .OR. SISNAN( ANORM ) ) THEN | |||
| ELSE IF( ANORM.LT.ZERO ) THEN | |||
| INFO = -5 | |||
| END IF | |||
| IF( INFO.NE.0 ) THEN | |||
| @@ -199,6 +208,13 @@ | |||
| RETURN | |||
| ELSE IF( ANORM.EQ.ZERO ) THEN | |||
| RETURN | |||
| ELSE IF( SISNAN( ANORM ) ) THEN | |||
| RCOND = ANORM | |||
| INFO = -5 | |||
| RETURN | |||
| ELSE IF( ANORM.GT.HUGEVAL ) THEN | |||
| INFO = -5 | |||
| RETURN | |||
| END IF | |||
| * | |||
| SMLNUM = SLAMCH( 'Safe minimum' ) | |||
| @@ -256,8 +272,17 @@ | |||
| * | |||
| * Compute the estimate of the reciprocal condition number. | |||
| * | |||
| IF( AINVNM.NE.ZERO ) | |||
| $ RCOND = ( ONE / AINVNM ) / ANORM | |||
| IF( AINVNM.NE.ZERO ) THEN | |||
| 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 | |||
| RETURN | |||
| @@ -105,8 +105,15 @@ | |||
| *> \verbatim | |||
| *> INFO is INTEGER | |||
| *> = 0: successful exit | |||
| *> < 0: if INFO = -i, the i-th argument had an illegal value | |||
| *> =-5: if ANORM is NAN or negative. | |||
| *> < 0: if INFO = -i, the i-th argument had an illegal value. | |||
| *> 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 | |||
| * | |||
| * Authors: | |||
| @@ -117,7 +124,7 @@ | |||
| *> \author Univ. of Colorado Denver | |||
| *> \author NAG Ltd. | |||
| * | |||
| *> \ingroup doubleGEcomputational | |||
| *> \ingroup gecon | |||
| * | |||
| * ===================================================================== | |||
| SUBROUTINE DGECON( NORM, N, A, LDA, ANORM, RCOND, WORK, IWORK, | |||
| @@ -147,7 +154,7 @@ | |||
| LOGICAL ONENRM | |||
| CHARACTER NORMIN | |||
| INTEGER IX, KASE, KASE1 | |||
| DOUBLE PRECISION AINVNM, SCALE, SL, SMLNUM, SU | |||
| DOUBLE PRECISION AINVNM, SCALE, SL, SMLNUM, SU, HUGEVAL | |||
| * .. | |||
| * .. Local Arrays .. | |||
| INTEGER ISAVE( 3 ) | |||
| @@ -165,6 +172,8 @@ | |||
| INTRINSIC ABS, MAX | |||
| * .. | |||
| * .. Executable Statements .. | |||
| * | |||
| HUGEVAL = DLAMCH( 'Overflow' ) | |||
| * | |||
| * Test the input parameters. | |||
| * | |||
| @@ -176,7 +185,7 @@ | |||
| INFO = -2 | |||
| ELSE IF( LDA.LT.MAX( 1, N ) ) THEN | |||
| INFO = -4 | |||
| ELSE IF( ANORM.LT.ZERO .OR. DISNAN( ANORM ) ) THEN | |||
| ELSE IF( ANORM.LT.ZERO ) THEN | |||
| INFO = -5 | |||
| END IF | |||
| IF( INFO.NE.0 ) THEN | |||
| @@ -192,6 +201,13 @@ | |||
| RETURN | |||
| ELSE IF( ANORM.EQ.ZERO ) THEN | |||
| RETURN | |||
| ELSE IF( DISNAN( ANORM ) ) THEN | |||
| RCOND = ANORM | |||
| INFO = -5 | |||
| RETURN | |||
| ELSE IF( ANORM.GT.HUGEVAL ) THEN | |||
| INFO = -5 | |||
| RETURN | |||
| END IF | |||
| * | |||
| SMLNUM = DLAMCH( 'Safe minimum' ) | |||
| @@ -248,8 +264,17 @@ | |||
| * | |||
| * Compute the estimate of the reciprocal condition number. | |||
| * | |||
| IF( AINVNM.NE.ZERO ) | |||
| $ RCOND = ( ONE / AINVNM ) / ANORM | |||
| IF( AINVNM.NE.ZERO ) THEN | |||
| 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 | |||
| RETURN | |||
| @@ -105,8 +105,15 @@ | |||
| *> \verbatim | |||
| *> INFO is INTEGER | |||
| *> = 0: successful exit | |||
| *> < 0: if INFO = -i, the i-th argument had an illegal value | |||
| *> =-5: if ANORM is NAN or negative. | |||
| *> < 0: if INFO = -i, the i-th argument had an illegal value. | |||
| *> 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 | |||
| * | |||
| * Authors: | |||
| @@ -117,7 +124,7 @@ | |||
| *> \author Univ. of Colorado Denver | |||
| *> \author NAG Ltd. | |||
| * | |||
| *> \ingroup realGEcomputational | |||
| *> \ingroup gecon | |||
| * | |||
| * ===================================================================== | |||
| SUBROUTINE SGECON( NORM, N, A, LDA, ANORM, RCOND, WORK, IWORK, | |||
| @@ -147,7 +154,7 @@ | |||
| LOGICAL ONENRM | |||
| CHARACTER NORMIN | |||
| INTEGER IX, KASE, KASE1 | |||
| REAL AINVNM, SCALE, SL, SMLNUM, SU | |||
| REAL AINVNM, SCALE, SL, SMLNUM, SU, HUGEVAL | |||
| * .. | |||
| * .. Local Arrays .. | |||
| INTEGER ISAVE( 3 ) | |||
| @@ -165,6 +172,8 @@ | |||
| INTRINSIC ABS, MAX | |||
| * .. | |||
| * .. Executable Statements .. | |||
| * | |||
| HUGEVAL = SLAMCH( 'Overflow' ) | |||
| * | |||
| * Test the input parameters. | |||
| * | |||
| @@ -176,7 +185,7 @@ | |||
| INFO = -2 | |||
| ELSE IF( LDA.LT.MAX( 1, N ) ) THEN | |||
| INFO = -4 | |||
| ELSE IF( ANORM.LT.ZERO .OR. SISNAN( ANORM ) ) THEN | |||
| ELSE IF( ANORM.LT.ZERO ) THEN | |||
| INFO = -5 | |||
| END IF | |||
| IF( INFO.NE.0 ) THEN | |||
| @@ -192,6 +201,13 @@ | |||
| RETURN | |||
| ELSE IF( ANORM.EQ.ZERO ) THEN | |||
| RETURN | |||
| ELSE IF( SISNAN( ANORM ) ) THEN | |||
| RCOND = ANORM | |||
| INFO = -5 | |||
| RETURN | |||
| ELSE IF( ANORM.GT.HUGEVAL ) THEN | |||
| INFO = -5 | |||
| RETURN | |||
| END IF | |||
| * | |||
| SMLNUM = SLAMCH( 'Safe minimum' ) | |||
| @@ -248,8 +264,17 @@ | |||
| * | |||
| * Compute the estimate of the reciprocal condition number. | |||
| * | |||
| IF( AINVNM.NE.ZERO ) | |||
| $ RCOND = ( ONE / AINVNM ) / ANORM | |||
| IF( AINVNM.NE.ZERO ) THEN | |||
| 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 | |||
| RETURN | |||
| @@ -105,8 +105,15 @@ | |||
| *> \verbatim | |||
| *> INFO is INTEGER | |||
| *> = 0: successful exit | |||
| *> < 0: if INFO = -i, the i-th argument had an illegal value | |||
| *> =-5: if ANORM is NAN or negative. | |||
| *> < 0: if INFO = -i, the i-th argument had an illegal value. | |||
| *> 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 | |||
| * | |||
| * Authors: | |||
| @@ -117,7 +124,7 @@ | |||
| *> \author Univ. of Colorado Denver | |||
| *> \author NAG Ltd. | |||
| * | |||
| *> \ingroup complex16GEcomputational | |||
| *> \ingroup gecon | |||
| * | |||
| * ===================================================================== | |||
| SUBROUTINE ZGECON( NORM, N, A, LDA, ANORM, RCOND, WORK, RWORK, | |||
| @@ -147,7 +154,7 @@ | |||
| LOGICAL ONENRM | |||
| CHARACTER NORMIN | |||
| INTEGER IX, KASE, KASE1 | |||
| DOUBLE PRECISION AINVNM, SCALE, SL, SMLNUM, SU | |||
| DOUBLE PRECISION AINVNM, SCALE, SL, SMLNUM, SU, HUGEVAL | |||
| COMPLEX*16 ZDUM | |||
| * .. | |||
| * .. Local Arrays .. | |||
| @@ -172,6 +179,8 @@ | |||
| CABS1( ZDUM ) = ABS( DBLE( ZDUM ) ) + ABS( DIMAG( ZDUM ) ) | |||
| * .. | |||
| * .. Executable Statements .. | |||
| * | |||
| HUGEVAL = DLAMCH( 'Overflow' ) | |||
| * | |||
| * Test the input parameters. | |||
| * | |||
| @@ -183,7 +192,7 @@ | |||
| INFO = -2 | |||
| ELSE IF( LDA.LT.MAX( 1, N ) ) THEN | |||
| INFO = -4 | |||
| ELSE IF( ANORM.LT.ZERO .OR. DISNAN( ANORM ) ) THEN | |||
| ELSE IF( ANORM.LT.ZERO ) THEN | |||
| INFO = -5 | |||
| END IF | |||
| IF( INFO.NE.0 ) THEN | |||
| @@ -199,6 +208,13 @@ | |||
| RETURN | |||
| ELSE IF( ANORM.EQ.ZERO ) THEN | |||
| RETURN | |||
| ELSE IF( DISNAN( ANORM ) ) THEN | |||
| RCOND = ANORM | |||
| INFO = -5 | |||
| RETURN | |||
| ELSE IF( ANORM.GT.HUGEVAL ) THEN | |||
| INFO = -5 | |||
| RETURN | |||
| END IF | |||
| * | |||
| SMLNUM = DLAMCH( 'Safe minimum' ) | |||
| @@ -256,8 +272,17 @@ | |||
| * | |||
| * Compute the estimate of the reciprocal condition number. | |||
| * | |||
| IF( AINVNM.NE.ZERO ) | |||
| $ RCOND = ( ONE / AINVNM ) / ANORM | |||
| IF( AINVNM.NE.ZERO ) THEN | |||
| 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 | |||
| RETURN | |||