Follow up to rev r1130
authorjulie <julielangou@users.noreply.github.com>
Thu, 12 Apr 2012 00:56:00 +0000 (00:56 +0000)
committerjulie <julielangou@users.noreply.github.com>
Thu, 12 Apr 2012 00:56:00 +0000 (00:56 +0000)
Fix bug bug0088 reported by Mike Pont from NAG on the forum
(see http://icl.cs.utk.edu/lapack-forum/viewtopic.php?f=13&t=2893)

Actually there were a lot of problems regarding arguments checking.
I tried to correct most of them.

Apply the fix propose to all x[he/sy]rfsx.f routines
- Use IGNORE_CWISE as suggested to prevent use of unitialize variable PARAMS

I also appied the previous TESTING fix to all routines

INFO has new value in ZHERFSX (see description of INFO between ZHESVX and ZHESVXX)
This is set on line 634 (IF ( INFO .LE. N ) INFO = N + J) of zherfsx.f
And this is not handled by the testing LIN/zdrvhex.f
I just add  .AND. INFO.LE.N at line 638 to avoid raising an error when INFO = N + J

At the moment, I would recommand a further look at those routines.
ZHE, ZSY led to 182 Tests failing to pass the threshold
and the same for complex

better than before, but still....

41 files changed:
SRC/cherfsx.f
SRC/cla_gercond_c.f
SRC/cla_gercond_x.f
SRC/cla_hercond_c.f
SRC/cla_hercond_x.f
SRC/cla_herfsx_extended.f
SRC/cla_porcond_c.f
SRC/cla_porcond_x.f
SRC/cla_syrcond_c.f
SRC/cla_syrcond_x.f
SRC/cla_syrfsx_extended.f
SRC/csyrfsx.f
SRC/dla_syrcond.f
SRC/dla_syrfsx_extended.f
SRC/dsyrfsx.f
SRC/sla_syrcond.f
SRC/sla_syrfsx_extended.f
SRC/ssyrfsx.f
SRC/zherfsx.f
SRC/zla_gercond_c.f
SRC/zla_gercond_x.f
SRC/zla_hercond_c.f
SRC/zla_hercond_x.f
SRC/zla_herfsx_extended.f
SRC/zla_porcond_c.f
SRC/zla_porcond_x.f
SRC/zla_syrcond_c.f
SRC/zla_syrcond_x.f
SRC/zla_syrfsx_extended.f
SRC/zsyrfsx.f
TESTING/LIN/cdrvhex.f
TESTING/LIN/cdrvsyx.f
TESTING/LIN/cerrhex.f
TESTING/LIN/cerrsyx.f
TESTING/LIN/ddrvsyx.f
TESTING/LIN/derrsyx.f
TESTING/LIN/sdrvsyx.f
TESTING/LIN/serrsyx.f
TESTING/LIN/zdrvsyx.f
TESTING/LIN/zerrhex.f
TESTING/LIN/zerrsyx.f

index a04f0e8..780c145 100644 (file)
       ELSE IF( LDAF.LT.MAX( 1, N ) ) THEN
         INFO = -8
       ELSE IF( LDB.LT.MAX( 1, N ) ) THEN
-        INFO = -11
+        INFO = -12
       ELSE IF( LDX.LT.MAX( 1, N ) ) THEN
-        INFO = -13
+        INFO = -14
       END IF
       IF( INFO.NE.0 ) THEN
         CALL XERBLA( 'CHERFSX', -INFO )
             IF ( RCOND_TMP .LT. ILLRCOND_THRESH ) THEN
                ERR_BNDS_COMP( J, LA_LINRX_ERR_I ) = 1.0
                ERR_BNDS_COMP( J, LA_LINRX_TRUST_I ) = 0.0
-               IF ( PARAMS( LA_LINRX_CWISE_I ) .EQ. 1.0
+               IF ( .NOT. IGNORE_CWISE
      $              .AND. INFO.LT.N + J ) INFO = N + J
             ELSE IF ( ERR_BNDS_COMP( J, LA_LINRX_ERR_I )
      $              .LT. ERR_LBND ) THEN
index 97d18a7..6a51689 100644 (file)
       NOTRANS = LSAME( TRANS, 'N' )
       IF ( .NOT. NOTRANS .AND. .NOT. LSAME( TRANS, 'T' ) .AND. .NOT.
      $     LSAME( TRANS, 'C' ) ) THEN
+         INFO = -1
       ELSE IF( N.LT.0 ) THEN
          INFO = -2
+      ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
+         INFO = -4
+      ELSE IF( LDAF.LT.MAX( 1, N ) ) THEN
+         INFO = -6
       END IF
       IF( INFO.NE.0 ) THEN
          CALL XERBLA( 'CLA_GERCOND_C', -INFO )
index 586c22c..a458f2b 100644 (file)
          INFO = -1
       ELSE IF( N.LT.0 ) THEN
          INFO = -2
+      ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
+         INFO = -4
+      ELSE IF( LDAF.LT.MAX( 1, N ) ) THEN
+         INFO = -6
       END IF
       IF( INFO.NE.0 ) THEN
          CALL XERBLA( 'CLA_GERCOND_X', -INFO )
index 1ae2ac8..2762cdd 100644 (file)
 *     .. Local Scalars ..
       INTEGER            KASE, I, J
       REAL               AINVNM, ANORM, TMP
-      LOGICAL            UP
+      LOGICAL            UP, UPPER
       COMPLEX            ZDUM
 *     ..
 *     .. Local Arrays ..
       CLA_HERCOND_C = 0.0E+0
 *
       INFO = 0
-      IF( N.LT.0 ) THEN
+      UPPER = LSAME( UPLO, 'U' )
+      IF( .NOT.UPPER .AND. .NOT.LSAME( UPLO, 'L' ) ) THEN
+         INFO = -1
+      ELSE IF( N.LT.0 ) THEN
          INFO = -2
+      ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
+         INFO = -4
+      ELSE IF( LDAF.LT.MAX( 1, N ) ) THEN
+         INFO = -6
       END IF
       IF( INFO.NE.0 ) THEN
          CALL XERBLA( 'CLA_HERCOND_C', -INFO )
index a164b0f..b7a93cc 100644 (file)
 *     .. Local Scalars ..
       INTEGER            KASE, I, J
       REAL               AINVNM, ANORM, TMP
-      LOGICAL            UP
+      LOGICAL            UP, UPPER
       COMPLEX            ZDUM
 *     ..
 *     .. Local Arrays ..
       CLA_HERCOND_X = 0.0E+0
 *
       INFO = 0
-      IF( N.LT.0 ) THEN
+      UPPER = LSAME( UPLO, 'U' )
+      IF( .NOT.UPPER .AND. .NOT.LSAME( UPLO, 'L' ) ) THEN
+         INFO = -1
+      ELSE IF ( N.LT.0 ) THEN
          INFO = -2
+      ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
+         INFO = -4
+      ELSE IF( LDAF.LT.MAX( 1, N ) ) THEN
+         INFO = -6
       END IF
       IF( INFO.NE.0 ) THEN
          CALL XERBLA( 'CLA_HERCOND_X', -INFO )
index d0d8013..013ff43 100644 (file)
 *> \verbatim
 *>          INFO is INTEGER
 *>       = 0:  Successful exit.
-*>       < 0:  if INFO = -i, the ith argument to CHETRS had an illegal
+*>       < 0:  if INFO = -i, the ith argument to CLA_HERFSX_EXTENDED had an illegal
 *>             value
 *> \endverbatim
 *
      $                   DZRAT, PREVNORMDX, PREV_DZ_Z, DXRATMAX,
      $                   DZRATMAX, DX_X, DZ_Z, FINAL_DX_X, FINAL_DZ_Z,
      $                   EPS, HUGEVAL, INCR_THRESH
-      LOGICAL            INCR_PREC
+      LOGICAL            INCR_PREC, UPPER
       COMPLEX            ZDUM
 *     ..
 *     .. Parameters ..
 *     ..
 *     .. Executable Statements ..
 *
-      IF (INFO.NE.0) RETURN
+      INFO = 0
+      UPPER = LSAME( UPLO, 'U' )
+      IF( .NOT.UPPER .AND. .NOT.LSAME( UPLO, 'L' ) ) THEN
+         INFO = -2
+      ELSE IF( N.LT.0 ) THEN
+         INFO = -3
+      ELSE IF( NRHS.LT.0 ) THEN
+         INFO = -4
+      ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
+         INFO = -6
+      ELSE IF( LDAF.LT.MAX( 1, N ) ) THEN
+         INFO = -8
+      ELSE IF( LDB.LT.MAX( 1, N ) ) THEN
+         INFO = -13
+      ELSE IF( LDY.LT.MAX( 1, N ) ) THEN
+         INFO = -15
+      END IF
+      IF( INFO.NE.0 ) THEN
+         CALL XERBLA( 'CLA_HERFSX_EXTENDED', -INFO )
+         RETURN
+      END IF
       EPS = SLAMCH( 'Epsilon' )
       HUGEVAL = SLAMCH( 'Overflow' )
 *     Force HUGEVAL to Inf
index adcc339..fdbbe98 100644 (file)
       INTEGER            KASE
       REAL               AINVNM, ANORM, TMP
       INTEGER            I, J
-      LOGICAL            UP
+      LOGICAL            UP, UPPER
       COMPLEX            ZDUM
 *     ..
 *     .. Local Arrays ..
       CLA_PORCOND_C = 0.0E+0
 *
       INFO = 0
-      IF( N.LT.0 ) THEN
+      UPPER = LSAME( UPLO, 'U' )
+      IF( .NOT.UPPER .AND. .NOT.LSAME( UPLO, 'L' ) ) THEN
+         INFO = -1
+      ELSE IF( N.LT.0 ) THEN
          INFO = -2
+      ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
+         INFO = -4
+      ELSE IF( LDAF.LT.MAX( 1, N ) ) THEN
+         INFO = -6
       END IF
       IF( INFO.NE.0 ) THEN
          CALL XERBLA( 'CLA_PORCOND_C', -INFO )
index ea275af..e7bd8c1 100644 (file)
 *     .. Local Scalars ..
       INTEGER            KASE, I, J
       REAL               AINVNM, ANORM, TMP
-      LOGICAL            UP
+      LOGICAL            UP, UPPER
       COMPLEX            ZDUM
 *     ..
 *     .. Local Arrays ..
       CLA_PORCOND_X = 0.0E+0
 *
       INFO = 0
-      IF( N.LT.0 ) THEN
+      UPPER = LSAME( UPLO, 'U' )
+      IF( .NOT.UPPER .AND. .NOT.LSAME( UPLO, 'L' ) ) THEN
+         INFO = -1
+      ELSE IF ( N.LT.0 ) THEN
          INFO = -2
+      ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
+         INFO = -4
+      ELSE IF( LDAF.LT.MAX( 1, N ) ) THEN
+         INFO = -6
       END IF
       IF( INFO.NE.0 ) THEN
          CALL XERBLA( 'CLA_PORCOND_X', -INFO )
index c1b68f4..c696546 100644 (file)
       INTEGER            KASE
       REAL               AINVNM, ANORM, TMP
       INTEGER            I, J
-      LOGICAL            UP
+      LOGICAL            UP, UPPER
       COMPLEX            ZDUM
 *     ..
 *     .. Local Arrays ..
       CLA_SYRCOND_C = 0.0E+0
 *
       INFO = 0
-      IF( N.LT.0 ) THEN
+      UPPER = LSAME( UPLO, 'U' )
+      IF( .NOT.UPPER .AND. .NOT.LSAME( UPLO, 'L' ) ) THEN
+         INFO = -1
+      ELSE IF( N.LT.0 ) THEN
          INFO = -2
+      ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
+         INFO = -4
+      ELSE IF( LDAF.LT.MAX( 1, N ) ) THEN
+         INFO = -6
       END IF
       IF( INFO.NE.0 ) THEN
          CALL XERBLA( 'CLA_SYRCOND_C', -INFO )
index a752ae9..5d232a3 100644 (file)
       INTEGER            KASE
       REAL               AINVNM, ANORM, TMP
       INTEGER            I, J
-      LOGICAL            UP
+      LOGICAL            UP, UPPER
       COMPLEX            ZDUM
 *     ..
 *     .. Local Arrays ..
       CLA_SYRCOND_X = 0.0E+0
 *
       INFO = 0
-      IF( N.LT.0 ) THEN
+      UPPER = LSAME( UPLO, 'U' )
+      IF( .NOT.UPPER .AND. .NOT.LSAME( UPLO, 'L' ) ) THEN
+         INFO = -1
+      ELSE IF ( N.LT.0 ) THEN
          INFO = -2
+      ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
+         INFO = -4
+      ELSE IF( LDAF.LT.MAX( 1, N ) ) THEN
+         INFO = -6
       END IF
       IF( INFO.NE.0 ) THEN
          CALL XERBLA( 'CLA_SYRCOND_X', -INFO )
index 423b232..fc0b74a 100644 (file)
 *> \verbatim
 *>          INFO is INTEGER
 *>       = 0:  Successful exit.
-*>       < 0:  if INFO = -i, the ith argument to CSYTRS had an illegal
+*>       < 0:  if INFO = -i, the ith argument to CLA_SYRFSX_EXTENDED had an illegal
 *>             value
 *> \endverbatim
 *
      $                   DZRAT, PREVNORMDX, PREV_DZ_Z, DXRATMAX,
      $                   DZRATMAX, DX_X, DZ_Z, FINAL_DX_X, FINAL_DZ_Z,
      $                   EPS, HUGEVAL, INCR_THRESH
-      LOGICAL            INCR_PREC
+      LOGICAL            INCR_PREC, UPPER
       COMPLEX            ZDUM
 *     ..
 *     .. Parameters ..
 *     ..
 *     .. Executable Statements ..
 *
-      IF ( INFO.NE.0 ) RETURN
+      INFO = 0
+      UPPER = LSAME( UPLO, 'U' )
+      IF( .NOT.UPPER .AND. .NOT.LSAME( UPLO, 'L' ) ) THEN
+         INFO = -2
+      ELSE IF( N.LT.0 ) THEN
+         INFO = -3
+      ELSE IF( NRHS.LT.0 ) THEN
+         INFO = -4
+      ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
+         INFO = -6
+      ELSE IF( LDAF.LT.MAX( 1, N ) ) THEN
+         INFO = -8
+      ELSE IF( LDB.LT.MAX( 1, N ) ) THEN
+         INFO = -13
+      ELSE IF( LDY.LT.MAX( 1, N ) ) THEN
+         INFO = -15
+      END IF
+      IF( INFO.NE.0 ) THEN
+         CALL XERBLA( 'CLA_SYRFSX_EXTENDED', -INFO )
+         RETURN
+      END IF
       EPS = SLAMCH( 'Epsilon' )
       HUGEVAL = SLAMCH( 'Overflow' )
 *     Force HUGEVAL to Inf
index 0ff61b1..6d76b4c 100644 (file)
       ELSE IF( LDAF.LT.MAX( 1, N ) ) THEN
         INFO = -8
       ELSE IF( LDB.LT.MAX( 1, N ) ) THEN
-        INFO = -11
+        INFO = -12
       ELSE IF( LDX.LT.MAX( 1, N ) ) THEN
-        INFO = -13
+        INFO = -14
       END IF
       IF( INFO.NE.0 ) THEN
         CALL XERBLA( 'CSYRFSX', -INFO )
             IF ( RCOND_TMP .LT. ILLRCOND_THRESH ) THEN
                ERR_BNDS_COMP( J, LA_LINRX_ERR_I ) = 1.0
                ERR_BNDS_COMP( J, LA_LINRX_TRUST_I ) = 0.0
-               IF ( PARAMS( LA_LINRX_CWISE_I ) .EQ. 1.0
+               IF ( .NOT. IGNORE_CWISE
      $              .AND. INFO.LT.N + J ) INFO = N + J
             ELSE IF ( ERR_BNDS_COMP( J, LA_LINRX_ERR_I )
      $              .LT. ERR_LBND ) THEN
index 1d6e781..f279a28 100644 (file)
       INFO = 0
       IF( N.LT.0 ) THEN
          INFO = -2
+      ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
+         INFO = -4
+      ELSE IF( LDAF.LT.MAX( 1, N ) ) THEN
+         INFO = -6
       END IF
       IF( INFO.NE.0 ) THEN
          CALL XERBLA( 'DLA_SYRCOND', -INFO )
index db2391a..3fd8334 100644 (file)
 *> \verbatim
 *>          INFO is INTEGER
 *>       = 0:  Successful exit.
-*>       < 0:  if INFO = -i, the ith argument to DSYTRS had an illegal
+*>       < 0:  if INFO = -i, the ith argument to DLA_SYRFSX_EXTENDED had an illegal
 *>             value
 *> \endverbatim
 *
      $                   DZRAT, PREVNORMDX, PREV_DZ_Z, DXRATMAX,
      $                   DZRATMAX, DX_X, DZ_Z, FINAL_DX_X, FINAL_DZ_Z,
      $                   EPS, HUGEVAL, INCR_THRESH
-      LOGICAL            INCR_PREC
+      LOGICAL            INCR_PREC, UPPER
 *     ..
 *     .. Parameters ..
       INTEGER            UNSTABLE_STATE, WORKING_STATE, CONV_STATE,
 *     ..
 *     .. Executable Statements ..
 *
-      IF ( INFO.NE.0 ) RETURN
+      INFO = 0
+      UPPER = LSAME( UPLO, 'U' )
+      IF( .NOT.UPPER .AND. .NOT.LSAME( UPLO, 'L' ) ) THEN
+         INFO = -2
+      ELSE IF( N.LT.0 ) THEN
+         INFO = -3
+      ELSE IF( NRHS.LT.0 ) THEN
+         INFO = -4
+      ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
+         INFO = -6
+      ELSE IF( LDAF.LT.MAX( 1, N ) ) THEN
+         INFO = -8
+      ELSE IF( LDB.LT.MAX( 1, N ) ) THEN
+         INFO = -13
+      ELSE IF( LDY.LT.MAX( 1, N ) ) THEN
+         INFO = -15
+      END IF
+      IF( INFO.NE.0 ) THEN
+         CALL XERBLA( 'DLA_SYRFSX_EXTENDED', -INFO )
+         RETURN
+      END IF
       EPS = DLAMCH( 'Epsilon' )
       HUGEVAL = DLAMCH( 'Overflow' )
 *     Force HUGEVAL to Inf
index fde1247..afa5581 100644 (file)
       ELSE IF( LDAF.LT.MAX( 1, N ) ) THEN
         INFO = -8
       ELSE IF( LDB.LT.MAX( 1, N ) ) THEN
-        INFO = -11
+        INFO = -12
       ELSE IF( LDX.LT.MAX( 1, N ) ) THEN
-        INFO = -13
+        INFO = -14
       END IF
       IF( INFO.NE.0 ) THEN
         CALL XERBLA( 'DSYRFSX', -INFO )
             IF ( RCOND_TMP .LT. ILLRCOND_THRESH ) THEN
                ERR_BNDS_COMP( J, LA_LINRX_ERR_I ) = 1.0D+0
                ERR_BNDS_COMP( J, LA_LINRX_TRUST_I ) = 0.0D+0
-               IF ( PARAMS( LA_LINRX_CWISE_I ) .EQ. 1.0D+0
+               IF ( .NOT. IGNORE_CWISE
      $              .AND. INFO.LT.N + J ) INFO = N + J
             ELSE IF ( ERR_BNDS_COMP( J, LA_LINRX_ERR_I )
      $              .LT. ERR_LBND ) THEN
index 3cff69d..20fa2de 100644 (file)
       INFO = 0
       IF( N.LT.0 ) THEN
          INFO = -2
+      ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
+         INFO = -4
+      ELSE IF( LDAF.LT.MAX( 1, N ) ) THEN
+         INFO = -6
       END IF
       IF( INFO.NE.0 ) THEN
          CALL XERBLA( 'SLA_SYRCOND', -INFO )
index 4a37b02..f8ae0d9 100644 (file)
 *> \verbatim
 *>          INFO is INTEGER
 *>       = 0:  Successful exit.
-*>       < 0:  if INFO = -i, the ith argument to SSYTRS had an illegal
+*>       < 0:  if INFO = -i, the ith argument to SLA_SYRFSX_EXTENDED had an illegal
 *>             value
 *> \endverbatim
 *
      $                   DZRAT, PREVNORMDX, PREV_DZ_Z, DXRATMAX,
      $                   DZRATMAX, DX_X, DZ_Z, FINAL_DX_X, FINAL_DZ_Z,
      $                   EPS, HUGEVAL, INCR_THRESH
-      LOGICAL            INCR_PREC
+      LOGICAL            INCR_PREC, UPPER
 *     ..
 *     .. Parameters ..
       INTEGER            UNSTABLE_STATE, WORKING_STATE, CONV_STATE,
 *     ..
 *     .. Executable Statements ..
 *
-      IF ( INFO.NE.0 ) RETURN
+      INFO = 0
+      UPPER = LSAME( UPLO, 'U' )
+      IF( .NOT.UPPER .AND. .NOT.LSAME( UPLO, 'L' ) ) THEN
+         INFO = -2
+      ELSE IF( N.LT.0 ) THEN
+         INFO = -3
+      ELSE IF( NRHS.LT.0 ) THEN
+         INFO = -4
+      ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
+         INFO = -6
+      ELSE IF( LDAF.LT.MAX( 1, N ) ) THEN
+         INFO = -8
+      ELSE IF( LDB.LT.MAX( 1, N ) ) THEN
+         INFO = -13
+      ELSE IF( LDY.LT.MAX( 1, N ) ) THEN
+         INFO = -15
+      END IF
+      IF( INFO.NE.0 ) THEN
+         CALL XERBLA( 'SLA_SYRFSX_EXTENDED', -INFO )
+         RETURN
+      END IF
       EPS = SLAMCH( 'Epsilon' )
       HUGEVAL = SLAMCH( 'Overflow' )
 *     Force HUGEVAL to Inf
index 611ce3a..9b9d70d 100644 (file)
       ELSE IF( LDAF.LT.MAX( 1, N ) ) THEN
         INFO = -8
       ELSE IF( LDB.LT.MAX( 1, N ) ) THEN
-        INFO = -11
+        INFO = -12
       ELSE IF( LDX.LT.MAX( 1, N ) ) THEN
-        INFO = -13
+        INFO = -14
       END IF
       IF( INFO.NE.0 ) THEN
         CALL XERBLA( 'SSYRFSX', -INFO )
             IF ( RCOND_TMP .LT. ILLRCOND_THRESH ) THEN
                ERR_BNDS_COMP( J, LA_LINRX_ERR_I ) = 1.0
                ERR_BNDS_COMP( J, LA_LINRX_TRUST_I ) = 0.0
-               IF ( PARAMS( LA_LINRX_CWISE_I ) .EQ. 1.0
+               IF ( .NOT. IGNORE_CWISE
      $              .AND. INFO.LT.N + J ) INFO = N + J
             ELSE IF ( ERR_BNDS_COMP( J, LA_LINRX_ERR_I )
      $              .LT. ERR_LBND ) THEN
index 6ecf5f2..f6b5a5e 100644 (file)
 *     .. Local Scalars ..
       CHARACTER(1)       NORM
       LOGICAL            RCEQU
-      INTEGER            IINFO, J, PREC_TYPE, REF_TYPE
+      INTEGER            J, PREC_TYPE, REF_TYPE
       INTEGER            N_NORMS
       DOUBLE PRECISION   ANORM, RCOND_TMP
       DOUBLE PRECISION   ILLRCOND_THRESH, ERR_LBND, CWISE_WRONG
       ELSE IF( LDAF.LT.MAX( 1, N ) ) THEN
         INFO = -8
       ELSE IF( LDB.LT.MAX( 1, N ) ) THEN
-        INFO = -11
+        INFO = -12
       ELSE IF( LDX.LT.MAX( 1, N ) ) THEN
-        INFO = -13
+        INFO = -14
       END IF
       IF( INFO.NE.0 ) THEN
         CALL XERBLA( 'ZHERFSX', -INFO )
       NORM = 'I'
       ANORM = ZLANHE( NORM, UPLO, N, A, LDA, RWORK )
       CALL ZHECON( UPLO, N, AF, LDAF, IPIV, ANORM, RCOND, WORK,
-     $     IINFO )
+     $     INFO )
 *
 *     Perform refinement on each right-hand side
 *
      $        WORK, RWORK, WORK(N+1),
      $        TRANSFER (RWORK(1:2*N), (/ (ZERO, ZERO) /), N), RCOND,
      $        ITHRESH, RTHRESH, UNSTABLE_THRESH, IGNORE_CWISE,
-     $        IINFO )
+     $        INFO )
       END IF
 
       ERR_LBND = MAX( 10.0D+0, SQRT( DBLE( N ) ) ) * DLAMCH( 'Epsilon' )
 *
          IF ( RCEQU ) THEN
             RCOND_TMP = ZLA_HERCOND_C( UPLO, N, A, LDA, AF, LDAF, IPIV,
-     $           S, .TRUE., IINFO, WORK, RWORK )
+     $           S, .TRUE., INFO, WORK, RWORK )
          ELSE
             RCOND_TMP = ZLA_HERCOND_C( UPLO, N, A, LDA, AF, LDAF, IPIV,
-     $           S, .FALSE., IINFO, WORK, RWORK )
+     $           S, .FALSE., INFO, WORK, RWORK )
          END IF
          DO J = 1, NRHS
 *
             IF ( ERR_BNDS_COMP( J, LA_LINRX_ERR_I ) .LT. CWISE_WRONG )
      $     THEN
                RCOND_TMP = ZLA_HERCOND_X( UPLO, N, A, LDA, AF, LDAF,
-     $         IPIV, X( 1, J ), IINFO, WORK, RWORK )
+     $         IPIV, X( 1, J ), INFO, WORK, RWORK )
             ELSE
                RCOND_TMP = 0.0D+0
             END IF
             IF ( RCOND_TMP .LT. ILLRCOND_THRESH ) THEN
                ERR_BNDS_COMP( J, LA_LINRX_ERR_I ) = 1.0D+0
                ERR_BNDS_COMP( J, LA_LINRX_TRUST_I ) = 0.0D+0
