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