Change ?GECON to return INFO=1 if RCOND is NaN (Reference-LAPACK PR 926)tags/v0.3.25^2
| @@ -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 | |||||
| *> =-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 | *> \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 ) | |||||
| $ 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 | 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 | |||||
| *> =-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 | *> \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 ) | |||||
| $ 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 | 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 | |||||
| *> =-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 | *> \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 ) | |||||
| $ 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 | 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 | |||||
| *> =-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 | *> \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 ) | |||||
| $ 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 | 20 CONTINUE | ||||
| RETURN | RETURN | ||||