-               IF ( .NOT. IGNORE_CWISE 
-     $               .AND. INFO.LT.N + J ) INFO = N + J
+               IF ( .NOT. IGNORE_CWISE
+     $              .AND. INFO.LT.N + J ) INFO = N + J
             ELSE IF ( ERR_BNDS_COMP( J, LA_LINRX_ERR_I )
      $              .LT. ERR_LBND ) THEN
                ERR_BNDS_COMP( J, LA_LINRX_ERR_I ) = ERR_LBND
index 25f4d7c..10ce3dc 100644 (file)
       NOTRANS = LSAME( TRANS, 'N' )
       IF ( .NOT. NOTRANS .AND. .NOT. LSAME( TRANS, 'T' ) .AND. .NOT.
      $     LSAME( TRANS, 'C' ) ) THEN
+         INFO = -1
       ELSE IF( N.LT.0 ) THEN
          INFO = -2
+      ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
+         INFO = -4
+      ELSE IF( LDAF.LT.MAX( 1, N ) ) THEN
+         INFO = -6
       END IF
       IF( INFO.NE.0 ) THEN
          CALL XERBLA( 'ZLA_GERCOND_C', -INFO )
index e886a30..1f55ada 100644 (file)
          INFO = -1
       ELSE IF( N.LT.0 ) THEN
          INFO = -2
