From d1c0c25cd21baff8edfe9273b2f975ac81da2703 Mon Sep 17 00:00:00 2001 From: julie Date: Thu, 12 Apr 2012 00:56:00 +0000 Subject: Follow up to rev r1130 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.... --- SRC/zherfsx.f | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'SRC/zherfsx.f') diff --git a/SRC/zherfsx.f b/SRC/zherfsx.f index 6ecf5f21..f6b5a5ec 100644 --- a/SRC/zherfsx.f +++ b/SRC/zherfsx.f @@ -446,7 +446,7 @@ * .. 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 @@ -533,9 +533,9 @@ 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 ) @@ -589,7 +589,7 @@ 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 * @@ -603,7 +603,7 @@ $ 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' ) @@ -613,10 +613,10 @@ * 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 * @@ -661,7 +661,7 @@ 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 @@ -677,8 +677,8 @@ 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 -- cgit v1.2.3