+      ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
+         INFO = -4
+      ELSE IF( LDAF.LT.MAX( 1, N ) ) THEN
+         INFO = -6
       END IF
       IF( INFO.NE.0 ) THEN
          CALL XERBLA( 'ZLA_GERCOND_X', -INFO )
index 77deaed..586cf9b 100644 (file)
 *     .. Local Scalars ..
       INTEGER            KASE, I, J
       DOUBLE PRECISION   AINVNM, ANORM, TMP
-      LOGICAL            UP
+      LOGICAL            UP, UPPER
       COMPLEX*16         ZDUM
 *     ..
 *     .. Local Arrays ..
       ZLA_HERCOND_C = 0.0D+0
 *
       INFO = 0
-      IF( N.LT.0 ) THEN
+      UPPER = LSAME( UPLO, 'U' )
+      IF( .NOT.UPPER .AND. .NOT.LSAME( UPLO, 'L' ) ) THEN
+         INFO = -1
+      ELSE IF( N.LT.0 ) THEN
          INFO = -2
+      ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
+         INFO = -4
+      ELSE IF( LDAF.LT.MAX( 1, N ) ) THEN
+         INFO = -6
       END IF
       IF( INFO.NE.0 ) THEN
          CALL XERBLA( 'ZLA_HERCOND_C', -INFO )
index 56fb0da..a3b19cf 100644 (file)
 *     .. Local Scalars ..
       INTEGER            KASE, I, J
       DOUBLE PRECISION   AINVNM, ANORM, TMP
-      LOGICAL            UP
+      LOGICAL            UP, UPPER
       COMPLEX*16         ZDUM
 *     ..
 *     .. Local Arrays ..
       ZLA_HERCOND_X = 0.0D+0
 *
       INFO = 0
-      IF( N.LT.0 ) THEN
+      UPPER = LSAME( UPLO, 'U' )
+      IF( .NOT.UPPER .AND. .NOT.LSAME( UPLO, 'L' ) ) THEN
+         INFO = -1
+      ELSE IF ( N.LT.0 ) THEN
          INFO = -2
+      ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
+         INFO = -4
+      ELSE IF( LDAF.LT.MAX( 1, N ) ) THEN
+         INFO = -6
       END IF
       IF( INFO.NE.0 ) THEN
          CALL XERBLA( 'ZLA_HERCOND_X', -INFO )
index 577a4af..9f8c4e3 100644 (file)
 *> \verbatim
 *>          INFO is INTEGER
 *>       = 0:  Successful exit.
-*>       < 0:  if INFO = -i, the ith argument to ZHETRS had an illegal
+*>       < 0:  if INFO = -i, the ith argument to ZLA_HERFSX_EXTENDED had an illegal
 *>             value
 *> \endverbatim
 *
      $                   DZRAT, PREVNORMDX, PREV_DZ_Z, DXRATMAX,
      $                   DZRATMAX, DX_X, DZ_Z, FINAL_DX_X, FINAL_DZ_Z,
      $                   EPS, HUGEVAL, INCR_THRESH
-      LOGICAL            INCR_PREC
+      LOGICAL            INCR_PREC, UPPER
       COMPLEX*16         ZDUM
 *     ..
 *     .. Parameters ..
 *     ..
 *     .. Executable Statements ..
 *
-      IF (INFO.NE.0) RETURN
+      INFO = 0
+      UPPER = LSAME( UPLO, 'U' )
+      IF( .NOT.UPPER .AND. .NOT.LSAME( UPLO, 'L' ) ) THEN
+         INFO = -2
+      ELSE IF( N.LT.0 ) THEN
+         INFO = -3
+      ELSE IF( NRHS.LT.0 ) THEN
+         INFO = -4
+      ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
+         INFO = -6
+      ELSE IF( LDAF.LT.MAX( 1, N ) ) THEN
+         INFO = -8
+      ELSE IF( LDB.LT.MAX( 1, N ) ) THEN
+         INFO = -13
+      ELSE IF( LDY.LT.MAX( 1, N ) ) THEN
+         INFO = -15
+      END IF
+      IF( INFO.NE.0 ) THEN
+         CALL XERBLA( 'ZLA_HERFSX_EXTENDED', -INFO )
+         RETURN
+      END IF
       EPS = DLAMCH( 'Epsilon' )
       HUGEVAL = DLAMCH( 'Overflow' )
 *     Force HUGEVAL to Inf
index ad481a7..806ef8c 100644 (file)
       INTEGER            KASE
       DOUBLE PRECISION   AINVNM, ANORM, TMP
       INTEGER            I, J
-      LOGICAL            UP
+      LOGICAL            UP, UPPER
       COMPLEX*16         ZDUM
 *     ..
 *     .. Local Arrays ..
       ZLA_PORCOND_C = 0.0D+0
 *
       INFO = 0
-      IF( N.LT.0 ) THEN
+      UPPER = LSAME( UPLO, 'U' )
+      IF( .NOT.UPPER .AND. .NOT.LSAME( UPLO, 'L' ) ) THEN
+         INFO = -1
+      ELSE IF( N.LT.0 ) THEN
          INFO = -2
+      ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
+         INFO = -4
+      ELSE IF( LDAF.LT.MAX( 1, N ) ) THEN
+         INFO = -6
       END IF
       IF( INFO.NE.0 ) THEN
          CALL XERBLA( 'ZLA_PORCOND_C', -INFO )
index ae839b6..d293df9 100644 (file)
 *     .. Local Scalars ..
       INTEGER            KASE, I, J
       DOUBLE PRECISION   AINVNM, ANORM, TMP
-      LOGICAL            UP
+      LOGICAL            UP, UPPER
       COMPLEX*16         ZDUM
 *     ..
 *     .. Local Arrays ..
       ZLA_PORCOND_X = 0.0D+0
 *
       INFO = 0
-      IF( N.LT.0 ) THEN
+      UPPER = LSAME( UPLO, 'U' )
+      IF( .NOT.UPPER .AND. .NOT.LSAME( UPLO, 'L' ) ) THEN
+         INFO = -1
+      ELSE IF ( N.LT.0 ) THEN
          INFO = -2
+      ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
+         INFO = -4
+      ELSE IF( LDAF.LT.MAX( 1, N ) ) THEN
+         INFO = -6
       END IF
       IF( INFO.NE.0 ) THEN
          CALL XERBLA( 'ZLA_PORCOND_X', -INFO )
index 64bdca5..f0ed72d 100644 (file)
       INTEGER            KASE
       DOUBLE PRECISION   AINVNM, ANORM, TMP
       INTEGER            I, J
-      LOGICAL            UP
+      LOGICAL            UP, UPPER
       COMPLEX*16         ZDUM
 *     ..
 *     .. Local Arrays ..
       ZLA_SYRCOND_C = 0.0D+0
 *
       INFO = 0
-      IF( N.LT.0 ) THEN
+      UPPER = LSAME( UPLO, 'U' )
+      IF( .NOT.UPPER .AND. .NOT.LSAME( UPLO, 'L' ) ) THEN
+         INFO = -1
+      ELSE IF( N.LT.0 ) THEN
          INFO = -2
+      ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
+         INFO = -4
+      ELSE IF( LDAF.LT.MAX( 1, N ) ) THEN
+         INFO = -6
       END IF
       IF( INFO.NE.0 ) THEN
          CALL XERBLA( 'ZLA_SYRCOND_C', -INFO )
index 1cc62e6..aeed038 100644 (file)
       INTEGER            KASE
       DOUBLE PRECISION   AINVNM, ANORM, TMP
       INTEGER            I, J
-      LOGICAL            UP
+      LOGICAL            UP, UPPER
       COMPLEX*16         ZDUM
 *     ..
 *     .. Local Arrays ..
       ZLA_SYRCOND_X = 0.0D+0
 *
       INFO = 0
-      IF( N.LT.0 ) THEN
+      UPPER = LSAME( UPLO, 'U' )
+      IF( .NOT.UPPER .AND. .NOT.LSAME( UPLO, 'L' ) ) THEN
+         INFO = -1
+      ELSE IF( N.LT.0 ) THEN
          INFO = -2
+      ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
+         INFO = -4
+      ELSE IF( LDAF.LT.MAX( 1, N ) ) THEN
+         INFO = -6
       END IF
       IF( INFO.NE.0 ) THEN
          CALL XERBLA( 'ZLA_SYRCOND_X', -INFO )
index 392dd13..7dcc80e 100644 (file)
 *> \verbatim
 *>          INFO is INTEGER
 *>       = 0:  Successful exit.
-*>       < 0:  if INFO = -i, the ith argument to ZSYTRS had an illegal
+*>       < 0:  if INFO = -i, the ith argument to ZLA_HERFSX_EXTENDED had an illegal
 *>             value
 *> \endverbatim
 *
      $                   DZRAT, PREVNORMDX, PREV_DZ_Z, DXRATMAX,
      $                   DZRATMAX, DX_X, DZ_Z, FINAL_DX_X, FINAL_DZ_Z,
      $                   EPS, HUGEVAL, INCR_THRESH
-      LOGICAL            INCR_PREC
+      LOGICAL            INCR_PREC, UPPER
       COMPLEX*16         ZDUM
 *     ..
 *     .. Parameters ..
 *     ..
 *     .. Executable Statements ..
 *
-      IF ( INFO.NE.0 ) RETURN
+      INFO = 0
+      UPPER = LSAME( UPLO, 'U' )
+      IF( .NOT.UPPER .AND. .NOT.LSAME( UPLO, 'L' ) ) THEN
+         INFO = -2
+      ELSE IF( N.LT.0 ) THEN
+         INFO = -3
+      ELSE IF( NRHS.LT.0 ) THEN
+         INFO = -4
+      ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
+         INFO = -6
+      ELSE IF( LDAF.LT.MAX( 1, N ) ) THEN
+         INFO = -8
+      ELSE IF( LDB.LT.MAX( 1, N ) ) THEN
+         INFO = -13
+      ELSE IF( LDY.LT.MAX( 1, N ) ) THEN
+         INFO = -15
+      END IF
+      IF( INFO.NE.0 ) THEN
+         CALL XERBLA( 'ZLA_HERFSX_EXTENDED', -INFO )
+         RETURN
+      END IF
       EPS = DLAMCH( 'Epsilon' )
       HUGEVAL = DLAMCH( 'Overflow' )
 *     Force HUGEVAL to Inf
index 3ffa677..ce61e5e 100644 (file)
       ELSE IF( LDAF.LT.MAX( 1, N ) ) THEN
         INFO = -8
       ELSE IF( LDB.LT.MAX( 1, N ) ) THEN
-        INFO = -11
+        INFO = -12
       ELSE IF( LDX.LT.MAX( 1, N ) ) THEN
-        INFO = -13
+        INFO = -14
       END IF
       IF( INFO.NE.0 ) THEN
         CALL XERBLA( 'ZSYRFSX', -INFO )
             IF ( RCOND_TMP .LT. ILLRCOND_THRESH ) THEN
                ERR_BNDS_COMP( J, LA_LINRX_ERR_I ) = 1.0D+0
                ERR_BNDS_COMP( J, LA_LINRX_TRUST_I ) = 0.0D+0
-               IF ( PARAMS( LA_LINRX_CWISE_I ) .EQ. 1.0D+0
+               IF (.NOT. IGNORE_CWISE
      $              .AND. INFO.LT.N + J ) INFO = N + J
             ELSE IF ( ERR_BNDS_COMP( J, LA_LINRX_ERR_I )
      $              .LT. ERR_LBND ) THEN
index 06dd79b..782c6c0 100644 (file)
 *
 *                 Check the error code from CHESVXX.
 *
-                  IF( INFO.NE.K ) THEN
+                  IF( INFO.NE.K .AND. INFO.LE.N ) THEN
                      CALL ALAERH( PATH, 'CHESVXX', INFO, K,
      $                    FACT // UPLO, N, N, -1, -1, NRHS, IMAT, NFAIL,
      $                    NERRS, NOUT )
index a85a800..58b5c14 100644 (file)
 *
 *                 Check the error code from CSYSVXX.
 *
-                  IF( INFO.NE.K ) THEN
+                  IF( INFO.NE.K .AND. INFO.LE.N ) THEN
                      CALL ALAERH( PATH, 'CSYSVXX', INFO, K,
      $                    FACT // UPLO, N, N, -1, -1, NRHS, IMAT, NFAIL,
      $                    NERRS, NOUT )
index cec7ce6..cc3d2f0 100644 (file)
      $        RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C, NPARAMS,
      $        PARAMS, W, R, INFO )
          CALL CHKXER( 'CHERFSX', INFOT, NOUT, LERR, OK )
-         INFOT = 11
+         INFOT = 12
          CALL CHERFSX( 'U', EQ, 2, 1, A, 2, AF, 2, IP, S, B, 1, X, 2,
      $        RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C, NPARAMS,
      $        PARAMS, W, R, INFO )
          CALL CHKXER( 'CHERFSX', INFOT, NOUT, LERR, OK )
-         INFOT = 13
+         INFOT = 14
          CALL CHERFSX( 'U', EQ, 2, 1, A, 2, AF, 2, IP, S, B, 2, X, 1,
      $        RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C, NPARAMS,
      $        PARAMS, W, R, INFO )
index 00b1670..f904176 100644 (file)
      $        RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C, NPARAMS,
      $        PARAMS, W, R, INFO )
          CALL CHKXER( 'CSYRFSX', INFOT, NOUT, LERR, OK )
-         INFOT = 11
+         INFOT = 12
          CALL CSYRFSX( 'U', EQ, 2, 1, A, 2, AF, 2, IP, S, B, 1, X, 2, 
      $        RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C, NPARAMS,
      $        PARAMS, W, R, INFO )
          CALL CHKXER( 'CSYRFSX', INFOT, NOUT, LERR, OK )
-         INFOT = 13
+         INFOT = 14
          CALL CSYRFSX( 'U', EQ, 2, 1, A, 2, AF, 2, IP, S, B, 2, X, 1, 
      $        RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C, NPARAMS,
      $        PARAMS, W, R, INFO )
index 2245c51..b09699b 100644 (file)
 *
 *                 Check the error code from DSYSVXX.
 *
-                  IF( INFO.NE.K ) THEN
+                  IF( INFO.NE.K .AND. INFO.LE.N ) THEN
                      CALL ALAERH( PATH, 'DSYSVXX', INFO, K,
      $                    FACT // UPLO, N, N, -1, -1, NRHS, IMAT, NFAIL,
      $                    NERRS, NOUT )
index 266b369..d94c02f 100644 (file)
      $        RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C, NPARAMS,
      $        PARAMS, W, IW, INFO )
          CALL CHKXER( 'DSYRFSX', INFOT, NOUT, LERR, OK )
-         INFOT = 11
+         INFOT = 12
          CALL DSYRFSX( 'U', EQ, 2, 1, A, 2, AF, 2, IP, S, B, 1, X, 2,
      $        RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C, NPARAMS,
      $        PARAMS, W, IW, INFO )
          CALL CHKXER( 'DSYRFSX', INFOT, NOUT, LERR, OK )
-         INFOT = 13
+         INFOT = 14
          CALL DSYRFSX( 'U', EQ, 2, 1, A, 2, AF, 2, IP, S, B, 2, X, 1,
      $        RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C, NPARAMS,
      $        PARAMS, W, IW, INFO )
index cf3616b..b3fc76f 100644 (file)
 *
 *                 Check the error code from SSYSVXX.
 *
-                  IF( INFO.NE.K ) THEN
+                  IF( INFO.NE.K .AND. INFO.LE.N ) THEN
                      CALL ALAERH( PATH, 'SSYSVXX', INFO, K,
      $                    FACT // UPLO, N, N, -1, -1, NRHS, IMAT, NFAIL,
      $                    NERRS, NOUT )
index 79ed25e..48513d9 100644 (file)
      $        RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C, NPARAMS,
      $        PARAMS, W, IW, INFO )
          CALL CHKXER( 'SSYRFSX', INFOT, NOUT, LERR, OK )
-         INFOT = 11
+         INFOT = 12
          CALL SSYRFSX( 'U', EQ, 2, 1, A, 2, AF, 2, IP, S, B, 1, X, 2,
      $        RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C, NPARAMS,
      $        PARAMS, W, IW, INFO )
          CALL CHKXER( 'SSYRFSX', INFOT, NOUT, LERR, OK )
-         INFOT = 13
+         INFOT = 14
          CALL SSYRFSX( 'U', EQ, 2, 1, A, 2, AF, 2, IP, S, B, 2, X, 1,
      $        RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C, NPARAMS,
      $        PARAMS, W, IW, INFO )
index 33ba010..9ea9c07 100644 (file)
 *
 *                 Check the error code from ZSYSVXX.
 *
-                  IF( INFO.NE.K ) THEN
+                  IF( INFO.NE.K .AND. INFO.LE.N ) THEN
                      CALL ALAERH( PATH, 'ZSYSVXX', INFO, K,
      $                    FACT // UPLO, N, N, -1, -1, NRHS, IMAT, NFAIL,
      $                    NERRS, NOUT )
index 3414893..7dafede 100644 (file)
      $        RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C, NPARAMS,
      $        PARAMS, W, R, INFO )
          CALL CHKXER( 'ZHERFSX', INFOT, NOUT, LERR, OK )
-         INFOT = 11
+         INFOT = 12
          CALL ZHERFSX( 'U', EQ, 2, 1, A, 2, AF, 2, IP, S, B, 1, X, 2,
      $        RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C, NPARAMS,
      $        PARAMS, W, R, INFO )
          CALL CHKXER( 'ZHERFSX', INFOT, NOUT, LERR, OK )
-         INFOT = 13
+         INFOT = 14
          CALL ZHERFSX( 'U', EQ, 2, 1, A, 2, AF, 2, IP, S, B, 2, X, 1,
      $        RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C, NPARAMS,
      $        PARAMS, W, R, INFO )
index a7c7bf8..3da57ae 100644 (file)
      $        RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C, NPARAMS,
      $        PARAMS, W, R, INFO )
          CALL CHKXER( 'ZSYRFSX', INFOT, NOUT, LERR, OK )
-         INFOT = 11
+         INFOT = 12
          CALL ZSYRFSX( 'U', EQ, 2, 1, A, 2, AF, 2, IP, S, B, 1, X, 2,
      $        RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C, NPARAMS,
      $        PARAMS, W, R, INFO )
          CALL CHKXER( 'ZSYRFSX', INFOT, NOUT, LERR, OK )
-         INFOT = 13
+         INFOT = 14
          CALL ZSYRFSX( 'U', EQ, 2, 1, A, 2, AF, 2, IP, S, B, 2, X, 1,
      $        RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C, NPARAMS,
      $        PARAMS, W, R, INFO )