Author: deaglanhalligan
Date: Tue Apr 7 20:05:18 2009
New Revision: 650
URL: https://icl.cs.utk.edu/trac/lapackdev/changeset/650
Log:
Updated documentation for EPIR routines. Changed ERRS_{N,C} variable names. Other cosmetic changes.
Modified:
lapack/trunk/SRC/cgbrfsx.f
lapack/trunk/SRC/cgerfsx.f
lapack/trunk/SRC/cherfsx.f
lapack/trunk/SRC/chesvxx.f
lapack/trunk/SRC/cla_gbrcond_c.f
lapack/trunk/SRC/cla_gbrcond_x.f
lapack/trunk/SRC/cla_gbrfsx_extended.f
lapack/trunk/SRC/cla_gbrpvgrw.f
lapack/trunk/SRC/cla_gercond_c.f
lapack/trunk/SRC/cla_gercond_x.f
lapack/trunk/SRC/cla_gerfsx_extended.f
lapack/trunk/SRC/cla_hercond_c.f
lapack/trunk/SRC/cla_hercond_x.f
lapack/trunk/SRC/cla_herfsx_extended.f
lapack/trunk/SRC/cla_herpvgrw.f
lapack/trunk/SRC/cla_lin_berr.f
lapack/trunk/SRC/cla_porcond_c.f
lapack/trunk/SRC/cla_porcond_x.f
lapack/trunk/SRC/cla_porfsx_extended.f
lapack/trunk/SRC/cla_porpvgrw.f
lapack/trunk/SRC/cla_rpvgrw.f
lapack/trunk/SRC/cla_syrcond_c.f
lapack/trunk/SRC/cla_syrcond_x.f
lapack/trunk/SRC/cla_syrfsx_extended.f
lapack/trunk/SRC/cla_syrpvgrw.f
lapack/trunk/SRC/clarscl2.f
lapack/trunk/SRC/clascl2.f
lapack/trunk/SRC/cporfsx.f
lapack/trunk/SRC/csyrfsx.f
lapack/trunk/SRC/csysvxx.f
lapack/trunk/SRC/dgbrfsx.f
lapack/trunk/SRC/dgerfsx.f
lapack/trunk/SRC/dla_gbrcond.f
lapack/trunk/SRC/dla_gbrfsx_extended.f
lapack/trunk/SRC/dla_gbrpvgrw.f
lapack/trunk/SRC/dla_gercond.f
lapack/trunk/SRC/dla_gerfsx_extended.f
lapack/trunk/SRC/dla_lin_berr.f
lapack/trunk/SRC/dla_porcond.f
lapack/trunk/SRC/dla_porfsx_extended.f
lapack/trunk/SRC/dla_porpvgrw.f
lapack/trunk/SRC/dla_rpvgrw.f
lapack/trunk/SRC/dla_syrcond.f
lapack/trunk/SRC/dla_syrfsx_extended.f
lapack/trunk/SRC/dla_syrpvgrw.f
lapack/trunk/SRC/dlarscl2.f
lapack/trunk/SRC/dlascl2.f
lapack/trunk/SRC/dporfsx.f
lapack/trunk/SRC/dsyrfsx.f
lapack/trunk/SRC/dsysvxx.f
lapack/trunk/SRC/sgbrfsx.f
lapack/trunk/SRC/sgerfsx.f
lapack/trunk/SRC/sla_gbrcond.f
lapack/trunk/SRC/sla_gbrfsx_extended.f
lapack/trunk/SRC/sla_gbrpvgrw.f
lapack/trunk/SRC/sla_gercond.f
lapack/trunk/SRC/sla_gerfsx_extended.f
lapack/trunk/SRC/sla_lin_berr.f
lapack/trunk/SRC/sla_porcond.f
lapack/trunk/SRC/sla_porfsx_extended.f
lapack/trunk/SRC/sla_porpvgrw.f
lapack/trunk/SRC/sla_rpvgrw.f
lapack/trunk/SRC/sla_syrcond.f
lapack/trunk/SRC/sla_syrfsx_extended.f
lapack/trunk/SRC/sla_syrpvgrw.f
lapack/trunk/SRC/slarscl2.f
lapack/trunk/SRC/slascl2.f
lapack/trunk/SRC/sporfsx.f
lapack/trunk/SRC/ssyrfsx.f
lapack/trunk/SRC/ssysvxx.f
lapack/trunk/SRC/zgbrfsx.f
lapack/trunk/SRC/zgerfsx.f
lapack/trunk/SRC/zherfsx.f
lapack/trunk/SRC/zhesvxx.f
lapack/trunk/SRC/zla_gbrcond_c.f
lapack/trunk/SRC/zla_gbrcond_x.f
lapack/trunk/SRC/zla_gbrfsx_extended.f
lapack/trunk/SRC/zla_gbrpvgrw.f
lapack/trunk/SRC/zla_gercond_c.f
lapack/trunk/SRC/zla_gercond_x.f
lapack/trunk/SRC/zla_gerfsx_extended.f
lapack/trunk/SRC/zla_hercond_c.f
lapack/trunk/SRC/zla_hercond_x.f
lapack/trunk/SRC/zla_herfsx_extended.f
lapack/trunk/SRC/zla_herpvgrw.f
lapack/trunk/SRC/zla_lin_berr.f
lapack/trunk/SRC/zla_porcond_c.f
lapack/trunk/SRC/zla_porcond_x.f
lapack/trunk/SRC/zla_porfsx_extended.f
lapack/trunk/SRC/zla_porpvgrw.f
lapack/trunk/SRC/zla_rpvgrw.f
lapack/trunk/SRC/zla_syrcond_c.f
lapack/trunk/SRC/zla_syrcond_x.f
lapack/trunk/SRC/zla_syrfsx_extended.f
lapack/trunk/SRC/zla_syrpvgrw.f
lapack/trunk/SRC/zlarscl2.f
lapack/trunk/SRC/zlascl2.f
lapack/trunk/SRC/zporfsx.f
lapack/trunk/SRC/zsyrfsx.f
lapack/trunk/SRC/zsysvxx.f
Modified: lapack/trunk/SRC/cgbrfsx.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/cgbrfsx.f?rev=650
==============================================================================
 lapack/trunk/SRC/cgbrfsx.f (original)
+++ lapack/trunk/SRC/cgbrfsx.f Tue Apr 7 20:05:18 2009
@@ 36,8 +36,8 @@
* equations and provides error bounds and backward error estimates
* for the solution. In addition to normwise error bound, the code
* provides maximum componentwise error bound if possible. See
* comments for ERR_BNDS_N and ERR_BNDS_C for details of the error
* bounds.
+* comments for ERR_BNDS_NORM and ERR_BNDS_COMP for details of the
+* error bounds.
*
* The original system of linear equations may have been equilibrated
* before calling this routine, as described by arguments EQUED, R
Modified: lapack/trunk/SRC/cgerfsx.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/cgerfsx.f?rev=650
==============================================================================
 lapack/trunk/SRC/cgerfsx.f (original)
+++ lapack/trunk/SRC/cgerfsx.f Tue Apr 7 20:05:18 2009
@@ 35,8 +35,8 @@
* equations and provides error bounds and backward error estimates
* for the solution. In addition to normwise error bound, the code
* provides maximum componentwise error bound if possible. See
* comments for ERR_BNDS_N and ERR_BNDS_C for details of the error
* bounds.
+* comments for ERR_BNDS_NORM and ERR_BNDS_COMP for details of the
+* error bounds.
*
* The original system of linear equations may have been equilibrated
* before calling this routine, as described by arguments EQUED, R
Modified: lapack/trunk/SRC/cherfsx.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/cherfsx.f?rev=650
==============================================================================
 lapack/trunk/SRC/cherfsx.f (original)
+++ lapack/trunk/SRC/cherfsx.f Tue Apr 7 20:05:18 2009
@@ 1,4 +1,4 @@
 Subroutine CHERFSX( UPLO, EQUED, N, NRHS, A, LDA, AF, LDAF, IPIV,
+ SUBROUTINE CHERFSX( UPLO, EQUED, N, NRHS, A, LDA, AF, LDAF, IPIV,
$ S, B, LDB, X, LDX, RCOND, BERR, N_ERR_BNDS,
$ ERR_BNDS_NORM, ERR_BNDS_COMP, NPARAMS, PARAMS,
$ WORK, RWORK, INFO )
@@ 35,7 +35,7 @@
* provides error bounds and backward error estimates for the
* solution. In addition to normwise error bound, the code provides
* maximum componentwise error bound if possible. See comments for
* ERR_BNDS_N and ERR_BNDS_C for details of the error bounds.
+* ERR_BNDS_NORM and ERR_BNDS_COMP for details of the error bounds.
*
* The original system of linear equations may have been equilibrated
* before calling this routine, as described by arguments EQUED and S
Modified: lapack/trunk/SRC/chesvxx.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/chesvxx.f?rev=650
==============================================================================
 lapack/trunk/SRC/chesvxx.f (original)
+++ lapack/trunk/SRC/chesvxx.f Tue Apr 7 20:05:18 2009
@@ 155,7 +155,7 @@
* IPIV (input or output) INTEGER array, dimension (N)
* If FACT = 'F', then IPIV is an input argument and on entry
* contains details of the interchanges and the block
* structure of D, as determined by SSYTRF. If IPIV(k) > 0,
+* structure of D, as determined by CHETRF. If IPIV(k) > 0,
* then rows and columns k and IPIV(k) were interchanged and
* D(k,k) is a 1by1 diagonal block. If UPLO = 'U' and
* IPIV(k) = IPIV(k1) < 0, then rows and columns k1 and
@@ 166,7 +166,7 @@
*
* If FACT = 'N', then IPIV is an output argument and on exit
* contains details of the interchanges and the block
* structure of D, as determined by SSYTRF.
+* structure of D, as determined by CHETRF.
*
* EQUED (input or output) CHARACTER*1
* Specifies the form of equilibration that was done.
Modified: lapack/trunk/SRC/cla_gbrcond_c.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/cla_gbrcond_c.f?rev=650
==============================================================================
 lapack/trunk/SRC/cla_gbrcond_c.f (original)
+++ lapack/trunk/SRC/cla_gbrcond_c.f Tue Apr 7 20:05:18 2009
@@ 32,11 +32,61 @@
* Arguments
* =========
*
* C REAL vector.
+* TRANS (input) CHARACTER*1
+* Specifies the form of the system of equations:
+* = 'N': A * X = B (No transpose)
+* = 'T': A**T * X = B (Transpose)
+* = 'C': A**H * X = B (Conjugate Transpose = Transpose)
+*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* KL (input) INTEGER
+* The number of subdiagonals within the band of A. KL >= 0.
+*
+* KU (input) INTEGER
+* The number of superdiagonals within the band of A. KU >= 0.
+*
+* AB (input) COMPLEX array, dimension (LDAB,N)
+* On entry, the matrix A in band storage, in rows 1 to KL+KU+1.
+* The jth column of A is stored in the jth column of the
+* array AB as follows:
+* AB(KU+1+ij,j) = A(i,j) for max(1,jKU)<=i<=min(N,j+kl)
+*
+* LDAB (input) INTEGER
+* The leading dimension of the array AB. LDAB >= KL+KU+1.
+*
+* AFB (input) COMPLEX array, dimension (LDAFB,N)
+* Details of the LU factorization of the band matrix A, as
+* computed by CGBTRF. U is stored as an upper triangular
+* band matrix with KL+KU superdiagonals in rows 1 to KL+KU+1,
+* and the multipliers used during the factorization are stored
+* in rows KL+KU+2 to 2*KL+KU+1.
+*
+* LDAFB (input) INTEGER
+* The leading dimension of the array AFB. LDAFB >= 2*KL+KU+1.
+*
+* IPIV (input) INTEGER array, dimension (N)
+* The pivot indices from the factorization A = P*L*U
+* as computed by CGBTRF; row i of the matrix was interchanged
+* with row IPIV(i).
+*
+* C (input) REAL array, dimension (N)
+* The vector C in the formula op(A) * inv(diag(C)).
+*
+* CAPPLY (input) LOGICAL
+* If .TRUE. then access the vector C in the formula above.
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* i > 0: The ith argument is invalid.
*
* WORK COMPLEX workspace of size 2*N.
+* WORK (input) COMPLEX array, dimension (2*N).
+* Workspace.
*
* RWORK REAL workspace of size N.
+* RWORK (input) REAL array, dimension (N).
+* Workspace.
*
* =====================================================================
*
@@ 72,16 +122,17 @@
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( KL.LT.0 .OR. KL.GT.N1 ) THEN
 INFO = 4
+ INFO = 3
ELSE IF( KU.LT.0 .OR. KU.GT.N1 ) THEN
 INFO = 5
+ INFO = 4
ELSE IF( LDAB.LT.KL+KU+1 ) THEN
 INFO = 8
+ INFO = 6
ELSE IF( LDAFB.LT.2*KL+KU+1 ) THEN
 INFO = 10
+ INFO = 8
END IF
IF( INFO.NE.0 ) THEN
CALL XERBLA( 'CLA_GBRCOND_C', INFO )
Modified: lapack/trunk/SRC/cla_gbrcond_x.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/cla_gbrcond_x.f?rev=650
==============================================================================
 lapack/trunk/SRC/cla_gbrcond_x.f (original)
+++ lapack/trunk/SRC/cla_gbrcond_x.f Tue Apr 7 20:05:18 2009
@@ 31,11 +31,58 @@
* Arguments
* =========
*
* X COMPLEX vector.
+* TRANS (input) CHARACTER*1
+* Specifies the form of the system of equations:
+* = 'N': A * X = B (No transpose)
+* = 'T': A**T * X = B (Transpose)
+* = 'C': A**H * X = B (Conjugate Transpose = Transpose)
+*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* KL (input) INTEGER
+* The number of subdiagonals within the band of A. KL >= 0.
+*
+* KU (input) INTEGER
+* The number of superdiagonals within the band of A. KU >= 0.
+*
+* AB (input) COMPLEX array, dimension (LDAB,N)
+* On entry, the matrix A in band storage, in rows 1 to KL+KU+1.
+* The jth column of A is stored in the jth column of the
+* array AB as follows:
+* AB(KU+1+ij,j) = A(i,j) for max(1,jKU)<=i<=min(N,j+kl)
+*
+* LDAB (input) INTEGER
+* The leading dimension of the array AB. LDAB >= KL+KU+1.
+*
+* AFB (input) COMPLEX array, dimension (LDAFB,N)
+* Details of the LU factorization of the band matrix A, as
+* computed by CGBTRF. U is stored as an upper triangular
+* band matrix with KL+KU superdiagonals in rows 1 to KL+KU+1,
+* and the multipliers used during the factorization are stored
+* in rows KL+KU+2 to 2*KL+KU+1.
+*
+* LDAFB (input) INTEGER
+* The leading dimension of the array AFB. LDAFB >= 2*KL+KU+1.
+*
+* IPIV (input) INTEGER array, dimension (N)
+* The pivot indices from the factorization A = P*L*U
+* as computed by CGBTRF; row i of the matrix was interchanged
+* with row IPIV(i).
+*
+* X (input) COMPLEX array, dimension (N)
+* The vector X in the formula op(A) * diag(X).
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* i > 0: The ith argument is invalid.
*
* WORK COMPLEX workspace of size 2*N.
+* WORK (input) COMPLEX array, dimension (2*N).
+* Workspace.
*
* RWORK REAL workspace of size N.
+* RWORK (input) REAL array, dimension (N).
+* Workspace.
*
* =====================================================================
*
@@ 76,13 +123,13 @@
ELSE IF( N.LT.0 ) THEN
INFO = 2
ELSE IF( KL.LT.0 .OR. KL.GT.N1 ) THEN
 INFO = 4
+ INFO = 3
ELSE IF( KU.LT.0 .OR. KU.GT.N1 ) THEN
 INFO = 5
+ INFO = 4
ELSE IF( LDAB.LT.KL+KU+1 ) THEN
 INFO = 8
+ INFO = 6
ELSE IF( LDAFB.LT.2*KL+KU+1 ) THEN
 INFO = 10
+ INFO = 8
END IF
IF( INFO.NE.0 ) THEN
CALL XERBLA( 'CLA_GBRCOND_X', INFO )
Modified: lapack/trunk/SRC/cla_gbrfsx_extended.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/cla_gbrfsx_extended.f?rev=650
==============================================================================
 lapack/trunk/SRC/cla_gbrfsx_extended.f (original)
+++ lapack/trunk/SRC/cla_gbrfsx_extended.f Tue Apr 7 20:05:18 2009
@@ 1,10 +1,10 @@
SUBROUTINE CLA_GBRFSX_EXTENDED ( PREC_TYPE, TRANS_TYPE, N, KL, KU,
$ NRHS, AB, LDAB, AFB, LDAFB, IPIV,
$ COLEQU, C, B, LDB, Y, LDY,
 $ BERR_OUT, N_NORMS, ERRS_N, ERRS_C,
 $ RES, AYB, DY, Y_TAIL, RCOND,
 $ ITHRESH, RTHRESH, DZ_UB,
 $ IGNORE_CWISE, INFO )
+ $ BERR_OUT, N_NORMS, ERR_BNDS_NORM,
+ $ ERR_BNDS_COMP, RES, AYB, DY,
+ $ Y_TAIL, RCOND, ITHRESH, RTHRESH,
+ $ DZ_UB, IGNORE_CWISE, INFO )
*
*  LAPACK routine (version 3.2) 
*  Contributed by James Demmel, Deaglan Halligan, Yozo Hida and 
@@ 27,17 +27,263 @@
COMPLEX AB( LDAB, * ), AFB( LDAFB, * ), B( LDB, * ),
$ Y( LDY, * ), RES( * ), DY( * ), Y_TAIL( * )
REAL C( * ), AYB(*), RCOND, BERR_OUT( * ),
 $ ERRS_N( NRHS, * ), ERRS_C( NRHS, * )
+ $ ERR_BNDS_NORM( NRHS, * ),
+ $ ERR_BNDS_COMP( NRHS, * )
* ..
*
* Purpose
* =======
*
* CLA_GBRFSX_EXTENDED computes ... .
+* CLA_GBRFSX_EXTENDED improves the computed solution to a system of
+* linear equations by performing extraprecise iterative refinement
+* and provides error bounds and backward error estimates for the solution.
+* This subroutine is called by CGBRFSX to perform iterative refinement.
+* In addition to normwise error bound, the code provides maximum
+* componentwise error bound if possible. See comments for ERR_BNDS_NORM
+* and ERR_BNDS_COMP for details of the error bounds. Note that this
+* subroutine is only resonsible for setting the second fields of
+* ERR_BNDS_NORM and ERR_BNDS_COMP.
*
* Arguments
* =========
*
+* PREC_TYPE (input) INTEGER
+* Specifies the intermediate precision to be used in refinement.
+* The value is defined by ILAPREC(P) where P is a CHARACTER and
+* P = 'S': Single
+* = 'D': Double
+* = 'I': Indigenous
+* = 'X', 'E': Extra
+*
+* TRANS_TYPE (input) INTEGER
+* Specifies the transposition operation on A.
+* The value is defined by ILATRANS(T) where T is a CHARACTER and
+* T = 'N': No transpose
+* = 'T': Transpose
+* = 'C': Conjugate transpose
+*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* KL (input) INTEGER
+* The number of subdiagonals within the band of A. KL >= 0.
+*
+* KU (input) INTEGER
+* The number of superdiagonals within the band of A. KU >= 0
+*
+* NRHS (input) INTEGER
+* The number of righthandsides, i.e., the number of columns of the
+* matrix B.
+*
+* AB (input) COMPLEX array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDAB (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AFB (input) COMPLEX array, dimension (LDAF,N)
+* The factors L and U from the factorization
+* A = P*L*U as computed by CGBTRF.
+*
+* LDAFB (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* IPIV (input) INTEGER array, dimension (N)
+* The pivot indices from the factorization A = P*L*U
+* as computed by CGBTRF; row i of the matrix was interchanged
+* with row IPIV(i).
+*
+* COLEQU (input) LOGICAL
+* If .TRUE. then column equilibration was done to A before calling
+* this routine. This is needed to compute the solution and error
+* bounds correctly.
+*
+* C (input) REAL array, dimension (N)
+* The column scale factors for A. If COLEQU = .FALSE., C
+* is not accessed. If C is input, each element of C should be a power
+* of the radix to ensure a reliable solution and error estimates.
+* Scaling by powers of the radix does not cause rounding errors unless
+* the result underflows or overflows. Rounding errors during scaling
+* lead to refining with a matrix that is not equivalent to the
+* input matrix, producing error estimates that may not be
+* reliable.
+*
+* B (input) COMPLEX array, dimension (LDB,NRHS)
+* The righthandside matrix B.
+*
+* LDB (input) INTEGER
+* The leading dimension of the array B. LDB >= max(1,N).
+*
+* Y (input/output) COMPLEX array, dimension (LDY,NRHS)
+* On entry, the solution matrix X, as computed by CGBTRS.
+* On exit, the improved solution matrix Y.
+*
+* LDY (input) INTEGER
+* The leading dimension of the array Y. LDY >= max(1,N).
+*
+* BERR_OUT (output) REAL array, dimension (NRHS)
+* On exit, BERR_OUT(j) contains the componentwise relative backward
+* error for righthandside j from the formula
+* max(i) ( abs(RES(i)) / ( abs(op(A_s))*abs(Y) + abs(B_s) )(i) )
+* where abs(Z) is the componentwise absolute value of the matrix
+* or vector Z. This is computed by CLA_LIN_BERR.
+*
+* N_NORMS (input) INTEGER
+* Determines which error bounds to return (see ERR_BNDS_NORM
+* and ERR_BNDS_COMP).
+* If N_NORMS >= 1 return normwise error bounds.
+* If N_NORMS >= 2 return componentwise error bounds.
+*
+* ERR_BNDS_NORM (input/output) REAL array, dimension
+* (NRHS, N_ERR_BNDS)
+* For each righthand side, this array contains information about
+* various error bounds and condition numbers corresponding to the
+* normwise relative error, which is defined as follows:
+*
+* Normwise relative error in the ith solution vector:
+* max_j (abs(XTRUE(j,i)  X(j,i)))
+* 
+* max_j abs(X(j,i))
+*
+* The array is indexed by the type of error information as described
+* below. There currently are up to three pieces of information
+* returned.
+*
+* The first index in ERR_BNDS_NORM(i,:) corresponds to the ith
+* righthand side.
+*
+* The second index in ERR_BNDS_NORM(:,err) contains the following
+* three fields:
+* err = 1 "Trust/don't trust" boolean. Trust the answer if the
+* reciprocal condition number is less than the threshold
+* sqrt(n) * slamch('Epsilon').
+*
+* err = 2 "Guaranteed" error bound: The estimated forward error,
+* almost certainly within a factor of 10 of the true error
+* so long as the next entry is greater than the threshold
+* sqrt(n) * slamch('Epsilon'). This error bound should only
+* be trusted if the previous boolean is true.
+*
+* err = 3 Reciprocal condition number: Estimated normwise
+* reciprocal condition number. Compared with the threshold
+* sqrt(n) * slamch('Epsilon') to determine if the error
+* estimate is "guaranteed". These reciprocal condition
+* numbers are 1 / (norm(Z^{1},inf) * norm(Z,inf)) for some
+* appropriately scaled matrix Z.
+* Let Z = S*A, where S scales each row by a power of the
+* radix so all absolute row sums of Z are approximately 1.
+*
+* This subroutine is only responsible for setting the second field
+* above.
+* See Lapack Working Note 165 for further details and extra
+* cautions.
+*
+* ERR_BNDS_COMP (input/output) REAL array, dimension
+* (NRHS, N_ERR_BNDS)
+* For each righthand side, this array contains information about
+* various error bounds and condition numbers corresponding to the
+* componentwise relative error, which is defined as follows:
+*
+* Componentwise relative error in the ith solution vector:
+* abs(XTRUE(j,i)  X(j,i))
+* max_j 
+* abs(X(j,i))
+*
+* The array is indexed by the righthand side i (on which the
+* componentwise relative error depends), and the type of error
+* information as described below. There currently are up to three
+* pieces of information returned for each righthand side. If
+* componentwise accuracy is not requested (PARAMS(3) = 0.0), then
+* ERR_BNDS_COMP is not accessed. If N_ERR_BNDS .LT. 3, then at most
+* the first (:,N_ERR_BNDS) entries are returned.
+*
+* The first index in ERR_BNDS_COMP(i,:) corresponds to the ith
+* righthand side.
+*
+* The second index in ERR_BNDS_COMP(:,err) contains the following
+* three fields:
+* err = 1 "Trust/don't trust" boolean. Trust the answer if the
+* reciprocal condition number is less than the threshold
+* sqrt(n) * slamch('Epsilon').
+*
+* err = 2 "Guaranteed" error bound: The estimated forward error,
+* almost certainly within a factor of 10 of the true error
+* so long as the next entry is greater than the threshold
+* sqrt(n) * slamch('Epsilon'). This error bound should only
+* be trusted if the previous boolean is true.
+*
+* err = 3 Reciprocal condition number: Estimated componentwise
+* reciprocal condition number. Compared with the threshold
+* sqrt(n) * slamch('Epsilon') to determine if the error
+* estimate is "guaranteed". These reciprocal condition
+* numbers are 1 / (norm(Z^{1},inf) * norm(Z,inf)) for some
+* appropriately scaled matrix Z.
+* Let Z = S*(A*diag(x)), where x is the solution for the
+* current righthand side and S scales each row of
+* A*diag(x) by a power of the radix so all absolute row
+* sums of Z are approximately 1.
+*
+* This subroutine is only responsible for setting the second field
+* above.
+* See Lapack Working Note 165 for further details and extra
+* cautions.
+*
+* RES (input) COMPLEX array, dimension (N)
+* Workspace to hold the intermediate residual.
+*
+* AYB (input) REAL array, dimension (N)
+* Workspace.
+*
+* DY (input) COMPLEX array, dimension (N)
+* Workspace to hold the intermediate solution.
+*
+* Y_TAIL (input) COMPLEX array, dimension (N)
+* Workspace to hold the trailing bits of the intermediate solution.
+*
+* RCOND (input) REAL
+* Reciprocal scaled condition number. This is an estimate of the
+* reciprocal Skeel condition number of the matrix A after
+* equilibration (if done). If this is less than the machine
+* precision (in particular, if it is zero), the matrix is singular
+* to working precision. Note that the error may still be small even
+* if this number is very small and the matrix appears ill
+* conditioned.
+*
+* ITHRESH (input) INTEGER
+* The maximum number of residual computations allowed for
+* refinement. The default is 10. For 'aggressive' set to 100 to
+* permit convergence using approximate factorizations or
+* factorizations other than LU. If the factorization uses a
+* technique other than Gaussian elimination, the guarantees in
+* ERR_BNDS_NORM and ERR_BNDS_COMP may no longer be trustworthy.
+*
+* RTHRESH (input) REAL
+* Determines when to stop refinement if the error estimate stops
+* decreasing. Refinement will stop when the next solution no longer
+* satisfies norm(dx_{i+1}) < RTHRESH * norm(dx_i) where norm(Z) is
+* the infinity norm of Z. RTHRESH satisfies 0 < RTHRESH <= 1. The
+* default value is 0.5. For 'aggressive' set to 0.9 to permit
+* convergence on extremely illconditioned matrices. See LAWN 165
+* for more details.
+*
+* DZ_UB (input) REAL
+* Determines when to start considering componentwise convergence.
+* Componentwise convergence is only considered after each component
+* of the solution Y is stable, which we definte as the relative
+* change in each component being less than DZ_UB. The default value
+* is 0.25, requiring the first bit to be stable. See LAWN 165 for
+* more details.
+*
+* IGNORE_CWISE (input) LOGICAL
+* If .TRUE. then ignore componentwise convergence. Default value
+* is .FALSE..
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* < 0: if INFO = i, the ith argument to CGBTRS had an illegal
+* value
+*
* =====================================================================
*
* .. Local Scalars ..
@@ 282,10 +528,12 @@
* Compute error bounds.
*
IF ( N_NORMS .GE. 1 ) THEN
 ERRS_N( J, LA_LINRX_ERR_I ) = FINAL_DX_X / (1  DXRATMAX)
+ ERR_BNDS_NORM( J, LA_LINRX_ERR_I ) =
+ $ FINAL_DX_X / (1  DXRATMAX)
END IF
IF ( N_NORMS .GE. 2 ) THEN
 ERRS_C( J, LA_LINRX_ERR_I ) = FINAL_DZ_Z / (1  DZRATMAX)
+ ERR_BNDS_COMP( J, LA_LINRX_ERR_I ) =
+ $ FINAL_DZ_Z / (1  DZRATMAX)
END IF
*
* Compute componentwise relative backward error from formula
Modified: lapack/trunk/SRC/cla_gbrpvgrw.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/cla_gbrpvgrw.f?rev=650
==============================================================================
 lapack/trunk/SRC/cla_gbrpvgrw.f (original)
+++ lapack/trunk/SRC/cla_gbrpvgrw.f Tue Apr 7 20:05:18 2009
@@ 20,12 +20,49 @@
*
* Purpose
* =======
*
* CLA_GBRPVGRW computes ... .
+*
+* CLA_GBRPVGRW computes the reciprocal pivot growth factor
+* norm(A)/norm(U). The "max absolute element" norm is used. If this is
+* much less than 1, the stability of the LU factorization of the
+* (equilibrated) matrix A could be poor. This also means that the
+* solution X, estimated condition numbers, and error bounds could be
+* unreliable.
*
* Arguments
* =========
*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* KL (input) INTEGER
+* The number of subdiagonals within the band of A. KL >= 0.
+*
+* KU (input) INTEGER
+* The number of superdiagonals within the band of A. KU >= 0.
+*
+* NCOLS (input) INTEGER
+* The number of columns of the matrix A. NCOLS >= 0.
+*
+* AB (input) COMPLEX array, dimension (LDAB,N)
+* On entry, the matrix A in band storage, in rows 1 to KL+KU+1.
+* The jth column of A is stored in the jth column of the
+* array AB as follows:
+* AB(KU+1+ij,j) = A(i,j) for max(1,jKU)<=i<=min(N,j+kl)
+*
+* LDAB (input) INTEGER
+* The leading dimension of the array AB. LDAB >= KL+KU+1.
+*
+* AFB (input) COMPLEX array, dimension (LDAFB,N)
+* Details of the LU factorization of the band matrix A, as
+* computed by CGBTRF. U is stored as an upper triangular
+* band matrix with KL+KU superdiagonals in rows 1 to KL+KU+1,
+* and the multipliers used during the factorization are stored
+* in rows KL+KU+2 to 2*KL+KU+1.
+*
+* LDAFB (input) INTEGER
+* The leading dimension of the array AFB. LDAFB >= 2*KL+KU+1.
+*
* =====================================================================
*
* .. Local Scalars ..
@@ 45,7 +82,7 @@
* .. Executable Statements ..
*
RPVGRW = 1.0
*
+
KD = KU + 1
DO J = 1, NCOLS
AMAX = 0.0
Modified: lapack/trunk/SRC/cla_gercond_c.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/cla_gercond_c.f?rev=650
==============================================================================
 lapack/trunk/SRC/cla_gercond_c.f (original)
+++ lapack/trunk/SRC/cla_gercond_c.f Tue Apr 7 20:05:18 2009
@@ 31,11 +31,49 @@
* Arguments
* =========
*
* C REAL vector.
+* TRANS (input) CHARACTER*1
+* Specifies the form of the system of equations:
+* = 'N': A * X = B (No transpose)
+* = 'T': A**T * X = B (Transpose)
+* = 'C': A**H * X = B (Conjugate Transpose = Transpose)
*
* WORK COMPLEX workspace of size 2*N.
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
*
* RWORK REAL workspace of size N.
+* A (input) COMPLEX array, dimension (LDA,N)
+* On entry, the NbyN matrix A
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) COMPLEX array, dimension (LDAF,N)
+* The factors L and U from the factorization
+* A = P*L*U as computed by CGETRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* IPIV (input) INTEGER array, dimension (N)
+* The pivot indices from the factorization A = P*L*U
+* as computed by CGETRF; row i of the matrix was interchanged
+* with row IPIV(i).
+*
+* C (input) REAL array, dimension (N)
+* The vector C in the formula op(A) * inv(diag(C)).
+*
+* CAPPLY (input) LOGICAL
+* If .TRUE. then access the vector C in the formula above.
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* i > 0: The ith argument is invalid.
+*
+* WORK (input) COMPLEX array, dimension (2*N).
+* Workspace.
+*
+* RWORK (input) REAL array, dimension (N).
+* Workspace.
*
* =====================================================================
*
Modified: lapack/trunk/SRC/cla_gercond_x.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/cla_gercond_x.f?rev=650
==============================================================================
 lapack/trunk/SRC/cla_gercond_x.f (original)
+++ lapack/trunk/SRC/cla_gercond_x.f Tue Apr 7 20:05:18 2009
@@ 30,11 +30,46 @@
* Arguments
* =========
*
* X COMPLEX vector.
+* TRANS (input) CHARACTER*1
+* Specifies the form of the system of equations:
+* = 'N': A * X = B (No transpose)
+* = 'T': A**T * X = B (Transpose)
+* = 'C': A**H * X = B (Conjugate Transpose = Transpose)
+*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* A (input) COMPLEX array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) COMPLEX array, dimension (LDAF,N)
+* The factors L and U from the factorization
+* A = P*L*U as computed by CGETRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* IPIV (input) INTEGER array, dimension (N)
+* The pivot indices from the factorization A = P*L*U
+* as computed by CGETRF; row i of the matrix was interchanged
+* with row IPIV(i).
+*
+* X (input) COMPLEX array, dimension (N)
+* The vector X in the formula op(A) * diag(X).
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* i > 0: The ith argument is invalid.
*
* WORK COMPLEX workspace of size 2*N.
+* WORK (input) COMPLEX array, dimension (2*N).
+* Workspace.
*
* RWORK REAL workspace of size N.
+* RWORK (input) REAL array, dimension (N).
+* Workspace.
*
* =====================================================================
*
Modified: lapack/trunk/SRC/cla_gerfsx_extended.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/cla_gerfsx_extended.f?rev=650
==============================================================================
 lapack/trunk/SRC/cla_gerfsx_extended.f (original)
+++ lapack/trunk/SRC/cla_gerfsx_extended.f Tue Apr 7 20:05:18 2009
@@ 33,11 +33,248 @@
* Purpose
* =======
*
* CLA_GERFSX_EXTENDED computes ... .
+* CLA_GERFSX_EXTENDED improves the computed solution to a system of
+* linear equations by performing extraprecise iterative refinement
+* and provides error bounds and backward error estimates for the solution.
+* This subroutine is called by CGERFSX to perform iterative refinement.
+* In addition to normwise error bound, the code provides maximum
+* componentwise error bound if possible. See comments for ERR_BNDS_NORM
+* and ERR_BNDS_COMP for details of the error bounds. Note that this
+* subroutine is only resonsible for setting the second fields of
+* ERR_BNDS_NORM and ERR_BNDS_COMP.
*
* Arguments
* =========
*
+* PREC_TYPE (input) INTEGER
+* Specifies the intermediate precision to be used in refinement.
+* The value is defined by ILAPREC(P) where P is a CHARACTER and
+* P = 'S': Single
+* = 'D': Double
+* = 'I': Indigenous
+* = 'X', 'E': Extra
+*
+* TRANS_TYPE (input) INTEGER
+* Specifies the transposition operation on A.
+* The value is defined by ILATRANS(T) where T is a CHARACTER and
+* T = 'N': No transpose
+* = 'T': Transpose
+* = 'C': Conjugate transpose
+*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* NRHS (input) INTEGER
+* The number of righthandsides, i.e., the number of columns of the
+* matrix B.
+*
+* A (input) COMPLEX array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) COMPLEX array, dimension (LDAF,N)
+* The factors L and U from the factorization
+* A = P*L*U as computed by CGETRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* IPIV (input) INTEGER array, dimension (N)
+* The pivot indices from the factorization A = P*L*U
+* as computed by CGETRF; row i of the matrix was interchanged
+* with row IPIV(i).
+*
+* COLEQU (input) LOGICAL
+* If .TRUE. then column equilibration was done to A before calling
+* this routine. This is needed to compute the solution and error
+* bounds correctly.
+*
+* C (input) REAL array, dimension (N)
+* The column scale factors for A. If COLEQU = .FALSE., C
+* is not accessed. If C is input, each element of C should be a power
+* of the radix to ensure a reliable solution and error estimates.
+* Scaling by powers of the radix does not cause rounding errors unless
+* the result underflows or overflows. Rounding errors during scaling
+* lead to refining with a matrix that is not equivalent to the
+* input matrix, producing error estimates that may not be
+* reliable.
+*
+* B (input) COMPLEX array, dimension (LDB,NRHS)
+* The righthandside matrix B.
+*
+* LDB (input) INTEGER
+* The leading dimension of the array B. LDB >= max(1,N).
+*
+* Y (input/output) COMPLEX array, dimension (LDY,NRHS)
+* On entry, the solution matrix X, as computed by CGETRS.
+* On exit, the improved solution matrix Y.
+*
+* LDY (input) INTEGER
+* The leading dimension of the array Y. LDY >= max(1,N).
+*
+* BERR_OUT (output) REAL array, dimension (NRHS)
+* On exit, BERR_OUT(j) contains the componentwise relative backward
+* error for righthandside j from the formula
+* max(i) ( abs(RES(i)) / ( abs(op(A_s))*abs(Y) + abs(B_s) )(i) )
+* where abs(Z) is the componentwise absolute value of the matrix
+* or vector Z. This is computed by CLA_LIN_BERR.
+*
+* N_NORMS (input) INTEGER
+* Determines which error bounds to return (see ERR_BNDS_NORM
+* and ERR_BNDS_COMP).
+* If N_NORMS >= 1 return normwise error bounds.
+* If N_NORMS >= 2 return componentwise error bounds.
+*
+* ERR_BNDS_NORM (input/output) REAL array, dimension (NRHS, N_ERR_BNDS)
+* For each righthand side, this array contains information about
+* various error bounds and condition numbers corresponding to the
+* normwise relative error, which is defined as follows:
+*
+* Normwise relative error in the ith solution vector:
+* max_j (abs(XTRUE(j,i)  X(j,i)))
+* 
+* max_j abs(X(j,i))
+*
+* The array is indexed by the type of error information as described
+* below. There currently are up to three pieces of information
+* returned.
+*
+* The first index in ERR_BNDS_NORM(i,:) corresponds to the ith
+* righthand side.
+*
+* The second index in ERR_BNDS_NORM(:,err) contains the following
+* three fields:
+* err = 1 "Trust/don't trust" boolean. Trust the answer if the
+* reciprocal condition number is less than the threshold
+* sqrt(n) * slamch('Epsilon').
+*
+* err = 2 "Guaranteed" error bound: The estimated forward error,
+* almost certainly within a factor of 10 of the true error
+* so long as the next entry is greater than the threshold
+* sqrt(n) * slamch('Epsilon'). This error bound should only
+* be trusted if the previous boolean is true.
+*
+* err = 3 Reciprocal condition number: Estimated normwise
+* reciprocal condition number. Compared with the threshold
+* sqrt(n) * slamch('Epsilon') to determine if the error
+* estimate is "guaranteed". These reciprocal condition
+* numbers are 1 / (norm(Z^{1},inf) * norm(Z,inf)) for some
+* appropriately scaled matrix Z.
+* Let Z = S*A, where S scales each row by a power of the
+* radix so all absolute row sums of Z are approximately 1.
+*
+* This subroutine is only responsible for setting the second field
+* above.
+* See Lapack Working Note 165 for further details and extra
+* cautions.
+*
+* ERR_BNDS_COMP (input/output) REAL array, dimension (NRHS, N_ERR_BNDS)
+* For each righthand side, this array contains information about
+* various error bounds and condition numbers corresponding to the
+* componentwise relative error, which is defined as follows:
+*
+* Componentwise relative error in the ith solution vector:
+* abs(XTRUE(j,i)  X(j,i))
+* max_j 
+* abs(X(j,i))
+*
+* The array is indexed by the righthand side i (on which the
+* componentwise relative error depends), and the type of error
+* information as described below. There currently are up to three
+* pieces of information returned for each righthand side. If
+* componentwise accuracy is not requested (PARAMS(3) = 0.0), then
+* ERR_BNDS_COMP is not accessed. If N_ERR_BNDS .LT. 3, then at most
+* the first (:,N_ERR_BNDS) entries are returned.
+*
+* The first index in ERR_BNDS_COMP(i,:) corresponds to the ith
+* righthand side.
+*
+* The second index in ERR_BNDS_COMP(:,err) contains the following
+* three fields:
+* err = 1 "Trust/don't trust" boolean. Trust the answer if the
+* reciprocal condition number is less than the threshold
+* sqrt(n) * slamch('Epsilon').
+*
+* err = 2 "Guaranteed" error bound: The estimated forward error,
+* almost certainly within a factor of 10 of the true error
+* so long as the next entry is greater than the threshold
+* sqrt(n) * slamch('Epsilon'). This error bound should only
+* be trusted if the previous boolean is true.
+*
+* err = 3 Reciprocal condition number: Estimated componentwise
+* reciprocal condition number. Compared with the threshold
+* sqrt(n) * slamch('Epsilon') to determine if the error
+* estimate is "guaranteed". These reciprocal condition
+* numbers are 1 / (norm(Z^{1},inf) * norm(Z,inf)) for some
+* appropriately scaled matrix Z.
+* Let Z = S*(A*diag(x)), where x is the solution for the
+* current righthand side and S scales each row of
+* A*diag(x) by a power of the radix so all absolute row
+* sums of Z are approximately 1.
+*
+* This subroutine is only responsible for setting the second field
+* above.
+* See Lapack Working Note 165 for further details and extra
+* cautions.
+*
+* RES (input) COMPLEX array, dimension (N)
+* Workspace to hold the intermediate residual.
+*
+* AYB (input) REAL array, dimension (N)
+* Workspace.
+*
+* DY (input) COMPLEX array, dimension (N)
+* Workspace to hold the intermediate solution.
+*
+* Y_TAIL (input) COMPLEX array, dimension (N)
+* Workspace to hold the trailing bits of the intermediate solution.
+*
+* RCOND (input) REAL
+* Reciprocal scaled condition number. This is an estimate of the
+* reciprocal Skeel condition number of the matrix A after
+* equilibration (if done). If this is less than the machine
+* precision (in particular, if it is zero), the matrix is singular
+* to working precision. Note that the error may still be small even
+* if this number is very small and the matrix appears ill
+* conditioned.
+*
+* ITHRESH (input) INTEGER
+* The maximum number of residual computations allowed for
+* refinement. The default is 10. For 'aggressive' set to 100 to
+* permit convergence using approximate factorizations or
+* factorizations other than LU. If the factorization uses a
+* technique other than Gaussian elimination, the guarantees in
+* ERR_BNDS_NORM and ERR_BNDS_COMP may no longer be trustworthy.
+*
+* RTHRESH (input) REAL
+* Determines when to stop refinement if the error estimate stops
+* decreasing. Refinement will stop when the next solution no longer
+* satisfies norm(dx_{i+1}) < RTHRESH * norm(dx_i) where norm(Z) is
+* the infinity norm of Z. RTHRESH satisfies 0 < RTHRESH <= 1. The
+* default value is 0.5. For 'aggressive' set to 0.9 to permit
+* convergence on extremely illconditioned matrices. See LAWN 165
+* for more details.
+*
+* DZ_UB (input) REAL
+* Determines when to start considering componentwise convergence.
+* Componentwise convergence is only considered after each component
+* of the solution Y is stable, which we definte as the relative
+* change in each component being less than DZ_UB. The default value
+* is 0.25, requiring the first bit to be stable. See LAWN 165 for
+* more details.
+*
+* IGNORE_CWISE (input) LOGICAL
+* If .TRUE. then ignore componentwise convergence. Default value
+* is .FALSE..
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* < 0: if INFO = i, the ith argument to CGETRS had an illegal
+* value
+*
* =====================================================================
*
* .. Local Scalars ..
Modified: lapack/trunk/SRC/cla_hercond_c.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/cla_hercond_c.f?rev=650
==============================================================================
 lapack/trunk/SRC/cla_hercond_c.f (original)
+++ lapack/trunk/SRC/cla_hercond_c.f Tue Apr 7 20:05:18 2009
@@ 31,11 +31,46 @@
* Arguments
* =========
*
* C REAL vector.
+* UPLO (input) CHARACTER*1
+* = 'U': Upper triangle of A is stored;
+* = 'L': Lower triangle of A is stored.
*
* WORK COMPLEX workspace of size 2*N.
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
*
* RWORK REAL workspace of size N.
+* A (input) COMPLEX array, dimension (LDA,N)
+* On entry, the NbyN matrix A
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) COMPLEX array, dimension (LDAF,N)
+* The block diagonal matrix D and the multipliers used to
+* obtain the factor U or L as computed by CHETRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* IPIV (input) INTEGER array, dimension (N)
+* Details of the interchanges and the block structure of D
+* as determined by CHETRF.
+*
+* C (input) REAL array, dimension (N)
+* The vector C in the formula op(A) * inv(diag(C)).
+*
+* CAPPLY (input) LOGICAL
+* If .TRUE. then access the vector C in the formula above.
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* i > 0: The ith argument is invalid.
+*
+* WORK (input) COMPLEX array, dimension (2*N).
+* Workspace.
+*
+* RWORK (input) REAL array, dimension (N).
+* Workspace.
*
* =====================================================================
*
Modified: lapack/trunk/SRC/cla_hercond_x.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/cla_hercond_x.f?rev=650
==============================================================================
 lapack/trunk/SRC/cla_hercond_x.f (original)
+++ lapack/trunk/SRC/cla_hercond_x.f Tue Apr 7 20:05:18 2009
@@ 30,11 +30,43 @@
* Arguments
* =========
*
* X COMPLEX vector.
+* UPLO (input) CHARACTER*1
+* = 'U': Upper triangle of A is stored;
+* = 'L': Lower triangle of A is stored.
*
* WORK COMPLEX workspace of size 2*N.
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
*
* RWORK REAL workspace of size N.
+* A (input) COMPLEX array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) COMPLEX array, dimension (LDAF,N)
+* The block diagonal matrix D and the multipliers used to
+* obtain the factor U or L as computed by CHETRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* IPIV (input) INTEGER array, dimension (N)
+* Details of the interchanges and the block structure of D
+* as determined by CHETRF.
+*
+* X (input) COMPLEX array, dimension (N)
+* The vector X in the formula op(A) * diag(X).
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* i > 0: The ith argument is invalid.
+*
+* WORK (input) COMPLEX array, dimension (2*N).
+* Workspace.
+*
+* RWORK (input) REAL array, dimension (N).
+* Workspace.
*
* =====================================================================
*
Modified: lapack/trunk/SRC/cla_herfsx_extended.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/cla_herfsx_extended.f?rev=650
==============================================================================
 lapack/trunk/SRC/cla_herfsx_extended.f (original)
+++ lapack/trunk/SRC/cla_herfsx_extended.f Tue Apr 7 20:05:18 2009
@@ 1,9 +1,10 @@
SUBROUTINE CLA_HERFSX_EXTENDED( PREC_TYPE, UPLO, N, NRHS, A, LDA,
$ AF, LDAF, IPIV, COLEQU, C, B, LDB,
 $ Y, LDY, BERR_OUT, N_NORMS, ERRS_N,
 $ ERRS_C, RES, AYB, DY, Y_TAIL,
 $ RCOND, ITHRESH, RTHRESH, DZ_UB,
 $ IGNORE_CWISE, INFO )
+ $ Y, LDY, BERR_OUT, N_NORMS,
+ $ ERR_BNDS_NORM, ERR_BNDS_COMP, RES,
+ $ AYB, DY, Y_TAIL, RCOND, ITHRESH,
+ $ RTHRESH, DZ_UB, IGNORE_CWISE,
+ $ INFO )
*
*  LAPACK routine (version 3.2) 
*  Contributed by James Demmel, Deaglan Halligan, Yozo Hida and 
@@ 27,17 +28,254 @@
COMPLEX A( LDA, * ), AF( LDAF, * ), B( LDB, * ),
$ Y( LDY, * ), RES( * ), DY( * ), Y_TAIL( * )
REAL C( * ), AYB( * ), RCOND, BERR_OUT( * ),
 $ ERRS_N( NRHS, * ), ERRS_C( NRHS, * )
+ $ ERR_BNDS_NORM( NRHS, * ),
+ $ ERR_BNDS_COMP( NRHS, * )
* ..
*
* Purpose
* =======
*
* CLA_HERFSX_EXTENDED computes ... .
+*
+* CLA_HERFSX_EXTENDED improves the computed solution to a system of
+* linear equations by performing extraprecise iterative refinement
+* and provides error bounds and backward error estimates for the solution.
+* This subroutine is called by CHERFSX to perform iterative refinement.
+* In addition to normwise error bound, the code provides maximum
+* componentwise error bound if possible. See comments for ERR_BNDS_NORM
+* and ERR_BNDS_COMP for details of the error bounds. Note that this
+* subroutine is only resonsible for setting the second fields of
+* ERR_BNDS_NORM and ERR_BNDS_COMP.
*
* Arguments
* =========
*
+* PREC_TYPE (input) INTEGER
+* Specifies the intermediate precision to be used in refinement.
+* The value is defined by ILAPREC(P) where P is a CHARACTER and
+* P = 'S': Single
+* = 'D': Double
+* = 'I': Indigenous
+* = 'X', 'E': Extra
+*
+* UPLO (input) CHARACTER*1
+* = 'U': Upper triangle of A is stored;
+* = 'L': Lower triangle of A is stored.
+*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* NRHS (input) INTEGER
+* The number of righthandsides, i.e., the number of columns of the
+* matrix B.
+*
+* A (input) COMPLEX array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) COMPLEX array, dimension (LDAF,N)
+* The block diagonal matrix D and the multipliers used to
+* obtain the factor U or L as computed by CHETRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* IPIV (input) INTEGER array, dimension (N)
+* Details of the interchanges and the block structure of D
+* as determined by CHETRF.
+*
+* COLEQU (input) LOGICAL
+* If .TRUE. then column equilibration was done to A before calling
+* this routine. This is needed to compute the solution and error
+* bounds correctly.
+*
+* C (input) REAL array, dimension (N)
+* The column scale factors for A. If COLEQU = .FALSE., C
+* is not accessed. If C is input, each element of C should be a power
+* of the radix to ensure a reliable solution and error estimates.
+* Scaling by powers of the radix does not cause rounding errors unless
+* the result underflows or overflows. Rounding errors during scaling
+* lead to refining with a matrix that is not equivalent to the
+* input matrix, producing error estimates that may not be
+* reliable.
+*
+* B (input) COMPLEX array, dimension (LDB,NRHS)
+* The righthandside matrix B.
+*
+* LDB (input) INTEGER
+* The leading dimension of the array B. LDB >= max(1,N).
+*
+* Y (input/output) COMPLEX array, dimension
+* (LDY,NRHS)
+* On entry, the solution matrix X, as computed by CHETRS.
+* On exit, the improved solution matrix Y.
+*
+* LDY (input) INTEGER
+* The leading dimension of the array Y. LDY >= max(1,N).
+*
+* BERR_OUT (output) REAL array, dimension (NRHS)
+* On exit, BERR_OUT(j) contains the componentwise relative backward
+* error for righthandside j from the formula
+* max(i) ( abs(RES(i)) / ( abs(op(A_s))*abs(Y) + abs(B_s) )(i) )
+* where abs(Z) is the componentwise absolute value of the matrix
+* or vector Z. This is computed by CLA_LIN_BERR.
+*
+* N_NORMS (input) INTEGER
+* Determines which error bounds to return (see ERR_BNDS_NORM
+* and ERR_BNDS_COMP).
+* If N_NORMS >= 1 return normwise error bounds.
+* If N_NORMS >= 2 return componentwise error bounds.
+*
+* ERR_BNDS_NORM (input/output) REAL array, dimension
+* (NRHS, N_ERR_BNDS)
+* For each righthand side, this array contains information about
+* various error bounds and condition numbers corresponding to the
+* normwise relative error, which is defined as follows:
+*
+* Normwise relative error in the ith solution vector:
+* max_j (abs(XTRUE(j,i)  X(j,i)))
+* 
+* max_j abs(X(j,i))
+*
+* The array is indexed by the type of error information as described
+* below. There currently are up to three pieces of information
+* returned.
+*
+* The first index in ERR_BNDS_NORM(i,:) corresponds to the ith
+* righthand side.
+*
+* The second index in ERR_BNDS_NORM(:,err) contains the following
+* three fields:
+* err = 1 "Trust/don't trust" boolean. Trust the answer if the
+* reciprocal condition number is less than the threshold
+* sqrt(n) * slamch('Epsilon').
+*
+* err = 2 "Guaranteed" error bound: The estimated forward error,
+* almost certainly within a factor of 10 of the true error
+* so long as the next entry is greater than the threshold
+* sqrt(n) * slamch('Epsilon'). This error bound should only
+* be trusted if the previous boolean is true.
+*
+* err = 3 Reciprocal condition number: Estimated normwise
+* reciprocal condition number. Compared with the threshold
+* sqrt(n) * slamch('Epsilon') to determine if the error
+* estimate is "guaranteed". These reciprocal condition
+* numbers are 1 / (norm(Z^{1},inf) * norm(Z,inf)) for some
+* appropriately scaled matrix Z.
+* Let Z = S*A, where S scales each row by a power of the
+* radix so all absolute row sums of Z are approximately 1.
+*
+* This subroutine is only responsible for setting the second field
+* above.
+* See Lapack Working Note 165 for further details and extra
+* cautions.
+*
+* ERR_BNDS_COMP (input/output) REAL array, dimension
+* (NRHS, N_ERR_BNDS)
+* For each righthand side, this array contains information about
+* various error bounds and condition numbers corresponding to the
+* componentwise relative error, which is defined as follows:
+*
+* Componentwise relative error in the ith solution vector:
+* abs(XTRUE(j,i)  X(j,i))
+* max_j 
+* abs(X(j,i))
+*
+* The array is indexed by the righthand side i (on which the
+* componentwise relative error depends), and the type of error
+* information as described below. There currently are up to three
+* pieces of information returned for each righthand side. If
+* componentwise accuracy is not requested (PARAMS(3) = 0.0), then
+* ERR_BNDS_COMP is not accessed. If N_ERR_BNDS .LT. 3, then at most
+* the first (:,N_ERR_BNDS) entries are returned.
+*
+* The first index in ERR_BNDS_COMP(i,:) corresponds to the ith
+* righthand side.
+*
+* The second index in ERR_BNDS_COMP(:,err) contains the following
+* three fields:
+* err = 1 "Trust/don't trust" boolean. Trust the answer if the
+* reciprocal condition number is less than the threshold
+* sqrt(n) * slamch('Epsilon').
+*
+* err = 2 "Guaranteed" error bound: The estimated forward error,
+* almost certainly within a factor of 10 of the true error
+* so long as the next entry is greater than the threshold
+* sqrt(n) * slamch('Epsilon'). This error bound should only
+* be trusted if the previous boolean is true.
+*
+* err = 3 Reciprocal condition number: Estimated componentwise
+* reciprocal condition number. Compared with the threshold
+* sqrt(n) * slamch('Epsilon') to determine if the error
+* estimate is "guaranteed". These reciprocal condition
+* numbers are 1 / (norm(Z^{1},inf) * norm(Z,inf)) for some
+* appropriately scaled matrix Z.
+* Let Z = S*(A*diag(x)), where x is the solution for the
+* current righthand side and S scales each row of
+* A*diag(x) by a power of the radix so all absolute row
+* sums of Z are approximately 1.
+*
+* This subroutine is only responsible for setting the second field
+* above.
+* See Lapack Working Note 165 for further details and extra
+* cautions.
+*
+* RES (input) COMPLEX array, dimension (N)
+* Workspace to hold the intermediate residual.
+*
+* AYB (input) REAL array, dimension (N)
+* Workspace.
+*
+* DY (input) COMPLEX array, dimension (N)
+* Workspace to hold the intermediate solution.
+*
+* Y_TAIL (input) COMPLEX array, dimension (N)
+* Workspace to hold the trailing bits of the intermediate solution.
+*
+* RCOND (input) REAL
+* Reciprocal scaled condition number. This is an estimate of the
+* reciprocal Skeel condition number of the matrix A after
+* equilibration (if done). If this is less than the machine
+* precision (in particular, if it is zero), the matrix is singular
+* to working precision. Note that the error may still be small even
+* if this number is very small and the matrix appears ill
+* conditioned.
+*
+* ITHRESH (input) INTEGER
+* The maximum number of residual computations allowed for
+* refinement. The default is 10. For 'aggressive' set to 100 to
+* permit convergence using approximate factorizations or
+* factorizations other than LU. If the factorization uses a
+* technique other than Gaussian elimination, the guarantees in
+* ERR_BNDS_NORM and ERR_BNDS_COMP may no longer be trustworthy.
+*
+* RTHRESH (input) REAL
+* Determines when to stop refinement if the error estimate stops
+* decreasing. Refinement will stop when the next solution no longer
+* satisfies norm(dx_{i+1}) < RTHRESH * norm(dx_i) where norm(Z) is
+* the infinity norm of Z. RTHRESH satisfies 0 < RTHRESH <= 1. The
+* default value is 0.5. For 'aggressive' set to 0.9 to permit
+* convergence on extremely illconditioned matrices. See LAWN 165
+* for more details.
+*
+* DZ_UB (input) REAL
+* Determines when to start considering componentwise convergence.
+* Componentwise convergence is only considered after each component
+* of the solution Y is stable, which we definte as the relative
+* change in each component being less than DZ_UB. The default value
+* is 0.25, requiring the first bit to be stable. See LAWN 165 for
+* more details.
+*
+* IGNORE_CWISE (input) LOGICAL
+* If .TRUE. then ignore componentwise convergence. Default value
+* is .FALSE..
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* < 0: if INFO = i, the ith argument to CHETRS had an illegal
+* value
+*
* =====================================================================
*
* .. Local Scalars ..
@@ 279,10 +517,12 @@
* Compute error bounds.
*
IF ( N_NORMS .GE. 1 ) THEN
 ERRS_N( J, LA_LINRX_ERR_I ) = FINAL_DX_X / (1  DXRATMAX)
+ ERR_BNDS_NORM( J, LA_LINRX_ERR_I ) =
+ $ FINAL_DX_X / (1  DXRATMAX)
END IF
IF (N_NORMS .GE. 2) THEN
 ERRS_C( J, LA_LINRX_ERR_I ) = FINAL_DZ_Z / (1  DZRATMAX)
+ ERR_BNDS_COMP( J, LA_LINRX_ERR_I ) =
+ $ FINAL_DZ_Z / (1  DZRATMAX)
END IF
*
* Compute componentwise relative backward error from formula
Modified: lapack/trunk/SRC/cla_herpvgrw.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/cla_herpvgrw.f?rev=650
==============================================================================
 lapack/trunk/SRC/cla_herpvgrw.f (original)
+++ lapack/trunk/SRC/cla_herpvgrw.f Tue Apr 7 20:05:18 2009
@@ 24,11 +24,50 @@
* Purpose
* =======
*
* CLA_HERPVGRW computes ... .
+* CLA_HERPVGRW computes the reciprocal pivot growth factor
+* norm(A)/norm(U). The "max absolute element" norm is used. If this is
+* much less than 1, the stability of the LU factorization of the
+* (equilibrated) matrix A could be poor. This also means that the
+* solution X, estimated condition numbers, and error bounds could be
+* unreliable.
*
* Arguments
* =========
*
+* UPLO (input) CHARACTER*1
+* = 'U': Upper triangle of A is stored;
+* = 'L': Lower triangle of A is stored.
+*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* INFO (input) INTEGER
+* The value of INFO returned from SSYTRF, .i.e., the pivot in
+* column INFO is exactly 0.
+*
+* NCOLS (input) INTEGER
+* The number of columns of the matrix A. NCOLS >= 0.
+*
+* A (input) COMPLEX array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) COMPLEX array, dimension (LDAF,N)
+* The block diagonal matrix D and the multipliers used to
+* obtain the factor U or L as computed by CHETRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* IPIV (input) INTEGER array, dimension (N)
+* Details of the interchanges and the block structure of D
+* as determined by CHETRF.
+*
+* WORK (input) COMPLEX array, dimension (2*N)
+*
* =====================================================================
*
* .. Local Scalars ..
Modified: lapack/trunk/SRC/cla_lin_berr.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/cla_lin_berr.f?rev=650
==============================================================================
 lapack/trunk/SRC/cla_lin_berr.f (original)
+++ lapack/trunk/SRC/cla_lin_berr.f Tue Apr 7 20:05:18 2009
@@ 21,12 +21,36 @@
* Purpose
* =======
*
* CLA_LIN_BERR computes componentwise relative backward error from
+* CLA_LIN_BERR computes componentwise relative backward error from
* the formula
* max(i) ( abs(R(i)) / ( abs(op(A_s))*abs(Y) + abs(B_s) )(i) )
* where abs(Z) is the componentwise absolute value of the matrix
+* where abs(Z) is the componentwise absolute value of the matrix
* or vector Z.
*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* NZ (input) INTEGER
+* We add (NZ+1)*SLAMCH( 'Safe minimum' ) to R(i) in the numerator to
+* guard against spuriously zero residuals. Default value is N.
+*
+* NRHS (input) INTEGER
+* The number of right hand sides, i.e., the number of columns
+* of the matrices AYB, RES, and BERR. NRHS >= 0.
+*
+* RES (input) DOUBLE PRECISION array, dimension (N,NRHS)
+* The residual matrix, i.e., the matrix R in the relative backward
+* error formula above.
+*
+* AYB (input) DOUBLE PRECISION array, dimension (N, NRHS)
+* The denominator in the relative backward error formula above, i.e.,
+* the matrix abs(op(A_s))*abs(Y) + abs(B_s). The matrices A, Y, and B
+* are from iterative refinement (see cla_gerfsx_extended.f).
+*
+* RES (output) COMPLEX array, dimension (NRHS)
+* The componentwise relative backward error from the formula above.
+*
* =====================================================================
*
* .. Local Scalars ..
Modified: lapack/trunk/SRC/cla_porcond_c.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/cla_porcond_c.f?rev=650
==============================================================================
 lapack/trunk/SRC/cla_porcond_c.f (original)
+++ lapack/trunk/SRC/cla_porcond_c.f Tue Apr 7 20:05:18 2009
@@ 30,11 +30,42 @@
* Arguments
* =========
*
* C REAL vector.
+* UPLO (input) CHARACTER*1
+* = 'U': Upper triangle of A is stored;
+* = 'L': Lower triangle of A is stored.
*
* WORK COMPLEX workspace of size 2*N.
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
*
* RWORK REAL workspace of size N.
+* A (input) COMPLEX array, dimension (LDA,N)
+* On entry, the NbyN matrix A
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) COMPLEX array, dimension (LDAF,N)
+* The triangular factor U or L from the Cholesky factorization
+* A = U**T*U or A = L*L**T, as computed by CPOTRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* C (input) REAL array, dimension (N)
+* The vector C in the formula op(A) * inv(diag(C)).
+*
+* CAPPLY (input) LOGICAL
+* If .TRUE. then access the vector C in the formula above.
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* i > 0: The ith argument is invalid.
+*
+* WORK (input) COMPLEX array, dimension (2*N).
+* Workspace.
+*
+* RWORK (input) REAL array, dimension (N).
+* Workspace.
*
* =====================================================================
*
Modified: lapack/trunk/SRC/cla_porcond_x.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/cla_porcond_x.f?rev=650
==============================================================================
 lapack/trunk/SRC/cla_porcond_x.f (original)
+++ lapack/trunk/SRC/cla_porcond_x.f Tue Apr 7 20:05:18 2009
@@ 29,11 +29,39 @@
* Arguments
* =========
*
* X COMPLEX vector.
+* UPLO (input) CHARACTER*1
+* = 'U': Upper triangle of A is stored;
+* = 'L': Lower triangle of A is stored.
*
* WORK COMPLEX workspace of size 2*N.
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
*
* RWORK REAL workspace of size N.
+* A (input) COMPLEX array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) COMPLEX array, dimension (LDAF,N)
+* The triangular factor U or L from the Cholesky factorization
+* A = U**T*U or A = L*L**T, as computed by CPOTRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* X (input) COMPLEX array, dimension (N)
+* The vector X in the formula op(A) * diag(X).
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* i > 0: The ith argument is invalid.
+*
+* WORK (input) COMPLEX array, dimension (2*N).
+* Workspace.
+*
+* RWORK (input) REAL array, dimension (N).
+* Workspace.
*
* =====================================================================
*
Modified: lapack/trunk/SRC/cla_porfsx_extended.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/cla_porfsx_extended.f?rev=650
==============================================================================
 lapack/trunk/SRC/cla_porfsx_extended.f (original)
+++ lapack/trunk/SRC/cla_porfsx_extended.f Tue Apr 7 20:05:18 2009
@@ 1,9 +1,10 @@
SUBROUTINE CLA_PORFSX_EXTENDED( PREC_TYPE, UPLO, N, NRHS, A, LDA,
$ AF, LDAF, COLEQU, C, B, LDB, Y,
 $ LDY, BERR_OUT, N_NORMS, ERRS_N,
 $ ERRS_C, RES, AYB, DY, Y_TAIL,
 $ RCOND, ITHRESH, RTHRESH, DZ_UB,
 $ IGNORE_CWISE, INFO )
+ $ LDY, BERR_OUT, N_NORMS,
+ $ ERR_BNDS_NORM, ERR_BNDS_COMP, RES,
+ $ AYB, DY, Y_TAIL, RCOND, ITHRESH,
+ $ RTHRESH, DZ_UB, IGNORE_CWISE,
+ $ INFO )
*
*  LAPACK routine (version 3.2) 
*  Contributed by James Demmel, Deaglan Halligan, Yozo Hida and 
@@ 26,17 +27,250 @@
COMPLEX A( LDA, * ), AF( LDAF, * ), B( LDB, * ),
$ Y( LDY, * ), RES( * ), DY( * ), Y_TAIL( * )
REAL C( * ), AYB( * ), RCOND, BERR_OUT( * ),
 $ ERRS_N( NRHS, * ), ERRS_C( NRHS, * )
+ $ ERR_BNDS_NORM( NRHS, * ),
+ $ ERR_BNDS_COMP( NRHS, * )
* ..
*
* Purpose
* =======
*
* CLA_PORFSX_EXTENDED computes ... .
+*
+* CLA_PORFSX_EXTENDED improves the computed solution to a system of
+* linear equations by performing extraprecise iterative refinement
+* and provides error bounds and backward error estimates for the solution.
+* This subroutine is called by CPORFSX to perform iterative refinement.
+* In addition to normwise error bound, the code provides maximum
+* componentwise error bound if possible. See comments for ERR_BNDS_NORM
+* and ERR_BNDS_COMP for details of the error bounds. Note that this
+* subroutine is only resonsible for setting the second fields of
+* ERR_BNDS_NORM and ERR_BNDS_COMP.
*
* Arguments
* =========
*
+* PREC_TYPE (input) INTEGER
+* Specifies the intermediate precision to be used in refinement.
+* The value is defined by ILAPREC(P) where P is a CHARACTER and
+* P = 'S': Single
+* = 'D': Double
+* = 'I': Indigenous
+* = 'X', 'E': Extra
+*
+* UPLO (input) CHARACTER*1
+* = 'U': Upper triangle of A is stored;
+* = 'L': Lower triangle of A is stored.
+*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* NRHS (input) INTEGER
+* The number of righthandsides, i.e., the number of columns of the
+* matrix B.
+*
+* A (input) COMPLEX array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) COMPLEX array, dimension (LDAF,N)
+* The triangular factor U or L from the Cholesky factorization
+* A = U**T*U or A = L*L**T, as computed by CPOTRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* COLEQU (input) LOGICAL
+* If .TRUE. then column equilibration was done to A before calling
+* this routine. This is needed to compute the solution and error
+* bounds correctly.
+*
+* C (input) REAL array, dimension (N)
+* The column scale factors for A. If COLEQU = .FALSE., C
+* is not accessed. If C is input, each element of C should be a power
+* of the radix to ensure a reliable solution and error estimates.
+* Scaling by powers of the radix does not cause rounding errors unless
+* the result underflows or overflows. Rounding errors during scaling
+* lead to refining with a matrix that is not equivalent to the
+* input matrix, producing error estimates that may not be
+* reliable.
+*
+* B (input) COMPLEX array, dimension (LDB,NRHS)
+* The righthandside matrix B.
+*
+* LDB (input) INTEGER
+* The leading dimension of the array B. LDB >= max(1,N).
+*
+* Y (input/output) COMPLEX array, dimension
+* (LDY,NRHS)
+* On entry, the solution matrix X, as computed by CPOTRS.
+* On exit, the improved solution matrix Y.
+*
+* LDY (input) INTEGER
+* The leading dimension of the array Y. LDY >= max(1,N).
+*
+* BERR_OUT (output) REAL array, dimension (NRHS)
+* On exit, BERR_OUT(j) contains the componentwise relative backward
+* error for righthandside j from the formula
+* max(i) ( abs(RES(i)) / ( abs(op(A_s))*abs(Y) + abs(B_s) )(i) )
+* where abs(Z) is the componentwise absolute value of the matrix
+* or vector Z. This is computed by CLA_LIN_BERR.
+*
+* N_NORMS (input) INTEGER
+* Determines which error bounds to return (see ERR_BNDS_NORM
+* and ERR_BNDS_COMP).
+* If N_NORMS >= 1 return normwise error bounds.
+* If N_NORMS >= 2 return componentwise error bounds.
+*
+* ERR_BNDS_NORM (input/output) REAL array, dimension
+* (NRHS, N_ERR_BNDS)
+* For each righthand side, this array contains information about
+* various error bounds and condition numbers corresponding to the
+* normwise relative error, which is defined as follows:
+*
+* Normwise relative error in the ith solution vector:
+* max_j (abs(XTRUE(j,i)  X(j,i)))
+* 
+* max_j abs(X(j,i))
+*
+* The array is indexed by the type of error information as described
+* below. There currently are up to three pieces of information
+* returned.
+*
+* The first index in ERR_BNDS_NORM(i,:) corresponds to the ith
+* righthand side.
+*
+* The second index in ERR_BNDS_NORM(:,err) contains the following
+* three fields:
+* err = 1 "Trust/don't trust" boolean. Trust the answer if the
+* reciprocal condition number is less than the threshold
+* sqrt(n) * slamch('Epsilon').
+*
+* err = 2 "Guaranteed" error bound: The estimated forward error,
+* almost certainly within a factor of 10 of the true error
+* so long as the next entry is greater than the threshold
+* sqrt(n) * slamch('Epsilon'). This error bound should only
+* be trusted if the previous boolean is true.
+*
+* err = 3 Reciprocal condition number: Estimated normwise
+* reciprocal condition number. Compared with the threshold
+* sqrt(n) * slamch('Epsilon') to determine if the error
+* estimate is "guaranteed". These reciprocal condition
+* numbers are 1 / (norm(Z^{1},inf) * norm(Z,inf)) for some
+* appropriately scaled matrix Z.
+* Let Z = S*A, where S scales each row by a power of the
+* radix so all absolute row sums of Z are approximately 1.
+*
+* This subroutine is only responsible for setting the second field
+* above.
+* See Lapack Working Note 165 for further details and extra
+* cautions.
+*
+* ERR_BNDS_COMP (input/output) REAL array, dimension
+* (NRHS, N_ERR_BNDS)
+* For each righthand side, this array contains information about
+* various error bounds and condition numbers corresponding to the
+* componentwise relative error, which is defined as follows:
+*
+* Componentwise relative error in the ith solution vector:
+* abs(XTRUE(j,i)  X(j,i))
+* max_j 
+* abs(X(j,i))
+*
+* The array is indexed by the righthand side i (on which the
+* componentwise relative error depends), and the type of error
+* information as described below. There currently are up to three
+* pieces of information returned for each righthand side. If
+* componentwise accuracy is not requested (PARAMS(3) = 0.0), then
+* ERR_BNDS_COMP is not accessed. If N_ERR_BNDS .LT. 3, then at most
+* the first (:,N_ERR_BNDS) entries are returned.
+*
+* The first index in ERR_BNDS_COMP(i,:) corresponds to the ith
+* righthand side.
+*
+* The second index in ERR_BNDS_COMP(:,err) contains the following
+* three fields:
+* err = 1 "Trust/don't trust" boolean. Trust the answer if the
+* reciprocal condition number is less than the threshold
+* sqrt(n) * slamch('Epsilon').
+*
+* err = 2 "Guaranteed" error bound: The estimated forward error,
+* almost certainly within a factor of 10 of the true error
+* so long as the next entry is greater than the threshold
+* sqrt(n) * slamch('Epsilon'). This error bound should only
+* be trusted if the previous boolean is true.
+*
+* err = 3 Reciprocal condition number: Estimated componentwise
+* reciprocal condition number. Compared with the threshold
+* sqrt(n) * slamch('Epsilon') to determine if the error
+* estimate is "guaranteed". These reciprocal condition
+* numbers are 1 / (norm(Z^{1},inf) * norm(Z,inf)) for some
+* appropriately scaled matrix Z.
+* Let Z = S*(A*diag(x)), where x is the solution for the
+* current righthand side and S scales each row of
+* A*diag(x) by a power of the radix so all absolute row
+* sums of Z are approximately 1.
+*
+* This subroutine is only responsible for setting the second field
+* above.
+* See Lapack Working Note 165 for further details and extra
+* cautions.
+*
+* RES (input) COMPLEX array, dimension (N)
+* Workspace to hold the intermediate residual.
+*
+* AYB (input) REAL array, dimension (N)
+* Workspace.
+*
+* DY (input) COMPLEX array, dimension (N)
+* Workspace to hold the intermediate solution.
+*
+* Y_TAIL (input) COMPLEX array, dimension (N)
+* Workspace to hold the trailing bits of the intermediate solution.
+*
+* RCOND (input) REAL
+* Reciprocal scaled condition number. This is an estimate of the
+* reciprocal Skeel condition number of the matrix A after
+* equilibration (if done). If this is less than the machine
+* precision (in particular, if it is zero), the matrix is singular
+* to working precision. Note that the error may still be small even
+* if this number is very small and the matrix appears ill
+* conditioned.
+*
+* ITHRESH (input) INTEGER
+* The maximum number of residual computations allowed for
+* refinement. The default is 10. For 'aggressive' set to 100 to
+* permit convergence using approximate factorizations or
+* factorizations other than LU. If the factorization uses a
+* technique other than Gaussian elimination, the guarantees in
+* ERR_BNDS_NORM and ERR_BNDS_COMP may no longer be trustworthy.
+*
+* RTHRESH (input) REAL
+* Determines when to stop refinement if the error estimate stops
+* decreasing. Refinement will stop when the next solution no longer
+* satisfies norm(dx_{i+1}) < RTHRESH * norm(dx_i) where norm(Z) is
+* the infinity norm of Z. RTHRESH satisfies 0 < RTHRESH <= 1. The
+* default value is 0.5. For 'aggressive' set to 0.9 to permit
+* convergence on extremely illconditioned matrices. See LAWN 165
+* for more details.
+*
+* DZ_UB (input) REAL
+* Determines when to start considering componentwise convergence.
+* Componentwise convergence is only considered after each component
+* of the solution Y is stable, which we definte as the relative
+* change in each component being less than DZ_UB. The default value
+* is 0.25, requiring the first bit to be stable. See LAWN 165 for
+* more details.
+*
+* IGNORE_CWISE (input) LOGICAL
+* If .TRUE. then ignore componentwise convergence. Default value
+* is .FALSE..
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* < 0: if INFO = i, the ith argument to CPOTRS had an illegal
+* value
+*
* =====================================================================
*
* .. Local Scalars ..
@@ 278,10 +512,12 @@
* Compute error bounds.
*
IF (N_NORMS .GE. 1) THEN
 ERRS_N( J, LA_LINRX_ERR_I ) = FINAL_DX_X / (1  DXRATMAX)
+ ERR_BNDS_NORM( J, LA_LINRX_ERR_I ) =
+ $ FINAL_DX_X / (1  DXRATMAX)
END IF
IF (N_NORMS .GE. 2) THEN
 ERRS_C( J, LA_LINRX_ERR_I ) = FINAL_DZ_Z / (1  DZRATMAX)
+ ERR_BNDS_COMP( J, LA_LINRX_ERR_I ) =
+ $ FINAL_DZ_Z / (1  DZRATMAX)
END IF
*
* Compute componentwise relative backward error from formula
Modified: lapack/trunk/SRC/cla_porpvgrw.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/cla_porpvgrw.f?rev=650
==============================================================================
 lapack/trunk/SRC/cla_porpvgrw.f (original)
+++ lapack/trunk/SRC/cla_porpvgrw.f Tue Apr 7 20:05:18 2009
@@ 22,11 +22,38 @@
* Purpose
* =======
*
* CLA_PORPVGRW computes ... .
+* CLA_PORPVGRW computes the reciprocal pivot growth factor
+* norm(A)/norm(U). The "max absolute element" norm is used. If this is
+* much less than 1, the stability of the LU factorization of the
+* (equilibrated) matrix A could be poor. This also means that the
+* solution X, estimated condition numbers, and error bounds could be
+* unreliable.
*
* Arguments
* =========
*
+* UPLO (input) CHARACTER*1
+* = 'U': Upper triangle of A is stored;
+* = 'L': Lower triangle of A is stored.
+*
+* NCOLS (input) INTEGER
+* The number of columns of the matrix A. NCOLS >= 0.
+*
+* A (input) COMPLEX array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) COMPLEX array, dimension (LDAF,N)
+* The triangular factor U or L from the Cholesky factorization
+* A = U**T*U or A = L*L**T, as computed by CPOTRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* WORK (input) COMPLEX array, dimension (2*N)
+*
* =====================================================================
*
* .. Local Scalars ..
Modified: lapack/trunk/SRC/cla_rpvgrw.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/cla_rpvgrw.f?rev=650
==============================================================================
 lapack/trunk/SRC/cla_rpvgrw.f (original)
+++ lapack/trunk/SRC/cla_rpvgrw.f Tue Apr 7 20:05:18 2009
@@ 20,11 +20,36 @@
* Purpose
* =======
*
* CLA_RPVGRW computes ... .
+* CLA_RPVGRW computes the reciprocal pivot growth factor
+* norm(A)/norm(U). The "max absolute element" norm is used. If this is
+* much less than 1, the stability of the LU factorization of the
+* (equilibrated) matrix A could be poor. This also means that the
+* solution X, estimated condition numbers, and error bounds could be
+* unreliable.
*
* Arguments
* =========
*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* NCOLS (input) INTEGER
+* The number of columns of the matrix A. NCOLS >= 0.
+*
+* A (input) COMPLEX array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) COMPLEX array, dimension (LDAF,N)
+* The factors L and U from the factorization
+* A = P*L*U as computed by CGETRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
* =====================================================================
*
* .. Local Scalars ..
@@ 44,7 +69,7 @@
* .. Executable Statements ..
*
RPVGRW = 1.0
*
+
DO J = 1, NCOLS
AMAX = 0.0
UMAX = 0.0
Modified: lapack/trunk/SRC/cla_syrcond_c.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/cla_syrcond_c.f?rev=650
==============================================================================
 lapack/trunk/SRC/cla_syrcond_c.f (original)
+++ lapack/trunk/SRC/cla_syrcond_c.f Tue Apr 7 20:05:18 2009
@@ 31,11 +31,46 @@
* Arguments
* =========
*
* C REAL vector.
+* UPLO (input) CHARACTER*1
+* = 'U': Upper triangle of A is stored;
+* = 'L': Lower triangle of A is stored.
*
* WORK COMPLEX workspace of size 2*N.
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
*
* RWORK REAL workspace of size N.
+* A (input) COMPLEX array, dimension (LDA,N)
+* On entry, the NbyN matrix A
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) COMPLEX array, dimension (LDAF,N)
+* The block diagonal matrix D and the multipliers used to
+* obtain the factor U or L as computed by CSYTRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* IPIV (input) INTEGER array, dimension (N)
+* Details of the interchanges and the block structure of D
+* as determined by CSYTRF.
+*
+* C (input) REAL array, dimension (N)
+* The vector C in the formula op(A) * inv(diag(C)).
+*
+* CAPPLY (input) LOGICAL
+* If .TRUE. then access the vector C in the formula above.
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* i > 0: The ith argument is invalid.
+*
+* WORK (input) COMPLEX array, dimension (2*N).
+* Workspace.
+*
+* RWORK (input) REAL array, dimension (N).
+* Workspace.
*
* =====================================================================
*
Modified: lapack/trunk/SRC/cla_syrcond_x.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/cla_syrcond_x.f?rev=650
==============================================================================
 lapack/trunk/SRC/cla_syrcond_x.f (original)
+++ lapack/trunk/SRC/cla_syrcond_x.f Tue Apr 7 20:05:18 2009
@@ 30,11 +30,43 @@
* Arguments
* =========
*
* X COMPLEX vector.
+* UPLO (input) CHARACTER*1
+* = 'U': Upper triangle of A is stored;
+* = 'L': Lower triangle of A is stored.
*
* WORK COMPLEX workspace of size 2*N.
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
*
* RWORK REAL workspace of size N.
+* A (input) COMPLEX array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) COMPLEX array, dimension (LDAF,N)
+* The block diagonal matrix D and the multipliers used to
+* obtain the factor U or L as computed by CSYTRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* IPIV (input) INTEGER array, dimension (N)
+* Details of the interchanges and the block structure of D
+* as determined by CSYTRF.
+*
+* X (input) COMPLEX array, dimension (N)
+* The vector X in the formula op(A) * diag(X).
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* i > 0: The ith argument is invalid.
+*
+* WORK (input) COMPLEX array, dimension (2*N).
+* Workspace.
+*
+* RWORK (input) REAL array, dimension (N).
+* Workspace.
*
* =====================================================================
*
Modified: lapack/trunk/SRC/cla_syrfsx_extended.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/cla_syrfsx_extended.f?rev=650
==============================================================================
 lapack/trunk/SRC/cla_syrfsx_extended.f (original)
+++ lapack/trunk/SRC/cla_syrfsx_extended.f Tue Apr 7 20:05:18 2009
@@ 1,9 +1,10 @@
SUBROUTINE CLA_SYRFSX_EXTENDED( PREC_TYPE, UPLO, N, NRHS, A, LDA,
$ AF, LDAF, IPIV, COLEQU, C, B, LDB,
 $ Y, LDY, BERR_OUT, N_NORMS, ERRS_N,
 $ ERRS_C, RES, AYB, DY, Y_TAIL,
 $ RCOND, ITHRESH, RTHRESH, DZ_UB,
 $ IGNORE_CWISE, INFO )
+ $ Y, LDY, BERR_OUT, N_NORMS,
+ $ ERR_BNDS_NORM, ERR_BNDS_COMP, RES,
+ $ AYB, DY, Y_TAIL, RCOND, ITHRESH,
+ $ RTHRESH, DZ_UB, IGNORE_CWISE,
+ $ INFO )
*
*  LAPACK routine (version 3.2) 
*  Contributed by James Demmel, Deaglan Halligan, Yozo Hida and 
@@ 27,17 +28,254 @@
COMPLEX A( LDA, * ), AF( LDAF, * ), B( LDB, * ),
$ Y( LDY, * ), RES( * ), DY( * ), Y_TAIL( * )
REAL C( * ), AYB( * ), RCOND, BERR_OUT( * ),
 $ ERRS_N( NRHS, * ), ERRS_C( NRHS, * )
+ $ ERR_BNDS_NORM( NRHS, * ),
+ $ ERR_BNDS_COMP( NRHS, * )
* ..
*
* Purpose
* =======
*
* CLA_SYRFSX_EXTENDED computes ... .
+*
+* CLA_SYRFSX_EXTENDED improves the computed solution to a system of
+* linear equations by performing extraprecise iterative refinement
+* and provides error bounds and backward error estimates for the solution.
+* This subroutine is called by CSYRFSX to perform iterative refinement.
+* In addition to normwise error bound, the code provides maximum
+* componentwise error bound if possible. See comments for ERR_BNDS_NORM
+* and ERR_BNDS_COMP for details of the error bounds. Note that this
+* subroutine is only resonsible for setting the second fields of
+* ERR_BNDS_NORM and ERR_BNDS_COMP.
*
* Arguments
* =========
*
+* PREC_TYPE (input) INTEGER
+* Specifies the intermediate precision to be used in refinement.
+* The value is defined by ILAPREC(P) where P is a CHARACTER and
+* P = 'S': Single
+* = 'D': Double
+* = 'I': Indigenous
+* = 'X', 'E': Extra
+*
+* UPLO (input) CHARACTER*1
+* = 'U': Upper triangle of A is stored;
+* = 'L': Lower triangle of A is stored.
+*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* NRHS (input) INTEGER
+* The number of righthandsides, i.e., the number of columns of the
+* matrix B.
+*
+* A (input) COMPLEX array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) COMPLEX array, dimension (LDAF,N)
+* The block diagonal matrix D and the multipliers used to
+* obtain the factor U or L as computed by CSYTRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* IPIV (input) INTEGER array, dimension (N)
+* Details of the interchanges and the block structure of D
+* as determined by CSYTRF.
+*
+* COLEQU (input) LOGICAL
+* If .TRUE. then column equilibration was done to A before calling
+* this routine. This is needed to compute the solution and error
+* bounds correctly.
+*
+* C (input) REAL array, dimension (N)
+* The column scale factors for A. If COLEQU = .FALSE., C
+* is not accessed. If C is input, each element of C should be a power
+* of the radix to ensure a reliable solution and error estimates.
+* Scaling by powers of the radix does not cause rounding errors unless
+* the result underflows or overflows. Rounding errors during scaling
+* lead to refining with a matrix that is not equivalent to the
+* input matrix, producing error estimates that may not be
+* reliable.
+*
+* B (input) COMPLEX array, dimension (LDB,NRHS)
+* The righthandside matrix B.
+*
+* LDB (input) INTEGER
+* The leading dimension of the array B. LDB >= max(1,N).
+*
+* Y (input/output) COMPLEX array, dimension
+* (LDY,NRHS)
+* On entry, the solution matrix X, as computed by CSYTRS.
+* On exit, the improved solution matrix Y.
+*
+* LDY (input) INTEGER
+* The leading dimension of the array Y. LDY >= max(1,N).
+*
+* BERR_OUT (output) REAL array, dimension (NRHS)
+* On exit, BERR_OUT(j) contains the componentwise relative backward
+* error for righthandside j from the formula
+* max(i) ( abs(RES(i)) / ( abs(op(A_s))*abs(Y) + abs(B_s) )(i) )
+* where abs(Z) is the componentwise absolute value of the matrix
+* or vector Z. This is computed by CLA_LIN_BERR.
+*
+* N_NORMS (input) INTEGER
+* Determines which error bounds to return (see ERR_BNDS_NORM
+* and ERR_BNDS_COMP).
+* If N_NORMS >= 1 return normwise error bounds.
+* If N_NORMS >= 2 return componentwise error bounds.
+*
+* ERR_BNDS_NORM (input/output) REAL array, dimension
+* (NRHS, N_ERR_BNDS)
+* For each righthand side, this array contains information about
+* various error bounds and condition numbers corresponding to the
+* normwise relative error, which is defined as follows:
+*
+* Normwise relative error in the ith solution vector:
+* max_j (abs(XTRUE(j,i)  X(j,i)))
+* 
+* max_j abs(X(j,i))
+*
+* The array is indexed by the type of error information as described
+* below. There currently are up to three pieces of information
+* returned.
+*
+* The first index in ERR_BNDS_NORM(i,:) corresponds to the ith
+* righthand side.
+*
+* The second index in ERR_BNDS_NORM(:,err) contains the following
+* three fields:
+* err = 1 "Trust/don't trust" boolean. Trust the answer if the
+* reciprocal condition number is less than the threshold
+* sqrt(n) * slamch('Epsilon').
+*
+* err = 2 "Guaranteed" error bound: The estimated forward error,
+* almost certainly within a factor of 10 of the true error
+* so long as the next entry is greater than the threshold
+* sqrt(n) * slamch('Epsilon'). This error bound should only
+* be trusted if the previous boolean is true.
+*
+* err = 3 Reciprocal condition number: Estimated normwise
+* reciprocal condition number. Compared with the threshold
+* sqrt(n) * slamch('Epsilon') to determine if the error
+* estimate is "guaranteed". These reciprocal condition
+* numbers are 1 / (norm(Z^{1},inf) * norm(Z,inf)) for some
+* appropriately scaled matrix Z.
+* Let Z = S*A, where S scales each row by a power of the
+* radix so all absolute row sums of Z are approximately 1.
+*
+* This subroutine is only responsible for setting the second field
+* above.
+* See Lapack Working Note 165 for further details and extra
+* cautions.
+*
+* ERR_BNDS_COMP (input/output) REAL array, dimension
+* (NRHS, N_ERR_BNDS)
+* For each righthand side, this array contains information about
+* various error bounds and condition numbers corresponding to the
+* componentwise relative error, which is defined as follows:
+*
+* Componentwise relative error in the ith solution vector:
+* abs(XTRUE(j,i)  X(j,i))
+* max_j 
+* abs(X(j,i))
+*
+* The array is indexed by the righthand side i (on which the
+* componentwise relative error depends), and the type of error
+* information as described below. There currently are up to three
+* pieces of information returned for each righthand side. If
+* componentwise accuracy is not requested (PARAMS(3) = 0.0), then
+* ERR_BNDS_COMP is not accessed. If N_ERR_BNDS .LT. 3, then at most
+* the first (:,N_ERR_BNDS) entries are returned.
+*
+* The first index in ERR_BNDS_COMP(i,:) corresponds to the ith
+* righthand side.
+*
+* The second index in ERR_BNDS_COMP(:,err) contains the following
+* three fields:
+* err = 1 "Trust/don't trust" boolean. Trust the answer if the
+* reciprocal condition number is less than the threshold
+* sqrt(n) * slamch('Epsilon').
+*
+* err = 2 "Guaranteed" error bound: The estimated forward error,
+* almost certainly within a factor of 10 of the true error
+* so long as the next entry is greater than the threshold
+* sqrt(n) * slamch('Epsilon'). This error bound should only
+* be trusted if the previous boolean is true.
+*
+* err = 3 Reciprocal condition number: Estimated componentwise
+* reciprocal condition number. Compared with the threshold
+* sqrt(n) * slamch('Epsilon') to determine if the error
+* estimate is "guaranteed". These reciprocal condition
+* numbers are 1 / (norm(Z^{1},inf) * norm(Z,inf)) for some
+* appropriately scaled matrix Z.
+* Let Z = S*(A*diag(x)), where x is the solution for the
+* current righthand side and S scales each row of
+* A*diag(x) by a power of the radix so all absolute row
+* sums of Z are approximately 1.
+*
+* This subroutine is only responsible for setting the second field
+* above.
+* See Lapack Working Note 165 for further details and extra
+* cautions.
+*
+* RES (input) COMPLEX array, dimension (N)
+* Workspace to hold the intermediate residual.
+*
+* AYB (input) REAL array, dimension (N)
+* Workspace.
+*
+* DY (input) COMPLEX array, dimension (N)
+* Workspace to hold the intermediate solution.
+*
+* Y_TAIL (input) COMPLEX array, dimension (N)
+* Workspace to hold the trailing bits of the intermediate solution.
+*
+* RCOND (input) REAL
+* Reciprocal scaled condition number. This is an estimate of the
+* reciprocal Skeel condition number of the matrix A after
+* equilibration (if done). If this is less than the machine
+* precision (in particular, if it is zero), the matrix is singular
+* to working precision. Note that the error may still be small even
+* if this number is very small and the matrix appears ill
+* conditioned.
+*
+* ITHRESH (input) INTEGER
+* The maximum number of residual computations allowed for
+* refinement. The default is 10. For 'aggressive' set to 100 to
+* permit convergence using approximate factorizations or
+* factorizations other than LU. If the factorization uses a
+* technique other than Gaussian elimination, the guarantees in
+* ERR_BNDS_NORM and ERR_BNDS_COMP may no longer be trustworthy.
+*
+* RTHRESH (input) REAL
+* Determines when to stop refinement if the error estimate stops
+* decreasing. Refinement will stop when the next solution no longer
+* satisfies norm(dx_{i+1}) < RTHRESH * norm(dx_i) where norm(Z) is
+* the infinity norm of Z. RTHRESH satisfies 0 < RTHRESH <= 1. The
+* default value is 0.5. For 'aggressive' set to 0.9 to permit
+* convergence on extremely illconditioned matrices. See LAWN 165
+* for more details.
+*
+* DZ_UB (input) REAL
+* Determines when to start considering componentwise convergence.
+* Componentwise convergence is only considered after each component
+* of the solution Y is stable, which we definte as the relative
+* change in each component being less than DZ_UB. The default value
+* is 0.25, requiring the first bit to be stable. See LAWN 165 for
+* more details.
+*
+* IGNORE_CWISE (input) LOGICAL
+* If .TRUE. then ignore componentwise convergence. Default value
+* is .FALSE..
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* < 0: if INFO = i, the ith argument to CSYTRS had an illegal
+* value
+*
* =====================================================================
*
* .. Local Scalars ..
@@ 279,10 +517,12 @@
* Compute error bounds.
*
IF ( N_NORMS .GE. 1 ) THEN
 ERRS_N( J, LA_LINRX_ERR_I ) = FINAL_DX_X / (1  DXRATMAX)
+ ERR_BNDS_NORM( J, LA_LINRX_ERR_I ) =
+ $ FINAL_DX_X / (1  DXRATMAX)
END IF
IF ( N_NORMS .GE. 2 ) THEN
 ERRS_C( J, LA_LINRX_ERR_I ) = FINAL_DZ_Z / (1  DZRATMAX)
+ ERR_BNDS_COMP( J, LA_LINRX_ERR_I ) =
+ $ FINAL_DZ_Z / (1  DZRATMAX)
END IF
*
* Compute componentwise relative backward error from formula
Modified: lapack/trunk/SRC/cla_syrpvgrw.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/cla_syrpvgrw.f?rev=650
==============================================================================
 lapack/trunk/SRC/cla_syrpvgrw.f (original)
+++ lapack/trunk/SRC/cla_syrpvgrw.f Tue Apr 7 20:05:18 2009
@@ 24,11 +24,50 @@
* Purpose
* =======
*
* CLA_SYRPVGRW computes ... .
+* CLA_SYRPVGRW computes the reciprocal pivot growth factor
+* norm(A)/norm(U). The "max absolute element" norm is used. If this is
+* much less than 1, the stability of the LU factorization of the
+* (equilibrated) matrix A could be poor. This also means that the
+* solution X, estimated condition numbers, and error bounds could be
+* unreliable.
*
* Arguments
* =========
*
+* UPLO (input) CHARACTER*1
+* = 'U': Upper triangle of A is stored;
+* = 'L': Lower triangle of A is stored.
+*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* INFO (input) INTEGER
+* The value of INFO returned from CSYTRF, .i.e., the pivot in
+* column INFO is exactly 0.
+*
+* NCOLS (input) INTEGER
+* The number of columns of the matrix A. NCOLS >= 0.
+*
+* A (input) COMPLEX array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) COMPLEX array, dimension (LDAF,N)
+* The block diagonal matrix D and the multipliers used to
+* obtain the factor U or L as computed by CSYTRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* IPIV (input) INTEGER array, dimension (N)
+* Details of the interchanges and the block structure of D
+* as determined by CSYTRF.
+*
+* WORK (input) COMPLEX array, dimension (2*N)
+*
* =====================================================================
*
* .. Local Scalars ..
Modified: lapack/trunk/SRC/clarscl2.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/clarscl2.f?rev=650
==============================================================================
 lapack/trunk/SRC/clarscl2.f (original)
+++ lapack/trunk/SRC/clarscl2.f Tue Apr 7 20:05:18 2009
@@ 23,21 +23,32 @@
*
* CLARSCL2 performs a reciprocal diagonal scaling on an vector:
* x < inv(D) * x
* where the diagonal matrix D is stored as a vector.
* Eventually to be replaced by BLAS_sge_diag_scale in the new BLAS
+* where the REAL diagonal matrix D is stored as a vector.
+*
+* Eventually to be replaced by BLAS_cge_diag_scale in the new BLAS
* standard.
*
* Arguments
* =========
* N (input) INTEGER
* The size of the vectors X and D.
*
* D (input) REAL array, length N
* Diagonal matrix D, stored as a vector of length N.
* X (input/output) COMPLEX array, length N
* On entry, the vector X to be scaled by D.
* On exit, the scaled vector.
* ..
+* M (input) INTEGER
+* The number of rows of D and X. M >= 0.
+*
+* N (input) INTEGER
+* The number of columns of D and X. N >= 0.
+*
+* D (input) REAL array, length M
+* Diagonal matrix D, stored as a vector of length M.
+*
+* X (input/output) COMPLEX array, dimension (LDX,N)
+* On entry, the vector X to be scaled by D.
+* On exit, the scaled vector.
+*
+* LDX (input) INTEGER
+* The leading dimension of the vector X. LDX >= 0.
+*
+* =====================================================================
+*
* .. Local Scalars ..
INTEGER I, J
* ..
@@ 45,10 +56,10 @@
*
DO J = 1, N
DO I = 1, M
 X(I,J) = X(I,J) / D(I)
+ X( I, J ) = X( I, J ) / D( I )
END DO
END DO
*
+
RETURN
END
*
+
Modified: lapack/trunk/SRC/clascl2.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/clascl2.f?rev=650
==============================================================================
 lapack/trunk/SRC/clascl2.f (original)
+++ lapack/trunk/SRC/clascl2.f Tue Apr 7 20:05:18 2009
@@ 23,21 +23,32 @@
*
* CLASCL2 performs a diagonal scaling on a vector:
* x < D * x
* where the diagonal matrix D is stored as a vector.
* Eventually to be replaced by BLAS_sge_diag_scale in the new BLAS
+* where the diagonal REAL matrix D is stored as a vector.
+*
+* Eventually to be replaced by BLAS_cge_diag_scale in the new BLAS
* standard.
*
* Arguments
* =========
* N (input) INTEGER
* The size of the vectors X and D.
*
* D (input) REAL array, length N
* Diagonal matrix D, stored as a vector of length N.
* X (input/output) COMPLEX array, length N
* On entry, the vector X to be scaled by D.
* On exit, the scaled vector.
* ..
+* M (input) INTEGER
+* The number of rows of D and X. M >= 0.
+*
+* N (input) INTEGER
+* The number of columns of D and X. N >= 0.
+*
+* D (input) REAL array, length M
+* Diagonal matrix D, stored as a vector of length M.
+*
+* X (input/output) COMPLEX array, dimension (LDX,N)
+* On entry, the vector X to be scaled by D.
+* On exit, the scaled vector.
+*
+* LDX (input) INTEGER
+* The leading dimension of the vector X. LDX >= 0.
+*
+* =====================================================================
+*
* .. Local Scalars ..
INTEGER I, J
* ..
@@ 45,10 +56,10 @@
*
DO J = 1, N
DO I = 1, M
 X(I,J) = X(I,J) * D(I)
+ X( I, J ) = X( I, J ) * D( I )
END DO
END DO
*
+
RETURN
END
*
+
Modified: lapack/trunk/SRC/cporfsx.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/cporfsx.f?rev=650
==============================================================================
 lapack/trunk/SRC/cporfsx.f (original)
+++ lapack/trunk/SRC/cporfsx.f Tue Apr 7 20:05:18 2009
@@ 1,4 +1,4 @@
 Subroutine CPORFSX( UPLO, EQUED, N, NRHS, A, LDA, AF, LDAF, S, B,
+ SUBROUTINE CPORFSX( UPLO, EQUED, N, NRHS, A, LDA, AF, LDAF, S, B,
$ LDB, X, LDX, RCOND, BERR, N_ERR_BNDS,
$ ERR_BNDS_NORM, ERR_BNDS_COMP, NPARAMS, PARAMS,
$ WORK, RWORK, INFO )
@@ 35,7 +35,8 @@
* definite, and provides error bounds and backward error estimates
* for the solution. In addition to normwise error bound, the code
* provides maximum componentwise error bound if possible. See
* comments for ERR_BNDS for details of the error bounds.
+* comments for ERR_BNDS_NORM and ERR_BNDS_COMP for details of the
+* error bounds.
*
* The original system of linear equations may have been equilibrated
* before calling this routine, as described by arguments EQUED and S
Modified: lapack/trunk/SRC/csyrfsx.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/csyrfsx.f?rev=650
==============================================================================
 lapack/trunk/SRC/csyrfsx.f (original)
+++ lapack/trunk/SRC/csyrfsx.f Tue Apr 7 20:05:18 2009
@@ 1,4 +1,4 @@
 Subroutine CSYRFSX( UPLO, EQUED, N, NRHS, A, LDA, AF, LDAF, IPIV,
+ SUBROUTINE CSYRFSX( UPLO, EQUED, N, NRHS, A, LDA, AF, LDAF, IPIV,
$ S, B, LDB, X, LDX, RCOND, BERR, N_ERR_BNDS,
$ ERR_BNDS_NORM, ERR_BNDS_COMP, NPARAMS, PARAMS,
$ WORK, RWORK, INFO )
@@ 36,7 +36,7 @@
* provides error bounds and backward error estimates for the
* solution. In addition to normwise error bound, the code provides
* maximum componentwise error bound if possible. See comments for
* ERR_BNDS_N and ERR_BNDS_C for details of the error bounds.
+* ERR_BNDS_NORM and ERR_BNDS_COMP for details of the error bounds.
*
* The original system of linear equations may have been equilibrated
* before calling this routine, as described by arguments EQUED and S
Modified: lapack/trunk/SRC/csysvxx.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/csysvxx.f?rev=650
==============================================================================
 lapack/trunk/SRC/csysvxx.f (original)
+++ lapack/trunk/SRC/csysvxx.f Tue Apr 7 20:05:18 2009
@@ 115,6 +115,10 @@
* = 'E': The matrix A will be equilibrated if necessary, then
* copied to AF and factored.
*
+* UPLO (input) CHARACTER*1
+* = 'U': Upper triangle of A is stored;
+* = 'L': Lower triangle of A is stored.
+*
* N (input) INTEGER
* The number of linear equations, i.e., the order of the
* matrix A. N >= 0.
Modified: lapack/trunk/SRC/dgbrfsx.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/dgbrfsx.f?rev=650
==============================================================================
 lapack/trunk/SRC/dgbrfsx.f (original)
+++ lapack/trunk/SRC/dgbrfsx.f Tue Apr 7 20:05:18 2009
@@ 36,8 +36,8 @@
* equations and provides error bounds and backward error estimates
* for the solution. In addition to normwise error bound, the code
* provides maximum componentwise error bound if possible. See
* comments for ERR_BNDS_N and ERR_BNDS_C for details of the error
* bounds.
+* comments for ERR_BNDS_NORM and ERR_BNDS_COMP for details of the
+* error bounds.
*
* The original system of linear equations may have been equilibrated
* before calling this routine, as described by arguments EQUED, R
Modified: lapack/trunk/SRC/dgerfsx.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/dgerfsx.f?rev=650
==============================================================================
 lapack/trunk/SRC/dgerfsx.f (original)
+++ lapack/trunk/SRC/dgerfsx.f Tue Apr 7 20:05:18 2009
@@ 35,8 +35,8 @@
* equations and provides error bounds and backward error estimates
* for the solution. In addition to normwise error bound, the code
* provides maximum componentwise error bound if possible. See
* comments for ERR_BNDS_N and ERR_BNDS_C for details of the error
* bounds.
+* comments for ERR_BNDS_NORM and ERR_BNDS_COMP for details of the
+* error bounds.
*
* The original system of linear equations may have been equilibrated
* before calling this routine, as described by arguments EQUED, R
Modified: lapack/trunk/SRC/dla_gbrcond.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/dla_gbrcond.f?rev=650
==============================================================================
 lapack/trunk/SRC/dla_gbrcond.f (original)
+++ lapack/trunk/SRC/dla_gbrcond.f Tue Apr 7 20:05:18 2009
@@ 1,6 +1,6 @@
DOUBLE PRECISION FUNCTION DLA_GBRCOND( TRANS, N, KL, KU, AB, LDAB,
 $ AFB, LDAFB, IPIV, CMODE, C, INFO,
 $ WORK, IWORK )
+ $ AFB, LDAFB, IPIV, CMODE, C,
+ $ INFO, WORK, IWORK )
*
*  LAPACK routine (version 3.2.1) 
*  Contributed by James Demmel, Deaglan Halligan, Yozo Hida and 
@@ 38,9 +38,64 @@
* Arguments
* =========
*
* WORK double precision workspace of size 5*N.
+* TRANS (input) CHARACTER*1
+* Specifies the form of the system of equations:
+* = 'N': A * X = B (No transpose)
+* = 'T': A**T * X = B (Transpose)
+* = 'C': A**H * X = B (Conjugate Transpose = Transpose)
+*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* KL (input) INTEGER
+* The number of subdiagonals within the band of A. KL >= 0.
+*
+* KU (input) INTEGER
+* The number of superdiagonals within the band of A. KU >= 0.
+*
+* AB (input) DOUBLE PRECISION array, dimension (LDAB,N)
+* On entry, the matrix A in band storage, in rows 1 to KL+KU+1.
+* The jth column of A is stored in the jth column of the
+* array AB as follows:
+* AB(KU+1+ij,j) = A(i,j) for max(1,jKU)<=i<=min(N,j+kl)
+*
+* LDAB (input) INTEGER
+* The leading dimension of the array AB. LDAB >= KL+KU+1.
+*
+* AFB (input) DOUBLE PRECISION array, dimension (LDAFB,N)
+* Details of the LU factorization of the band matrix A, as
+* computed by DGBTRF. U is stored as an upper triangular
+* band matrix with KL+KU superdiagonals in rows 1 to KL+KU+1,
+* and the multipliers used during the factorization are stored
+* in rows KL+KU+2 to 2*KL+KU+1.
+*
+* LDAFB (input) INTEGER
+* The leading dimension of the array AFB. LDAFB >= 2*KL+KU+1.
+*
+* IPIV (input) INTEGER array, dimension (N)
+* The pivot indices from the factorization A = P*L*U
+* as computed by DGBTRF; row i of the matrix was interchanged
+* with row IPIV(i).
*
* IWORK integer workspace of size N.
+* CMODE (input) INTEGER
+* Determines op2(C) in the formula op(A) * op2(C) as follows:
+* CMODE = 1 op2(C) = C
+* CMODE = 0 op2(C) = I
+* CMODE = 1 op2(C) = inv(C)
+*
+* C (input) DOUBLE PRECISION array, dimension (N)
+* The vector C in the formula op(A) * op2(C).
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* i > 0: The ith argument is invalid.
+*
+* WORK (input) DOUBLE PRECISION array, dimension (5*N).
+* Workspace.
+*
+* IWORK (input) INTEGER array, dimension (N).
+* Workspace.
*
* =====================================================================
*
@@ 74,13 +129,13 @@
ELSE IF( N.LT.0 ) THEN
INFO = 2
ELSE IF( KL.LT.0 .OR. KL.GT.N1 ) THEN
 INFO = 4
+ INFO = 3
ELSE IF( KU.LT.0 .OR. KU.GT.N1 ) THEN
 INFO = 5
+ INFO = 4
ELSE IF( LDAB.LT.KL+KU+1 ) THEN
 INFO = 8
+ INFO = 6
ELSE IF( LDAFB.LT.2*KL+KU+1 ) THEN
 INFO = 10
+ INFO = 8
END IF
IF( INFO.NE.0 ) THEN
CALL XERBLA( 'DLA_GBRCOND', INFO )
Modified: lapack/trunk/SRC/dla_gbrfsx_extended.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/dla_gbrfsx_extended.f?rev=650
==============================================================================
 lapack/trunk/SRC/dla_gbrfsx_extended.f (original)
+++ lapack/trunk/SRC/dla_gbrfsx_extended.f Tue Apr 7 20:05:18 2009
@@ 1,10 +1,10 @@
SUBROUTINE DLA_GBRFSX_EXTENDED( PREC_TYPE, TRANS_TYPE, N, KL, KU,
$ NRHS, AB, LDAB, AFB, LDAFB, IPIV,
$ COLEQU, C, B, LDB, Y, LDY,
 $ BERR_OUT, N_NORMS, ERRS_N, ERRS_C,
 $ RES, AYB, DY, Y_TAIL, RCOND,
 $ ITHRESH, RTHRESH, DZ_UB,
 $ IGNORE_CWISE, INFO )
+ $ BERR_OUT, N_NORMS, ERR_BNDS_NORM,
+ $ ERR_BNDS_COMP, RES, AYB, DY,
+ $ Y_TAIL, RCOND, ITHRESH, RTHRESH,
+ $ DZ_UB, IGNORE_CWISE, INFO )
*
*  LAPACK routine (version 3.2) 
*  Contributed by James Demmel, Deaglan Halligan, Yozo Hida and 
@@ 27,17 +27,264 @@
DOUBLE PRECISION AB( LDAB, * ), AFB( LDAFB, * ), B( LDB, * ),
$ Y( LDY, * ), RES(*), DY(*), Y_TAIL(*)
DOUBLE PRECISION C( * ), AYB(*), RCOND, BERR_OUT(*),
 $ ERRS_N( NRHS, * ), ERRS_C( NRHS, * )
+ $ ERR_BNDS_NORM( NRHS, * ),
+ $ ERR_BNDS_COMP( NRHS, * )
* ..
*
* Purpose
* =======
*
* DLA_GBRFSX_EXTENDED computes ... .
+* DLA_GBRFSX_EXTENDED improves the computed solution to a system of
+* linear equations by performing extraprecise iterative refinement
+* and provides error bounds and backward error estimates for the solution.
+* This subroutine is called by DGBRFSX to perform iterative refinement.
+* In addition to normwise error bound, the code provides maximum
+* componentwise error bound if possible. See comments for ERR_BNDS_NORM
+* and ERR_BNDS_COMP for details of the error bounds. Note that this
+* subroutine is only resonsible for setting the second fields of
+* ERR_BNDS_NORM and ERR_BNDS_COMP.
*
* Arguments
* =========
*
+* PREC_TYPE (input) INTEGER
+* Specifies the intermediate precision to be used in refinement.
+* The value is defined by ILAPREC(P) where P is a CHARACTER and
+* P = 'S': Single
+* = 'D': Double
+* = 'I': Indigenous
+* = 'X', 'E': Extra
+*
+* TRANS_TYPE (input) INTEGER
+* Specifies the transposition operation on A.
+* The value is defined by ILATRANS(T) where T is a CHARACTER and
+* T = 'N': No transpose
+* = 'T': Transpose
+* = 'C': Conjugate transpose
+*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* KL (input) INTEGER
+* The number of subdiagonals within the band of A. KL >= 0.
+*
+* KU (input) INTEGER
+* The number of superdiagonals within the band of A. KU >= 0
+*
+* NRHS (input) INTEGER
+* The number of righthandsides, i.e., the number of columns of the
+* matrix B.
+*
+* A (input) DOUBLE PRECISION array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) DOUBLE PRECISION array, dimension (LDAF,N)
+* The factors L and U from the factorization
+* A = P*L*U as computed by DGBTRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* IPIV (input) INTEGER array, dimension (N)
+* The pivot indices from the factorization A = P*L*U
+* as computed by DGBTRF; row i of the matrix was interchanged
+* with row IPIV(i).
+*
+* COLEQU (input) LOGICAL
+* If .TRUE. then column equilibration was done to A before calling
+* this routine. This is needed to compute the solution and error
+* bounds correctly.
+*
+* C (input) DOUBLE PRECISION array, dimension (N)
+* The column scale factors for A. If COLEQU = .FALSE., C
+* is not accessed. If C is input, each element of C should be a power
+* of the radix to ensure a reliable solution and error estimates.
+* Scaling by powers of the radix does not cause rounding errors unless
+* the result underflows or overflows. Rounding errors during scaling
+* lead to refining with a matrix that is not equivalent to the
+* input matrix, producing error estimates that may not be
+* reliable.
+*
+* B (input) DOUBLE PRECISION array, dimension (LDB,NRHS)
+* The righthandside matrix B.
+*
+* LDB (input) INTEGER
+* The leading dimension of the array B. LDB >= max(1,N).
+*
+* Y (input/output) DOUBLE PRECISION array, dimension
+* (LDY,NRHS)
+* On entry, the solution matrix X, as computed by DGBTRS.
+* On exit, the improved solution matrix Y.
+*
+* LDY (input) INTEGER
+* The leading dimension of the array Y. LDY >= max(1,N).
+*
+* BERR_OUT (output) DOUBLE PRECISION array, dimension (NRHS)
+* On exit, BERR_OUT(j) contains the componentwise relative backward
+* error for righthandside j from the formula
+* max(i) ( abs(RES(i)) / ( abs(op(A_s))*abs(Y) + abs(B_s) )(i) )
+* where abs(Z) is the componentwise absolute value of the matrix
+* or vector Z. This is computed by DLA_LIN_BERR.
+*
+* N_NORMS (input) INTEGER
+* Determines which error bounds to return (see ERR_BNDS_NORM
+* and ERR_BNDS_COMP).
+* If N_NORMS >= 1 return normwise error bounds.
+* If N_NORMS >= 2 return componentwise error bounds.
+*
+* ERR_BNDS_NORM (input/output) DOUBLE PRECISION array, dimension
+* (NRHS, N_ERR_BNDS)
+* For each righthand side, this array contains information about
+* various error bounds and condition numbers corresponding to the
+* normwise relative error, which is defined as follows:
+*
+* Normwise relative error in the ith solution vector:
+* max_j (abs(XTRUE(j,i)  X(j,i)))
+* 
+* max_j abs(X(j,i))
+*
+* The array is indexed by the type of error information as described
+* below. There currently are up to three pieces of information
+* returned.
+*
+* The first index in ERR_BNDS_NORM(i,:) corresponds to the ith
+* righthand side.
+*
+* The second index in ERR_BNDS_NORM(:,err) contains the following
+* three fields:
+* err = 1 "Trust/don't trust" boolean. Trust the answer if the
+* reciprocal condition number is less than the threshold
+* sqrt(n) * slamch('Epsilon').
+*
+* err = 2 "Guaranteed" error bound: The estimated forward error,
+* almost certainly within a factor of 10 of the true error
+* so long as the next entry is greater than the threshold
+* sqrt(n) * slamch('Epsilon'). This error bound should only
+* be trusted if the previous boolean is true.
+*
+* err = 3 Reciprocal condition number: Estimated normwise
+* reciprocal condition number. Compared with the threshold
+* sqrt(n) * slamch('Epsilon') to determine if the error
+* estimate is "guaranteed". These reciprocal condition
+* numbers are 1 / (norm(Z^{1},inf) * norm(Z,inf)) for some
+* appropriately scaled matrix Z.
+* Let Z = S*A, where S scales each row by a power of the
+* radix so all absolute row sums of Z are approximately 1.
+*
+* This subroutine is only responsible for setting the second field
+* above.
+* See Lapack Working Note 165 for further details and extra
+* cautions.
+*
+* ERR_BNDS_COMP (input/output) DOUBLE PRECISION array, dimension
+* (NRHS, N_ERR_BNDS)
+* For each righthand side, this array contains information about
+* various error bounds and condition numbers corresponding to the
+* componentwise relative error, which is defined as follows:
+*
+* Componentwise relative error in the ith solution vector:
+* abs(XTRUE(j,i)  X(j,i))
+* max_j 
+* abs(X(j,i))
+*
+* The array is indexed by the righthand side i (on which the
+* componentwise relative error depends), and the type of error
+* information as described below. There currently are up to three
+* pieces of information returned for each righthand side. If
+* componentwise accuracy is not requested (PARAMS(3) = 0.0), then
+* ERR_BNDS_COMP is not accessed. If N_ERR_BNDS .LT. 3, then at most
+* the first (:,N_ERR_BNDS) entries are returned.
+*
+* The first index in ERR_BNDS_COMP(i,:) corresponds to the ith
+* righthand side.
+*
+* The second index in ERR_BNDS_COMP(:,err) contains the following
+* three fields:
+* err = 1 "Trust/don't trust" boolean. Trust the answer if the
+* reciprocal condition number is less than the threshold
+* sqrt(n) * slamch('Epsilon').
+*
+* err = 2 "Guaranteed" error bound: The estimated forward error,
+* almost certainly within a factor of 10 of the true error
+* so long as the next entry is greater than the threshold
+* sqrt(n) * slamch('Epsilon'). This error bound should only
+* be trusted if the previous boolean is true.
+*
+* err = 3 Reciprocal condition number: Estimated componentwise
+* reciprocal condition number. Compared with the threshold
+* sqrt(n) * slamch('Epsilon') to determine if the error
+* estimate is "guaranteed". These reciprocal condition
+* numbers are 1 / (norm(Z^{1},inf) * norm(Z,inf)) for some
+* appropriately scaled matrix Z.
+* Let Z = S*(A*diag(x)), where x is the solution for the
+* current righthand side and S scales each row of
+* A*diag(x) by a power of the radix so all absolute row
+* sums of Z are approximately 1.
+*
+* This subroutine is only responsible for setting the second field
+* above.
+* See Lapack Working Note 165 for further details and extra
+* cautions.
+*
+* RES (input) DOUBLE PRECISION array, dimension (N)
+* Workspace to hold the intermediate residual.
+*
+* AYB (input) DOUBLE PRECISION array, dimension (N)
+* Workspace. This can be the same workspace passed for Y_TAIL.
+*
+* DY (input) DOUBLE PRECISION array, dimension (N)
+* Workspace to hold the intermediate solution.
+*
+* Y_TAIL (input) DOUBLE PRECISION array, dimension (N)
+* Workspace to hold the trailing bits of the intermediate solution.
+*
+* RCOND (input) DOUBLE PRECISION
+* Reciprocal scaled condition number. This is an estimate of the
+* reciprocal Skeel condition number of the matrix A after
+* equilibration (if done). If this is less than the machine
+* precision (in particular, if it is zero), the matrix is singular
+* to working precision. Note that the error may still be small even
+* if this number is very small and the matrix appears ill
+* conditioned.
+*
+* ITHRESH (input) INTEGER
+* The maximum number of residual computations allowed for
+* refinement. The default is 10. For 'aggressive' set to 100 to
+* permit convergence using approximate factorizations or
+* factorizations other than LU. If the factorization uses a
+* technique other than Gaussian elimination, the guarantees in
+* ERR_BNDS_NORM and ERR_BNDS_COMP may no longer be trustworthy.
+*
+* RTHRESH (input) DOUBLE PRECISION
+* Determines when to stop refinement if the error estimate stops
+* decreasing. Refinement will stop when the next solution no longer
+* satisfies norm(dx_{i+1}) < RTHRESH * norm(dx_i) where norm(Z) is
+* the infinity norm of Z. RTHRESH satisfies 0 < RTHRESH <= 1. The
+* default value is 0.5. For 'aggressive' set to 0.9 to permit
+* convergence on extremely illconditioned matrices. See LAWN 165
+* for more details.
+*
+* DZ_UB (input) DOUBLE PRECISION
+* Determines when to start considering componentwise convergence.
+* Componentwise convergence is only considered after each component
+* of the solution Y is stable, which we definte as the relative
+* change in each component being less than DZ_UB. The default value
+* is 0.25, requiring the first bit to be stable. See LAWN 165 for
+* more details.
+*
+* IGNORE_CWISE (input) LOGICAL
+* If .TRUE. then ignore componentwise convergence. Default value
+* is .FALSE..
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* < 0: if INFO = i, the ith argument to DGBTRS had an illegal
+* value
+*
* =====================================================================
*
* .. Local Scalars ..
@@ 275,10 +522,12 @@
* Compute error bounds.
*
IF ( N_NORMS .GE. 1 ) THEN
 ERRS_N( J, LA_LINRX_ERR_I ) = FINAL_DX_X / (1  DXRATMAX)
+ ERR_BNDS_NORM( J, LA_LINRX_ERR_I ) =
+ $ FINAL_DX_X / (1  DXRATMAX)
END IF
IF (N_NORMS .GE. 2) THEN
 ERRS_C( J, LA_LINRX_ERR_I ) = FINAL_DZ_Z / (1  DZRATMAX)
+ ERR_BNDS_COMP( J, LA_LINRX_ERR_I ) =
+ $ FINAL_DZ_Z / (1  DZRATMAX)
END IF
*
* Compute componentwise relative backward error from formula
Modified: lapack/trunk/SRC/dla_gbrpvgrw.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/dla_gbrpvgrw.f?rev=650
==============================================================================
 lapack/trunk/SRC/dla_gbrpvgrw.f (original)
+++ lapack/trunk/SRC/dla_gbrpvgrw.f Tue Apr 7 20:05:18 2009
@@ 1,5 +1,5 @@
 DOUBLE PRECISION FUNCTION DLA_GBRPVGRW( N, KL, KU, NCOLS, AB,
 $ LDAB, AFB, LDAFB )
+ DOUBLE PRECISION FUNCTION DLA_GBRPVGRW( N, KL, KU, NCOLS, AB,
+ $ LDAB, AFB, LDAFB )
*
*  LAPACK routine (version 3.2) 
*  Contributed by James Demmel, Deaglan Halligan, Yozo Hida and 
@@ 20,12 +20,49 @@
*
* Purpose
* =======
*
* DLA_GBRPVGRW computes ... .
+*
+* DLA_GBRPVGRW computes the reciprocal pivot growth factor
+* norm(A)/norm(U). The "max absolute element" norm is used. If this is
+* much less than 1, the stability of the LU factorization of the
+* (equilibrated) matrix A could be poor. This also means that the
+* solution X, estimated condition numbers, and error bounds could be
+* unreliable.
*
* Arguments
* =========
*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* KL (input) INTEGER
+* The number of subdiagonals within the band of A. KL >= 0.
+*
+* KU (input) INTEGER
+* The number of superdiagonals within the band of A. KU >= 0.
+*
+* NCOLS (input) INTEGER
+* The number of columns of the matrix A. NCOLS >= 0.
+*
+* AB (input) DOUBLE PRECISION array, dimension (LDAB,N)
+* On entry, the matrix A in band storage, in rows 1 to KL+KU+1.
+* The jth column of A is stored in the jth column of the
+* array AB as follows:
+* AB(KU+1+ij,j) = A(i,j) for max(1,jKU)<=i<=min(N,j+kl)
+*
+* LDAB (input) INTEGER
+* The leading dimension of the array AB. LDAB >= KL+KU+1.
+*
+* AFB (input) DOUBLE PRECISION array, dimension (LDAFB,N)
+* Details of the LU factorization of the band matrix A, as
+* computed by DGBTRF. U is stored as an upper triangular
+* band matrix with KL+KU superdiagonals in rows 1 to KL+KU+1,
+* and the multipliers used during the factorization are stored
+* in rows KL+KU+2 to 2*KL+KU+1.
+*
+* LDAFB (input) INTEGER
+* The leading dimension of the array AFB. LDAFB >= 2*KL+KU+1.
+*
* =====================================================================
*
* .. Local Scalars ..
@@ 38,7 +75,7 @@
* .. Executable Statements ..
*
RPVGRW = 1.0D+0
*
+
KD = KU + 1
DO J = 1, NCOLS
AMAX = 0.0D+0
Modified: lapack/trunk/SRC/dla_gercond.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/dla_gercond.f?rev=650
==============================================================================
 lapack/trunk/SRC/dla_gercond.f (original)
+++ lapack/trunk/SRC/dla_gercond.f Tue Apr 7 20:05:18 2009
@@ 1,6 +1,6 @@
 DOUBLE PRECISION FUNCTION DLA_GERCOND ( TRANS, N, A, LDA, AF,
 $ LDAF, IPIV, CMODE, C, INFO, WORK,
 $ IWORK )
+ DOUBLE PRECISION FUNCTION DLA_GERCOND ( TRANS, N, A, LDA, AF,
+ $ LDAF, IPIV, CMODE, C,
+ $ INFO, WORK, IWORK )
*
*  LAPACK routine (version 3.2) 
*  Contributed by James Demmel, Deaglan Halligan, Yozo Hida and 
@@ 38,9 +38,52 @@
* Arguments
* ==========
*
* WORK DOUBLE PRECISION workspace of size 3*N, and
+* TRANS (input) CHARACTER*1
+* Specifies the form of the system of equations:
+* = 'N': A * X = B (No transpose)
+* = 'T': A**T * X = B (Transpose)
+* = 'C': A**H * X = B (Conjugate Transpose = Transpose)
+*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* A (input) DOUBLE PRECISION array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) DOUBLE PRECISION array, dimension (LDAF,N)
+* The factors L and U from the factorization
+* A = P*L*U as computed by DGETRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* IPIV (input) INTEGER array, dimension (N)
+* The pivot indices from the factorization A = P*L*U
+* as computed by DGETRF; row i of the matrix was interchanged
+* with row IPIV(i).
*
* IWORK INTEGER workspace of size N.
+* CMODE (input) INTEGER
+* Determines op2(C) in the formula op(A) * op2(C) as follows:
+* CMODE = 1 op2(C) = C
+* CMODE = 0 op2(C) = I
+* CMODE = 1 op2(C) = inv(C)
+*
+* C (input) DOUBLE PRECISION array, dimension (N)
+* The vector C in the formula op(A) * op2(C).
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* i > 0: The ith argument is invalid.
+*
+* WORK (input) DOUBLE PRECISION array, dimension (3*N).
+* Workspace.
+*
+* IWORK (input) INTEGER array, dimension (N).
+* Workspace.
*
* =====================================================================
*
@@ 73,6 +116,10 @@
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( 'DLA_GERCOND', INFO )
Modified: lapack/trunk/SRC/dla_gerfsx_extended.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/dla_gerfsx_extended.f?rev=650
==============================================================================
 lapack/trunk/SRC/dla_gerfsx_extended.f (original)
+++ lapack/trunk/SRC/dla_gerfsx_extended.f Tue Apr 7 20:05:18 2009
@@ 32,11 +32,251 @@
* Purpose
* =======
*
* DLA_GERFSX_EXTENDED computes ... .
+* DLA_GERFSX_EXTENDED improves the computed solution to a system of
+* linear equations by performing extraprecise iterative refinement
+* and provides error bounds and backward error estimates for the solution.
+* This subroutine is called by DGERFSX to perform iterative refinement.
+* In addition to normwise error bound, the code provides maximum
+* componentwise error bound if possible. See comments for ERR_BNDS_NORM
+* and ERR_BNDS_COMP for details of the error bounds. Note that this
+* subroutine is only resonsible for setting the second fields of
+* ERR_BNDS_NORM and ERR_BNDS_COMP.
*
* Arguments
* =========
*
+* PREC_TYPE (input) INTEGER
+* Specifies the intermediate precision to be used in refinement.
+* The value is defined by ILAPREC(P) where P is a CHARACTER and
+* P = 'S': Single
+* = 'D': Double
+* = 'I': Indigenous
+* = 'X', 'E': Extra
+*
+* TRANS_TYPE (input) INTEGER
+* Specifies the transposition operation on A.
+* The value is defined by ILATRANS(T) where T is a CHARACTER and
+* T = 'N': No transpose
+* = 'T': Transpose
+* = 'C': Conjugate transpose
+*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* NRHS (input) INTEGER
+* The number of righthandsides, i.e., the number of columns of the
+* matrix B.
+*
+* A (input) DOUBLE PRECISION array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) DOUBLE PRECISION array, dimension (LDAF,N)
+* The factors L and U from the factorization
+* A = P*L*U as computed by DGETRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* IPIV (input) INTEGER array, dimension (N)
+* The pivot indices from the factorization A = P*L*U
+* as computed by DGETRF; row i of the matrix was interchanged
+* with row IPIV(i).
+*
+* COLEQU (input) LOGICAL
+* If .TRUE. then column equilibration was done to A before calling
+* this routine. This is needed to compute the solution and error
+* bounds correctly.
+*
+* C (input) DOUBLE PRECISION array, dimension (N)
+* The column scale factors for A. If COLEQU = .FALSE., C
+* is not accessed. If C is input, each element of C should be a power
+* of the radix to ensure a reliable solution and error estimates.
+* Scaling by powers of the radix does not cause rounding errors unless
+* the result underflows or overflows. Rounding errors during scaling
+* lead to refining with a matrix that is not equivalent to the
+* input matrix, producing error estimates that may not be
+* reliable.
+*
+* B (input) DOUBLE PRECISION array, dimension (LDB,NRHS)
+* The righthandside matrix B.
+*
+* LDB (input) INTEGER
+* The leading dimension of the array B. LDB >= max(1,N).
+*
+* Y (input/output) DOUBLE PRECISION array, dimension
+* (LDY,NRHS)
+* On entry, the solution matrix X, as computed by DGETRS.
+* On exit, the improved solution matrix Y.
+*
+* LDY (input) INTEGER
+* The leading dimension of the array Y. LDY >= max(1,N).
+*
+* BERR_OUT (output) DOUBLE PRECISION array, dimension (NRHS)
+* On exit, BERR_OUT(j) contains the componentwise relative backward
+* error for righthandside j from the formula
+* max(i) ( abs(RES(i)) / ( abs(op(A_s))*abs(Y) + abs(B_s) )(i) )
+* where abs(Z) is the componentwise absolute value of the matrix
+* or vector Z. This is computed by DLA_LIN_BERR.
+*
+* N_NORMS (input) INTEGER
+* Determines which error bounds to return (see ERR_BNDS_NORM
+* and ERR_BNDS_COMP).
+* If N_NORMS >= 1 return normwise error bounds.
+* If N_NORMS >= 2 return componentwise error bounds.
+*
+* ERR_BNDS_NORM (input/output) DOUBLE PRECISION array, dimension
+* (NRHS, N_ERR_BNDS)
+* For each righthand side, this array contains information about
+* various error bounds and condition numbers corresponding to the
+* normwise relative error, which is defined as follows:
+*
+* Normwise relative error in the ith solution vector:
+* max_j (abs(XTRUE(j,i)  X(j,i)))
+* 
+* max_j abs(X(j,i))
+*
+* The array is indexed by the type of error information as described
+* below. There currently are up to three pieces of information
+* returned.
+*
+* The first index in ERR_BNDS_NORM(i,:) corresponds to the ith
+* righthand side.
+*
+* The second index in ERR_BNDS_NORM(:,err) contains the following
+* three fields:
+* err = 1 "Trust/don't trust" boolean. Trust the answer if the
+* reciprocal condition number is less than the threshold
+* sqrt(n) * slamch('Epsilon').
+*
+* err = 2 "Guaranteed" error bound: The estimated forward error,
+* almost certainly within a factor of 10 of the true error
+* so long as the next entry is greater than the threshold
+* sqrt(n) * slamch('Epsilon'). This error bound should only
+* be trusted if the previous boolean is true.
+*
+* err = 3 Reciprocal condition number: Estimated normwise
+* reciprocal condition number. Compared with the threshold
+* sqrt(n) * slamch('Epsilon') to determine if the error
+* estimate is "guaranteed". These reciprocal condition
+* numbers are 1 / (norm(Z^{1},inf) * norm(Z,inf)) for some
+* appropriately scaled matrix Z.
+* Let Z = S*A, where S scales each row by a power of the
+* radix so all absolute row sums of Z are approximately 1.
+*
+* This subroutine is only responsible for setting the second field
+* above.
+* See Lapack Working Note 165 for further details and extra
+* cautions.
+*
+* ERR_BNDS_COMP (input/output) DOUBLE PRECISION array, dimension
+* (NRHS, N_ERR_BNDS)
+* For each righthand side, this array contains information about
+* various error bounds and condition numbers corresponding to the
+* componentwise relative error, which is defined as follows:
+*
+* Componentwise relative error in the ith solution vector:
+* abs(XTRUE(j,i)  X(j,i))
+* max_j 
+* abs(X(j,i))
+*
+* The array is indexed by the righthand side i (on which the
+* componentwise relative error depends), and the type of error
+* information as described below. There currently are up to three
+* pieces of information returned for each righthand side. If
+* componentwise accuracy is not requested (PARAMS(3) = 0.0), then
+* ERR_BNDS_COMP is not accessed. If N_ERR_BNDS .LT. 3, then at most
+* the first (:,N_ERR_BNDS) entries are returned.
+*
+* The first index in ERR_BNDS_COMP(i,:) corresponds to the ith
+* righthand side.
+*
+* The second index in ERR_BNDS_COMP(:,err) contains the following
+* three fields:
+* err = 1 "Trust/don't trust" boolean. Trust the answer if the
+* reciprocal condition number is less than the threshold
+* sqrt(n) * slamch('Epsilon').
+*
+* err = 2 "Guaranteed" error bound: The estimated forward error,
+* almost certainly within a factor of 10 of the true error
+* so long as the next entry is greater than the threshold
+* sqrt(n) * slamch('Epsilon'). This error bound should only
+* be trusted if the previous boolean is true.
+*
+* err = 3 Reciprocal condition number: Estimated componentwise
+* reciprocal condition number. Compared with the threshold
+* sqrt(n) * slamch('Epsilon') to determine if the error
+* estimate is "guaranteed". These reciprocal condition
+* numbers are 1 / (norm(Z^{1},inf) * norm(Z,inf)) for some
+* appropriately scaled matrix Z.
+* Let Z = S*(A*diag(x)), where x is the solution for the
+* current righthand side and S scales each row of
+* A*diag(x) by a power of the radix so all absolute row
+* sums of Z are approximately 1.
+*
+* This subroutine is only responsible for setting the second field
+* above.
+* See Lapack Working Note 165 for further details and extra
+* cautions.
+*
+* RES (input) DOUBLE PRECISION array, dimension (N)
+* Workspace to hold the intermediate residual.
+*
+* AYB (input) DOUBLE PRECISION array, dimension (N)
+* Workspace. This can be the same workspace passed for Y_TAIL.
+*
+* DY (input) DOUBLE PRECISION array, dimension (N)
+* Workspace to hold the intermediate solution.
+*
+* Y_TAIL (input) DOUBLE PRECISION array, dimension (N)
+* Workspace to hold the trailing bits of the intermediate solution.
+*
+* RCOND (input) DOUBLE PRECISION
+* Reciprocal scaled condition number. This is an estimate of the
+* reciprocal Skeel condition number of the matrix A after
+* equilibration (if done). If this is less than the machine
+* precision (in particular, if it is zero), the matrix is singular
+* to working precision. Note that the error may still be small even
+* if this number is very small and the matrix appears ill
+* conditioned.
+*
+* ITHRESH (input) INTEGER
+* The maximum number of residual computations allowed for
+* refinement. The default is 10. For 'aggressive' set to 100 to
+* permit convergence using approximate factorizations or
+* factorizations other than LU. If the factorization uses a
+* technique other than Gaussian elimination, the guarantees in
+* ERR_BNDS_NORM and ERR_BNDS_COMP may no longer be trustworthy.
+*
+* RTHRESH (input) DOUBLE PRECISION
+* Determines when to stop refinement if the error estimate stops
+* decreasing. Refinement will stop when the next solution no longer
+* satisfies norm(dx_{i+1}) < RTHRESH * norm(dx_i) where norm(Z) is
+* the infinity norm of Z. RTHRESH satisfies 0 < RTHRESH <= 1. The
+* default value is 0.5. For 'aggressive' set to 0.9 to permit
+* convergence on extremely illconditioned matrices. See LAWN 165
+* for more details.
+*
+* DZ_UB (input) DOUBLE PRECISION
+* Determines when to start considering componentwise convergence.
+* Componentwise convergence is only considered after each component
+* of the solution Y is stable, which we definte as the relative
+* change in each component being less than DZ_UB. The default value
+* is 0.25, requiring the first bit to be stable. See LAWN 165 for
+* more details.
+*
+* IGNORE_CWISE (input) LOGICAL
+* If .TRUE. then ignore componentwise convergence. Default value
+* is .FALSE..
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* < 0: if INFO = i, the ith argument to DGETRS had an illegal
+* value
+*
* =====================================================================
*
* .. Local Scalars ..
Modified: lapack/trunk/SRC/dla_lin_berr.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/dla_lin_berr.f?rev=650
==============================================================================
 lapack/trunk/SRC/dla_lin_berr.f (original)
+++ lapack/trunk/SRC/dla_lin_berr.f Tue Apr 7 20:05:18 2009
@@ 21,12 +21,39 @@
* Purpose
* =======
*
* DLA_LIN_BERR computes componentwise relative backward error from
+* DLA_LIN_BERR computes componentwise relative backward error from
* the formula
* max(i) ( abs(R(i)) / ( abs(op(A_s))*abs(Y) + abs(B_s) )(i) )
* where abs(Z) is the componentwise absolute value of the matrix
+* where abs(Z) is the componentwise absolute value of the matrix
* or vector Z.
*
+* Arguments
+* ==========
+*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* NZ (input) INTEGER
+* We add (NZ+1)*SLAMCH( 'Safe minimum' ) to R(i) in the numerator to
+* guard against spuriously zero residuals. Default value is N.
+*
+* NRHS (input) INTEGER
+* The number of right hand sides, i.e., the number of columns
+* of the matrices AYB, RES, and BERR. NRHS >= 0.
+*
+* RES (input) DOUBLE PRECISION array, dimension (N,NRHS)
+* The residual matrix, i.e., the matrix R in the relative backward
+* error formula above.
+*
+* AYB (input) DOUBLE PRECISION array, dimension (N, NRHS)
+* The denominator in the relative backward error formula above, i.e.,
+* the matrix abs(op(A_s))*abs(Y) + abs(B_s). The matrices A, Y, and B
+* are from iterative refinement (see dla_gerfsx_extended.f).
+*
+* RES (output) DOUBLE PRECISION array, dimension (NRHS)
+* The componentwise relative backward error from the formula above.
+*
* =====================================================================
*
* .. Local Scalars ..
Modified: lapack/trunk/SRC/dla_porcond.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/dla_porcond.f?rev=650
==============================================================================
 lapack/trunk/SRC/dla_porcond.f (original)
+++ lapack/trunk/SRC/dla_porcond.f Tue Apr 7 20:05:18 2009
@@ 1,5 +1,6 @@
 DOUBLE PRECISION FUNCTION DLA_PORCOND( UPLO, N, A, LDA, AF, LDAF,
 $ CMODE, C, INFO, WORK, IWORK )
+ DOUBLE PRECISION FUNCTION DLA_PORCOND( UPLO, N, A, LDA, AF, LDAF,
+ $ CMODE, C, INFO, WORK,
+ $ IWORK )
*
*  LAPACK routine (version 3.2) 
*  Contributed by James Demmel, Deaglan Halligan, Yozo Hida and 
@@ 37,9 +38,45 @@
* Arguments
* ==========
*
* WORK double precision workspace of size 3*N.
+* UPLO (input) CHARACTER*1
+* = 'U': Upper triangle of A is stored;
+* = 'L': Lower triangle of A is stored.
*
* IWORK integer workspace of size N.
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* A (input) REAL array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) DOUBLE PRECISION array, dimension (LDAF,N)
+* The triangular factor U or L from the Cholesky factorization
+* A = U**T*U or A = L*L**T, as computed by DPOTRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* CMODE (input) INTEGER
+* Determines op2(C) in the formula op(A) * op2(C) as follows:
+* CMODE = 1 op2(C) = C
+* CMODE = 0 op2(C) = I
+* CMODE = 1 op2(C) = inv(C)
+*
+* C (input) DOUBLE PRECISION array, dimension (N)
+* The vector C in the formula op(A) * op2(C).
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* i > 0: The ith argument is invalid.
+*
+* WORK (input) DOUBLE PRECISION array, dimension (3*N).
+* Workspace.
+*
+* IWORK (input) INTEGER array, dimension (N).
+* Workspace.
*
* =====================================================================
*
Modified: lapack/trunk/SRC/dla_porfsx_extended.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/dla_porfsx_extended.f?rev=650
==============================================================================
 lapack/trunk/SRC/dla_porfsx_extended.f (original)
+++ lapack/trunk/SRC/dla_porfsx_extended.f Tue Apr 7 20:05:18 2009
@@ 1,9 +1,10 @@
SUBROUTINE DLA_PORFSX_EXTENDED( PREC_TYPE, UPLO, N, NRHS, A, LDA,
$ AF, LDAF, COLEQU, C, B, LDB, Y,
 $ LDY, BERR_OUT, N_NORMS, ERRS_N,
 $ ERRS_C, RES, AYB, DY, Y_TAIL,
 $ RCOND, ITHRESH, RTHRESH, DZ_UB,
 $ IGNORE_CWISE, INFO )
+ $ LDY, BERR_OUT, N_NORMS,
+ $ ERR_BNDS_NORM, ERR_BNDS_COMP, RES,
+ $ AYB, DY, Y_TAIL, RCOND, ITHRESH,
+ $ RTHRESH, DZ_UB, IGNORE_CWISE,
+ $ INFO )
*
*  LAPACK routine (version 3.2) 
*  Contributed by James Demmel, Deaglan Halligan, Yozo Hida and 
@@ 26,17 +27,250 @@
DOUBLE PRECISION A( LDA, * ), AF( LDAF, * ), B( LDB, * ),
$ Y( LDY, * ), RES( * ), DY( * ), Y_TAIL( * )
DOUBLE PRECISION C( * ), AYB(*), RCOND, BERR_OUT( * ),
 $ ERRS_N( NRHS, * ), ERRS_C( NRHS, * )
+ $ ERR_BNDS_NORM( NRHS, * ),
+ $ ERR_BNDS_COMP( NRHS, * )
* ..
*
* Purpose
* =======
*
* DLA_PORFSX_EXTENDED computes ... .
+* DLA_PORFSX_EXTENDED improves the computed solution to a system of
+* linear equations by performing extraprecise iterative refinement
+* and provides error bounds and backward error estimates for the solution.
+* This subroutine is called by DPORFSX to perform iterative refinement.
+* In addition to normwise error bound, the code provides maximum
+* componentwise error bound if possible. See comments for ERR_BNDS_NORM
+* and ERR_BNDS_COMP for details of the error bounds. Note that this
+* subroutine is only resonsible for setting the second fields of
+* ERR_BNDS_NORM and ERR_BNDS_COMP.
*
* Arguments
* =========
*
+* PREC_TYPE (input) INTEGER
+* Specifies the intermediate precision to be used in refinement.
+* The value is defined by ILAPREC(P) where P is a CHARACTER and
+* P = 'S': Single
+* = 'D': Double
+* = 'I': Indigenous
+* = 'X', 'E': Extra
+*
+* UPLO (input) CHARACTER*1
+* = 'U': Upper triangle of A is stored;
+* = 'L': Lower triangle of A is stored.
+*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* NRHS (input) INTEGER
+* The number of righthandsides, i.e., the number of columns of the
+* matrix B.
+*
+* A (input) DOUBLE PRECISION array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) DOUBLE PRECISION array, dimension (LDAF,N)
+* The triangular factor U or L from the Cholesky factorization
+* A = U**T*U or A = L*L**T, as computed by DPOTRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* COLEQU (input) LOGICAL
+* If .TRUE. then column equilibration was done to A before calling
+* this routine. This is needed to compute the solution and error
+* bounds correctly.
+*
+* C (input) DOUBLE PRECISION array, dimension (N)
+* The column scale factors for A. If COLEQU = .FALSE., C
+* is not accessed. If C is input, each element of C should be a power
+* of the radix to ensure a reliable solution and error estimates.
+* Scaling by powers of the radix does not cause rounding errors unless
+* the result underflows or overflows. Rounding errors during scaling
+* lead to refining with a matrix that is not equivalent to the
+* input matrix, producing error estimates that may not be
+* reliable.
+*
+* B (input) DOUBLE PRECISION array, dimension (LDB,NRHS)
+* The righthandside matrix B.
+*
+* LDB (input) INTEGER
+* The leading dimension of the array B. LDB >= max(1,N).
+*
+* Y (input/output) DOUBLE PRECISION array, dimension
+* (LDY,NRHS)
+* On entry, the solution matrix X, as computed by DPOTRS.
+* On exit, the improved solution matrix Y.
+*
+* LDY (input) INTEGER
+* The leading dimension of the array Y. LDY >= max(1,N).
+*
+* BERR_OUT (output) DOUBLE PRECISION array, dimension (NRHS)
+* On exit, BERR_OUT(j) contains the componentwise relative backward
+* error for righthandside j from the formula
+* max(i) ( abs(RES(i)) / ( abs(op(A_s))*abs(Y) + abs(B_s) )(i) )
+* where abs(Z) is the componentwise absolute value of the matrix
+* or vector Z. This is computed by DLA_LIN_BERR.
+*
+* N_NORMS (input) INTEGER
+* Determines which error bounds to return (see ERR_BNDS_NORM
+* and ERR_BNDS_COMP).
+* If N_NORMS >= 1 return normwise error bounds.
+* If N_NORMS >= 2 return componentwise error bounds.
+*
+* ERR_BNDS_NORM (input/output) DOUBLE PRECISION array, dimension
+* (NRHS, N_ERR_BNDS)
+* For each righthand side, this array contains information about
+* various error bounds and condition numbers corresponding to the
+* normwise relative error, which is defined as follows:
+*
+* Normwise relative error in the ith solution vector:
+* max_j (abs(XTRUE(j,i)  X(j,i)))
+* 
+* max_j abs(X(j,i))
+*
+* The array is indexed by the type of error information as described
+* below. There currently are up to three pieces of information
+* returned.
+*
+* The first index in ERR_BNDS_NORM(i,:) corresponds to the ith
+* righthand side.
+*
+* The second index in ERR_BNDS_NORM(:,err) contains the following
+* three fields:
+* err = 1 "Trust/don't trust" boolean. Trust the answer if the
+* reciprocal condition number is less than the threshold
+* sqrt(n) * slamch('Epsilon').
+*
+* err = 2 "Guaranteed" error bound: The estimated forward error,
+* almost certainly within a factor of 10 of the true error
+* so long as the next entry is greater than the threshold
+* sqrt(n) * slamch('Epsilon'). This error bound should only
+* be trusted if the previous boolean is true.
+*
+* err = 3 Reciprocal condition number: Estimated normwise
+* reciprocal condition number. Compared with the threshold
+* sqrt(n) * slamch('Epsilon') to determine if the error
+* estimate is "guaranteed". These reciprocal condition
+* numbers are 1 / (norm(Z^{1},inf) * norm(Z,inf)) for some
+* appropriately scaled matrix Z.
+* Let Z = S*A, where S scales each row by a power of the
+* radix so all absolute row sums of Z are approximately 1.
+*
+* This subroutine is only responsible for setting the second field
+* above.
+* See Lapack Working Note 165 for further details and extra
+* cautions.
+*
+* ERR_BNDS_COMP (input/output) DOUBLE PRECISION array, dimension
+* (NRHS, N_ERR_BNDS)
+* For each righthand side, this array contains information about
+* various error bounds and condition numbers corresponding to the
+* componentwise relative error, which is defined as follows:
+*
+* Componentwise relative error in the ith solution vector:
+* abs(XTRUE(j,i)  X(j,i))
+* max_j 
+* abs(X(j,i))
+*
+* The array is indexed by the righthand side i (on which the
+* componentwise relative error depends), and the type of error
+* information as described below. There currently are up to three
+* pieces of information returned for each righthand side. If
+* componentwise accuracy is not requested (PARAMS(3) = 0.0), then
+* ERR_BNDS_COMP is not accessed. If N_ERR_BNDS .LT. 3, then at most
+* the first (:,N_ERR_BNDS) entries are returned.
+*
+* The first index in ERR_BNDS_COMP(i,:) corresponds to the ith
+* righthand side.
+*
+* The second index in ERR_BNDS_COMP(:,err) contains the following
+* three fields:
+* err = 1 "Trust/don't trust" boolean. Trust the answer if the
+* reciprocal condition number is less than the threshold
+* sqrt(n) * slamch('Epsilon').
+*
+* err = 2 "Guaranteed" error bound: The estimated forward error,
+* almost certainly within a factor of 10 of the true error
+* so long as the next entry is greater than the threshold
+* sqrt(n) * slamch('Epsilon'). This error bound should only
+* be trusted if the previous boolean is true.
+*
+* err = 3 Reciprocal condition number: Estimated componentwise
+* reciprocal condition number. Compared with the threshold
+* sqrt(n) * slamch('Epsilon') to determine if the error
+* estimate is "guaranteed". These reciprocal condition
+* numbers are 1 / (norm(Z^{1},inf) * norm(Z,inf)) for some
+* appropriately scaled matrix Z.
+* Let Z = S*(A*diag(x)), where x is the solution for the
+* current righthand side and S scales each row of
+* A*diag(x) by a power of the radix so all absolute row
+* sums of Z are approximately 1.
+*
+* This subroutine is only responsible for setting the second field
+* above.
+* See Lapack Working Note 165 for further details and extra
+* cautions.
+*
+* RES (input) DOUBLE PRECISION array, dimension (N)
+* Workspace to hold the intermediate residual.
+*
+* AYB (input) DOUBLE PRECISION array, dimension (N)
+* Workspace. This can be the same workspace passed for Y_TAIL.
+*
+* DY (input) DOUBLE PRECISION array, dimension (N)
+* Workspace to hold the intermediate solution.
+*
+* Y_TAIL (input) DOUBLE PRECISION array, dimension (N)
+* Workspace to hold the trailing bits of the intermediate solution.
+*
+* RCOND (input) DOUBLE PRECISION
+* Reciprocal scaled condition number. This is an estimate of the
+* reciprocal Skeel condition number of the matrix A after
+* equilibration (if done). If this is less than the machine
+* precision (in particular, if it is zero), the matrix is singular
+* to working precision. Note that the error may still be small even
+* if this number is very small and the matrix appears ill
+* conditioned.
+*
+* ITHRESH (input) INTEGER
+* The maximum number of residual computations allowed for
+* refinement. The default is 10. For 'aggressive' set to 100 to
+* permit convergence using approximate factorizations or
+* factorizations other than LU. If the factorization uses a
+* technique other than Gaussian elimination, the guarantees in
+* ERR_BNDS_NORM and ERR_BNDS_COMP may no longer be trustworthy.
+*
+* RTHRESH (input) DOUBLE PRECISION
+* Determines when to stop refinement if the error estimate stops
+* decreasing. Refinement will stop when the next solution no longer
+* satisfies norm(dx_{i+1}) < RTHRESH * norm(dx_i) where norm(Z) is
+* the infinity norm of Z. RTHRESH satisfies 0 < RTHRESH <= 1. The
+* default value is 0.5. For 'aggressive' set to 0.9 to permit
+* convergence on extremely illconditioned matrices. See LAWN 165
+* for more details.
+*
+* DZ_UB (input) DOUBLE PRECISION
+* Determines when to start considering componentwise convergence.
+* Componentwise convergence is only considered after each component
+* of the solution Y is stable, which we definte as the relative
+* change in each component being less than DZ_UB. The default value
+* is 0.25, requiring the first bit to be stable. See LAWN 165 for
+* more details.
+*
+* IGNORE_CWISE (input) LOGICAL
+* If .TRUE. then ignore componentwise convergence. Default value
+* is .FALSE..
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* < 0: if INFO = i, the ith argument to DPOTRS had an illegal
+* value
+*
* =====================================================================
*
* .. Local Scalars ..
@@ 270,10 +504,12 @@
* Compute error bounds.
*
IF ( N_NORMS .GE. 1 ) THEN
 ERRS_N( J, LA_LINRX_ERR_I ) = FINAL_DX_X / (1  DXRATMAX)
+ ERR_BNDS_NORM( J, LA_LINRX_ERR_I ) =
+ $ FINAL_DX_X / (1  DXRATMAX)
END IF
IF ( N_NORMS .GE. 2 ) THEN
 ERRS_C( J, LA_LINRX_ERR_I ) = FINAL_DZ_Z / (1  DZRATMAX)
+ ERR_BNDS_COMP( J, LA_LINRX_ERR_I ) =
+ $ FINAL_DZ_Z / (1  DZRATMAX)
END IF
*
* Compute componentwise relative backward error from formula
Modified: lapack/trunk/SRC/dla_porpvgrw.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/dla_porpvgrw.f?rev=650
==============================================================================
 lapack/trunk/SRC/dla_porpvgrw.f (original)
+++ lapack/trunk/SRC/dla_porpvgrw.f Tue Apr 7 20:05:18 2009
@@ 1,5 +1,5 @@
DOUBLE PRECISION FUNCTION DLA_PORPVGRW( UPLO, NCOLS, A, LDA, AF,
 $ LDAF, WORK )
+ $ LDAF, WORK )
*
*  LAPACK routine (version 3.2) 
*  Contributed by James Demmel, Deaglan Halligan, Yozo Hida and 
@@ 22,11 +22,38 @@
* Purpose
* =======
*
* DLA_PORPVGRW computes ... .
+* DLA_PORPVGRW computes the reciprocal pivot growth factor
+* norm(A)/norm(U). The "max absolute element" norm is used. If this is
+* much less than 1, the stability of the LU factorization of the
+* (equilibrated) matrix A could be poor. This also means that the
+* solution X, estimated condition numbers, and error bounds could be
+* unreliable.
*
* Arguments
* =========
*
+* UPLO (input) CHARACTER*1
+* = 'U': Upper triangle of A is stored;
+* = 'L': Lower triangle of A is stored.
+*
+* NCOLS (input) INTEGER
+* The number of columns of the matrix A. NCOLS >= 0.
+*
+* A (input) DOUBLE PRECISION array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) DOUBLE PRECISION array, dimension (LDAF,N)
+* The triangular factor U or L from the Cholesky factorization
+* A = U**T*U or A = L*L**T, as computed by DPOTRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* WORK (input) DOUBLE PRECISION array, dimension (2*N)
+*
* =====================================================================
*
* .. Local Scalars ..
Modified: lapack/trunk/SRC/dla_rpvgrw.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/dla_rpvgrw.f?rev=650
==============================================================================
 lapack/trunk/SRC/dla_rpvgrw.f (original)
+++ lapack/trunk/SRC/dla_rpvgrw.f Tue Apr 7 20:05:18 2009
@@ 20,11 +20,36 @@
* Purpose
* =======
*
* DLA_RPVGRW computes ... .
+* DLA_RPVGRW computes the reciprocal pivot growth factor
+* norm(A)/norm(U). The "max absolute element" norm is used. If this is
+* much less than 1, the stability of the LU factorization of the
+* (equilibrated) matrix A could be poor. This also means that the
+* solution X, estimated condition numbers, and error bounds could be
+* unreliable.
*
* Arguments
* =========
*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* NCOLS (input) INTEGER
+* The number of columns of the matrix A. NCOLS >= 0.
+*
+* A (input) DOUBLE PRECISION array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) DOUBLE PRECISION array, dimension (LDAF,N)
+* The factors L and U from the factorization
+* A = P*L*U as computed by DGETRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
* =====================================================================
*
* .. Local Scalars ..
@@ 37,7 +62,7 @@
* .. Executable Statements ..
*
RPVGRW = 1.0D+0
*
+
DO J = 1, NCOLS
AMAX = 0.0D+0
UMAX = 0.0D+0
Modified: lapack/trunk/SRC/dla_syrcond.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/dla_syrcond.f?rev=650
==============================================================================
 lapack/trunk/SRC/dla_syrcond.f (original)
+++ lapack/trunk/SRC/dla_syrcond.f Tue Apr 7 20:05:18 2009
@@ 1,5 +1,6 @@
DOUBLE PRECISION FUNCTION DLA_SYRCOND( UPLO, N, A, LDA, AF, LDAF,
 $ IPIV, CMODE, C, INFO, WORK, IWORK )
+ $ IPIV, CMODE, C, INFO, WORK,
+ $ IWORK )
*
*  LAPACK routine (version 3.2) 
*  Contributed by James Demmel, Deaglan Halligan, Yozo Hida and 
@@ 36,9 +37,49 @@
* Arguments
* ==========
*
* WORK double precision workspace of size 3*N.
+* UPLO (input) CHARACTER*1
+* = 'U': Upper triangle of A is stored;
+* = 'L': Lower triangle of A is stored.
*
* IWORK integer workspace of size N.
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* A (input) DOUBLE PRECISION array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) DOUBLE PRECISION array, dimension (LDAF,N)
+* The block diagonal matrix D and the multipliers used to
+* obtain the factor U or L as computed by DSYTRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* IPIV (input) INTEGER array, dimension (N)
+* Details of the interchanges and the block structure of D
+* as determined by DSYTRF.
+*
+* CMODE (input) INTEGER
+* Determines op2(C) in the formula op(A) * op2(C) as follows:
+* CMODE = 1 op2(C) = C
+* CMODE = 0 op2(C) = I
+* CMODE = 1 op2(C) = inv(C)
+*
+* C (input) DOUBLE PRECISION array, dimension (N)
+* The vector C in the formula op(A) * op2(C).
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* i > 0: The ith argument is invalid.
+*
+* WORK (input) DOUBLE PRECISION array, dimension (3*N).
+* Workspace.
+*
+* IWORK (input) INTEGER array, dimension (N).
+* Workspace.
*
* =====================================================================
*
@@ 160,9 +201,9 @@
END DO
IF ( UP ) THEN
 call dsytrs( 'U', n, 1, af, ldaf, ipiv, work, n, info )
+ CALL DSYTRS( 'U', N, 1, AF, LDAF, IPIV, WORK, N, INFO )
ELSE
 call dsytrs( 'L', n, 1, af, ldaf, ipiv, work, n, info )
+ CALL DSYTRS( 'L', N, 1, AF, LDAF, IPIV, WORK, N, INFO )
ENDIF
*
* Multiply by inv(C).
@@ 191,9 +232,9 @@
END IF
IF ( UP ) THEN
 call dsytrs( 'U', n, 1, af, ldaf, ipiv, work, n, info )
+ CALL DSYTRS( 'U', N, 1, AF, LDAF, IPIV, WORK, N, INFO )
ELSE
 call dsytrs( 'L', n, 1, af, ldaf, ipiv, work, n, info )
+ CALL DSYTRS( 'L', N, 1, AF, LDAF, IPIV, WORK, N, INFO )
ENDIF
*
* Multiply by R.
Modified: lapack/trunk/SRC/dla_syrfsx_extended.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/dla_syrfsx_extended.f?rev=650
==============================================================================
 lapack/trunk/SRC/dla_syrfsx_extended.f (original)
+++ lapack/trunk/SRC/dla_syrfsx_extended.f Tue Apr 7 20:05:18 2009
@@ 1,9 +1,10 @@
SUBROUTINE DLA_SYRFSX_EXTENDED( PREC_TYPE, UPLO, N, NRHS, A, LDA,
$ AF, LDAF, IPIV, COLEQU, C, B, LDB,
 $ Y, LDY, BERR_OUT, N_NORMS, ERRS_N,
 $ ERRS_C, RES, AYB, DY, Y_TAIL,
 $ RCOND, ITHRESH, RTHRESH, DZ_UB,
 $ IGNORE_CWISE, INFO )
+ $ Y, LDY, BERR_OUT, N_NORMS,
+ $ ERR_BNDS_NORM, ERR_BNDS_COMP, RES,
+ $ AYB, DY, Y_TAIL, RCOND, ITHRESH,
+ $ RTHRESH, DZ_UB, IGNORE_CWISE,
+ $ INFO )
*
*  LAPACK routine (version 3.2) 
*  Contributed by James Demmel, Deaglan Halligan, Yozo Hida and 
@@ 27,17 +28,254 @@
DOUBLE PRECISION A( LDA, * ), AF( LDAF, * ), B( LDB, * ),
$ Y( LDY, * ), RES( * ), DY( * ), Y_TAIL( * )
DOUBLE PRECISION C( * ), AYB( * ), RCOND, BERR_OUT( * ),
 $ ERRS_N( NRHS, * ), ERRS_C( NRHS, * )
+ $ ERR_BNDS_NORM( NRHS, * ),
+ $ ERR_BNDS_COMP( NRHS, * )
* ..
*
* Purpose
* =======
*
* DLA_SYRFSX_EXTENDED computes ... .
+* DLA_SYRFSX_EXTENDED improves the computed solution to a system of
+* linear equations by performing extraprecise iterative refinement
+* and provides error bounds and backward error estimates for the solution.
+* This subroutine is called by DSYRFSX to perform iterative refinement.
+* In addition to normwise error bound, the code provides maximum
+* componentwise error bound if possible. See comments for ERR_BNDS_NORM
+* and ERR_BNDS_COMP for details of the error bounds. Note that this
+* subroutine is only resonsible for setting the second fields of
+* ERR_BNDS_NORM and ERR_BNDS_COMP.
*
* Arguments
* =========
*
+* PREC_TYPE (input) INTEGER
+* Specifies the intermediate precision to be used in refinement.
+* The value is defined by ILAPREC(P) where P is a CHARACTER and
+* P = 'S': Single
+* = 'D': Double
+* = 'I': Indigenous
+* = 'X', 'E': Extra
+*
+* UPLO (input) CHARACTER*1
+* = 'U': Upper triangle of A is stored;
+* = 'L': Lower triangle of A is stored.
+*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* NRHS (input) INTEGER
+* The number of righthandsides, i.e., the number of columns of the
+* matrix B.
+*
+* A (input) DOUBLE PRECISION array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) DOUBLE PRECISION array, dimension (LDAF,N)
+* The block diagonal matrix D and the multipliers used to
+* obtain the factor U or L as computed by DSYTRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* IPIV (input) INTEGER array, dimension (N)
+* Details of the interchanges and the block structure of D
+* as determined by DSYTRF.
+*
+* COLEQU (input) LOGICAL
+* If .TRUE. then column equilibration was done to A before calling
+* this routine. This is needed to compute the solution and error
+* bounds correctly.
+*
+* C (input) DOUBLE PRECISION array, dimension (N)
+* The column scale factors for A. If COLEQU = .FALSE., C
+* is not accessed. If C is input, each element of C should be a power
+* of the radix to ensure a reliable solution and error estimates.
+* Scaling by powers of the radix does not cause rounding errors unless
+* the result underflows or overflows. Rounding errors during scaling
+* lead to refining with a matrix that is not equivalent to the
+* input matrix, producing error estimates that may not be
+* reliable.
+*
+* B (input) DOUBLE PRECISION array, dimension (LDB,NRHS)
+* The righthandside matrix B.
+*
+* LDB (input) INTEGER
+* The leading dimension of the array B. LDB >= max(1,N).
+*
+* Y (input/output) DOUBLE PRECISION array, dimension
+* (LDY,NRHS)
+* On entry, the solution matrix X, as computed by DSYTRS.
+* On exit, the improved solution matrix Y.
+*
+* LDY (input) INTEGER
+* The leading dimension of the array Y. LDY >= max(1,N).
+*
+* BERR_OUT (output) DOUBLE PRECISION array, dimension (NRHS)
+* On exit, BERR_OUT(j) contains the componentwise relative backward
+* error for righthandside j from the formula
+* max(i) ( abs(RES(i)) / ( abs(op(A_s))*abs(Y) + abs(B_s) )(i) )
+* where abs(Z) is the componentwise absolute value of the matrix
+* or vector Z. This is computed by DLA_LIN_BERR.
+*
+* N_NORMS (input) INTEGER
+* Determines which error bounds to return (see ERR_BNDS_NORM
+* and ERR_BNDS_COMP).
+* If N_NORMS >= 1 return normwise error bounds.
+* If N_NORMS >= 2 return componentwise error bounds.
+*
+* ERR_BNDS_NORM (input/output) DOUBLE PRECISION array, dimension
+* (NRHS, N_ERR_BNDS)
+* For each righthand side, this array contains information about
+* various error bounds and condition numbers corresponding to the
+* normwise relative error, which is defined as follows:
+*
+* Normwise relative error in the ith solution vector:
+* max_j (abs(XTRUE(j,i)  X(j,i)))
+* 
+* max_j abs(X(j,i))
+*
+* The array is indexed by the type of error information as described
+* below. There currently are up to three pieces of information
+* returned.
+*
+* The first index in ERR_BNDS_NORM(i,:) corresponds to the ith
+* righthand side.
+*
+* The second index in ERR_BNDS_NORM(:,err) contains the following
+* three fields:
+* err = 1 "Trust/don't trust" boolean. Trust the answer if the
+* reciprocal condition number is less than the threshold
+* sqrt(n) * slamch('Epsilon').
+*
+* err = 2 "Guaranteed" error bound: The estimated forward error,
+* almost certainly within a factor of 10 of the true error
+* so long as the next entry is greater than the threshold
+* sqrt(n) * slamch('Epsilon'). This error bound should only
+* be trusted if the previous boolean is true.
+*
+* err = 3 Reciprocal condition number: Estimated normwise
+* reciprocal condition number. Compared with the threshold
+* sqrt(n) * slamch('Epsilon') to determine if the error
+* estimate is "guaranteed". These reciprocal condition
+* numbers are 1 / (norm(Z^{1},inf) * norm(Z,inf)) for some
+* appropriately scaled matrix Z.
+* Let Z = S*A, where S scales each row by a power of the
+* radix so all absolute row sums of Z are approximately 1.
+*
+* This subroutine is only responsible for setting the second field
+* above.
+* See Lapack Working Note 165 for further details and extra
+* cautions.
+*
+* ERR_BNDS_COMP (input/output) DOUBLE PRECISION array, dimension
+* (NRHS, N_ERR_BNDS)
+* For each righthand side, this array contains information about
+* various error bounds and condition numbers corresponding to the
+* componentwise relative error, which is defined as follows:
+*
+* Componentwise relative error in the ith solution vector:
+* abs(XTRUE(j,i)  X(j,i))
+* max_j 
+* abs(X(j,i))
+*
+* The array is indexed by the righthand side i (on which the
+* componentwise relative error depends), and the type of error
+* information as described below. There currently are up to three
+* pieces of information returned for each righthand side. If
+* componentwise accuracy is not requested (PARAMS(3) = 0.0), then
+* ERR_BNDS_COMP is not accessed. If N_ERR_BNDS .LT. 3, then at most
+* the first (:,N_ERR_BNDS) entries are returned.
+*
+* The first index in ERR_BNDS_COMP(i,:) corresponds to the ith
+* righthand side.
+*
+* The second index in ERR_BNDS_COMP(:,err) contains the following
+* three fields:
+* err = 1 "Trust/don't trust" boolean. Trust the answer if the
+* reciprocal condition number is less than the threshold
+* sqrt(n) * slamch('Epsilon').
+*
+* err = 2 "Guaranteed" error bound: The estimated forward error,
+* almost certainly within a factor of 10 of the true error
+* so long as the next entry is greater than the threshold
+* sqrt(n) * slamch('Epsilon'). This error bound should only
+* be trusted if the previous boolean is true.
+*
+* err = 3 Reciprocal condition number: Estimated componentwise
+* reciprocal condition number. Compared with the threshold
+* sqrt(n) * slamch('Epsilon') to determine if the error
+* estimate is "guaranteed". These reciprocal condition
+* numbers are 1 / (norm(Z^{1},inf) * norm(Z,inf)) for some
+* appropriately scaled matrix Z.
+* Let Z = S*(A*diag(x)), where x is the solution for the
+* current righthand side and S scales each row of
+* A*diag(x) by a power of the radix so all absolute row
+* sums of Z are approximately 1.
+*
+* This subroutine is only responsible for setting the second field
+* above.
+* See Lapack Working Note 165 for further details and extra
+* cautions.
+*
+* RES (input) DOUBLE PRECISION array, dimension (N)
+* Workspace to hold the intermediate residual.
+*
+* AYB (input) DOUBLE PRECISION array, dimension (N)
+* Workspace. This can be the same workspace passed for Y_TAIL.
+*
+* DY (input) DOUBLE PRECISION array, dimension (N)
+* Workspace to hold the intermediate solution.
+*
+* Y_TAIL (input) DOUBLE PRECISION array, dimension (N)
+* Workspace to hold the trailing bits of the intermediate solution.
+*
+* RCOND (input) DOUBLE PRECISION
+* Reciprocal scaled condition number. This is an estimate of the
+* reciprocal Skeel condition number of the matrix A after
+* equilibration (if done). If this is less than the machine
+* precision (in particular, if it is zero), the matrix is singular
+* to working precision. Note that the error may still be small even
+* if this number is very small and the matrix appears ill
+* conditioned.
+*
+* ITHRESH (input) INTEGER
+* The maximum number of residual computations allowed for
+* refinement. The default is 10. For 'aggressive' set to 100 to
+* permit convergence using approximate factorizations or
+* factorizations other than LU. If the factorization uses a
+* technique other than Gaussian elimination, the guarantees in
+* ERR_BNDS_NORM and ERR_BNDS_COMP may no longer be trustworthy.
+*
+* RTHRESH (input) DOUBLE PRECISION
+* Determines when to stop refinement if the error estimate stops
+* decreasing. Refinement will stop when the next solution no longer
+* satisfies norm(dx_{i+1}) < RTHRESH * norm(dx_i) where norm(Z) is
+* the infinity norm of Z. RTHRESH satisfies 0 < RTHRESH <= 1. The
+* default value is 0.5. For 'aggressive' set to 0.9 to permit
+* convergence on extremely illconditioned matrices. See LAWN 165
+* for more details.
+*
+* DZ_UB (input) DOUBLE PRECISION
+* Determines when to start considering componentwise convergence.
+* Componentwise convergence is only considered after each component
+* of the solution Y is stable, which we definte as the relative
+* change in each component being less than DZ_UB. The default value
+* is 0.25, requiring the first bit to be stable. See LAWN 165 for
+* more details.
+*
+* IGNORE_CWISE (input) LOGICAL
+* If .TRUE. then ignore componentwise convergence. Default value
+* is .FALSE..
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* < 0: if INFO = i, the ith argument to DSYTRS had an illegal
+* value
+*
* =====================================================================
*
* .. Local Scalars ..
@@ 271,10 +509,12 @@
* Compute error bounds.
*
IF ( N_NORMS .GE. 1 ) THEN
 ERRS_N( J, LA_LINRX_ERR_I ) = FINAL_DX_X / (1  DXRATMAX)
+ ERR_BNDS_NORM( J, LA_LINRX_ERR_I ) =
+ $ FINAL_DX_X / (1  DXRATMAX)
END IF
IF ( N_NORMS .GE. 2 ) THEN
 ERRS_C( J, LA_LINRX_ERR_I ) = FINAL_DZ_Z / (1  DZRATMAX)
+ ERR_BNDS_COMP( J, LA_LINRX_ERR_I ) =
+ $ FINAL_DZ_Z / (1  DZRATMAX)
END IF
*
* Compute componentwise relative backward error from formula
Modified: lapack/trunk/SRC/dla_syrpvgrw.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/dla_syrpvgrw.f?rev=650
==============================================================================
 lapack/trunk/SRC/dla_syrpvgrw.f (original)
+++ lapack/trunk/SRC/dla_syrpvgrw.f Tue Apr 7 20:05:18 2009
@@ 1,5 +1,5 @@
DOUBLE PRECISION FUNCTION DLA_SYRPVGRW( UPLO, N, INFO, A, LDA, AF,
 $ LDAF, IPIV, WORK )
+ $ LDAF, IPIV, WORK )
*
*  LAPACK routine (version 3.2) 
*  Contributed by James Demmel, Deaglan Halligan, Yozo Hida and 
@@ 23,11 +23,50 @@
* Purpose
* =======
*
* DLA_SYRPVGRW computes ... .
+* DLA_SYRPVGRW computes the reciprocal pivot growth factor
+* norm(A)/norm(U). The "max absolute element" norm is used. If this is
+* much less than 1, the stability of the LU factorization of the
+* (equilibrated) matrix A could be poor. This also means that the
+* solution X, estimated condition numbers, and error bounds could be
+* unreliable.
*
* Arguments
* =========
*
+* UPLO (input) CHARACTER*1
+* = 'U': Upper triangle of A is stored;
+* = 'L': Lower triangle of A is stored.
+*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* INFO (input) INTEGER
+* The value of INFO returned from DSYTRF, .i.e., the pivot in
+* column INFO is exactly 0.
+*
+* NCOLS (input) INTEGER
+* The number of columns of the matrix A. NCOLS >= 0.
+*
+* A (input) DOUBLE PRECISION array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) DOUBLE PRECISION array, dimension (LDAF,N)
+* The block diagonal matrix D and the multipliers used to
+* obtain the factor U or L as computed by DSYTRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* IPIV (input) INTEGER array, dimension (N)
+* Details of the interchanges and the block structure of D
+* as determined by DSYTRF.
+*
+* WORK (input) DOUBLE PRECISION array, dimension (2*N)
+*
* =====================================================================
*
* .. Local Scalars ..
Modified: lapack/trunk/SRC/dlarscl2.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/dlarscl2.f?rev=650
==============================================================================
 lapack/trunk/SRC/dlarscl2.f (original)
+++ lapack/trunk/SRC/dlarscl2.f Tue Apr 7 20:05:18 2009
@@ 24,22 +24,30 @@
* x < inv(D) * x
* where the diagonal matrix D is stored as a vector.
*
* Eventually to be replaced by BLAS_sge_diag_scale in the new BLAS
+* Eventually to be replaced by BLAS_dge_diag_scale in the new BLAS
* standard.
*
* Arguments
* =========
*
* N (input) INTEGER
* The size of the vectors X and D.
+* M (input) INTEGER
+* The number of rows of D and X. M >= 0.
*
* D (input) DOUBLE PRECISION array, length N
* Diagonal matrix D, stored as a vector of length N.
+* N (input) INTEGER
+* The number of columns of D and X. N >= 0.
+*
+* D (input) DOUBLE PRECISION array, length M
+* Diagonal matrix D, stored as a vector of length M.
+*
+* X (input/output) DOUBLE PRECISION array, dimension (LDX,N)
+* On entry, the vector X to be scaled by D.
+* On exit, the scaled vector.
+*
+* LDX (input) INTEGER
+* The leading dimension of the vector X. LDX >= 0.
+*
+* =====================================================================
*
* X (input/output) DOUBLE PRECISION array, length N
* On entry, the vector X to be scaled by D.
* On exit, the scaled vector.
* ..
* .. Local Scalars ..
INTEGER I, J
* ..
@@ 47,9 +55,9 @@
*
DO J = 1, N
DO I = 1, M
 X(I,J) = X(I,J) / D(I)
+ X( I, J ) = X( I, J ) / D( I )
END DO
END DO
*
+
RETURN
END
Modified: lapack/trunk/SRC/dlascl2.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/dlascl2.f?rev=650
==============================================================================
 lapack/trunk/SRC/dlascl2.f (original)
+++ lapack/trunk/SRC/dlascl2.f Tue Apr 7 20:05:18 2009
@@ 24,22 +24,30 @@
* x < D * x
* where the diagonal matrix D is stored as a vector.
*
* Eventually to be replaced by BLAS_sge_diag_scale in the new BLAS
+* Eventually to be replaced by BLAS_dge_diag_scale in the new BLAS
* standard.
*
* Arguments
* =========
*
* N (input) INTEGER
* The size of the vectors X and D.
+* M (input) INTEGER
+* The number of rows of D and X. M >= 0.
*
* D (input) DOUBLE PRECISION array, length N
* Diagonal matrix D, stored as a vector of length N.
+* N (input) INTEGER
+* The number of columns of D and X. N >= 0.
+*
+* D (input) DOUBLE PRECISION array, length M
+* Diagonal matrix D, stored as a vector of length M.
+*
+* X (input/output) DOUBLE PRECISION array, dimension (LDX,N)
+* On entry, the vector X to be scaled by D.
+* On exit, the scaled vector.
+*
+* LDX (input) INTEGER
+* The leading dimension of the vector X. LDX >= 0.
+*
+* =====================================================================
*
* X (input/output) DOUBLE PRECISION array, length N
* On entry, the vector X to be scaled by D.
* On exit, the scaled vector.
* ..
* .. Local Scalars ..
INTEGER I, J
* ..
@@ 47,9 +55,9 @@
*
DO J = 1, N
DO I = 1, M
 X(I,J) = X(I,J) * D(I)
+ X( I, J ) = X( I, J ) * D( I )
END DO
END DO
*
+
RETURN
END
Modified: lapack/trunk/SRC/dporfsx.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/dporfsx.f?rev=650
==============================================================================
 lapack/trunk/SRC/dporfsx.f (original)
+++ lapack/trunk/SRC/dporfsx.f Tue Apr 7 20:05:18 2009
@@ 36,7 +36,8 @@
* definite, and provides error bounds and backward error estimates
* for the solution. In addition to normwise error bound, the code
* provides maximum componentwise error bound if possible. See
* comments for ERR_BNDS for details of the error bounds.
+* comments for ERR_BNDS_NORM and ERR_BNDS_COMP for details of the
+* error bounds.
*
* The original system of linear equations may have been equilibrated
* before calling this routine, as described by arguments EQUED and S
Modified: lapack/trunk/SRC/dsyrfsx.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/dsyrfsx.f?rev=650
==============================================================================
 lapack/trunk/SRC/dsyrfsx.f (original)
+++ lapack/trunk/SRC/dsyrfsx.f Tue Apr 7 20:05:18 2009
@@ 36,7 +36,7 @@
* provides error bounds and backward error estimates for the
* solution. In addition to normwise error bound, the code provides
* maximum componentwise error bound if possible. See comments for
* ERR_BNDS_N and ERR_BNDS_C for details of the error bounds.
+* ERR_BNDS_NORM and ERR_BNDS_COMP for details of the error bounds.
*
* The original system of linear equations may have been equilibrated
* before calling this routine, as described by arguments EQUED and S
Modified: lapack/trunk/SRC/dsysvxx.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/dsysvxx.f?rev=650
==============================================================================
 lapack/trunk/SRC/dsysvxx.f (original)
+++ lapack/trunk/SRC/dsysvxx.f Tue Apr 7 20:05:18 2009
@@ 114,6 +114,10 @@
* = 'E': The matrix A will be equilibrated if necessary, then
* copied to AF and factored.
*
+* UPLO (input) CHARACTER*1
+* = 'U': Upper triangle of A is stored;
+* = 'L': Lower triangle of A is stored.
+*
* N (input) INTEGER
* The number of linear equations, i.e., the order of the
* matrix A. N >= 0.
Modified: lapack/trunk/SRC/sgbrfsx.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/sgbrfsx.f?rev=650
==============================================================================
 lapack/trunk/SRC/sgbrfsx.f (original)
+++ lapack/trunk/SRC/sgbrfsx.f Tue Apr 7 20:05:18 2009
@@ 36,8 +36,8 @@
* equations and provides error bounds and backward error estimates
* for the solution. In addition to normwise error bound, the code
* provides maximum componentwise error bound if possible. See
* comments for ERR_BNDS_N and ERR_BNDS_C for details of the error
* bounds.
+* comments for ERR_BNDS_NORM and ERR_BNDS_COMP for details of the
+* error bounds.
*
* The original system of linear equations may have been equilibrated
* before calling this routine, as described by arguments EQUED, R
Modified: lapack/trunk/SRC/sgerfsx.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/sgerfsx.f?rev=650
==============================================================================
 lapack/trunk/SRC/sgerfsx.f (original)
+++ lapack/trunk/SRC/sgerfsx.f Tue Apr 7 20:05:18 2009
@@ 35,8 +35,8 @@
* equations and provides error bounds and backward error estimates
* for the solution. In addition to normwise error bound, the code
* provides maximum componentwise error bound if possible. See
* comments for ERR_BNDS_N and ERR_BNDS_C for details of the error
* bounds.
+* comments for ERR_BNDS_NORM and ERR_BNDS_COMP for details of the
+* error bounds.
*
* The original system of linear equations may have been equilibrated
* before calling this routine, as described by arguments EQUED, R
Modified: lapack/trunk/SRC/sla_gbrcond.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/sla_gbrcond.f?rev=650
==============================================================================
 lapack/trunk/SRC/sla_gbrcond.f (original)
+++ lapack/trunk/SRC/sla_gbrcond.f Tue Apr 7 20:05:18 2009
@@ 37,9 +37,64 @@
* Arguments
* ==========
*
* WORK real workspace of size 5*N.
+* TRANS (input) CHARACTER*1
+* Specifies the form of the system of equations:
+* = 'N': A * X = B (No transpose)
+* = 'T': A**T * X = B (Transpose)
+* = 'C': A**H * X = B (Conjugate Transpose = Transpose)
+*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* KL (input) INTEGER
+* The number of subdiagonals within the band of A. KL >= 0.
+*
+* KU (input) INTEGER
+* The number of superdiagonals within the band of A. KU >= 0.
+*
+* AB (input) REAL array, dimension (LDAB,N)
+* On entry, the matrix A in band storage, in rows 1 to KL+KU+1.
+* The jth column of A is stored in the jth column of the
+* array AB as follows:
+* AB(KU+1+ij,j) = A(i,j) for max(1,jKU)<=i<=min(N,j+kl)
+*
+* LDAB (input) INTEGER
+* The leading dimension of the array AB. LDAB >= KL+KU+1.
+*
+* AFB (input) REAL array, dimension (LDAFB,N)
+* Details of the LU factorization of the band matrix A, as
+* computed by SGBTRF. U is stored as an upper triangular
+* band matrix with KL+KU superdiagonals in rows 1 to KL+KU+1,
+* and the multipliers used during the factorization are stored
+* in rows KL+KU+2 to 2*KL+KU+1.
+*
+* LDAFB (input) INTEGER
+* The leading dimension of the array AFB. LDAFB >= 2*KL+KU+1.
+*
+* IPIV (input) INTEGER array, dimension (N)
+* The pivot indices from the factorization A = P*L*U
+* as computed by SGBTRF; row i of the matrix was interchanged
+* with row IPIV(i).
+*
+* CMODE (input) INTEGER
+* Determines op2(C) in the formula op(A) * op2(C) as follows:
+* CMODE = 1 op2(C) = C
+* CMODE = 0 op2(C) = I
+* CMODE = 1 op2(C) = inv(C)
+*
+* C (input) REAL array, dimension (N)
+* The vector C in the formula op(A) * op2(C).
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* i > 0: The ith argument is invalid.
*
* IWORK integer workspace of size N.
+* WORK (input) REAL array, dimension (5*N).
+* Workspace.
+*
+* IWORK (input) INTEGER array, dimension (N).
+* Workspace.
*
* =====================================================================
*
@@ 73,13 +128,13 @@
ELSE IF( N.LT.0 ) THEN
INFO = 2
ELSE IF( KL.LT.0 .OR. KL.GT.N1 ) THEN
 INFO = 4
+ INFO = 3
ELSE IF( KU.LT.0 .OR. KU.GT.N1 ) THEN
 INFO = 5
+ INFO = 4
ELSE IF( LDAB.LT.KL+KU+1 ) THEN
 INFO = 8
+ INFO = 6
ELSE IF( LDAFB.LT.2*KL+KU+1 ) THEN
 INFO = 10
+ INFO = 8
END IF
IF( INFO.NE.0 ) THEN
CALL XERBLA( 'SLA_GBRCOND', INFO )
Modified: lapack/trunk/SRC/sla_gbrfsx_extended.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/sla_gbrfsx_extended.f?rev=650
==============================================================================
 lapack/trunk/SRC/sla_gbrfsx_extended.f (original)
+++ lapack/trunk/SRC/sla_gbrfsx_extended.f Tue Apr 7 20:05:18 2009
@@ 1,10 +1,10 @@
SUBROUTINE SLA_GBRFSX_EXTENDED( PREC_TYPE, TRANS_TYPE, N, KL, KU,
$ NRHS, AB, LDAB, AFB, LDAFB, IPIV,
$ COLEQU, C, B, LDB, Y, LDY,
 $ BERR_OUT, N_NORMS, ERRS_N, ERRS_C,
 $ RES, AYB, DY, Y_TAIL, RCOND,
 $ ITHRESH, RTHRESH, DZ_UB,
 $ IGNORE_CWISE, INFO )
+ $ BERR_OUT, N_NORMS, ERR_BNDS_NORM,
+ $ ERR_BNDS_COMP, RES, AYB, DY,
+ $ Y_TAIL, RCOND, ITHRESH, RTHRESH,
+ $ DZ_UB, IGNORE_CWISE, INFO )
*
*  LAPACK routine (version 3.2) 
*  Contributed by James Demmel, Deaglan Halligan, Yozo Hida and 
@@ 27,17 +27,263 @@
REAL AB( LDAB, * ), AFB( LDAFB, * ), B( LDB, * ),
$ Y( LDY, * ), RES(*), DY(*), Y_TAIL(*)
REAL C( * ), AYB(*), RCOND, BERR_OUT(*),
 $ ERRS_N( NRHS, * ), ERRS_C( NRHS, * )
+ $ ERR_BNDS_NORM( NRHS, * ),
+ $ ERR_BNDS_COMP( NRHS, * )
* ..
*
* Purpose
* =======
*
* SLA_GBRFSX_EXTENDED computes ... .
+* SLA_GBRFSX_EXTENDED improves the computed solution to a system of
+* linear equations by performing extraprecise iterative refinement
+* and provides error bounds and backward error estimates for the solution.
+* This subroutine is called by SGBRFSX to perform iterative refinement.
+* In addition to normwise error bound, the code provides maximum
+* componentwise error bound if possible. See comments for ERR_BNDS_NORM
+* and ERR_BNDS_COMP for details of the error bounds. Note that this
+* subroutine is only resonsible for setting the second fields of
+* ERR_BNDS_NORM and ERR_BNDS_COMP.
*
* Arguments
* =========
*
+* PREC_TYPE (input) INTEGER
+* Specifies the intermediate precision to be used in refinement.
+* The value is defined by ILAPREC(P) where P is a CHARACTER and
+* P = 'S': Single
+* = 'D': Double
+* = 'I': Indigenous
+* = 'X', 'E': Extra
+*
+* TRANS_TYPE (input) INTEGER
+* Specifies the transposition operation on A.
+* The value is defined by ILATRANS(T) where T is a CHARACTER and
+* T = 'N': No transpose
+* = 'T': Transpose
+* = 'C': Conjugate transpose
+*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* KL (input) INTEGER
+* The number of subdiagonals within the band of A. KL >= 0.
+*
+* KU (input) INTEGER
+* The number of superdiagonals within the band of A. KU >= 0
+*
+* NRHS (input) INTEGER
+* The number of righthandsides, i.e., the number of columns of the
+* matrix B.
+*
+* A (input) REAL array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) REAL array, dimension (LDAF,N)
+* The factors L and U from the factorization
+* A = P*L*U as computed by SGBTRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* IPIV (input) INTEGER array, dimension (N)
+* The pivot indices from the factorization A = P*L*U
+* as computed by SGBTRF; row i of the matrix was interchanged
+* with row IPIV(i).
+*
+* COLEQU (input) LOGICAL
+* If .TRUE. then column equilibration was done to A before calling
+* this routine. This is needed to compute the solution and error
+* bounds correctly.
+*
+* C (input) REAL array, dimension (N)
+* The column scale factors for A. If COLEQU = .FALSE., C
+* is not accessed. If C is input, each element of C should be a power
+* of the radix to ensure a reliable solution and error estimates.
+* Scaling by powers of the radix does not cause rounding errors unless
+* the result underflows or overflows. Rounding errors during scaling
+* lead to refining with a matrix that is not equivalent to the
+* input matrix, producing error estimates that may not be
+* reliable.
+*
+* B (input) REAL array, dimension (LDB,NRHS)
+* The righthandside matrix B.
+*
+* LDB (input) INTEGER
+* The leading dimension of the array B. LDB >= max(1,N).
+*
+* Y (input/output) REAL array, dimension (LDY,NRHS)
+* On entry, the solution matrix X, as computed by SGBTRS.
+* On exit, the improved solution matrix Y.
+*
+* LDY (input) INTEGER
+* The leading dimension of the array Y. LDY >= max(1,N).
+*
+* BERR_OUT (output) REAL array, dimension (NRHS)
+* On exit, BERR_OUT(j) contains the componentwise relative backward
+* error for righthandside j from the formula
+* max(i) ( abs(RES(i)) / ( abs(op(A_s))*abs(Y) + abs(B_s) )(i) )
+* where abs(Z) is the componentwise absolute value of the matrix
+* or vector Z. This is computed by SLA_LIN_BERR.
+*
+* N_NORMS (input) INTEGER
+* Determines which error bounds to return (see ERR_BNDS_NORM
+* and ERR_BNDS_COMP).
+* If N_NORMS >= 1 return normwise error bounds.
+* If N_NORMS >= 2 return componentwise error bounds.
+*
+* ERR_BNDS_NORM (input/output) REAL array, dimension
+* (NRHS, N_ERR_BNDS)
+* For each righthand side, this array contains information about
+* various error bounds and condition numbers corresponding to the
+* normwise relative error, which is defined as follows:
+*
+* Normwise relative error in the ith solution vector:
+* max_j (abs(XTRUE(j,i)  X(j,i)))
+* 
+* max_j abs(X(j,i))
+*
+* The array is indexed by the type of error information as described
+* below. There currently are up to three pieces of information
+* returned.
+*
+* The first index in ERR_BNDS_NORM(i,:) corresponds to the ith
+* righthand side.
+*
+* The second index in ERR_BNDS_NORM(:,err) contains the following
+* three fields:
+* err = 1 "Trust/don't trust" boolean. Trust the answer if the
+* reciprocal condition number is less than the threshold
+* sqrt(n) * slamch('Epsilon').
+*
+* err = 2 "Guaranteed" error bound: The estimated forward error,
+* almost certainly within a factor of 10 of the true error
+* so long as the next entry is greater than the threshold
+* sqrt(n) * slamch('Epsilon'). This error bound should only
+* be trusted if the previous boolean is true.
+*
+* err = 3 Reciprocal condition number: Estimated normwise
+* reciprocal condition number. Compared with the threshold
+* sqrt(n) * slamch('Epsilon') to determine if the error
+* estimate is "guaranteed". These reciprocal condition
+* numbers are 1 / (norm(Z^{1},inf) * norm(Z,inf)) for some
+* appropriately scaled matrix Z.
+* Let Z = S*A, where S scales each row by a power of the
+* radix so all absolute row sums of Z are approximately 1.
+*
+* This subroutine is only responsible for setting the second field
+* above.
+* See Lapack Working Note 165 for further details and extra
+* cautions.
+*
+* ERR_BNDS_COMP (input/output) REAL array, dimension
+* (NRHS, N_ERR_BNDS)
+* For each righthand side, this array contains information about
+* various error bounds and condition numbers corresponding to the
+* componentwise relative error, which is defined as follows:
+*
+* Componentwise relative error in the ith solution vector:
+* abs(XTRUE(j,i)  X(j,i))
+* max_j 
+* abs(X(j,i))
+*
+* The array is indexed by the righthand side i (on which the
+* componentwise relative error depends), and the type of error
+* information as described below. There currently are up to three
+* pieces of information returned for each righthand side. If
+* componentwise accuracy is not requested (PARAMS(3) = 0.0), then
+* ERR_BNDS_COMP is not accessed. If N_ERR_BNDS .LT. 3, then at most
+* the first (:,N_ERR_BNDS) entries are returned.
+*
+* The first index in ERR_BNDS_COMP(i,:) corresponds to the ith
+* righthand side.
+*
+* The second index in ERR_BNDS_COMP(:,err) contains the following
+* three fields:
+* err = 1 "Trust/don't trust" boolean. Trust the answer if the
+* reciprocal condition number is less than the threshold
+* sqrt(n) * slamch('Epsilon').
+*
+* err = 2 "Guaranteed" error bound: The estimated forward error,
+* almost certainly within a factor of 10 of the true error
+* so long as the next entry is greater than the threshold
+* sqrt(n) * slamch('Epsilon'). This error bound should only
+* be trusted if the previous boolean is true.
+*
+* err = 3 Reciprocal condition number: Estimated componentwise
+* reciprocal condition number. Compared with the threshold
+* sqrt(n) * slamch('Epsilon') to determine if the error
+* estimate is "guaranteed". These reciprocal condition
+* numbers are 1 / (norm(Z^{1},inf) * norm(Z,inf)) for some
+* appropriately scaled matrix Z.
+* Let Z = S*(A*diag(x)), where x is the solution for the
+* current righthand side and S scales each row of
+* A*diag(x) by a power of the radix so all absolute row
+* sums of Z are approximately 1.
+*
+* This subroutine is only responsible for setting the second field
+* above.
+* See Lapack Working Note 165 for further details and extra
+* cautions.
+*
+* RES (input) REAL array, dimension (N)
+* Workspace to hold the intermediate residual.
+*
+* AYB (input) REAL array, dimension (N)
+* Workspace. This can be the same workspace passed for Y_TAIL.
+*
+* DY (input) REAL array, dimension (N)
+* Workspace to hold the intermediate solution.
+*
+* Y_TAIL (input) REAL array, dimension (N)
+* Workspace to hold the trailing bits of the intermediate solution.
+*
+* RCOND (input) REAL
+* Reciprocal scaled condition number. This is an estimate of the
+* reciprocal Skeel condition number of the matrix A after
+* equilibration (if done). If this is less than the machine
+* precision (in particular, if it is zero), the matrix is singular
+* to working precision. Note that the error may still be small even
+* if this number is very small and the matrix appears ill
+* conditioned.
+*
+* ITHRESH (input) INTEGER
+* The maximum number of residual computations allowed for
+* refinement. The default is 10. For 'aggressive' set to 100 to
+* permit convergence using approximate factorizations or
+* factorizations other than LU. If the factorization uses a
+* technique other than Gaussian elimination, the guarantees in
+* ERR_BNDS_NORM and ERR_BNDS_COMP may no longer be trustworthy.
+*
+* RTHRESH (input) REAL
+* Determines when to stop refinement if the error estimate stops
+* decreasing. Refinement will stop when the next solution no longer
+* satisfies norm(dx_{i+1}) < RTHRESH * norm(dx_i) where norm(Z) is
+* the infinity norm of Z. RTHRESH satisfies 0 < RTHRESH <= 1. The
+* default value is 0.5. For 'aggressive' set to 0.9 to permit
+* convergence on extremely illconditioned matrices. See LAWN 165
+* for more details.
+*
+* DZ_UB (input) REAL
+* Determines when to start considering componentwise convergence.
+* Componentwise convergence is only considered after each component
+* of the solution Y is stable, which we definte as the relative
+* change in each component being less than DZ_UB. The default value
+* is 0.25, requiring the first bit to be stable. See LAWN 165 for
+* more details.
+*
+* IGNORE_CWISE (input) LOGICAL
+* If .TRUE. then ignore componentwise convergence. Default value
+* is .FALSE..
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* < 0: if INFO = i, the ith argument to SGBTRS had an illegal
+* value
+*
* =====================================================================
*
* .. Local Scalars ..
@@ 275,10 +521,12 @@
* Compute error bounds.
*
IF ( N_NORMS .GE. 1 ) THEN
 ERRS_N( J, LA_LINRX_ERR_I ) = FINAL_DX_X / (1  DXRATMAX)
+ ERR_BNDS_NORM( J, LA_LINRX_ERR_I ) =
+ $ FINAL_DX_X / (1  DXRATMAX)
END IF
IF (N_NORMS .GE. 2) THEN
 ERRS_C( J, LA_LINRX_ERR_I ) = FINAL_DZ_Z / (1  DZRATMAX)
+ ERR_BNDS_COMP( J, LA_LINRX_ERR_I ) =
+ $ FINAL_DZ_Z / (1  DZRATMAX)
END IF
*
* Compute componentwise relative backward error from formula
Modified: lapack/trunk/SRC/sla_gbrpvgrw.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/sla_gbrpvgrw.f?rev=650
==============================================================================
 lapack/trunk/SRC/sla_gbrpvgrw.f (original)
+++ lapack/trunk/SRC/sla_gbrpvgrw.f Tue Apr 7 20:05:18 2009
@@ 20,12 +20,49 @@
*
* Purpose
* =======
*
* SLA_GBRPVGRW computes ... .
+*
+* SLA_GBRPVGRW computes the reciprocal pivot growth factor
+* norm(A)/norm(U). The "max absolute element" norm is used. If this is
+* much less than 1, the stability of the LU factorization of the
+* (equilibrated) matrix A could be poor. This also means that the
+* solution X, estimated condition numbers, and error bounds could be
+* unreliable.
*
* Arguments
* =========
*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* KL (input) INTEGER
+* The number of subdiagonals within the band of A. KL >= 0.
+*
+* KU (input) INTEGER
+* The number of superdiagonals within the band of A. KU >= 0.
+*
+* NCOLS (input) INTEGER
+* The number of columns of the matrix A. NCOLS >= 0.
+*
+* AB (input) REAL array, dimension (LDAB,N)
+* On entry, the matrix A in band storage, in rows 1 to KL+KU+1.
+* The jth column of A is stored in the jth column of the
+* array AB as follows:
+* AB(KU+1+ij,j) = A(i,j) for max(1,jKU)<=i<=min(N,j+kl)
+*
+* LDAB (input) INTEGER
+* The leading dimension of the array AB. LDAB >= KL+KU+1.
+*
+* AFB (input) REAL array, dimension (LDAFB,N)
+* Details of the LU factorization of the band matrix A, as
+* computed by SGBTRF. U is stored as an upper triangular
+* band matrix with KL+KU superdiagonals in rows 1 to KL+KU+1,
+* and the multipliers used during the factorization are stored
+* in rows KL+KU+2 to 2*KL+KU+1.
+*
+* LDAFB (input) INTEGER
+* The leading dimension of the array AFB. LDAFB >= 2*KL+KU+1.
+*
* =====================================================================
*
* .. Local Scalars ..
@@ 38,7 +75,7 @@
* .. Executable Statements ..
*
RPVGRW = 1.0
*
+
KD = KU + 1
DO J = 1, NCOLS
AMAX = 0.0
Modified: lapack/trunk/SRC/sla_gercond.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/sla_gercond.f?rev=650
==============================================================================
 lapack/trunk/SRC/sla_gercond.f (original)
+++ lapack/trunk/SRC/sla_gercond.f Tue Apr 7 20:05:18 2009
@@ 37,9 +37,52 @@
* Arguments
* ==========
*
* WORK REAL workspace of size 3*N.
+* TRANS (input) CHARACTER*1
+* Specifies the form of the system of equations:
+* = 'N': A * X = B (No transpose)
+* = 'T': A**T * X = B (Transpose)
+* = 'C': A**H * X = B (Conjugate Transpose = Transpose)
+*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* A (input) REAL array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) REAL array, dimension (LDAF,N)
+* The factors L and U from the factorization
+* A = P*L*U as computed by SGETRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* IPIV (input) INTEGER array, dimension (N)
+* The pivot indices from the factorization A = P*L*U
+* as computed by SGETRF; row i of the matrix was interchanged
+* with row IPIV(i).
+*
+* CMODE (input) INTEGER
+* Determines op2(C) in the formula op(A) * op2(C) as follows:
+* CMODE = 1 op2(C) = C
+* CMODE = 0 op2(C) = I
+* CMODE = 1 op2(C) = inv(C)
+*
+* C (input) REAL array, dimension (N)
+* The vector C in the formula op(A) * op2(C).
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* i > 0: The ith argument is invalid.
*
* IWORK INTEGER workspace of size N.
+* WORK (input) REAL array, dimension (3*N).
+* Workspace.
+*
+* IWORK (input) INTEGER array, dimension (N).
+* Workspace.2
*
* =====================================================================
*
@@ 72,6 +115,10 @@
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( 'SLA_GERCOND', INFO )
Modified: lapack/trunk/SRC/sla_gerfsx_extended.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/sla_gerfsx_extended.f?rev=650
==============================================================================
 lapack/trunk/SRC/sla_gerfsx_extended.f (original)
+++ lapack/trunk/SRC/sla_gerfsx_extended.f Tue Apr 7 20:05:18 2009
@@ 1,9 +1,10 @@
SUBROUTINE SLA_GERFSX_EXTENDED( PREC_TYPE, TRANS_TYPE, N, NRHS, A,
$ LDA, AF, LDAF, IPIV, COLEQU, C, B,
$ LDB, Y, LDY, BERR_OUT, N_NORMS,
 $ ERRS_N, ERRS_C, RES, AYB, DY,
 $ Y_TAIL, RCOND, ITHRESH, RTHRESH,
 $ DZ_UB, IGNORE_CWISE, INFO )
+ $ ERR_BNDS_NORM, ERR_BNDS_COMP, RES,
+ $ AYB, DY, Y_TAIL, RCOND, ITHRESH,
+ $ RTHRESH, DZ_UB, IGNORE_CWISE,
+ $ INFO )
*
*  LAPACK routine (version 3.2) 
*  Contributed by James Demmel, Deaglan Halligan, Yozo Hida and 
@@ 26,17 +27,255 @@
REAL A( LDA, * ), AF( LDAF, * ), B( LDB, * ),
$ Y( LDY, * ), RES( * ), DY( * ), Y_TAIL( * )
REAL C( * ), AYB( * ), RCOND, BERR_OUT( * ),
 $ ERRS_N( NRHS, * ), ERRS_C( NRHS, * )
+ $ ERR_BNDS_NORM( NRHS, * ),
+ $ ERR_BNDS_COMP( NRHS, * )
* ..
*
* Purpose
* =======
*
* SLA_GERFSX_EXTENDED computes ... .
+*
+* SLA_GERFSX_EXTENDED improves the computed solution to a system of
+* linear equations by performing extraprecise iterative refinement
+* and provides error bounds and backward error estimates for the solution.
+* This subroutine is called by SGERFSX to perform iterative refinement.
+* In addition to normwise error bound, the code provides maximum
+* componentwise error bound if possible. See comments for ERR_BNDS_NORM
+* and ERR_BNDS_COMP for details of the error bounds. Note that this
+* subroutine is only resonsible for setting the second fields of
+* ERR_BNDS_NORM and ERR_BNDS_COMP.
*
* Arguments
* =========
*
+* PREC_TYPE (input) INTEGER
+* Specifies the intermediate precision to be used in refinement.
+* The value is defined by ILAPREC(P) where P is a CHARACTER and
+* P = 'S': Single
+* = 'D': Double
+* = 'I': Indigenous
+* = 'X', 'E': Extra
+*
+* TRANS_TYPE (input) INTEGER
+* Specifies the transposition operation on A.
+* The value is defined by ILATRANS(T) where T is a CHARACTER and
+* T = 'N': No transpose
+* = 'T': Transpose
+* = 'C': Conjugate transpose
+*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* NRHS (input) INTEGER
+* The number of righthandsides, i.e., the number of columns of the
+* matrix B.
+*
+* A (input) REAL array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) REAL array, dimension (LDAF,N)
+* The factors L and U from the factorization
+* A = P*L*U as computed by SGETRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* IPIV (input) INTEGER array, dimension (N)
+* The pivot indices from the factorization A = P*L*U
+* as computed by SGETRF; row i of the matrix was interchanged
+* with row IPIV(i).
+*
+* COLEQU (input) LOGICAL
+* If .TRUE. then column equilibration was done to A before calling
+* this routine. This is needed to compute the solution and error
+* bounds correctly.
+*
+* C (input) REAL array, dimension (N)
+* The column scale factors for A. If COLEQU = .FALSE., C
+* is not accessed. If C is input, each element of C should be a power
+* of the radix to ensure a reliable solution and error estimates.
+* Scaling by powers of the radix does not cause rounding errors unless
+* the result underflows or overflows. Rounding errors during scaling
+* lead to refining with a matrix that is not equivalent to the
+* input matrix, producing error estimates that may not be
+* reliable.
+*
+* B (input) REAL array, dimension (LDB,NRHS)
+* The righthandside matrix B.
+*
+* LDB (input) INTEGER
+* The leading dimension of the array B. LDB >= max(1,N).
+*
+* Y (input/output) REAL array, dimension (LDY,NRHS)
+* On entry, the solution matrix X, as computed by SGETRS.
+* On exit, the improved solution matrix Y.
+*
+* LDY (input) INTEGER
+* The leading dimension of the array Y. LDY >= max(1,N).
+*
+* BERR_OUT (output) REAL array, dimension (NRHS)
+* On exit, BERR_OUT(j) contains the componentwise relative backward
+* error for righthandside j from the formula
+* max(i) ( abs(RES(i)) / ( abs(op(A_s))*abs(Y) + abs(B_s) )(i) )
+* where abs(Z) is the componentwise absolute value of the matrix
+* or vector Z. This is computed by SLA_LIN_BERR.
+*
+* N_NORMS (input) INTEGER
+* Determines which error bounds to return (see ERR_BNDS_NORM
+* and ERR_BNDS_COMP).
+* If N_NORMS >= 1 return normwise error bounds.
+* If N_NORMS >= 2 return componentwise error bounds.
+*
+* ERR_BNDS_NORM (input/output) REAL array, dimension (NRHS, N_ERR_BNDS)
+* For each righthand side, this array contains information about
+* various error bounds and condition numbers corresponding to the
+* normwise relative error, which is defined as follows:
+*
+* Normwise relative error in the ith solution vector:
+* max_j (abs(XTRUE(j,i)  X(j,i)))
+* 
+* max_j abs(X(j,i))
+*
+* The array is indexed by the type of error information as described
+* below. There currently are up to three pieces of information
+* returned.
+*
+* The first index in ERR_BNDS_NORM(i,:) corresponds to the ith
+* righthand side.
+*
+* The second index in ERR_BNDS_NORM(:,err) contains the following
+* three fields:
+* err = 1 "Trust/don't trust" boolean. Trust the answer if the
+* reciprocal condition number is less than the threshold
+* sqrt(n) * slamch('Epsilon').
+*
+* err = 2 "Guaranteed" error bound: The estimated forward error,
+* almost certainly within a factor of 10 of the true error
+* so long as the next entry is greater than the threshold
+* sqrt(n) * slamch('Epsilon'). This error bound should only
+* be trusted if the previous boolean is true.
+*
+* err = 3 Reciprocal condition number: Estimated normwise
+* reciprocal condition number. Compared with the threshold
+* sqrt(n) * slamch('Epsilon') to determine if the error
+* estimate is "guaranteed". These reciprocal condition
+* numbers are 1 / (norm(Z^{1},inf) * norm(Z,inf)) for some
+* appropriately scaled matrix Z.
+* Let Z = S*A, where S scales each row by a power of the
+* radix so all absolute row sums of Z are approximately 1.
+*
+* This subroutine is only responsible for setting the second field
+* above.
+* See Lapack Working Note 165 for further details and extra
+* cautions.
+*
+* ERR_BNDS_COMP (input/output) REAL array, dimension (NRHS, N_ERR_BNDS)
+* For each righthand side, this array contains information about
+* various error bounds and condition numbers corresponding to the
+* componentwise relative error, which is defined as follows:
+*
+* Componentwise relative error in the ith solution vector:
+* abs(XTRUE(j,i)  X(j,i))
+* max_j 
+* abs(X(j,i))
+*
+* The array is indexed by the righthand side i (on which the
+* componentwise relative error depends), and the type of error
+* information as described below. There currently are up to three
+* pieces of information returned for each righthand side. If
+* componentwise accuracy is not requested (PARAMS(3) = 0.0), then
+* ERR_BNDS_COMP is not accessed. If N_ERR_BNDS .LT. 3, then at most
+* the first (:,N_ERR_BNDS) entries are returned.
+*
+* The first index in ERR_BNDS_COMP(i,:) corresponds to the ith
+* righthand side.
+*
+* The second index in ERR_BNDS_COMP(:,err) contains the following
+* three fields:
+* err = 1 "Trust/don't trust" boolean. Trust the answer if the
+* reciprocal condition number is less than the threshold
+* sqrt(n) * slamch('Epsilon').
+*
+* err = 2 "Guaranteed" error bound: The estimated forward error,
+* almost certainly within a factor of 10 of the true error
+* so long as the next entry is greater than the threshold
+* sqrt(n) * slamch('Epsilon'). This error bound should only
+* be trusted if the previous boolean is true.
+*
+* err = 3 Reciprocal condition number: Estimated componentwise
+* reciprocal condition number. Compared with the threshold
+* sqrt(n) * slamch('Epsilon') to determine if the error
+* estimate is "guaranteed". These reciprocal condition
+* numbers are 1 / (norm(Z^{1},inf) * norm(Z,inf)) for some
+* appropriately scaled matrix Z.
+* Let Z = S*(A*diag(x)), where x is the solution for the
+* current righthand side and S scales each row of
+* A*diag(x) by a power of the radix so all absolute row
+* sums of Z are approximately 1.
+*
+* This subroutine is only responsible for setting the second field
+* above.
+* See Lapack Working Note 165 for further details and extra
+* cautions.
+*
+* RES (input) REAL array, dimension (N)
+* Workspace to hold the intermediate residual.
+*
+* AYB (input) REAL array, dimension (N)
+* Workspace. This can be the same workspace passed for Y_TAIL.
+*
+* DY (input) REAL array, dimension (N)
+* Workspace to hold the intermediate solution.
+*
+* Y_TAIL (input) REAL array, dimension (N)
+* Workspace to hold the trailing bits of the intermediate solution.
+*
+* RCOND (input) REAL
+* Reciprocal scaled condition number. This is an estimate of the
+* reciprocal Skeel condition number of the matrix A after
+* equilibration (if done). If this is less than the machine
+* precision (in particular, if it is zero), the matrix is singular
+* to working precision. Note that the error may still be small even
+* if this number is very small and the matrix appears ill
+* conditioned.
+*
+* ITHRESH (input) INTEGER
+* The maximum number of residual computations allowed for
+* refinement. The default is 10. For 'aggressive' set to 100 to
+* permit convergence using approximate factorizations or
+* factorizations other than LU. If the factorization uses a
+* technique other than Gaussian elimination, the guarantees in
+* ERR_BNDS_NORM and ERR_BNDS_COMP may no longer be trustworthy.
+*
+* RTHRESH (input) REAL
+* Determines when to stop refinement if the error estimate stops
+* decreasing. Refinement will stop when the next solution no longer
+* satisfies norm(dx_{i+1}) < RTHRESH * norm(dx_i) where norm(Z) is
+* the infinity norm of Z. RTHRESH satisfies 0 < RTHRESH <= 1. The
+* default value is 0.5. For 'aggressive' set to 0.9 to permit
+* convergence on extremely illconditioned matrices. See LAWN 165
+* for more details.
+*
+* DZ_UB (input) REAL
+* Determines when to start considering componentwise convergence.
+* Componentwise convergence is only considered after each component
+* of the solution Y is stable, which we definte as the relative
+* change in each component being less than DZ_UB. The default value
+* is 0.25, requiring the first bit to be stable. See LAWN 165 for
+* more details.
+*
+* IGNORE_CWISE (input) LOGICAL
+* If .TRUE. then ignore componentwise convergence. Default value
+* is .FALSE..
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* < 0: if INFO = i, the ith argument to SGETRS had an illegal
+* value
+*
* =====================================================================
*
* .. Local Scalars ..
@@ 270,10 +509,12 @@
* Compute error bounds
*
IF (N_NORMS .GE. 1) THEN
 ERRS_N( J, LA_LINRX_ERR_I ) = FINAL_DX_X / (1  DXRATMAX)
+ ERR_BNDS_NORM( J, LA_LINRX_ERR_I ) =
+ $ FINAL_DX_X / (1  DXRATMAX)
END IF
IF ( N_NORMS .GE. 2 ) THEN
 ERRS_C( J, LA_LINRX_ERR_I ) = FINAL_DZ_Z / (1  DZRATMAX)
+ ERR_BNDS_COMP( J, LA_LINRX_ERR_I ) =
+ $ FINAL_DZ_Z / (1  DZRATMAX)
END IF
*
* Compute componentwise relative backward error from formula
Modified: lapack/trunk/SRC/sla_lin_berr.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/sla_lin_berr.f?rev=650
==============================================================================
 lapack/trunk/SRC/sla_lin_berr.f (original)
+++ lapack/trunk/SRC/sla_lin_berr.f Tue Apr 7 20:05:18 2009
@@ 21,12 +21,39 @@
* Purpose
* =======
*
* SLA_LIN_BERR computes componentwise relative backward error from
+* SLA_LIN_BERR computes componentwise relative backward error from
* the formula
* max(i) ( abs(R(i)) / ( abs(op(A_s))*abs(Y) + abs(B_s) )(i) )
* where abs(Z) is the componentwise absolute value of the matrix
+* where abs(Z) is the componentwise absolute value of the matrix
* or vector Z.
*
+* Arguments
+* ==========
+*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* NZ (input) INTEGER
+* We add (NZ+1)*SLAMCH( 'Safe minimum' ) to R(i) in the numerator to
+* guard against spuriously zero residuals. Default value is N.
+*
+* NRHS (input) INTEGER
+* The number of right hand sides, i.e., the number of columns
+* of the matrices AYB, RES, and BERR. NRHS >= 0.
+*
+* RES (input) REAL array, dimension (N,NRHS)
+* The residual matrix, i.e., the matrix R in the relative backward
+* error formula above.
+*
+* AYB (input) REAL array, dimension (N, NRHS)
+* The denominator in the relative backward error formula above, i.e.,
+* the matrix abs(op(A_s))*abs(Y) + abs(B_s). The matrices A, Y, and B
+* are from iterative refinement (see sla_gerfsx_extended.f).
+*
+* RES (output) REAL array, dimension (NRHS)
+* The componentwise relative backward error from the formula above.
+*
* =====================================================================
*
* .. Local Scalars ..
Modified: lapack/trunk/SRC/sla_porcond.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/sla_porcond.f?rev=650
==============================================================================
 lapack/trunk/SRC/sla_porcond.f (original)
+++ lapack/trunk/SRC/sla_porcond.f Tue Apr 7 20:05:18 2009
@@ 37,9 +37,45 @@
* Arguments
* ==========
*
* WORK real workspace of size 3*N, and
+* UPLO (input) CHARACTER*1
+* = 'U': Upper triangle of A is stored;
+* = 'L': Lower triangle of A is stored.
*
* IWORK integer workspace of size N.
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* A (input) REAL array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) REAL array, dimension (LDAF,N)
+* The triangular factor U or L from the Cholesky factorization
+* A = U**T*U or A = L*L**T, as computed by SPOTRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* CMODE (input) INTEGER
+* Determines op2(C) in the formula op(A) * op2(C) as follows:
+* CMODE = 1 op2(C) = C
+* CMODE = 0 op2(C) = I
+* CMODE = 1 op2(C) = inv(C)
+*
+* C (input) REAL array, dimension (N)
+* The vector C in the formula op(A) * op2(C).
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* i > 0: The ith argument is invalid.
+*
+* WORK (input) REAL array, dimension (3*N).
+* Workspace.
+*
+* IWORK (input) INTEGER array, dimension (N).
+* Workspace.
*
* =====================================================================
*
Modified: lapack/trunk/SRC/sla_porfsx_extended.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/sla_porfsx_extended.f?rev=650
==============================================================================
 lapack/trunk/SRC/sla_porfsx_extended.f (original)
+++ lapack/trunk/SRC/sla_porfsx_extended.f Tue Apr 7 20:05:18 2009
@@ 1,9 +1,10 @@
SUBROUTINE SLA_PORFSX_EXTENDED( PREC_TYPE, UPLO, N, NRHS, A, LDA,
$ AF, LDAF, COLEQU, C, B, LDB, Y,
 $ LDY, BERR_OUT, N_NORMS, ERRS_N,
 $ ERRS_C, RES, AYB, DY, Y_TAIL,
 $ RCOND, ITHRESH, RTHRESH, DZ_UB,
 $ IGNORE_CWISE, INFO )
+ $ LDY, BERR_OUT, N_NORMS,
+ $ ERR_BNDS_NORM, ERR_BNDS_COMP, RES,
+ $ AYB, DY, Y_TAIL, RCOND, ITHRESH,
+ $ RTHRESH, DZ_UB, IGNORE_CWISE,
+ $ INFO )
*
*  LAPACK routine (version 3.2) 
*  Contributed by James Demmel, Deaglan Halligan, Yozo Hida and 
@@ 26,17 +27,247 @@
REAL A( LDA, * ), AF( LDAF, * ), B( LDB, * ),
$ Y( LDY, * ), RES( * ), DY( * ), Y_TAIL( * )
REAL C( * ), AYB(*), RCOND, BERR_OUT( * ),
 $ ERRS_N( NRHS, * ), ERRS_C( NRHS, * )
+ $ ERR_BNDS_NORM( NRHS, * ),
+ $ ERR_BNDS_COMP( NRHS, * )
* ..
*
* Purpose
* =======
*
* SLA_PORFSX_EXTENDED computes ... .
+* SLA_PORFSX_EXTENDED improves the computed solution to a system of
+* linear equations by performing extraprecise iterative refinement
+* and provides error bounds and backward error estimates for the solution.
+* This subroutine is called by SPORFSX to perform iterative refinement.
+* In addition to normwise error bound, the code provides maximum
+* componentwise error bound if possible. See comments for ERR_BNDS_NORM
+* and ERR_BNDS_COMP for details of the error bounds. Note that this
+* subroutine is only resonsible for setting the second fields of
+* ERR_BNDS_NORM and ERR_BNDS_COMP.
*
* Arguments
* =========
*
+* PREC_TYPE (input) INTEGER
+* Specifies the intermediate precision to be used in refinement.
+* The value is defined by ILAPREC(P) where P is a CHARACTER and
+* P = 'S': Single
+* = 'D': Double
+* = 'I': Indigenous
+* = 'X', 'E': Extra
+*
+* UPLO (input) CHARACTER*1
+* = 'U': Upper triangle of A is stored;
+* = 'L': Lower triangle of A is stored.
+*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* NRHS (input) INTEGER
+* The number of righthandsides, i.e., the number of columns of the
+* matrix B.
+*
+* A (input) REAL array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) REAL array, dimension (LDAF,N)
+* The triangular factor U or L from the Cholesky factorization
+* A = U**T*U or A = L*L**T, as computed by SPOTRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* COLEQU (input) LOGICAL
+* If .TRUE. then column equilibration was done to A before calling
+* this routine. This is needed to compute the solution and error
+* bounds correctly.
+*
+* C (input) REAL array, dimension (N)
+* The column scale factors for A. If COLEQU = .FALSE., C
+* is not accessed. If C is input, each element of C should be a power
+* of the radix to ensure a reliable solution and error estimates.
+* Scaling by powers of the radix does not cause rounding errors unless
+* the result underflows or overflows. Rounding errors during scaling
+* lead to refining with a matrix that is not equivalent to the
+* input matrix, producing error estimates that may not be
+* reliable.
+*
+* B (input) REAL array, dimension (LDB,NRHS)
+* The righthandside matrix B.
+*
+* LDB (input) INTEGER
+* The leading dimension of the array B. LDB >= max(1,N).
+*
+* Y (input/output) REAL array, dimension (LDY,NRHS)
+* On entry, the solution matrix X, as computed by SPOTRS.
+* On exit, the improved solution matrix Y.
+*
+* LDY (input) INTEGER
+* The leading dimension of the array Y. LDY >= max(1,N).
+*
+* BERR_OUT (output) REAL array, dimension (NRHS)
+* On exit, BERR_OUT(j) contains the componentwise relative backward
+* error for righthandside j from the formula
+* max(i) ( abs(RES(i)) / ( abs(op(A_s))*abs(Y) + abs(B_s) )(i) )
+* where abs(Z) is the componentwise absolute value of the matrix
+* or vector Z. This is computed by SLA_LIN_BERR.
+*
+* N_NORMS (input) INTEGER
+* Determines which error bounds to return (see ERR_BNDS_NORM
+* and ERR_BNDS_COMP).
+* If N_NORMS >= 1 return normwise error bounds.
+* If N_NORMS >= 2 return componentwise error bounds.
+*
+* ERR_BNDS_NORM (input/output) REAL array, dimension (NRHS, N_ERR_BNDS)
+* For each righthand side, this array contains information about
+* various error bounds and condition numbers corresponding to the
+* normwise relative error, which is defined as follows:
+*
+* Normwise relative error in the ith solution vector:
+* max_j (abs(XTRUE(j,i)  X(j,i)))
+* 
+* max_j abs(X(j,i))
+*
+* The array is indexed by the type of error information as described
+* below. There currently are up to three pieces of information
+* returned.
+*
+* The first index in ERR_BNDS_NORM(i,:) corresponds to the ith
+* righthand side.
+*
+* The second index in ERR_BNDS_NORM(:,err) contains the following
+* three fields:
+* err = 1 "Trust/don't trust" boolean. Trust the answer if the
+* reciprocal condition number is less than the threshold
+* sqrt(n) * slamch('Epsilon').
+*
+* err = 2 "Guaranteed" error bound: The estimated forward error,
+* almost certainly within a factor of 10 of the true error
+* so long as the next entry is greater than the threshold
+* sqrt(n) * slamch('Epsilon'). This error bound should only
+* be trusted if the previous boolean is true.
+*
+* err = 3 Reciprocal condition number: Estimated normwise
+* reciprocal condition number. Compared with the threshold
+* sqrt(n) * slamch('Epsilon') to determine if the error
+* estimate is "guaranteed". These reciprocal condition
+* numbers are 1 / (norm(Z^{1},inf) * norm(Z,inf)) for some
+* appropriately scaled matrix Z.
+* Let Z = S*A, where S scales each row by a power of the
+* radix so all absolute row sums of Z are approximately 1.
+*
+* This subroutine is only responsible for setting the second field
+* above.
+* See Lapack Working Note 165 for further details and extra
+* cautions.
+*
+* ERR_BNDS_COMP (input/output) REAL array, dimension (NRHS, N_ERR_BNDS)
+* For each righthand side, this array contains information about
+* various error bounds and condition numbers corresponding to the
+* componentwise relative error, which is defined as follows:
+*
+* Componentwise relative error in the ith solution vector:
+* abs(XTRUE(j,i)  X(j,i))
+* max_j 
+* abs(X(j,i))
+*
+* The array is indexed by the righthand side i (on which the
+* componentwise relative error depends), and the type of error
+* information as described below. There currently are up to three
+* pieces of information returned for each righthand side. If
+* componentwise accuracy is not requested (PARAMS(3) = 0.0), then
+* ERR_BNDS_COMP is not accessed. If N_ERR_BNDS .LT. 3, then at most
+* the first (:,N_ERR_BNDS) entries are returned.
+*
+* The first index in ERR_BNDS_COMP(i,:) corresponds to the ith
+* righthand side.
+*
+* The second index in ERR_BNDS_COMP(:,err) contains the following
+* three fields:
+* err = 1 "Trust/don't trust" boolean. Trust the answer if the
+* reciprocal condition number is less than the threshold
+* sqrt(n) * slamch('Epsilon').
+*
+* err = 2 "Guaranteed" error bound: The estimated forward error,
+* almost certainly within a factor of 10 of the true error
+* so long as the next entry is greater than the threshold
+* sqrt(n) * slamch('Epsilon'). This error bound should only
+* be trusted if the previous boolean is true.
+*
+* err = 3 Reciprocal condition number: Estimated componentwise
+* reciprocal condition number. Compared with the threshold
+* sqrt(n) * slamch('Epsilon') to determine if the error
+* estimate is "guaranteed". These reciprocal condition
+* numbers are 1 / (norm(Z^{1},inf) * norm(Z,inf)) for some
+* appropriately scaled matrix Z.
+* Let Z = S*(A*diag(x)), where x is the solution for the
+* current righthand side and S scales each row of
+* A*diag(x) by a power of the radix so all absolute row
+* sums of Z are approximately 1.
+*
+* This subroutine is only responsible for setting the second field
+* above.
+* See Lapack Working Note 165 for further details and extra
+* cautions.
+*
+* RES (input) REAL array, dimension (N)
+* Workspace to hold the intermediate residual.
+*
+* AYB (input) REAL array, dimension (N)
+* Workspace. This can be the same workspace passed for Y_TAIL.
+*
+* DY (input) REAL array, dimension (N)
+* Workspace to hold the intermediate solution.
+*
+* Y_TAIL (input) REAL array, dimension (N)
+* Workspace to hold the trailing bits of the intermediate solution.
+*
+* RCOND (input) REAL
+* Reciprocal scaled condition number. This is an estimate of the
+* reciprocal Skeel condition number of the matrix A after
+* equilibration (if done). If this is less than the machine
+* precision (in particular, if it is zero), the matrix is singular
+* to working precision. Note that the error may still be small even
+* if this number is very small and the matrix appears ill
+* conditioned.
+*
+* ITHRESH (input) INTEGER
+* The maximum number of residual computations allowed for
+* refinement. The default is 10. For 'aggressive' set to 100 to
+* permit convergence using approximate factorizations or
+* factorizations other than LU. If the factorization uses a
+* technique other than Gaussian elimination, the guarantees in
+* ERR_BNDS_NORM and ERR_BNDS_COMP may no longer be trustworthy.
+*
+* RTHRESH (input) REAL
+* Determines when to stop refinement if the error estimate stops
+* decreasing. Refinement will stop when the next solution no longer
+* satisfies norm(dx_{i+1}) < RTHRESH * norm(dx_i) where norm(Z) is
+* the infinity norm of Z. RTHRESH satisfies 0 < RTHRESH <= 1. The
+* default value is 0.5. For 'aggressive' set to 0.9 to permit
+* convergence on extremely illconditioned matrices. See LAWN 165
+* for more details.
+*
+* DZ_UB (input) REAL
+* Determines when to start considering componentwise convergence.
+* Componentwise convergence is only considered after each component
+* of the solution Y is stable, which we definte as the relative
+* change in each component being less than DZ_UB. The default value
+* is 0.25, requiring the first bit to be stable. See LAWN 165 for
+* more details.
+*
+* IGNORE_CWISE (input) LOGICAL
+* If .TRUE. then ignore componentwise convergence. Default value
+* is .FALSE..
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* < 0: if INFO = i, the ith argument to SPOTRS had an illegal
+* value
+*
* =====================================================================
*
* .. Local Scalars ..
@@ 270,10 +501,12 @@
* Compute error bounds.
*
IF ( N_NORMS .GE. 1 ) THEN
 ERRS_N( J, LA_LINRX_ERR_I ) = FINAL_DX_X / (1  DXRATMAX)
+ ERR_BNDS_NORM( J, LA_LINRX_ERR_I ) =
+ $ FINAL_DX_X / (1  DXRATMAX)
END IF
IF ( N_NORMS .GE. 2 ) THEN
 ERRS_C( J, LA_LINRX_ERR_I ) = FINAL_DZ_Z / (1  DZRATMAX)
+ ERR_BNDS_COMP( J, LA_LINRX_ERR_I ) =
+ $ FINAL_DZ_Z / (1  DZRATMAX)
END IF
*
* Compute componentwise relative backward error from formula
Modified: lapack/trunk/SRC/sla_porpvgrw.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/sla_porpvgrw.f?rev=650
==============================================================================
 lapack/trunk/SRC/sla_porpvgrw.f (original)
+++ lapack/trunk/SRC/sla_porpvgrw.f Tue Apr 7 20:05:18 2009
@@ 21,11 +21,38 @@
* Purpose
* =======
*
* SLA_PORPVGRW computes ... .
+* SLA_PORPVGRW computes the reciprocal pivot growth factor
+* norm(A)/norm(U). The "max absolute element" norm is used. If this is
+* much less than 1, the stability of the LU factorization of the
+* (equilibrated) matrix A could be poor. This also means that the
+* solution X, estimated condition numbers, and error bounds could be
+* unreliable.
*
* Arguments
* =========
*
+* UPLO (input) CHARACTER*1
+* = 'U': Upper triangle of A is stored;
+* = 'L': Lower triangle of A is stored.
+*
+* NCOLS (input) INTEGER
+* The number of columns of the matrix A. NCOLS >= 0.
+*
+* A (input) REAL array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) REAL array, dimension (LDAF,N)
+* The triangular factor U or L from the Cholesky factorization
+* A = U**T*U or A = L*L**T, as computed by SPOTRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* WORK (input) REAL array, dimension (2*N)
+*
* =====================================================================
*
* .. Local Scalars ..
Modified: lapack/trunk/SRC/sla_rpvgrw.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/sla_rpvgrw.f?rev=650
==============================================================================
 lapack/trunk/SRC/sla_rpvgrw.f (original)
+++ lapack/trunk/SRC/sla_rpvgrw.f Tue Apr 7 20:05:18 2009
@@ 19,12 +19,37 @@
*
* Purpose
* =======
*
* SLA_RPVGRW computes ... .
+*
+* SLA_RPVGRW computes the reciprocal pivot growth factor
+* norm(A)/norm(U). The "max absolute element" norm is used. If this is
+* much less than 1, the stability of the LU factorization of the
+* (equilibrated) matrix A could be poor. This also means that the
+* solution X, estimated condition numbers, and error bounds could be
+* unreliable.
*
* Arguments
* =========
*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* NCOLS (input) INTEGER
+* The number of columns of the matrix A. NCOLS >= 0.
+*
+* A (input) REAL array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) REAL array, dimension (LDAF,N)
+* The factors L and U from the factorization
+* A = P*L*U as computed by SGETRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
* =====================================================================
*
* .. Local Scalars ..
@@ 37,7 +62,7 @@
* .. Executable Statements ..
*
RPVGRW = 1.0
*
+
DO J = 1, NCOLS
AMAX = 0.0
UMAX = 0.0
Modified: lapack/trunk/SRC/sla_syrcond.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/sla_syrcond.f?rev=650
==============================================================================
 lapack/trunk/SRC/sla_syrcond.f (original)
+++ lapack/trunk/SRC/sla_syrcond.f Tue Apr 7 20:05:18 2009
@@ 36,9 +36,49 @@
* Arguments
* ==========
*
* WORK real workspace of size 3*N.
+* UPLO (input) CHARACTER*1
+* = 'U': Upper triangle of A is stored;
+* = 'L': Lower triangle of A is stored.
*
* IWORK integer workspace of size N.
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* A (input) REAL array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) REAL array, dimension (LDAF,N)
+* The block diagonal matrix D and the multipliers used to
+* obtain the factor U or L as computed by SSYTRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* IPIV (input) INTEGER array, dimension (N)
+* Details of the interchanges and the block structure of D
+* as determined by SSYTRF.
+*
+* CMODE (input) INTEGER
+* Determines op2(C) in the formula op(A) * op2(C) as follows:
+* CMODE = 1 op2(C) = C
+* CMODE = 0 op2(C) = I
+* CMODE = 1 op2(C) = inv(C)
+*
+* C (input) REAL array, dimension (N)
+* The vector C in the formula op(A) * op2(C).
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* i > 0: The ith argument is invalid.
+*
+* WORK (input) REAL array, dimension (3*N).
+* Workspace.
+*
+* IWORK (input) INTEGER array, dimension (N).
+* Workspace.
*
* =====================================================================
*
@@ 160,9 +200,9 @@
END DO
IF ( UP ) THEN
 call ssytrs( 'U', n, 1, af, ldaf, ipiv, work, n, info )
+ CALL SSYTRS( 'U', N, 1, AF, LDAF, IPIV, WORK, N, INFO )
ELSE
 call ssytrs( 'L', n, 1, af, ldaf, ipiv, work, n, info )
+ CALL SSYTRS( 'L', N, 1, AF, LDAF, IPIV, WORK, N, INFO )
ENDIF
*
* Multiply by inv(C).
@@ 191,9 +231,9 @@
END IF
IF ( UP ) THEN
 call ssytrs( 'U', n, 1, af, ldaf, ipiv, work, n, info )
+ CALL SSYTRS( 'U', N, 1, AF, LDAF, IPIV, WORK, N, INFO )
ELSE
 call ssytrs( 'L', n, 1, af, ldaf, ipiv, work, n, info )
+ CALL SSYTRS( 'L', N, 1, AF, LDAF, IPIV, WORK, N, INFO )
ENDIF
*
* Multiply by R.
Modified: lapack/trunk/SRC/sla_syrfsx_extended.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/sla_syrfsx_extended.f?rev=650
==============================================================================
 lapack/trunk/SRC/sla_syrfsx_extended.f (original)
+++ lapack/trunk/SRC/sla_syrfsx_extended.f Tue Apr 7 20:05:18 2009
@@ 1,9 +1,10 @@
SUBROUTINE SLA_SYRFSX_EXTENDED( PREC_TYPE, UPLO, N, NRHS, A, LDA,
$ AF, LDAF, IPIV, COLEQU, C, B, LDB,
 $ Y, LDY, BERR_OUT, N_NORMS, ERRS_N,
 $ ERRS_C, RES, AYB, DY, Y_TAIL,
 $ RCOND, ITHRESH, RTHRESH, DZ_UB,
 $ IGNORE_CWISE, INFO )
+ $ Y, LDY, BERR_OUT, N_NORMS,
+ $ ERR_BNDS_NORM, ERR_BNDS_COMP, RES,
+ $ AYB, DY, Y_TAIL, RCOND, ITHRESH,
+ $ RTHRESH, DZ_UB, IGNORE_CWISE,
+ $ INFO )
*
*  LAPACK routine (version 3.2) 
*  Contributed by James Demmel, Deaglan Halligan, Yozo Hida and 
@@ 27,17 +28,251 @@
REAL A( LDA, * ), AF( LDAF, * ), B( LDB, * ),
$ Y( LDY, * ), RES( * ), DY( * ), Y_TAIL( * )
REAL C( * ), AYB( * ), RCOND, BERR_OUT( * ),
 $ ERRS_N( NRHS, * ), ERRS_C( NRHS, * )
+ $ ERR_BNDS_NORM( NRHS, * ),
+ $ ERR_BNDS_COMP( NRHS, * )
* ..
*
* Purpose
* =======
*
* SLA_SYRFSX_EXTENDED computes ... .
+* SLA_SYRFSX_EXTENDED improves the computed solution to a system of
+* linear equations by performing extraprecise iterative refinement
+* and provides error bounds and backward error estimates for the solution.
+* This subroutine is called by SSYRFSX to perform iterative refinement.
+* In addition to normwise error bound, the code provides maximum
+* componentwise error bound if possible. See comments for ERR_BNDS_NORM
+* and ERR_BNDS_COMP for details of the error bounds. Note that this
+* subroutine is only resonsible for setting the second fields of
+* ERR_BNDS_NORM and ERR_BNDS_COMP.
*
* Arguments
* =========
*
+* PREC_TYPE (input) INTEGER
+* Specifies the intermediate precision to be used in refinement.
+* The value is defined by ILAPREC(P) where P is a CHARACTER and
+* P = 'S': Single
+* = 'D': Double
+* = 'I': Indigenous
+* = 'X', 'E': Extra
+*
+* UPLO (input) CHARACTER*1
+* = 'U': Upper triangle of A is stored;
+* = 'L': Lower triangle of A is stored.
+*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* NRHS (input) INTEGER
+* The number of righthandsides, i.e., the number of columns of the
+* matrix B.
+*
+* A (input) REAL array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) REAL array, dimension (LDAF,N)
+* The block diagonal matrix D and the multipliers used to
+* obtain the factor U or L as computed by SSYTRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* IPIV (input) INTEGER array, dimension (N)
+* Details of the interchanges and the block structure of D
+* as determined by SSYTRF.
+*
+* COLEQU (input) LOGICAL
+* If .TRUE. then column equilibration was done to A before calling
+* this routine. This is needed to compute the solution and error
+* bounds correctly.
+*
+* C (input) REAL array, dimension (N)
+* The column scale factors for A. If COLEQU = .FALSE., C
+* is not accessed. If C is input, each element of C should be a power
+* of the radix to ensure a reliable solution and error estimates.
+* Scaling by powers of the radix does not cause rounding errors unless
+* the result underflows or overflows. Rounding errors during scaling
+* lead to refining with a matrix that is not equivalent to the
+* input matrix, producing error estimates that may not be
+* reliable.
+*
+* B (input) REAL array, dimension (LDB,NRHS)
+* The righthandside matrix B.
+*
+* LDB (input) INTEGER
+* The leading dimension of the array B. LDB >= max(1,N).
+*
+* Y (input/output) REAL array, dimension (LDY,NRHS)
+* On entry, the solution matrix X, as computed by SSYTRS.
+* On exit, the improved solution matrix Y.
+*
+* LDY (input) INTEGER
+* The leading dimension of the array Y. LDY >= max(1,N).
+*
+* BERR_OUT (output) REAL array, dimension (NRHS)
+* On exit, BERR_OUT(j) contains the componentwise relative backward
+* error for righthandside j from the formula
+* max(i) ( abs(RES(i)) / ( abs(op(A_s))*abs(Y) + abs(B_s) )(i) )
+* where abs(Z) is the componentwise absolute value of the matrix
+* or vector Z. This is computed by SLA_LIN_BERR.
+*
+* N_NORMS (input) INTEGER
+* Determines which error bounds to return (see ERR_BNDS_NORM
+* and ERR_BNDS_COMP).
+* If N_NORMS >= 1 return normwise error bounds.
+* If N_NORMS >= 2 return componentwise error bounds.
+*
+* ERR_BNDS_NORM (input/output) REAL array, dimension (NRHS, N_ERR_BNDS)
+* For each righthand side, this array contains information about
+* various error bounds and condition numbers corresponding to the
+* normwise relative error, which is defined as follows:
+*
+* Normwise relative error in the ith solution vector:
+* max_j (abs(XTRUE(j,i)  X(j,i)))
+* 
+* max_j abs(X(j,i))
+*
+* The array is indexed by the type of error information as described
+* below. There currently are up to three pieces of information
+* returned.
+*
+* The first index in ERR_BNDS_NORM(i,:) corresponds to the ith
+* righthand side.
+*
+* The second index in ERR_BNDS_NORM(:,err) contains the following
+* three fields:
+* err = 1 "Trust/don't trust" boolean. Trust the answer if the
+* reciprocal condition number is less than the threshold
+* sqrt(n) * slamch('Epsilon').
+*
+* err = 2 "Guaranteed" error bound: The estimated forward error,
+* almost certainly within a factor of 10 of the true error
+* so long as the next entry is greater than the threshold
+* sqrt(n) * slamch('Epsilon'). This error bound should only
+* be trusted if the previous boolean is true.
+*
+* err = 3 Reciprocal condition number: Estimated normwise
+* reciprocal condition number. Compared with the threshold
+* sqrt(n) * slamch('Epsilon') to determine if the error
+* estimate is "guaranteed". These reciprocal condition
+* numbers are 1 / (norm(Z^{1},inf) * norm(Z,inf)) for some
+* appropriately scaled matrix Z.
+* Let Z = S*A, where S scales each row by a power of the
+* radix so all absolute row sums of Z are approximately 1.
+*
+* This subroutine is only responsible for setting the second field
+* above.
+* See Lapack Working Note 165 for further details and extra
+* cautions.
+*
+* ERR_BNDS_COMP (input/output) REAL array, dimension (NRHS, N_ERR_BNDS)
+* For each righthand side, this array contains information about
+* various error bounds and condition numbers corresponding to the
+* componentwise relative error, which is defined as follows:
+*
+* Componentwise relative error in the ith solution vector:
+* abs(XTRUE(j,i)  X(j,i))
+* max_j 
+* abs(X(j,i))
+*
+* The array is indexed by the righthand side i (on which the
+* componentwise relative error depends), and the type of error
+* information as described below. There currently are up to three
+* pieces of information returned for each righthand side. If
+* componentwise accuracy is not requested (PARAMS(3) = 0.0), then
+* ERR_BNDS_COMP is not accessed. If N_ERR_BNDS .LT. 3, then at most
+* the first (:,N_ERR_BNDS) entries are returned.
+*
+* The first index in ERR_BNDS_COMP(i,:) corresponds to the ith
+* righthand side.
+*
+* The second index in ERR_BNDS_COMP(:,err) contains the following
+* three fields:
+* err = 1 "Trust/don't trust" boolean. Trust the answer if the
+* reciprocal condition number is less than the threshold
+* sqrt(n) * slamch('Epsilon').
+*
+* err = 2 "Guaranteed" error bound: The estimated forward error,
+* almost certainly within a factor of 10 of the true error
+* so long as the next entry is greater than the threshold
+* sqrt(n) * slamch('Epsilon'). This error bound should only
+* be trusted if the previous boolean is true.
+*
+* err = 3 Reciprocal condition number: Estimated componentwise
+* reciprocal condition number. Compared with the threshold
+* sqrt(n) * slamch('Epsilon') to determine if the error
+* estimate is "guaranteed". These reciprocal condition
+* numbers are 1 / (norm(Z^{1},inf) * norm(Z,inf)) for some
+* appropriately scaled matrix Z.
+* Let Z = S*(A*diag(x)), where x is the solution for the
+* current righthand side and S scales each row of
+* A*diag(x) by a power of the radix so all absolute row
+* sums of Z are approximately 1.
+*
+* This subroutine is only responsible for setting the second field
+* above.
+* See Lapack Working Note 165 for further details and extra
+* cautions.
+*
+* RES (input) REAL array, dimension (N)
+* Workspace to hold the intermediate residual.
+*
+* AYB (input) REAL array, dimension (N)
+* Workspace. This can be the same workspace passed for Y_TAIL.
+*
+* DY (input) REAL array, dimension (N)
+* Workspace to hold the intermediate solution.
+*
+* Y_TAIL (input) REAL array, dimension (N)
+* Workspace to hold the trailing bits of the intermediate solution.
+*
+* RCOND (input) REAL
+* Reciprocal scaled condition number. This is an estimate of the
+* reciprocal Skeel condition number of the matrix A after
+* equilibration (if done). If this is less than the machine
+* precision (in particular, if it is zero), the matrix is singular
+* to working precision. Note that the error may still be small even
+* if this number is very small and the matrix appears ill
+* conditioned.
+*
+* ITHRESH (input) INTEGER
+* The maximum number of residual computations allowed for
+* refinement. The default is 10. For 'aggressive' set to 100 to
+* permit convergence using approximate factorizations or
+* factorizations other than LU. If the factorization uses a
+* technique other than Gaussian elimination, the guarantees in
+* ERR_BNDS_NORM and ERR_BNDS_COMP may no longer be trustworthy.
+*
+* RTHRESH (input) REAL
+* Determines when to stop refinement if the error estimate stops
+* decreasing. Refinement will stop when the next solution no longer
+* satisfies norm(dx_{i+1}) < RTHRESH * norm(dx_i) where norm(Z) is
+* the infinity norm of Z. RTHRESH satisfies 0 < RTHRESH <= 1. The
+* default value is 0.5. For 'aggressive' set to 0.9 to permit
+* convergence on extremely illconditioned matrices. See LAWN 165
+* for more details.
+*
+* DZ_UB (input) REAL
+* Determines when to start considering componentwise convergence.
+* Componentwise convergence is only considered after each component
+* of the solution Y is stable, which we definte as the relative
+* change in each component being less than DZ_UB. The default value
+* is 0.25, requiring the first bit to be stable. See LAWN 165 for
+* more details.
+*
+* IGNORE_CWISE (input) LOGICAL
+* If .TRUE. then ignore componentwise convergence. Default value
+* is .FALSE..
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* < 0: if INFO = i, the ith argument to SSYTRS had an illegal
+* value
+*
* =====================================================================
*
* .. Local Scalars ..
@@ 271,10 +506,12 @@
* Compute error bounds.
*
IF ( N_NORMS .GE. 1 ) THEN
 ERRS_N( J, LA_LINRX_ERR_I ) = FINAL_DX_X / (1  DXRATMAX)
+ ERR_BNDS_NORM( J, LA_LINRX_ERR_I ) =
+ $ FINAL_DX_X / (1  DXRATMAX)
END IF
IF ( N_NORMS .GE. 2 ) THEN
 ERRS_C( J, LA_LINRX_ERR_I ) = FINAL_DZ_Z / (1  DZRATMAX)
+ ERR_BNDS_COMP( J, LA_LINRX_ERR_I ) =
+ $ FINAL_DZ_Z / (1  DZRATMAX)
END IF
*
* Compute componentwise relative backward error from formula
Modified: lapack/trunk/SRC/sla_syrpvgrw.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/sla_syrpvgrw.f?rev=650
==============================================================================
 lapack/trunk/SRC/sla_syrpvgrw.f (original)
+++ lapack/trunk/SRC/sla_syrpvgrw.f Tue Apr 7 20:05:18 2009
@@ 23,11 +23,50 @@
* Purpose
* =======
*
* SLA_SYRPVGRW computes ... .
+* SLA_SYRPVGRW computes the reciprocal pivot growth factor
+* norm(A)/norm(U). The "max absolute element" norm is used. If this is
+* much less than 1, the stability of the LU factorization of the
+* (equilibrated) matrix A could be poor. This also means that the
+* solution X, estimated condition numbers, and error bounds could be
+* unreliable.
*
* Arguments
* =========
*
+* UPLO (input) CHARACTER*1
+* = 'U': Upper triangle of A is stored;
+* = 'L': Lower triangle of A is stored.
+*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* INFO (input) INTEGER
+* The value of INFO returned from SSYTRF, .i.e., the pivot in
+* column INFO is exactly 0.
+*
+* NCOLS (input) INTEGER
+* The number of columns of the matrix A. NCOLS >= 0.
+*
+* A (input) REAL array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) REAL array, dimension (LDAF,N)
+* The block diagonal matrix D and the multipliers used to
+* obtain the factor U or L as computed by SSYTRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* IPIV (input) INTEGER array, dimension (N)
+* Details of the interchanges and the block structure of D
+* as determined by SSYTRF.
+*
+* WORK (input) REAL array, dimension (2*N)
+*
* =====================================================================
*
* .. Local Scalars ..
Modified: lapack/trunk/SRC/slarscl2.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/slarscl2.f?rev=650
==============================================================================
 lapack/trunk/SRC/slarscl2.f (original)
+++ lapack/trunk/SRC/slarscl2.f Tue Apr 7 20:05:18 2009
@@ 30,16 +30,24 @@
* Arguments
* =========
*
* N (input) INTEGER
* The size of the vectors X and D.
+* M (input) INTEGER
+* The number of rows of D and X. M >= 0.
*
* D (input) REAL array, length N
* Diagonal matrix D, stored as a vector of length N.
+* N (input) INTEGER
+* The number of columns of D and X. N >= 0.
+*
+* D (input) REAL array, length M
+* Diagonal matrix D, stored as a vector of length M.
+*
+* X (input/output) REAL array, dimension (LDX,N)
+* On entry, the vector X to be scaled by D.
+* On exit, the scaled vector.
+*
+* LDX (input) INTEGER
+* The leading dimension of the vector X. LDX >= 0.
+*
+* =====================================================================
*
* X (input/output) REAL array, length N
* On entry, the vector X to be scaled by D.
* On exit, the scaled vector.
* ..
* .. Local Scalars ..
INTEGER I, J
* ..
@@ 47,9 +55,9 @@
*
DO J = 1, N
DO I = 1, M
 X(I,J) = X(I,J) / D(I)
+ X( I, J ) = X( I, J ) / D( I )
END DO
END DO
*
+
RETURN
END
Modified: lapack/trunk/SRC/slascl2.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/slascl2.f?rev=650
==============================================================================
 lapack/trunk/SRC/slascl2.f (original)
+++ lapack/trunk/SRC/slascl2.f Tue Apr 7 20:05:18 2009
@@ 30,16 +30,24 @@
* Arguments
* =========
*
* N (input) INTEGER
* The size of the vectors X and D.
+* M (input) INTEGER
+* The number of rows of D and X. M >= 0.
*
* D (input) REAL array, length N
* Diagonal matrix D, stored as a vector of length N.
+* N (input) INTEGER
+* The number of columns of D and X. N >= 0.
+*
+* D (input) REAL array, length M
+* Diagonal matrix D, stored as a vector of length M.
+*
+* X (input/output) REAL array, dimension (LDX,N)
+* On entry, the vector X to be scaled by D.
+* On exit, the scaled vector.
+*
+* LDX (input) INTEGER
+* The leading dimension of the vector X. LDX >= 0.
+*
+* =====================================================================
*
* X (input/output) REAL array, length N
* On entry, the vector X to be scaled by D.
* On exit, the scaled vector.
* ..
* .. Local Scalars ..
INTEGER I, J
* ..
@@ 47,9 +55,9 @@
*
DO J = 1, N
DO I = 1, M
 X(I,J) = X(I,J) * D(I)
+ X( I, J ) = X( I, J ) * D( I )
END DO
END DO
*
+
RETURN
END
Modified: lapack/trunk/SRC/sporfsx.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/sporfsx.f?rev=650
==============================================================================
 lapack/trunk/SRC/sporfsx.f (original)
+++ lapack/trunk/SRC/sporfsx.f Tue Apr 7 20:05:18 2009
@@ 36,7 +36,8 @@
* definite, and provides error bounds and backward error estimates
* for the solution. In addition to normwise error bound, the code
* provides maximum componentwise error bound if possible. See
* comments for ERR_BNDS for details of the error bounds.
+* comments for ERR_BNDS_NORM and ERR_BNDS_COMP for details of the
+* error bounds.
*
* The original system of linear equations may have been equilibrated
* before calling this routine, as described by arguments EQUED and S
Modified: lapack/trunk/SRC/ssyrfsx.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/ssyrfsx.f?rev=650
==============================================================================
 lapack/trunk/SRC/ssyrfsx.f (original)
+++ lapack/trunk/SRC/ssyrfsx.f Tue Apr 7 20:05:18 2009
@@ 36,7 +36,7 @@
* provides error bounds and backward error estimates for the
* solution. In addition to normwise error bound, the code provides
* maximum componentwise error bound if possible. See comments for
* ERR_BNDS_N and ERR_BNDS_C for details of the error bounds.
+* ERR_BNDS_NORM and ERR_BNDS_COMP for details of the error bounds.
*
* The original system of linear equations may have been equilibrated
* before calling this routine, as described by arguments EQUED and S
Modified: lapack/trunk/SRC/ssysvxx.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/ssysvxx.f?rev=650
==============================================================================
 lapack/trunk/SRC/ssysvxx.f (original)
+++ lapack/trunk/SRC/ssysvxx.f Tue Apr 7 20:05:18 2009
@@ 114,6 +114,10 @@
* = 'E': The matrix A will be equilibrated if necessary, then
* copied to AF and factored.
*
+* UPLO (input) CHARACTER*1
+* = 'U': Upper triangle of A is stored;
+* = 'L': Lower triangle of A is stored.
+*
* N (input) INTEGER
* The number of linear equations, i.e., the order of the
* matrix A. N >= 0.
Modified: lapack/trunk/SRC/zgbrfsx.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/zgbrfsx.f?rev=650
==============================================================================
 lapack/trunk/SRC/zgbrfsx.f (original)
+++ lapack/trunk/SRC/zgbrfsx.f Tue Apr 7 20:05:18 2009
@@ 36,8 +36,8 @@
* equations and provides error bounds and backward error estimates
* for the solution. In addition to normwise error bound, the code
* provides maximum componentwise error bound if possible. See
* comments for ERR_BNDS_N and ERR_BNDS_C for details of the error
* bounds.
+* comments for ERR_BNDS_NORM and ERR_BNDS_COMP for details of the
+* error bounds.
*
* The original system of linear equations may have been equilibrated
* before calling this routine, as described by arguments EQUED, R
Modified: lapack/trunk/SRC/zgerfsx.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/zgerfsx.f?rev=650
==============================================================================
 lapack/trunk/SRC/zgerfsx.f (original)
+++ lapack/trunk/SRC/zgerfsx.f Tue Apr 7 20:05:18 2009
@@ 35,8 +35,8 @@
* equations and provides error bounds and backward error estimates
* for the solution. In addition to normwise error bound, the code
* provides maximum componentwise error bound if possible. See
* comments for ERR_BNDS_N and ERR_BNDS_C for details of the error
* bounds.
+* comments for ERR_BNDS_NORM and ERR_BNDS_COMP for details of the
+* error bounds.
*
* The original system of linear equations may have been equilibrated
* before calling this routine, as described by arguments EQUED, R
Modified: lapack/trunk/SRC/zherfsx.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/zherfsx.f?rev=650
==============================================================================
 lapack/trunk/SRC/zherfsx.f (original)
+++ lapack/trunk/SRC/zherfsx.f Tue Apr 7 20:05:18 2009
@@ 1,4 +1,4 @@
 Subroutine ZHERFSX( UPLO, EQUED, N, NRHS, A, LDA, AF, LDAF, IPIV,
+ SUBROUTINE ZHERFSX( UPLO, EQUED, N, NRHS, A, LDA, AF, LDAF, IPIV,
$ S, B, LDB, X, LDX, RCOND, BERR, N_ERR_BNDS,
$ ERR_BNDS_NORM, ERR_BNDS_COMP, NPARAMS, PARAMS,
$ WORK, RWORK, INFO )
@@ 35,7 +35,7 @@
* provides error bounds and backward error estimates for the
* solution. In addition to normwise error bound, the code provides
* maximum componentwise error bound if possible. See comments for
* ERR_BNDS_N and ERR_BNDS_C for details of the error bounds.
+* ERR_BNDS_NORM and ERR_BNDS_COMP for details of the error bounds.
*
* The original system of linear equations may have been equilibrated
* before calling this routine, as described by arguments EQUED and S
Modified: lapack/trunk/SRC/zhesvxx.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/zhesvxx.f?rev=650
==============================================================================
 lapack/trunk/SRC/zhesvxx.f (original)
+++ lapack/trunk/SRC/zhesvxx.f Tue Apr 7 20:05:18 2009
@@ 155,7 +155,7 @@
* IPIV (input or output) INTEGER array, dimension (N)
* If FACT = 'F', then IPIV is an input argument and on entry
* contains details of the interchanges and the block
* structure of D, as determined by DSYTRF. If IPIV(k) > 0,
+* structure of D, as determined by ZHETRF. If IPIV(k) > 0,
* then rows and columns k and IPIV(k) were interchanged and
* D(k,k) is a 1by1 diagonal block. If UPLO = 'U' and
* IPIV(k) = IPIV(k1) < 0, then rows and columns k1 and
@@ 166,7 +166,7 @@
*
* If FACT = 'N', then IPIV is an output argument and on exit
* contains details of the interchanges and the block
* structure of D, as determined by DSYTRF.
+* structure of D, as determined by ZHETRF.
*
* EQUED (input or output) CHARACTER*1
* Specifies the form of equilibration that was done.
Modified: lapack/trunk/SRC/zla_gbrcond_c.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/zla_gbrcond_c.f?rev=650
==============================================================================
 lapack/trunk/SRC/zla_gbrcond_c.f (original)
+++ lapack/trunk/SRC/zla_gbrcond_c.f Tue Apr 7 20:05:18 2009
@@ 1,6 +1,7 @@
 DOUBLE PRECISION FUNCTION ZLA_GBRCOND_C( TRANS, N, KL, KU, AB,
 $ LDAB, AFB, LDAFB, IPIV, C, CAPPLY,
 $ INFO, WORK, RWORK )
+ DOUBLE PRECISION FUNCTION ZLA_GBRCOND_C( TRANS, N, KL, KU, AB,
+ $ LDAB, AFB, LDAFB, IPIV,
+ $ C, CAPPLY, INFO, WORK,
+ $ RWORK )
*
*  LAPACK routine (version 3.2.1) 
*  Contributed by James Demmel, Deaglan Halligan, Yozo Hida and 
@@ 32,11 +33,61 @@
* Arguments
* =========
*
* C DOUBLE PRECISION vector.
+* TRANS (input) CHARACTER*1
+* Specifies the form of the system of equations:
+* = 'N': A * X = B (No transpose)
+* = 'T': A**T * X = B (Transpose)
+* = 'C': A**H * X = B (Conjugate Transpose = Transpose)
+*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* KL (input) INTEGER
+* The number of subdiagonals within the band of A. KL >= 0.
+*
+* KU (input) INTEGER
+* The number of superdiagonals within the band of A. KU >= 0.
+*
+* AB (input) COMPLEX*16 array, dimension (LDAB,N)
+* On entry, the matrix A in band storage, in rows 1 to KL+KU+1.
+* The jth column of A is stored in the jth column of the
+* array AB as follows:
+* AB(KU+1+ij,j) = A(i,j) for max(1,jKU)<=i<=min(N,j+kl)
+*
+* LDAB (input) INTEGER
+* The leading dimension of the array AB. LDAB >= KL+KU+1.
+*
+* AFB (input) COMPLEX*16 array, dimension (LDAFB,N)
+* Details of the LU factorization of the band matrix A, as
+* computed by ZGBTRF. U is stored as an upper triangular
+* band matrix with KL+KU superdiagonals in rows 1 to KL+KU+1,
+* and the multipliers used during the factorization are stored
+* in rows KL+KU+2 to 2*KL+KU+1.
+*
+* LDAFB (input) INTEGER
+* The leading dimension of the array AFB. LDAFB >= 2*KL+KU+1.
+*
+* IPIV (input) INTEGER array, dimension (N)
+* The pivot indices from the factorization A = P*L*U
+* as computed by ZGBTRF; row i of the matrix was interchanged
+* with row IPIV(i).
+*
+* C (input) DOUBLE PRECISION array, dimension (N)
+* The vector C in the formula op(A) * inv(diag(C)).
+*
+* CAPPLY (input) LOGICAL
+* If .TRUE. then access the vector C in the formula above.
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* i > 0: The ith argument is invalid.
*
* WORK COMPLEX*16 workspace of size 2*N.
+* WORK (input) COMPLEX*16 array, dimension (2*N).
+* Workspace.
*
* RWORK DOUBLE PRECISION workspace of size N.
+* RWORK (input) DOUBLE PRECISION array, dimension (N).
+* Workspace.
*
* =====================================================================
*
@@ 72,16 +123,17 @@
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( KL.LT.0 .OR. KL.GT.N1 ) THEN
 INFO = 4
+ INFO = 3
ELSE IF( KU.LT.0 .OR. KU.GT.N1 ) THEN
 INFO = 5
+ INFO = 4
ELSE IF( LDAB.LT.KL+KU+1 ) THEN
 INFO = 8
+ INFO = 6
ELSE IF( LDAFB.LT.2*KL+KU+1 ) THEN
 INFO = 10
+ INFO = 8
END IF
IF( INFO.NE.0 ) THEN
CALL XERBLA( 'ZLA_GBRCOND_C', INFO )
Modified: lapack/trunk/SRC/zla_gbrcond_x.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/zla_gbrcond_x.f?rev=650
==============================================================================
 lapack/trunk/SRC/zla_gbrcond_x.f (original)
+++ lapack/trunk/SRC/zla_gbrcond_x.f Tue Apr 7 20:05:18 2009
@@ 1,6 +1,6 @@
DOUBLE PRECISION FUNCTION ZLA_GBRCOND_X( TRANS, N, KL, KU, AB,
 $ LDAB, AFB, LDAFB, IPIV, X, INFO,
 $ WORK, RWORK )
+ $ LDAB, AFB, LDAFB, IPIV,
+ $ X, INFO, WORK, RWORK )
*
*  LAPACK routine (version 3.2.1) 
*  Contributed by James Demmel, Deaglan Halligan, Yozo Hida and 
@@ 32,11 +32,58 @@
* Arguments
* =========
*
* X COMPLEX*16 vector.
+* TRANS (input) CHARACTER*1
+* Specifies the form of the system of equations:
+* = 'N': A * X = B (No transpose)
+* = 'T': A**T * X = B (Transpose)
+* = 'C': A**H * X = B (Conjugate Transpose = Transpose)
+*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* KL (input) INTEGER
+* The number of subdiagonals within the band of A. KL >= 0.
+*
+* KU (input) INTEGER
+* The number of superdiagonals within the band of A. KU >= 0.
+*
+* AB (input) COMPLEX*16 array, dimension (LDAB,N)
+* On entry, the matrix A in band storage, in rows 1 to KL+KU+1.
+* The jth column of A is stored in the jth column of the
+* array AB as follows:
+* AB(KU+1+ij,j) = A(i,j) for max(1,jKU)<=i<=min(N,j+kl)
+*
+* LDAB (input) INTEGER
+* The leading dimension of the array AB. LDAB >= KL+KU+1.
+*
+* AFB (input) COMPLEX*16 array, dimension (LDAFB,N)
+* Details of the LU factorization of the band matrix A, as
+* computed by ZGBTRF. U is stored as an upper triangular
+* band matrix with KL+KU superdiagonals in rows 1 to KL+KU+1,
+* and the multipliers used during the factorization are stored
+* in rows KL+KU+2 to 2*KL+KU+1.
+*
+* LDAFB (input) INTEGER
+* The leading dimension of the array AFB. LDAFB >= 2*KL+KU+1.
+*
+* IPIV (input) INTEGER array, dimension (N)
+* The pivot indices from the factorization A = P*L*U
+* as computed by ZGBTRF; row i of the matrix was interchanged
+* with row IPIV(i).
+*
+* X (input) COMPLEX*16 array, dimension (N)
+* The vector X in the formula op(A) * diag(X).
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* i > 0: The ith argument is invalid.
*
* WORK COMPLEX*16 workspace of size 2*N.
+* WORK (input) COMPLEX*16 array, dimension (2*N).
+* Workspace.
*
* RWORK DOUBLE PRECISION workspace of size N.
+* RWORK (input) DOUBLE PRECISION array, dimension (N).
+* Workspace.
*
* =====================================================================
*
@@ 77,13 +124,13 @@
ELSE IF( N.LT.0 ) THEN
INFO = 2
ELSE IF( KL.LT.0 .OR. KL.GT.N1 ) THEN
 INFO = 4
+ INFO = 3
ELSE IF( KU.LT.0 .OR. KU.GT.N1 ) THEN
 INFO = 5
+ INFO = 4
ELSE IF( LDAB.LT.KL+KU+1 ) THEN
 INFO = 8
+ INFO = 6
ELSE IF( LDAFB.LT.2*KL+KU+1 ) THEN
 INFO = 10
+ INFO = 8
END IF
IF( INFO.NE.0 ) THEN
CALL XERBLA( 'ZLA_GBRCOND_X', INFO )
Modified: lapack/trunk/SRC/zla_gbrfsx_extended.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/zla_gbrfsx_extended.f?rev=650
==============================================================================
 lapack/trunk/SRC/zla_gbrfsx_extended.f (original)
+++ lapack/trunk/SRC/zla_gbrfsx_extended.f Tue Apr 7 20:05:18 2009
@@ 1,10 +1,10 @@
SUBROUTINE ZLA_GBRFSX_EXTENDED( PREC_TYPE, TRANS_TYPE, N, KL, KU,
$ NRHS, AB, LDAB, AFB, LDAFB, IPIV,
$ COLEQU, C, B, LDB, Y, LDY,
 $ BERR_OUT, N_NORMS, ERRS_N, ERRS_C,
 $ RES, AYB, DY, Y_TAIL, RCOND,
 $ ITHRESH, RTHRESH, DZ_UB,
 $ IGNORE_CWISE, INFO )
+ $ BERR_OUT, N_NORMS, ERR_BNDS_NORM,
+ $ ERR_BNDS_COMP, RES, AYB, DY,
+ $ Y_TAIL, RCOND, ITHRESH, RTHRESH,
+ $ DZ_UB, IGNORE_CWISE, INFO )
*
*  LAPACK routine (version 3.2) 
*  Contributed by James Demmel, Deaglan Halligan, Yozo Hida and 
@@ 27,17 +27,263 @@
COMPLEX*16 AB( LDAB, * ), AFB( LDAFB, * ), B( LDB, * ),
$ Y( LDY, * ), RES( * ), DY( * ), Y_TAIL( * )
DOUBLE PRECISION C( * ), AYB(*), RCOND, BERR_OUT( * ),
 $ ERRS_N( NRHS, * ), ERRS_C( NRHS, * )
+ $ ERR_BNDS_NORM( NRHS, * ),
+ $ ERR_BNDS_COMP( NRHS, * )
* ..
*
* Purpose
* =======
*
* ZLA_GBRFSX_EXTENDED computes ... .
+*
+* ZLA_GBRFSX_EXTENDED improves the computed solution to a system of
+* linear equations by performing extraprecise iterative refinement
+* and provides error bounds and backward error estimates for the solution.
+* This subroutine is called by ZGBRFSX to perform iterative refinement.
+* In addition to normwise error bound, the code provides maximum
+* componentwise error bound if possible. See comments for ERR_BNDS_NORM
+* and ERR_BNDS_COMP for details of the error bounds. Note that this
+* subroutine is only resonsible for setting the second fields of
+* ERR_BNDS_NORM and ERR_BNDS_COMP.
*
* Arguments
* =========
*
+* PREC_TYPE (input) INTEGER
+* Specifies the intermediate precision to be used in refinement.
+* The value is defined by ILAPREC(P) where P is a CHARACTER and
+* P = 'S': Single
+* = 'D': Double
+* = 'I': Indigenous
+* = 'X', 'E': Extra
+*
+* TRANS_TYPE (input) INTEGER
+* Specifies the transposition operation on A.
+* The value is defined by ILATRANS(T) where T is a CHARACTER and
+* T = 'N': No transpose
+* = 'T': Transpose
+* = 'C': Conjugate transpose
+*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* KL (input) INTEGER
+* The number of subdiagonals within the band of A. KL >= 0.
+*
+* KU (input) INTEGER
+* The number of superdiagonals within the band of A. KU >= 0
+*
+* NRHS (input) INTEGER
+* The number of righthandsides, i.e., the number of columns of the
+* matrix B.
+*
+* AB (input) COMPLEX*16 array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDAB (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AFB (input) COMPLEX*16 array, dimension (LDAF,N)
+* The factors L and U from the factorization
+* A = P*L*U as computed by ZGBTRF.
+*
+* LDAFB (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* IPIV (input) INTEGER array, dimension (N)
+* The pivot indices from the factorization A = P*L*U
+* as computed by ZGBTRF; row i of the matrix was interchanged
+* with row IPIV(i).
+*
+* COLEQU (input) LOGICAL
+* If .TRUE. then column equilibration was done to A before calling
+* this routine. This is needed to compute the solution and error
+* bounds correctly.
+*
+* C (input) DOUBLE PRECISION array, dimension (N)
+* The column scale factors for A. If COLEQU = .FALSE., C
+* is not accessed. If C is input, each element of C should be a power
+* of the radix to ensure a reliable solution and error estimates.
+* Scaling by powers of the radix does not cause rounding errors unless
+* the result underflows or overflows. Rounding errors during scaling
+* lead to refining with a matrix that is not equivalent to the
+* input matrix, producing error estimates that may not be
+* reliable.
+*
+* B (input) COMPLEX*16 array, dimension (LDB,NRHS)
+* The righthandside matrix B.
+*
+* LDB (input) INTEGER
+* The leading dimension of the array B. LDB >= max(1,N).
+*
+* Y (input/output) COMPLEX*16 array, dimension (LDY,NRHS)
+* On entry, the solution matrix X, as computed by ZGBTRS.
+* On exit, the improved solution matrix Y.
+*
+* LDY (input) INTEGER
+* The leading dimension of the array Y. LDY >= max(1,N).
+*
+* BERR_OUT (output) DOUBLE PRECISION array, dimension (NRHS)
+* On exit, BERR_OUT(j) contains the componentwise relative backward
+* error for righthandside j from the formula
+* max(i) ( abs(RES(i)) / ( abs(op(A_s))*abs(Y) + abs(B_s) )(i) )
+* where abs(Z) is the componentwise absolute value of the matrix
+* or vector Z. This is computed by ZLA_LIN_BERR.
+*
+* N_NORMS (input) INTEGER
+* Determines which error bounds to return (see ERR_BNDS_NORM
+* and ERR_BNDS_COMP).
+* If N_NORMS >= 1 return normwise error bounds.
+* If N_NORMS >= 2 return componentwise error bounds.
+*
+* ERR_BNDS_NORM (input/output) DOUBLE PRECISION array, dimension
+* (NRHS, N_ERR_BNDS)
+* For each righthand side, this array contains information about
+* various error bounds and condition numbers corresponding to the
+* normwise relative error, which is defined as follows:
+*
+* Normwise relative error in the ith solution vector:
+* max_j (abs(XTRUE(j,i)  X(j,i)))
+* 
+* max_j abs(X(j,i))
+*
+* The array is indexed by the type of error information as described
+* below. There currently are up to three pieces of information
+* returned.
+*
+* The first index in ERR_BNDS_NORM(i,:) corresponds to the ith
+* righthand side.
+*
+* The second index in ERR_BNDS_NORM(:,err) contains the following
+* three fields:
+* err = 1 "Trust/don't trust" boolean. Trust the answer if the
+* reciprocal condition number is less than the threshold
+* sqrt(n) * slamch('Epsilon').
+*
+* err = 2 "Guaranteed" error bound: The estimated forward error,
+* almost certainly within a factor of 10 of the true error
+* so long as the next entry is greater than the threshold
+* sqrt(n) * slamch('Epsilon'). This error bound should only
+* be trusted if the previous boolean is true.
+*
+* err = 3 Reciprocal condition number: Estimated normwise
+* reciprocal condition number. Compared with the threshold
+* sqrt(n) * slamch('Epsilon') to determine if the error
+* estimate is "guaranteed". These reciprocal condition
+* numbers are 1 / (norm(Z^{1},inf) * norm(Z,inf)) for some
+* appropriately scaled matrix Z.
+* Let Z = S*A, where S scales each row by a power of the
+* radix so all absolute row sums of Z are approximately 1.
+*
+* This subroutine is only responsible for setting the second field
+* above.
+* See Lapack Working Note 165 for further details and extra
+* cautions.
+*
+* ERR_BNDS_COMP (input/output) DOUBLE PRECISION array, dimension
+* (NRHS, N_ERR_BNDS)
+* For each righthand side, this array contains information about
+* various error bounds and condition numbers corresponding to the
+* componentwise relative error, which is defined as follows:
+*
+* Componentwise relative error in the ith solution vector:
+* abs(XTRUE(j,i)  X(j,i))
+* max_j 
+* abs(X(j,i))
+*
+* The array is indexed by the righthand side i (on which the
+* componentwise relative error depends), and the type of error
+* information as described below. There currently are up to three
+* pieces of information returned for each righthand side. If
+* componentwise accuracy is not requested (PARAMS(3) = 0.0), then
+* ERR_BNDS_COMP is not accessed. If N_ERR_BNDS .LT. 3, then at most
+* the first (:,N_ERR_BNDS) entries are returned.
+*
+* The first index in ERR_BNDS_COMP(i,:) corresponds to the ith
+* righthand side.
+*
+* The second index in ERR_BNDS_COMP(:,err) contains the following
+* three fields:
+* err = 1 "Trust/don't trust" boolean. Trust the answer if the
+* reciprocal condition number is less than the threshold
+* sqrt(n) * slamch('Epsilon').
+*
+* err = 2 "Guaranteed" error bound: The estimated forward error,
+* almost certainly within a factor of 10 of the true error
+* so long as the next entry is greater than the threshold
+* sqrt(n) * slamch('Epsilon'). This error bound should only
+* be trusted if the previous boolean is true.
+*
+* err = 3 Reciprocal condition number: Estimated componentwise
+* reciprocal condition number. Compared with the threshold
+* sqrt(n) * slamch('Epsilon') to determine if the error
+* estimate is "guaranteed". These reciprocal condition
+* numbers are 1 / (norm(Z^{1},inf) * norm(Z,inf)) for some
+* appropriately scaled matrix Z.
+* Let Z = S*(A*diag(x)), where x is the solution for the
+* current righthand side and S scales each row of
+* A*diag(x) by a power of the radix so all absolute row
+* sums of Z are approximately 1.
+*
+* This subroutine is only responsible for setting the second field
+* above.
+* See Lapack Working Note 165 for further details and extra
+* cautions.
+*
+* RES (input) COMPLEX*16 array, dimension (N)
+* Workspace to hold the intermediate residual.
+*
+* AYB (input) DOUBLE PRECISION array, dimension (N)
+* Workspace.
+*
+* DY (input) COMPLEX*16 array, dimension (N)
+* Workspace to hold the intermediate solution.
+*
+* Y_TAIL (input) COMPLEX*16 array, dimension (N)
+* Workspace to hold the trailing bits of the intermediate solution.
+*
+* RCOND (input) DOUBLE PRECISION
+* Reciprocal scaled condition number. This is an estimate of the
+* reciprocal Skeel condition number of the matrix A after
+* equilibration (if done). If this is less than the machine
+* precision (in particular, if it is zero), the matrix is singular
+* to working precision. Note that the error may still be small even
+* if this number is very small and the matrix appears ill
+* conditioned.
+*
+* ITHRESH (input) INTEGER
+* The maximum number of residual computations allowed for
+* refinement. The default is 10. For 'aggressive' set to 100 to
+* permit convergence using approximate factorizations or
+* factorizations other than LU. If the factorization uses a
+* technique other than Gaussian elimination, the guarantees in
+* ERR_BNDS_NORM and ERR_BNDS_COMP may no longer be trustworthy.
+*
+* RTHRESH (input) DOUBLE PRECISION
+* Determines when to stop refinement if the error estimate stops
+* decreasing. Refinement will stop when the next solution no longer
+* satisfies norm(dx_{i+1}) < RTHRESH * norm(dx_i) where norm(Z) is
+* the infinity norm of Z. RTHRESH satisfies 0 < RTHRESH <= 1. The
+* default value is 0.5. For 'aggressive' set to 0.9 to permit
+* convergence on extremely illconditioned matrices. See LAWN 165
+* for more details.
+*
+* DZ_UB (input) DOUBLE PRECISION
+* Determines when to start considering componentwise convergence.
+* Componentwise convergence is only considered after each component
+* of the solution Y is stable, which we definte as the relative
+* change in each component being less than DZ_UB. The default value
+* is 0.25, requiring the first bit to be stable. See LAWN 165 for
+* more details.
+*
+* IGNORE_CWISE (input) LOGICAL
+* If .TRUE. then ignore componentwise convergence. Default value
+* is .FALSE..
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* < 0: if INFO = i, the ith argument to ZGBTRS had an illegal
+* value
+*
* =====================================================================
*
* .. Local Scalars ..
@@ 282,10 +528,12 @@
* Compute error bounds.
*
IF ( N_NORMS .GE. 1 ) THEN
 ERRS_N( J, LA_LINRX_ERR_I ) = FINAL_DX_X / (1  DXRATMAX)
+ ERR_BNDS_NORM( J, LA_LINRX_ERR_I ) =
+ $ FINAL_DX_X / (1  DXRATMAX)
END IF
IF ( N_NORMS .GE. 2 ) THEN
 ERRS_C( J, LA_LINRX_ERR_I ) = FINAL_DZ_Z / (1  DZRATMAX)
+ ERR_BNDS_COMP( J, LA_LINRX_ERR_I ) =
+ $ FINAL_DZ_Z / (1  DZRATMAX)
END IF
*
* Compute componentwise relative backward error from formula
Modified: lapack/trunk/SRC/zla_gbrpvgrw.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/zla_gbrpvgrw.f?rev=650
==============================================================================
 lapack/trunk/SRC/zla_gbrpvgrw.f (original)
+++ lapack/trunk/SRC/zla_gbrpvgrw.f Tue Apr 7 20:05:18 2009
@@ 1,5 +1,5 @@
 DOUBLE PRECISION FUNCTION ZLA_GBRPVGRW( N, KL, KU, NCOLS, AB,
 $ LDAB, AFB, LDAFB )
+ DOUBLE PRECISION FUNCTION ZLA_GBRPVGRW( N, KL, KU, NCOLS, AB,
+ $ LDAB, AFB, LDAFB )
*
*  LAPACK routine (version 3.2) 
*  Contributed by James Demmel, Deaglan Halligan, Yozo Hida and 
@@ 20,12 +20,49 @@
*
* Purpose
* =======
*
* ZLA_GBRPVGRW computes ... .
+*
+* ZLA_GBRPVGRW computes the reciprocal pivot growth factor
+* norm(A)/norm(U). The "max absolute element" norm is used. If this is
+* much less than 1, the stability of the LU factorization of the
+* (equilibrated) matrix A could be poor. This also means that the
+* solution X, estimated condition numbers, and error bounds could be
+* unreliable.
*
* Arguments
* =========
*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* KL (input) INTEGER
+* The number of subdiagonals within the band of A. KL >= 0.
+*
+* KU (input) INTEGER
+* The number of superdiagonals within the band of A. KU >= 0.
+*
+* NCOLS (input) INTEGER
+* The number of columns of the matrix A. NCOLS >= 0.
+*
+* AB (input) COMPLEX*16 array, dimension (LDAB,N)
+* On entry, the matrix A in band storage, in rows 1 to KL+KU+1.
+* The jth column of A is stored in the jth column of the
+* array AB as follows:
+* AB(KU+1+ij,j) = A(i,j) for max(1,jKU)<=i<=min(N,j+kl)
+*
+* LDAB (input) INTEGER
+* The leading dimension of the array AB. LDAB >= KL+KU+1.
+*
+* AFB (input) COMPLEX*16 array, dimension (LDAFB,N)
+* Details of the LU factorization of the band matrix A, as
+* computed by ZGBTRF. U is stored as an upper triangular
+* band matrix with KL+KU superdiagonals in rows 1 to KL+KU+1,
+* and the multipliers used during the factorization are stored
+* in rows KL+KU+2 to 2*KL+KU+1.
+*
+* LDAFB (input) INTEGER
+* The leading dimension of the array AFB. LDAFB >= 2*KL+KU+1.
+*
* =====================================================================
*
* .. Local Scalars ..
@@ 45,7 +82,7 @@
* .. Executable Statements ..
*
RPVGRW = 1.0D+0
*
+
KD = KU + 1
DO J = 1, NCOLS
AMAX = 0.0D+0
Modified: lapack/trunk/SRC/zla_gercond_c.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/zla_gercond_c.f?rev=650
==============================================================================
 lapack/trunk/SRC/zla_gercond_c.f (original)
+++ lapack/trunk/SRC/zla_gercond_c.f Tue Apr 7 20:05:18 2009
@@ 1,6 +1,6 @@
DOUBLE PRECISION FUNCTION ZLA_GERCOND_C( TRANS, N, A, LDA, AF,
 $ LDAF, IPIV, C, CAPPLY, INFO, WORK,
 $ RWORK )
+ $ LDAF, IPIV, C, CAPPLY,
+ $ INFO, WORK, RWORK )
*
*  LAPACK routine (version 3.2) 
*  Contributed by James Demmel, Deaglan Halligan, Yozo Hida and 
@@ 32,11 +32,49 @@
* Arguments
* =========
*
* C DOUBLE PRECISION vector.
+* TRANS (input) CHARACTER*1
+* Specifies the form of the system of equations:
+* = 'N': A * X = B (No transpose)
+* = 'T': A**T * X = B (Transpose)
+* = 'C': A**H * X = B (Conjugate Transpose = Transpose)
*
* WORK COMPLEX*16 workspace of size 2*N.
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
*
* RWORK DOUBLE PRECISION workspace of size N.
+* A (input) COMPLEX*16 array, dimension (LDA,N)
+* On entry, the NbyN matrix A
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) COMPLEX*16 array, dimension (LDAF,N)
+* The factors L and U from the factorization
+* A = P*L*U as computed by ZGETRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* IPIV (input) INTEGER array, dimension (N)
+* The pivot indices from the factorization A = P*L*U
+* as computed by ZGETRF; row i of the matrix was interchanged
+* with row IPIV(i).
+*
+* C (input) DOUBLE PRECISION array, dimension (N)
+* The vector C in the formula op(A) * inv(diag(C)).
+*
+* CAPPLY (input) LOGICAL
+* If .TRUE. then access the vector C in the formula above.
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* i > 0: The ith argument is invalid.
+*
+* WORK (input) COMPLEX*16 array, dimension (2*N).
+* Workspace.
+*
+* RWORK (input) DOUBLE PRECISION array, dimension (N).
+* Workspace.
*
* =====================================================================
*
Modified: lapack/trunk/SRC/zla_gercond_x.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/zla_gercond_x.f?rev=650
==============================================================================
 lapack/trunk/SRC/zla_gercond_x.f (original)
+++ lapack/trunk/SRC/zla_gercond_x.f Tue Apr 7 20:05:18 2009
@@ 1,5 +1,6 @@
 DOUBLE PRECISION FUNCTION ZLA_GERCOND_X( TRANS, N, A, LDA, AF,
 $ LDAF, IPIV, X, INFO, WORK, RWORK )
+ DOUBLE PRECISION FUNCTION ZLA_GERCOND_X( TRANS, N, A, LDA, AF,
+ $ LDAF, IPIV, X, INFO,
+ $ WORK, RWORK )
*
*  LAPACK routine (version 3.2) 
*  Contributed by James Demmel, Deaglan Halligan, Yozo Hida and 
@@ 30,11 +31,46 @@
* Arguments
* =========
*
* C COMPLEX*16 vector.
+* TRANS (input) CHARACTER*1
+* Specifies the form of the system of equations:
+* = 'N': A * X = B (No transpose)
+* = 'T': A**T * X = B (Transpose)
+* = 'C': A**H * X = B (Conjugate Transpose = Transpose)
+*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* A (input) COMPLEX*16 array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) COMPLEX*16 array, dimension (LDAF,N)
+* The factors L and U from the factorization
+* A = P*L*U as computed by ZGETRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* IPIV (input) INTEGER array, dimension (N)
+* The pivot indices from the factorization A = P*L*U
+* as computed by ZGETRF; row i of the matrix was interchanged
+* with row IPIV(i).
+*
+* X (input) COMPLEX*16 array, dimension (N)
+* The vector X in the formula op(A) * diag(X).
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* i > 0: The ith argument is invalid.
*
* WORK COMPLEX*16 workspace of size 2*N.
+* WORK (input) COMPLEX*16 array, dimension (2*N).
+* Workspace.
*
* RWORK DOUBLE PRECISION workspace of size N.
+* RWORK (input) DOUBLE PRECISION array, dimension (N).
+* Workspace.
*
* =====================================================================
*
Modified: lapack/trunk/SRC/zla_gerfsx_extended.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/zla_gerfsx_extended.f?rev=650
==============================================================================
 lapack/trunk/SRC/zla_gerfsx_extended.f (original)
+++ lapack/trunk/SRC/zla_gerfsx_extended.f Tue Apr 7 20:05:18 2009
@@ 32,12 +32,251 @@
*
* Purpose
* =======
*
* ZLA_GERFSX_EXTENDED computes ... .
+*
+* ZLA_GERFSX_EXTENDED improves the computed solution to a system of
+* linear equations by performing extraprecise iterative refinement
+* and provides error bounds and backward error estimates for the solution.
+* This subroutine is called by ZGERFSX to perform iterative refinement.
+* In addition to normwise error bound, the code provides maximum
+* componentwise error bound if possible. See comments for ERR_BNDS_NORM
+* and ERR_BNDS_COMP for details of the error bounds. Note that this
+* subroutine is only resonsible for setting the second fields of
+* ERR_BNDS_NORM and ERR_BNDS_COMP.
*
* Arguments
* =========
*
+* PREC_TYPE (input) INTEGER
+* Specifies the intermediate precision to be used in refinement.
+* The value is defined by ILAPREC(P) where P is a CHARACTER and
+* P = 'S': Single
+* = 'D': Double
+* = 'I': Indigenous
+* = 'X', 'E': Extra
+*
+* TRANS_TYPE (input) INTEGER
+* Specifies the transposition operation on A.
+* The value is defined by ILATRANS(T) where T is a CHARACTER and
+* T = 'N': No transpose
+* = 'T': Transpose
+* = 'C': Conjugate transpose
+*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* NRHS (input) INTEGER
+* The number of righthandsides, i.e., the number of columns of the
+* matrix B.
+*
+* A (input) COMPLEX*16 array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) COMPLEX*16 array, dimension (LDAF,N)
+* The factors L and U from the factorization
+* A = P*L*U as computed by ZGETRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* IPIV (input) INTEGER array, dimension (N)
+* The pivot indices from the factorization A = P*L*U
+* as computed by ZGETRF; row i of the matrix was interchanged
+* with row IPIV(i).
+*
+* COLEQU (input) LOGICAL
+* If .TRUE. then column equilibration was done to A before calling
+* this routine. This is needed to compute the solution and error
+* bounds correctly.
+*
+* C (input) DOUBLE PRECISION array, dimension (N)
+* The column scale factors for A. If COLEQU = .FALSE., C
+* is not accessed. If C is input, each element of C should be a power
+* of the radix to ensure a reliable solution and error estimates.
+* Scaling by powers of the radix does not cause rounding errors unless
+* the result underflows or overflows. Rounding errors during scaling
+* lead to refining with a matrix that is not equivalent to the
+* input matrix, producing error estimates that may not be
+* reliable.
+*
+* B (input) COMPLEX*16 array, dimension (LDB,NRHS)
+* The righthandside matrix B.
+*
+* LDB (input) INTEGER
+* The leading dimension of the array B. LDB >= max(1,N).
+*
+* Y (input/output) COMPLEX*16 array, dimension (LDY,NRHS)
+* On entry, the solution matrix X, as computed by ZGETRS.
+* On exit, the improved solution matrix Y.
+*
+* LDY (input) INTEGER
+* The leading dimension of the array Y. LDY >= max(1,N).
+*
+* BERR_OUT (output) DOUBLE PRECISION array, dimension (NRHS)
+* On exit, BERR_OUT(j) contains the componentwise relative backward
+* error for righthandside j from the formula
+* max(i) ( abs(RES(i)) / ( abs(op(A_s))*abs(Y) + abs(B_s) )(i) )
+* where abs(Z) is the componentwise absolute value of the matrix
+* or vector Z. This is computed by ZLA_LIN_BERR.
+*
+* N_NORMS (input) INTEGER
+* Determines which error bounds to return (see ERR_BNDS_NORM
+* and ERR_BNDS_COMP).
+* If N_NORMS >= 1 return normwise error bounds.
+* If N_NORMS >= 2 return componentwise error bounds.
+*
+* ERR_BNDS_NORM (input/output) DOUBLE PRECISION array, dimension
+* (NRHS, N_ERR_BNDS)
+* For each righthand side, this array contains information about
+* various error bounds and condition numbers corresponding to the
+* normwise relative error, which is defined as follows:
+*
+* Normwise relative error in the ith solution vector:
+* max_j (abs(XTRUE(j,i)  X(j,i)))
+* 
+* max_j abs(X(j,i))
+*
+* The array is indexed by the type of error information as described
+* below. There currently are up to three pieces of information
+* returned.
+*
+* The first index in ERR_BNDS_NORM(i,:) corresponds to the ith
+* righthand side.
+*
+* The second index in ERR_BNDS_NORM(:,err) contains the following
+* three fields:
+* err = 1 "Trust/don't trust" boolean. Trust the answer if the
+* reciprocal condition number is less than the threshold
+* sqrt(n) * slamch('Epsilon').
+*
+* err = 2 "Guaranteed" error bound: The estimated forward error,
+* almost certainly within a factor of 10 of the true error
+* so long as the next entry is greater than the threshold
+* sqrt(n) * slamch('Epsilon'). This error bound should only
+* be trusted if the previous boolean is true.
+*
+* err = 3 Reciprocal condition number: Estimated normwise
+* reciprocal condition number. Compared with the threshold
+* sqrt(n) * slamch('Epsilon') to determine if the error
+* estimate is "guaranteed". These reciprocal condition
+* numbers are 1 / (norm(Z^{1},inf) * norm(Z,inf)) for some
+* appropriately scaled matrix Z.
+* Let Z = S*A, where S scales each row by a power of the
+* radix so all absolute row sums of Z are approximately 1.
+*
+* This subroutine is only responsible for setting the second field
+* above.
+* See Lapack Working Note 165 for further details and extra
+* cautions.
+*
+* ERR_BNDS_COMP (input/output) DOUBLE PRECISION array, dimension
+* (NRHS, N_ERR_BNDS)
+* For each righthand side, this array contains information about
+* various error bounds and condition numbers corresponding to the
+* componentwise relative error, which is defined as follows:
+*
+* Componentwise relative error in the ith solution vector:
+* abs(XTRUE(j,i)  X(j,i))
+* max_j 
+* abs(X(j,i))
+*
+* The array is indexed by the righthand side i (on which the
+* componentwise relative error depends), and the type of error
+* information as described below. There currently are up to three
+* pieces of information returned for each righthand side. If
+* componentwise accuracy is not requested (PARAMS(3) = 0.0), then
+* ERR_BNDS_COMP is not accessed. If N_ERR_BNDS .LT. 3, then at most
+* the first (:,N_ERR_BNDS) entries are returned.
+*
+* The first index in ERR_BNDS_COMP(i,:) corresponds to the ith
+* righthand side.
+*
+* The second index in ERR_BNDS_COMP(:,err) contains the following
+* three fields:
+* err = 1 "Trust/don't trust" boolean. Trust the answer if the
+* reciprocal condition number is less than the threshold
+* sqrt(n) * slamch('Epsilon').
+*
+* err = 2 "Guaranteed" error bound: The estimated forward error,
+* almost certainly within a factor of 10 of the true error
+* so long as the next entry is greater than the threshold
+* sqrt(n) * slamch('Epsilon'). This error bound should only
+* be trusted if the previous boolean is true.
+*
+* err = 3 Reciprocal condition number: Estimated componentwise
+* reciprocal condition number. Compared with the threshold
+* sqrt(n) * slamch('Epsilon') to determine if the error
+* estimate is "guaranteed". These reciprocal condition
+* numbers are 1 / (norm(Z^{1},inf) * norm(Z,inf)) for some
+* appropriately scaled matrix Z.
+* Let Z = S*(A*diag(x)), where x is the solution for the
+* current righthand side and S scales each row of
+* A*diag(x) by a power of the radix so all absolute row
+* sums of Z are approximately 1.
+*
+* This subroutine is only responsible for setting the second field
+* above.
+* See Lapack Working Note 165 for further details and extra
+* cautions.
+*
+* RES (input) COMPLEX*16 array, dimension (N)
+* Workspace to hold the intermediate residual.
+*
+* AYB (input) DOUBLE PRECISION array, dimension (N)
+* Workspace.
+*
+* DY (input) COMPLEX*16 array, dimension (N)
+* Workspace to hold the intermediate solution.
+*
+* Y_TAIL (input) COMPLEX*16 array, dimension (N)
+* Workspace to hold the trailing bits of the intermediate solution.
+*
+* RCOND (input) DOUBLE PRECISION
+* Reciprocal scaled condition number. This is an estimate of the
+* reciprocal Skeel condition number of the matrix A after
+* equilibration (if done). If this is less than the machine
+* precision (in particular, if it is zero), the matrix is singular
+* to working precision. Note that the error may still be small even
+* if this number is very small and the matrix appears ill
+* conditioned.
+*
+* ITHRESH (input) INTEGER
+* The maximum number of residual computations allowed for
+* refinement. The default is 10. For 'aggressive' set to 100 to
+* permit convergence using approximate factorizations or
+* factorizations other than LU. If the factorization uses a
+* technique other than Gaussian elimination, the guarantees in
+* ERR_BNDS_NORM and ERR_BNDS_COMP may no longer be trustworthy.
+*
+* RTHRESH (input) DOUBLE PRECISION
+* Determines when to stop refinement if the error estimate stops
+* decreasing. Refinement will stop when the next solution no longer
+* satisfies norm(dx_{i+1}) < RTHRESH * norm(dx_i) where norm(Z) is
+* the infinity norm of Z. RTHRESH satisfies 0 < RTHRESH <= 1. The
+* default value is 0.5. For 'aggressive' set to 0.9 to permit
+* convergence on extremely illconditioned matrices. See LAWN 165
+* for more details.
+*
+* DZ_UB (input) DOUBLE PRECISION
+* Determines when to start considering componentwise convergence.
+* Componentwise convergence is only considered after each component
+* of the solution Y is stable, which we definte as the relative
+* change in each component being less than DZ_UB. The default value
+* is 0.25, requiring the first bit to be stable. See LAWN 165 for
+* more details.
+*
+* IGNORE_CWISE (input) LOGICAL
+* If .TRUE. then ignore componentwise convergence. Default value
+* is .FALSE..
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* < 0: if INFO = i, the ith argument to ZGETRS had an illegal
+* value
+*
* =====================================================================
*
* .. Local Scalars ..
Modified: lapack/trunk/SRC/zla_hercond_c.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/zla_hercond_c.f?rev=650
==============================================================================
 lapack/trunk/SRC/zla_hercond_c.f (original)
+++ lapack/trunk/SRC/zla_hercond_c.f Tue Apr 7 20:05:18 2009
@@ 1,6 +1,6 @@
DOUBLE PRECISION FUNCTION ZLA_HERCOND_C( UPLO, N, A, LDA, AF,
 $ LDAF, IPIV, C, CAPPLY, INFO, WORK,
 $ RWORK )
+ $ LDAF, IPIV, C, CAPPLY,
+ $ INFO, WORK, RWORK )
*
*  LAPACK routine (version 3.2) 
*  Contributed by James Demmel, Deaglan Halligan, Yozo Hida and 
@@ 32,11 +32,46 @@
* Arguments
* =========
*
* C DOUBLE PRECISION vector.
+* UPLO (input) CHARACTER*1
+* = 'U': Upper triangle of A is stored;
+* = 'L': Lower triangle of A is stored.
*
* WORK COMPLEX*16 workspace of size 2*N.
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
*
* RWORK DOUBLE PRECISION workspace of size N.
+* A (input) COMPLEX*16 array, dimension (LDA,N)
+* On entry, the NbyN matrix A
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) COMPLEX*16 array, dimension (LDAF,N)
+* The block diagonal matrix D and the multipliers used to
+* obtain the factor U or L as computed by ZHETRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* IPIV (input) INTEGER array, dimension (N)
+* Details of the interchanges and the block structure of D
+* as determined by CHETRF.
+*
+* C (input) DOUBLE PRECISION array, dimension (N)
+* The vector C in the formula op(A) * inv(diag(C)).
+*
+* CAPPLY (input) LOGICAL
+* If .TRUE. then access the vector C in the formula above.
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* i > 0: The ith argument is invalid.
+*
+* WORK (input) COMPLEX*16 array, dimension (2*N).
+* Workspace.
+*
+* RWORK (input) DOUBLE PRECISION array, dimension (N).
+* Workspace.
*
* =====================================================================
*
Modified: lapack/trunk/SRC/zla_hercond_x.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/zla_hercond_x.f?rev=650
==============================================================================
 lapack/trunk/SRC/zla_hercond_x.f (original)
+++ lapack/trunk/SRC/zla_hercond_x.f Tue Apr 7 20:05:18 2009
@@ 1,5 +1,6 @@
 DOUBLE PRECISION FUNCTION ZLA_HERCOND_X( UPLO, N, A, LDA, AF,
 $ LDAF, IPIV, X, INFO, WORK, RWORK )
+ DOUBLE PRECISION FUNCTION ZLA_HERCOND_X( UPLO, N, A, LDA, AF,
+ $ LDAF, IPIV, X, INFO,
+ $ WORK, RWORK )
*
*  LAPACK routine (version 3.2) 
*  Contributed by James Demmel, Deaglan Halligan, Yozo Hida and 
@@ 30,11 +31,43 @@
* Arguments
* =========
*
* C COMPLEX*16 vector.
+* UPLO (input) CHARACTER*1
+* = 'U': Upper triangle of A is stored;
+* = 'L': Lower triangle of A is stored.
*
* WORK COMPLEX*16 workspace of size 2*N.
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
*
* RWORK DOUBLE PRECISION workspace of size N.
+* A (input) COMPLEX*16 array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) COMPLEX*16 array, dimension (LDAF,N)
+* The block diagonal matrix D and the multipliers used to
+* obtain the factor U or L as computed by ZHETRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* IPIV (input) INTEGER array, dimension (N)
+* Details of the interchanges and the block structure of D
+* as determined by CHETRF.
+*
+* X (input) COMPLEX*16 array, dimension (N)
+* The vector X in the formula op(A) * diag(X).
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* i > 0: The ith argument is invalid.
+*
+* WORK (input) COMPLEX*16 array, dimension (2*N).
+* Workspace.
+*
+* RWORK (input) DOUBLE PRECISION array, dimension (N).
+* Workspace.
*
* =====================================================================
*
Modified: lapack/trunk/SRC/zla_herfsx_extended.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/zla_herfsx_extended.f?rev=650
==============================================================================
 lapack/trunk/SRC/zla_herfsx_extended.f (original)
+++ lapack/trunk/SRC/zla_herfsx_extended.f Tue Apr 7 20:05:18 2009
@@ 1,9 +1,10 @@
SUBROUTINE ZLA_HERFSX_EXTENDED( PREC_TYPE, UPLO, N, NRHS, A, LDA,
$ AF, LDAF, IPIV, COLEQU, C, B, LDB,
 $ Y, LDY, BERR_OUT, N_NORMS, ERRS_N,
 $ ERRS_C, RES, AYB, DY, Y_TAIL,
 $ RCOND, ITHRESH, RTHRESH, DZ_UB,
 $ IGNORE_CWISE, INFO )
+ $ Y, LDY, BERR_OUT, N_NORMS,
+ $ ERR_BNDS_NORM, ERR_BNDS_COMP, RES,
+ $ AYB, DY, Y_TAIL, RCOND, ITHRESH,
+ $ RTHRESH, DZ_UB, IGNORE_CWISE,
+ $ INFO )
*
*  LAPACK routine (version 3.2) 
*  Contributed by James Demmel, Deaglan Halligan, Yozo Hida and 
@@ 27,17 +28,254 @@
COMPLEX*16 A( LDA, * ), AF( LDAF, * ), B( LDB, * ),
$ Y( LDY, * ), RES( * ), DY( * ), Y_TAIL( * )
DOUBLE PRECISION C( * ), AYB( * ), RCOND, BERR_OUT( * ),
 $ ERRS_N( NRHS, * ), ERRS_C( NRHS, * )
+ $ ERR_BNDS_NORM( NRHS, * ),
+ $ ERR_BNDS_COMP( NRHS, * )
* ..
*
* Purpose
* =======
*
* ZLA_HERFSX_EXTENDED computes ... .
+* ZLA_HERFSX_EXTENDED improves the computed solution to a system of
+* linear equations by performing extraprecise iterative refinement
+* and provides error bounds and backward error estimates for the solution.
+* This subroutine is called by ZHERFSX to perform iterative refinement.
+* In addition to normwise error bound, the code provides maximum
+* componentwise error bound if possible. See comments for ERR_BNDS_NORM
+* and ERR_BNDS_COMP for details of the error bounds. Note that this
+* subroutine is only resonsible for setting the second fields of
+* ERR_BNDS_NORM and ERR_BNDS_COMP.
*
* Arguments
* =========
*
+* PREC_TYPE (input) INTEGER
+* Specifies the intermediate precision to be used in refinement.
+* The value is defined by ILAPREC(P) where P is a CHARACTER and
+* P = 'S': Single
+* = 'D': Double
+* = 'I': Indigenous
+* = 'X', 'E': Extra
+*
+* UPLO (input) CHARACTER*1
+* = 'U': Upper triangle of A is stored;
+* = 'L': Lower triangle of A is stored.
+*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* NRHS (input) INTEGER
+* The number of righthandsides, i.e., the number of columns of the
+* matrix B.
+*
+* A (input) COMPLEX*16 array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) COMPLEX*16 array, dimension (LDAF,N)
+* The block diagonal matrix D and the multipliers used to
+* obtain the factor U or L as computed by ZHETRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* IPIV (input) INTEGER array, dimension (N)
+* Details of the interchanges and the block structure of D
+* as determined by ZHETRF.
+*
+* COLEQU (input) LOGICAL
+* If .TRUE. then column equilibration was done to A before calling
+* this routine. This is needed to compute the solution and error
+* bounds correctly.
+*
+* C (input) DOUBLE PRECISION array, dimension (N)
+* The column scale factors for A. If COLEQU = .FALSE., C
+* is not accessed. If C is input, each element of C should be a power
+* of the radix to ensure a reliable solution and error estimates.
+* Scaling by powers of the radix does not cause rounding errors unless
+* the result underflows or overflows. Rounding errors during scaling
+* lead to refining with a matrix that is not equivalent to the
+* input matrix, producing error estimates that may not be
+* reliable.
+*
+* B (input) COMPLEX*16 array, dimension (LDB,NRHS)
+* The righthandside matrix B.
+*
+* LDB (input) INTEGER
+* The leading dimension of the array B. LDB >= max(1,N).
+*
+* Y (input/output) COMPLEX*16 array, dimension
+* (LDY,NRHS)
+* On entry, the solution matrix X, as computed by ZHETRS.
+* On exit, the improved solution matrix Y.
+*
+* LDY (input) INTEGER
+* The leading dimension of the array Y. LDY >= max(1,N).
+*
+* BERR_OUT (output) DOUBLE PRECISION array, dimension (NRHS)
+* On exit, BERR_OUT(j) contains the componentwise relative backward
+* error for righthandside j from the formula
+* max(i) ( abs(RES(i)) / ( abs(op(A_s))*abs(Y) + abs(B_s) )(i) )
+* where abs(Z) is the componentwise absolute value of the matrix
+* or vector Z. This is computed by ZLA_LIN_BERR.
+*
+* N_NORMS (input) INTEGER
+* Determines which error bounds to return (see ERR_BNDS_NORM
+* and ERR_BNDS_COMP).
+* If N_NORMS >= 1 return normwise error bounds.
+* If N_NORMS >= 2 return componentwise error bounds.
+*
+* ERR_BNDS_NORM (input/output) DOUBLE PRECISION array, dimension
+* (NRHS, N_ERR_BNDS)
+* For each righthand side, this array contains information about
+* various error bounds and condition numbers corresponding to the
+* normwise relative error, which is defined as follows:
+*
+* Normwise relative error in the ith solution vector:
+* max_j (abs(XTRUE(j,i)  X(j,i)))
+* 
+* max_j abs(X(j,i))
+*
+* The array is indexed by the type of error information as described
+* below. There currently are up to three pieces of information
+* returned.
+*
+* The first index in ERR_BNDS_NORM(i,:) corresponds to the ith
+* righthand side.
+*
+* The second index in ERR_BNDS_NORM(:,err) contains the following
+* three fields:
+* err = 1 "Trust/don't trust" boolean. Trust the answer if the
+* reciprocal condition number is less than the threshold
+* sqrt(n) * slamch('Epsilon').
+*
+* err = 2 "Guaranteed" error bound: The estimated forward error,
+* almost certainly within a factor of 10 of the true error
+* so long as the next entry is greater than the threshold
+* sqrt(n) * slamch('Epsilon'). This error bound should only
+* be trusted if the previous boolean is true.
+*
+* err = 3 Reciprocal condition number: Estimated normwise
+* reciprocal condition number. Compared with the threshold
+* sqrt(n) * slamch('Epsilon') to determine if the error
+* estimate is "guaranteed". These reciprocal condition
+* numbers are 1 / (norm(Z^{1},inf) * norm(Z,inf)) for some
+* appropriately scaled matrix Z.
+* Let Z = S*A, where S scales each row by a power of the
+* radix so all absolute row sums of Z are approximately 1.
+*
+* This subroutine is only responsible for setting the second field
+* above.
+* See Lapack Working Note 165 for further details and extra
+* cautions.
+*
+* ERR_BNDS_COMP (input/output) DOUBLE PRECISION array, dimension
+* (NRHS, N_ERR_BNDS)
+* For each righthand side, this array contains information about
+* various error bounds and condition numbers corresponding to the
+* componentwise relative error, which is defined as follows:
+*
+* Componentwise relative error in the ith solution vector:
+* abs(XTRUE(j,i)  X(j,i))
+* max_j 
+* abs(X(j,i))
+*
+* The array is indexed by the righthand side i (on which the
+* componentwise relative error depends), and the type of error
+* information as described below. There currently are up to three
+* pieces of information returned for each righthand side. If
+* componentwise accuracy is not requested (PARAMS(3) = 0.0), then
+* ERR_BNDS_COMP is not accessed. If N_ERR_BNDS .LT. 3, then at most
+* the first (:,N_ERR_BNDS) entries are returned.
+*
+* The first index in ERR_BNDS_COMP(i,:) corresponds to the ith
+* righthand side.
+*
+* The second index in ERR_BNDS_COMP(:,err) contains the following
+* three fields:
+* err = 1 "Trust/don't trust" boolean. Trust the answer if the
+* reciprocal condition number is less than the threshold
+* sqrt(n) * slamch('Epsilon').
+*
+* err = 2 "Guaranteed" error bound: The estimated forward error,
+* almost certainly within a factor of 10 of the true error
+* so long as the next entry is greater than the threshold
+* sqrt(n) * slamch('Epsilon'). This error bound should only
+* be trusted if the previous boolean is true.
+*
+* err = 3 Reciprocal condition number: Estimated componentwise
+* reciprocal condition number. Compared with the threshold
+* sqrt(n) * slamch('Epsilon') to determine if the error
+* estimate is "guaranteed". These reciprocal condition
+* numbers are 1 / (norm(Z^{1},inf) * norm(Z,inf)) for some
+* appropriately scaled matrix Z.
+* Let Z = S*(A*diag(x)), where x is the solution for the
+* current righthand side and S scales each row of
+* A*diag(x) by a power of the radix so all absolute row
+* sums of Z are approximately 1.
+*
+* This subroutine is only responsible for setting the second field
+* above.
+* See Lapack Working Note 165 for further details and extra
+* cautions.
+*
+* RES (input) COMPLEX*16 array, dimension (N)
+* Workspace to hold the intermediate residual.
+*
+* AYB (input) DOUBLE PRECISION array, dimension (N)
+* Workspace.
+*
+* DY (input) COMPLEX*16 array, dimension (N)
+* Workspace to hold the intermediate solution.
+*
+* Y_TAIL (input) COMPLEX*16 array, dimension (N)
+* Workspace to hold the trailing bits of the intermediate solution.
+*
+* RCOND (input) DOUBLE PRECISION
+* Reciprocal scaled condition number. This is an estimate of the
+* reciprocal Skeel condition number of the matrix A after
+* equilibration (if done). If this is less than the machine
+* precision (in particular, if it is zero), the matrix is singular
+* to working precision. Note that the error may still be small even
+* if this number is very small and the matrix appears ill
+* conditioned.
+*
+* ITHRESH (input) INTEGER
+* The maximum number of residual computations allowed for
+* refinement. The default is 10. For 'aggressive' set to 100 to
+* permit convergence using approximate factorizations or
+* factorizations other than LU. If the factorization uses a
+* technique other than Gaussian elimination, the guarantees in
+* ERR_BNDS_NORM and ERR_BNDS_COMP may no longer be trustworthy.
+*
+* RTHRESH (input) DOUBLE PRECISION
+* Determines when to stop refinement if the error estimate stops
+* decreasing. Refinement will stop when the next solution no longer
+* satisfies norm(dx_{i+1}) < RTHRESH * norm(dx_i) where norm(Z) is
+* the infinity norm of Z. RTHRESH satisfies 0 < RTHRESH <= 1. The
+* default value is 0.5. For 'aggressive' set to 0.9 to permit
+* convergence on extremely illconditioned matrices. See LAWN 165
+* for more details.
+*
+* DZ_UB (input) DOUBLE PRECISION
+* Determines when to start considering componentwise convergence.
+* Componentwise convergence is only considered after each component
+* of the solution Y is stable, which we definte as the relative
+* change in each component being less than DZ_UB. The default value
+* is 0.25, requiring the first bit to be stable. See LAWN 165 for
+* more details.
+*
+* IGNORE_CWISE (input) LOGICAL
+* If .TRUE. then ignore componentwise convergence. Default value
+* is .FALSE..
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* < 0: if INFO = i, the ith argument to ZHETRS had an illegal
+* value
+*
* =====================================================================
*
* .. Local Scalars ..
@@ 88,7 +326,7 @@
DOUBLE PRECISION DLAMCH
* ..
* .. Intrinsic Functions ..
 INTRINSIC ABS, REAL, DIMAG, MAX, MIN
+ INTRINSIC ABS, DBLE, DIMAG, MAX, MIN
* ..
* .. Statement Functions ..
DOUBLE PRECISION CABS1
@@ 280,10 +518,12 @@
* Compute error bounds.
*
IF ( N_NORMS .GE. 1 ) THEN
 ERRS_N( J, LA_LINRX_ERR_I ) = FINAL_DX_X / (1  DXRATMAX)
+ ERR_BNDS_NORM( J, LA_LINRX_ERR_I ) =
+ $ FINAL_DX_X / (1  DXRATMAX)
END IF
IF (N_NORMS .GE. 2) THEN
 ERRS_C( J, LA_LINRX_ERR_I ) = FINAL_DZ_Z / (1  DZRATMAX)
+ ERR_BNDS_COMP( J, LA_LINRX_ERR_I ) =
+ $ FINAL_DZ_Z / (1  DZRATMAX)
END IF
*
* Compute componentwise relative backward error from formula
Modified: lapack/trunk/SRC/zla_herpvgrw.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/zla_herpvgrw.f?rev=650
==============================================================================
 lapack/trunk/SRC/zla_herpvgrw.f (original)
+++ lapack/trunk/SRC/zla_herpvgrw.f Tue Apr 7 20:05:18 2009
@@ 1,5 +1,5 @@
DOUBLE PRECISION FUNCTION ZLA_HERPVGRW( UPLO, N, INFO, A, LDA, AF,
 $ LDAF, IPIV, WORK )
+ $ LDAF, IPIV, WORK )
*
*  LAPACK routine (version 3.2) 
*  Contributed by James Demmel, Deaglan Halligan, Yozo Hida and 
@@ 24,11 +24,50 @@
* Purpose
* =======
*
* ZLA_HERPVGRW computes ... .
+* ZLA_HERPVGRW computes the reciprocal pivot growth factor
+* norm(A)/norm(U). The "max absolute element" norm is used. If this is
+* much less than 1, the stability of the LU factorization of the
+* (equilibrated) matrix A could be poor. This also means that the
+* solution X, estimated condition numbers, and error bounds could be
+* unreliable.
*
* Arguments
* =========
*
+* UPLO (input) CHARACTER*1
+* = 'U': Upper triangle of A is stored;
+* = 'L': Lower triangle of A is stored.
+*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* INFO (input) INTEGER
+* The value of INFO returned from ZHETRF, .i.e., the pivot in
+* column INFO is exactly 0.
+*
+* NCOLS (input) INTEGER
+* The number of columns of the matrix A. NCOLS >= 0.
+*
+* A (input) COMPLEX*16 array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) COMPLEX*16 array, dimension (LDAF,N)
+* The block diagonal matrix D and the multipliers used to
+* obtain the factor U or L as computed by ZHETRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* IPIV (input) INTEGER array, dimension (N)
+* Details of the interchanges and the block structure of D
+* as determined by ZHETRF.
+*
+* WORK (input) COMPLEX*16 array, dimension (2*N)
+*
* =====================================================================
*
* .. Local Scalars ..
Modified: lapack/trunk/SRC/zla_lin_berr.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/zla_lin_berr.f?rev=650
==============================================================================
 lapack/trunk/SRC/zla_lin_berr.f (original)
+++ lapack/trunk/SRC/zla_lin_berr.f Tue Apr 7 20:05:18 2009
@@ 27,6 +27,30 @@
* where abs(Z) is the componentwise absolute value of the matrix
* or vector Z.
*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* NZ (input) INTEGER
+* We add (NZ+1)*SLAMCH( 'Safe minimum' ) to R(i) in the numerator to
+* guard against spuriously zero residuals. Default value is N.
+*
+* NRHS (input) INTEGER
+* The number of right hand sides, i.e., the number of columns
+* of the matrices AYB, RES, and BERR. NRHS >= 0.
+*
+* RES (input) DOUBLE PRECISION array, dimension (N,NRHS)
+* The residual matrix, i.e., the matrix R in the relative backward
+* error formula above.
+*
+* AYB (input) DOUBLE PRECISION array, dimension (N, NRHS)
+* The denominator in the relative backward error formula above, i.e.,
+* the matrix abs(op(A_s))*abs(Y) + abs(B_s). The matrices A, Y, and B
+* are from iterative refinement (see zla_gerfsx_extended.f).
+*
+* RES (output) COMPLEX*16 array, dimension (NRHS)
+* The componentwise relative backward error from the formula above.
+*
* =====================================================================
*
* .. Local Scalars ..
Modified: lapack/trunk/SRC/zla_porcond_c.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/zla_porcond_c.f?rev=650
==============================================================================
 lapack/trunk/SRC/zla_porcond_c.f (original)
+++ lapack/trunk/SRC/zla_porcond_c.f Tue Apr 7 20:05:18 2009
@@ 1,5 +1,6 @@
DOUBLE PRECISION FUNCTION ZLA_PORCOND_C( UPLO, N, A, LDA, AF,
 $ LDAF, C, CAPPLY, INFO, WORK, RWORK )
+ $ LDAF, C, CAPPLY, INFO,
+ $ WORK, RWORK )
*
*  LAPACK routine (version 3.2) 
*  Contributed by James Demmel, Deaglan Halligan, Yozo Hida and 
@@ 24,17 +25,48 @@
* Purpose
* =======
*
* DLA_PORCOND_C Computes the infinity norm condition number of
+* ZLA_PORCOND_C Computes the infinity norm condition number of
* op(A) * inv(diag(C)) where C is a DOUBLE PRECISION vector
*
* Arguments
* =========
*
* C DOUBLE PRECISION vector.
+* UPLO (input) CHARACTER*1
+* = 'U': Upper triangle of A is stored;
+* = 'L': Lower triangle of A is stored.
*
* WORK COMPLEX*16 workspace of size 2*N.
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
*
* RWORK DOUBLE PRECISION workspace of size N.
+* A (input) COMPLEX*16 array, dimension (LDA,N)
+* On entry, the NbyN matrix A
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) COMPLEX*16 array, dimension (LDAF,N)
+* The triangular factor U or L from the Cholesky factorization
+* A = U**T*U or A = L*L**T, as computed by ZPOTRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* C (input) DOUBLE PRECISION array, dimension (N)
+* The vector C in the formula op(A) * inv(diag(C)).
+*
+* CAPPLY (input) LOGICAL
+* If .TRUE. then access the vector C in the formula above.
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* i > 0: The ith argument is invalid.
+*
+* WORK (input) COMPLEX*16 array, dimension (2*N).
+* Workspace.
+*
+* RWORK (input) DOUBLE PRECISION array, dimension (N).
+* Workspace.
*
* =====================================================================
*
Modified: lapack/trunk/SRC/zla_porcond_x.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/zla_porcond_x.f?rev=650
==============================================================================
 lapack/trunk/SRC/zla_porcond_x.f (original)
+++ lapack/trunk/SRC/zla_porcond_x.f Tue Apr 7 20:05:18 2009
@@ 1,5 +1,6 @@
 DOUBLE PRECISION FUNCTION ZLA_PORCOND_X( UPLO, N, A, LDA, AF,
 $ LDAF, X, INFO, WORK, RWORK )
+ DOUBLE PRECISION FUNCTION ZLA_PORCOND_X( UPLO, N, A, LDA, AF,
+ $ LDAF, X, INFO, WORK,
+ $ RWORK )
*
*  LAPACK routine (version 3.2) 
*  Contributed by James Demmel, Deaglan Halligan, Yozo Hida and 
@@ 29,11 +30,39 @@
* Arguments
* =========
*
* C COMPLEX*16 vector.
+* UPLO (input) CHARACTER*1
+* = 'U': Upper triangle of A is stored;
+* = 'L': Lower triangle of A is stored.
*
* WORK COMPLEX*16 workspace of size 2*N.
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
*
* RWORK DOUBLE PRECISION workspace of size N.
+* A (input) COMPLEX*16 array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) COMPLEX*16 array, dimension (LDAF,N)
+* The triangular factor U or L from the Cholesky factorization
+* A = U**T*U or A = L*L**T, as computed by ZPOTRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* X (input) COMPLEX*16 array, dimension (N)
+* The vector X in the formula op(A) * diag(X).
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* i > 0: The ith argument is invalid.
+*
+* WORK (input) COMPLEX*16 array, dimension (2*N).
+* Workspace.
+*
+* RWORK (input) DOUBLE PRECISION array, dimension (N).
+* Workspace.
*
* =====================================================================
*
Modified: lapack/trunk/SRC/zla_porfsx_extended.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/zla_porfsx_extended.f?rev=650
==============================================================================
 lapack/trunk/SRC/zla_porfsx_extended.f (original)
+++ lapack/trunk/SRC/zla_porfsx_extended.f Tue Apr 7 20:05:18 2009
@@ 1,9 +1,10 @@
SUBROUTINE ZLA_PORFSX_EXTENDED( PREC_TYPE, UPLO, N, NRHS, A, LDA,
$ AF, LDAF, COLEQU, C, B, LDB, Y,
 $ LDY, BERR_OUT, N_NORMS, ERRS_N,
 $ ERRS_C, RES, AYB, DY, Y_TAIL,
 $ RCOND, ITHRESH, RTHRESH, DZ_UB,
 $ IGNORE_CWISE, INFO )
+ $ LDY, BERR_OUT, N_NORMS,
+ $ ERR_BNDS_NORM, ERR_BNDS_COMP, RES,
+ $ AYB, DY, Y_TAIL, RCOND, ITHRESH,
+ $ RTHRESH, DZ_UB, IGNORE_CWISE,
+ $ INFO )
*
*  LAPACK routine (version 3.2) 
*  Contributed by James Demmel, Deaglan Halligan, Yozo Hida and 
@@ 26,18 +27,250 @@
COMPLEX*16 A( LDA, * ), AF( LDAF, * ), B( LDB, * ),
$ Y( LDY, * ), RES( * ), DY( * ), Y_TAIL( * )
DOUBLE PRECISION C( * ), AYB( * ), RCOND, BERR_OUT( * ),
 $ ERRS_N( NRHS, * ), ERRS_C( NRHS, * )
+ $ ERR_BNDS_NORM( NRHS, * ),
+ $ ERR_BNDS_COMP( NRHS, * )
* ..
*
* Purpose
* =======
*
* ZLA_PORFSX_EXTENDED computes ... .
+* ZLA_PORFSX_EXTENDED improves the computed solution to a system of
+* linear equations by performing extraprecise iterative refinement
+* and provides error bounds and backward error estimates for the solution.
+* This subroutine is called by ZPORFSX to perform iterative refinement.
+* In addition to normwise error bound, the code provides maximum
+* componentwise error bound if possible. See comments for ERR_BNDS_NORM
+* and ERR_BNDS_COMP for details of the error bounds. Note that this
+* subroutine is only resonsible for setting the second fields of
+* ERR_BNDS_NORM and ERR_BNDS_COMP.
*
* Arguments
* =========
*

+* PREC_TYPE (input) INTEGER
+* Specifies the intermediate precision to be used in refinement.
+* The value is defined by ILAPREC(P) where P is a CHARACTER and
+* P = 'S': Single
+* = 'D': Double
+* = 'I': Indigenous
+* = 'X', 'E': Extra
+*
+* UPLO (input) CHARACTER*1
+* = 'U': Upper triangle of A is stored;
+* = 'L': Lower triangle of A is stored.
+*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* NRHS (input) INTEGER
+* The number of righthandsides, i.e., the number of columns of the
+* matrix B.
+*
+* A (input) COMPLEX*16 array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) COMPLEX*16 array, dimension (LDAF,N)
+* The triangular factor U or L from the Cholesky factorization
+* A = U**T*U or A = L*L**T, as computed by ZPOTRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* COLEQU (input) LOGICAL
+* If .TRUE. then column equilibration was done to A before calling
+* this routine. This is needed to compute the solution and error
+* bounds correctly.
+*
+* C (input) DOUBLE PRECISION array, dimension (N)
+* The column scale factors for A. If COLEQU = .FALSE., C
+* is not accessed. If C is input, each element of C should be a power
+* of the radix to ensure a reliable solution and error estimates.
+* Scaling by powers of the radix does not cause rounding errors unless
+* the result underflows or overflows. Rounding errors during scaling
+* lead to refining with a matrix that is not equivalent to the
+* input matrix, producing error estimates that may not be
+* reliable.
+*
+* B (input) COMPLEX*16 array, dimension (LDB,NRHS)
+* The righthandside matrix B.
+*
+* LDB (input) INTEGER
+* The leading dimension of the array B. LDB >= max(1,N).
+*
+* Y (input/output) COMPLEX*16 array, dimension
+* (LDY,NRHS)
+* On entry, the solution matrix X, as computed by ZPOTRS.
+* On exit, the improved solution matrix Y.
+*
+* LDY (input) INTEGER
+* The leading dimension of the array Y. LDY >= max(1,N).
+*
+* BERR_OUT (output) DOUBLE PRECISION array, dimension (NRHS)
+* On exit, BERR_OUT(j) contains the componentwise relative backward
+* error for righthandside j from the formula
+* max(i) ( abs(RES(i)) / ( abs(op(A_s))*abs(Y) + abs(B_s) )(i) )
+* where abs(Z) is the componentwise absolute value of the matrix
+* or vector Z. This is computed by ZLA_LIN_BERR.
+*
+* N_NORMS (input) INTEGER
+* Determines which error bounds to return (see ERR_BNDS_NORM
+* and ERR_BNDS_COMP).
+* If N_NORMS >= 1 return normwise error bounds.
+* If N_NORMS >= 2 return componentwise error bounds.
+*
+* ERR_BNDS_NORM (input/output) DOUBLE PRECISION array, dimension
+* (NRHS, N_ERR_BNDS)
+* For each righthand side, this array contains information about
+* various error bounds and condition numbers corresponding to the
+* normwise relative error, which is defined as follows:
+*
+* Normwise relative error in the ith solution vector:
+* max_j (abs(XTRUE(j,i)  X(j,i)))
+* 
+* max_j abs(X(j,i))
+*
+* The array is indexed by the type of error information as described
+* below. There currently are up to three pieces of information
+* returned.
+*
+* The first index in ERR_BNDS_NORM(i,:) corresponds to the ith
+* righthand side.
+*
+* The second index in ERR_BNDS_NORM(:,err) contains the following
+* three fields:
+* err = 1 "Trust/don't trust" boolean. Trust the answer if the
+* reciprocal condition number is less than the threshold
+* sqrt(n) * slamch('Epsilon').
+*
+* err = 2 "Guaranteed" error bound: The estimated forward error,
+* almost certainly within a factor of 10 of the true error
+* so long as the next entry is greater than the threshold
+* sqrt(n) * slamch('Epsilon'). This error bound should only
+* be trusted if the previous boolean is true.
+*
+* err = 3 Reciprocal condition number: Estimated normwise
+* reciprocal condition number. Compared with the threshold
+* sqrt(n) * slamch('Epsilon') to determine if the error
+* estimate is "guaranteed". These reciprocal condition
+* numbers are 1 / (norm(Z^{1},inf) * norm(Z,inf)) for some
+* appropriately scaled matrix Z.
+* Let Z = S*A, where S scales each row by a power of the
+* radix so all absolute row sums of Z are approximately 1.
+*
+* This subroutine is only responsible for setting the second field
+* above.
+* See Lapack Working Note 165 for further details and extra
+* cautions.
+*
+* ERR_BNDS_COMP (input/output) DOUBLE PRECISION array, dimension
+* (NRHS, N_ERR_BNDS)
+* For each righthand side, this array contains information about
+* various error bounds and condition numbers corresponding to the
+* componentwise relative error, which is defined as follows:
+*
+* Componentwise relative error in the ith solution vector:
+* abs(XTRUE(j,i)  X(j,i))
+* max_j 
+* abs(X(j,i))
+*
+* The array is indexed by the righthand side i (on which the
+* componentwise relative error depends), and the type of error
+* information as described below. There currently are up to three
+* pieces of information returned for each righthand side. If
+* componentwise accuracy is not requested (PARAMS(3) = 0.0), then
+* ERR_BNDS_COMP is not accessed. If N_ERR_BNDS .LT. 3, then at most
+* the first (:,N_ERR_BNDS) entries are returned.
+*
+* The first index in ERR_BNDS_COMP(i,:) corresponds to the ith
+* righthand side.
+*
+* The second index in ERR_BNDS_COMP(:,err) contains the following
+* three fields:
+* err = 1 "Trust/don't trust" boolean. Trust the answer if the
+* reciprocal condition number is less than the threshold
+* sqrt(n) * slamch('Epsilon').
+*
+* err = 2 "Guaranteed" error bound: The estimated forward error,
+* almost certainly within a factor of 10 of the true error
+* so long as the next entry is greater than the threshold
+* sqrt(n) * slamch('Epsilon'). This error bound should only
+* be trusted if the previous boolean is true.
+*
+* err = 3 Reciprocal condition number: Estimated componentwise
+* reciprocal condition number. Compared with the threshold
+* sqrt(n) * slamch('Epsilon') to determine if the error
+* estimate is "guaranteed". These reciprocal condition
+* numbers are 1 / (norm(Z^{1},inf) * norm(Z,inf)) for some
+* appropriately scaled matrix Z.
+* Let Z = S*(A*diag(x)), where x is the solution for the
+* current righthand side and S scales each row of
+* A*diag(x) by a power of the radix so all absolute row
+* sums of Z are approximately 1.
+*
+* This subroutine is only responsible for setting the second field
+* above.
+* See Lapack Working Note 165 for further details and extra
+* cautions.
+*
+* RES (input) COMPLEX*16 array, dimension (N)
+* Workspace to hold the intermediate residual.
+*
+* AYB (input) DOUBLE PRECISION array, dimension (N)
+* Workspace.
+*
+* DY (input) COMPLEX*16 PRECISION array, dimension (N)
+* Workspace to hold the intermediate solution.
+*
+* Y_TAIL (input) COMPLEX*16 array, dimension (N)
+* Workspace to hold the trailing bits of the intermediate solution.
+*
+* RCOND (input) DOUBLE PRECISION
+* Reciprocal scaled condition number. This is an estimate of the
+* reciprocal Skeel condition number of the matrix A after
+* equilibration (if done). If this is less than the machine
+* precision (in particular, if it is zero), the matrix is singular
+* to working precision. Note that the error may still be small even
+* if this number is very small and the matrix appears ill
+* conditioned.
+*
+* ITHRESH (input) INTEGER
+* The maximum number of residual computations allowed for
+* refinement. The default is 10. For 'aggressive' set to 100 to
+* permit convergence using approximate factorizations or
+* factorizations other than LU. If the factorization uses a
+* technique other than Gaussian elimination, the guarantees in
+* ERR_BNDS_NORM and ERR_BNDS_COMP may no longer be trustworthy.
+*
+* RTHRESH (input) DOUBLE PRECISION
+* Determines when to stop refinement if the error estimate stops
+* decreasing. Refinement will stop when the next solution no longer
+* satisfies norm(dx_{i+1}) < RTHRESH * norm(dx_i) where norm(Z) is
+* the infinity norm of Z. RTHRESH satisfies 0 < RTHRESH <= 1. The
+* default value is 0.5. For 'aggressive' set to 0.9 to permit
+* convergence on extremely illconditioned matrices. See LAWN 165
+* for more details.
+*
+* DZ_UB (input) DOUBLE PRECISION
+* Determines when to start considering componentwise convergence.
+* Componentwise convergence is only considered after each component
+* of the solution Y is stable, which we definte as the relative
+* change in each component being less than DZ_UB. The default value
+* is 0.25, requiring the first bit to be stable. See LAWN 165 for
+* more details.
+*
+* IGNORE_CWISE (input) LOGICAL
+* If .TRUE. then ignore componentwise convergence. Default value
+* is .FALSE..
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* < 0: if INFO = i, the ith argument to ZPOTRS had an illegal
+* value
+*
* =====================================================================
*
* .. Local Scalars ..
@@ 88,7 +321,7 @@
DOUBLE PRECISION DLAMCH
* ..
* .. Intrinsic Functions ..
 INTRINSIC ABS, REAL, DIMAG, MAX, MIN
+ INTRINSIC ABS, DBLE, DIMAG, MAX, MIN
* ..
* .. Statement Functions ..
DOUBLE PRECISION CABS1
@@ 280,10 +513,12 @@
* Compute error bounds.
*
IF (N_NORMS .GE. 1) THEN
 ERRS_N( J, LA_LINRX_ERR_I ) = FINAL_DX_X / (1  DXRATMAX)
+ ERR_BNDS_NORM( J, LA_LINRX_ERR_I ) =
+ $ FINAL_DX_X / (1  DXRATMAX)
END IF
IF (N_NORMS .GE. 2) THEN
 ERRS_C( J, LA_LINRX_ERR_I ) = FINAL_DZ_Z / (1  DZRATMAX)
+ ERR_BNDS_COMP( J, LA_LINRX_ERR_I ) =
+ $ FINAL_DZ_Z / (1  DZRATMAX)
END IF
*
* Compute componentwise relative backward error from formula
Modified: lapack/trunk/SRC/zla_porpvgrw.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/zla_porpvgrw.f?rev=650
==============================================================================
 lapack/trunk/SRC/zla_porpvgrw.f (original)
+++ lapack/trunk/SRC/zla_porpvgrw.f Tue Apr 7 20:05:18 2009
@@ 1,5 +1,5 @@
DOUBLE PRECISION FUNCTION ZLA_PORPVGRW( UPLO, NCOLS, A, LDA, AF,
 $ LDAF, WORK )
+ $ LDAF, WORK )
*
*  LAPACK routine (version 3.2) 
*  Contributed by James Demmel, Deaglan Halligan, Yozo Hida and 
@@ 23,11 +23,38 @@
* Purpose
* =======
*
* ZLA_PORPVGRW computes ... .
+* ZLA_PORPVGRW computes the reciprocal pivot growth factor
+* norm(A)/norm(U). The "max absolute element" norm is used. If this is
+* much less than 1, the stability of the LU factorization of the
+* (equilibrated) matrix A could be poor. This also means that the
+* solution X, estimated condition numbers, and error bounds could be
+* unreliable.
*
* Arguments
* =========
*
+* UPLO (input) CHARACTER*1
+* = 'U': Upper triangle of A is stored;
+* = 'L': Lower triangle of A is stored.
+*
+* NCOLS (input) INTEGER
+* The number of columns of the matrix A. NCOLS >= 0.
+*
+* A (input) COMPLEX*16 array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) COMPLEX*16 array, dimension (LDAF,N)
+* The triangular factor U or L from the Cholesky factorization
+* A = U**T*U or A = L*L**T, as computed by ZPOTRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* WORK (input) COMPLEX*16 array, dimension (2*N)
+*
* =====================================================================
*
* .. Local Scalars ..
Modified: lapack/trunk/SRC/zla_rpvgrw.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/zla_rpvgrw.f?rev=650
==============================================================================
 lapack/trunk/SRC/zla_rpvgrw.f (original)
+++ lapack/trunk/SRC/zla_rpvgrw.f Tue Apr 7 20:05:18 2009
@@ 20,11 +20,36 @@
* Purpose
* =======
*
* ZLA_RPVGRW computes ... .
+* ZLA_RPVGRW computes the reciprocal pivot growth factor
+* norm(A)/norm(U). The "max absolute element" norm is used. If this is
+* much less than 1, the stability of the LU factorization of the
+* (equilibrated) matrix A could be poor. This also means that the
+* solution X, estimated condition numbers, and error bounds could be
+* unreliable.
*
* Arguments
* =========
*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* NCOLS (input) INTEGER
+* The number of columns of the matrix A. NCOLS >= 0.
+*
+* A (input) DOUBLE PRECISION array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) DOUBLE PRECISION array, dimension (LDAF,N)
+* The factors L and U from the factorization
+* A = P*L*U as computed by ZGETRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
* =====================================================================
*
* .. Local Scalars ..
@@ 44,7 +69,7 @@
* .. Executable Statements ..
*
RPVGRW = 1.0D+0
*
+
DO J = 1, NCOLS
AMAX = 0.0D+0
UMAX = 0.0D+0
Modified: lapack/trunk/SRC/zla_syrcond_c.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/zla_syrcond_c.f?rev=650
==============================================================================
 lapack/trunk/SRC/zla_syrcond_c.f (original)
+++ lapack/trunk/SRC/zla_syrcond_c.f Tue Apr 7 20:05:18 2009
@@ 1,6 +1,6 @@
 DOUBLE PRECISION FUNCTION ZLA_SYRCOND_C( UPLO, N, A, LDA, AF,
 $ LDAF, IPIV, C, CAPPLY, INFO, WORK,
 $ RWORK )
+ DOUBLE PRECISION FUNCTION ZLA_SYRCOND_C( UPLO, N, A, LDA, AF,
+ $ LDAF, IPIV, C, CAPPLY,
+ $ INFO, WORK, RWORK )
*
*  LAPACK routine (version 3.2) 
*  Contributed by James Demmel, Deaglan Halligan, Yozo Hida and 
@@ 32,11 +32,46 @@
* Arguments
* =========
*
* C DOUBLE PRECISION vector.
+* UPLO (input) CHARACTER*1
+* = 'U': Upper triangle of A is stored;
+* = 'L': Lower triangle of A is stored.
*
* WORK COMPLEX*16 workspace of size 2*N.
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
*
* RWORK DOUBLE PRECISION workspace of size N.
+* A (input) COMPLEX*16 array, dimension (LDA,N)
+* On entry, the NbyN matrix A
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) COMPLEX*16 array, dimension (LDAF,N)
+* The block diagonal matrix D and the multipliers used to
+* obtain the factor U or L as computed by ZSYTRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* IPIV (input) INTEGER array, dimension (N)
+* Details of the interchanges and the block structure of D
+* as determined by ZSYTRF.
+*
+* C (input) DOUBLE PRECISION array, dimension (N)
+* The vector C in the formula op(A) * inv(diag(C)).
+*
+* CAPPLY (input) LOGICAL
+* If .TRUE. then access the vector C in the formula above.
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* i > 0: The ith argument is invalid.
+*
+* WORK (input) COMPLEX*16 array, dimension (2*N).
+* Workspace.
+*
+* RWORK (input) DOUBLE PRECISION array, dimension (N).
+* Workspace.
*
* =====================================================================
*
Modified: lapack/trunk/SRC/zla_syrcond_x.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/zla_syrcond_x.f?rev=650
==============================================================================
 lapack/trunk/SRC/zla_syrcond_x.f (original)
+++ lapack/trunk/SRC/zla_syrcond_x.f Tue Apr 7 20:05:18 2009
@@ 1,5 +1,6 @@
 DOUBLE PRECISION FUNCTION ZLA_SYRCOND_X( UPLO, N, A, LDA, AF,
 $ LDAF, IPIV, X, INFO, WORK, RWORK )
+ DOUBLE PRECISION FUNCTION ZLA_SYRCOND_X( UPLO, N, A, LDA, AF,
+ $ LDAF, IPIV, X, INFO,
+ $ WORK, RWORK )
*
*  LAPACK routine (version 3.2) 
*  Contributed by James Demmel, Deaglan Halligan, Yozo Hida and 
@@ 30,11 +31,43 @@
* Arguments
* =========
*
* C COMPLEX*16 vector.
+* UPLO (input) CHARACTER*1
+* = 'U': Upper triangle of A is stored;
+* = 'L': Lower triangle of A is stored.
*
* WORK COMPLEX*16 workspace of size 2*N.
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
*
* RWORK DOUBLE PRECISION workspace of size N.
+* A (input) COMPLEX*16 array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) COMPLEX*16 array, dimension (LDAF,N)
+* The block diagonal matrix D and the multipliers used to
+* obtain the factor U or L as computed by ZSYTRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* IPIV (input) INTEGER array, dimension (N)
+* Details of the interchanges and the block structure of D
+* as determined by ZSYTRF.
+*
+* X (input) COMPLEX*16 array, dimension (N)
+* The vector X in the formula op(A) * diag(X).
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* i > 0: The ith argument is invalid.
+*
+* WORK (input) COMPLEX*16 array, dimension (2*N).
+* Workspace.
+*
+* RWORK (input) DOUBLE PRECISION array, dimension (N).
+* Workspace.
*
* =====================================================================
*
Modified: lapack/trunk/SRC/zla_syrfsx_extended.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/zla_syrfsx_extended.f?rev=650
==============================================================================
 lapack/trunk/SRC/zla_syrfsx_extended.f (original)
+++ lapack/trunk/SRC/zla_syrfsx_extended.f Tue Apr 7 20:05:18 2009
@@ 1,9 +1,10 @@
SUBROUTINE ZLA_SYRFSX_EXTENDED( PREC_TYPE, UPLO, N, NRHS, A, LDA,
$ AF, LDAF, IPIV, COLEQU, C, B, LDB,
 $ Y, LDY, BERR_OUT, N_NORMS, ERRS_N,
 $ ERRS_C, RES, AYB, DY, Y_TAIL,
 $ RCOND, ITHRESH, RTHRESH, DZ_UB,
 $ IGNORE_CWISE, INFO )
+ $ Y, LDY, BERR_OUT, N_NORMS,
+ $ ERR_BNDS_NORM, ERR_BNDS_COMP, RES,
+ $ AYB, DY, Y_TAIL, RCOND, ITHRESH,
+ $ RTHRESH, DZ_UB, IGNORE_CWISE,
+ $ INFO )
*
*  LAPACK routine (version 3.2) 
*  Contributed by James Demmel, Deaglan Halligan, Yozo Hida and 
@@ 27,17 +28,254 @@
COMPLEX*16 A( LDA, * ), AF( LDAF, * ), B( LDB, * ),
$ Y( LDY, * ), RES( * ), DY( * ), Y_TAIL( * )
DOUBLE PRECISION C( * ), AYB( * ), RCOND, BERR_OUT( * ),
 $ ERRS_N( NRHS, * ), ERRS_C( NRHS, * )
+ $ ERR_BNDS_NORM( NRHS, * ),
+ $ ERR_BNDS_COMP( NRHS, * )
* ..
*
* Purpose
* =======
*
* ZLA_SYRFSX_EXTENDED computes ... .
+*
+* ZLA_SYRFSX_EXTENDED improves the computed solution to a system of
+* linear equations by performing extraprecise iterative refinement
+* and provides error bounds and backward error estimates for the solution.
+* This subroutine is called by ZSYRFSX to perform iterative refinement.
+* In addition to normwise error bound, the code provides maximum
+* componentwise error bound if possible. See comments for ERR_BNDS_NORM
+* and ERR_BNDS_COMP for details of the error bounds. Note that this
+* subroutine is only resonsible for setting the second fields of
+* ERR_BNDS_NORM and ERR_BNDS_COMP.
*
* Arguments
* =========
*
+* PREC_TYPE (input) INTEGER
+* Specifies the intermediate precision to be used in refinement.
+* The value is defined by ILAPREC(P) where P is a CHARACTER and
+* P = 'S': Single
+* = 'D': Double
+* = 'I': Indigenous
+* = 'X', 'E': Extra
+*
+* UPLO (input) CHARACTER*1
+* = 'U': Upper triangle of A is stored;
+* = 'L': Lower triangle of A is stored.
+*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* NRHS (input) INTEGER
+* The number of righthandsides, i.e., the number of columns of the
+* matrix B.
+*
+* A (input) COMPLEX*16 array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) COMPLEX*16 array, dimension (LDAF,N)
+* The block diagonal matrix D and the multipliers used to
+* obtain the factor U or L as computed by ZSYTRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* IPIV (input) INTEGER array, dimension (N)
+* Details of the interchanges and the block structure of D
+* as determined by ZSYTRF.
+*
+* COLEQU (input) LOGICAL
+* If .TRUE. then column equilibration was done to A before calling
+* this routine. This is needed to compute the solution and error
+* bounds correctly.
+*
+* C (input) DOUBLE PRECISION array, dimension (N)
+* The column scale factors for A. If COLEQU = .FALSE., C
+* is not accessed. If C is input, each element of C should be a power
+* of the radix to ensure a reliable solution and error estimates.
+* Scaling by powers of the radix does not cause rounding errors unless
+* the result underflows or overflows. Rounding errors during scaling
+* lead to refining with a matrix that is not equivalent to the
+* input matrix, producing error estimates that may not be
+* reliable.
+*
+* B (input) COMPLEX*16 array, dimension (LDB,NRHS)
+* The righthandside matrix B.
+*
+* LDB (input) INTEGER
+* The leading dimension of the array B. LDB >= max(1,N).
+*
+* Y (input/output) COMPLEX*16 array, dimension
+* (LDY,NRHS)
+* On entry, the solution matrix X, as computed by ZSYTRS.
+* On exit, the improved solution matrix Y.
+*
+* LDY (input) INTEGER
+* The leading dimension of the array Y. LDY >= max(1,N).
+*
+* BERR_OUT (output) DOUBLE PRECISION array, dimension (NRHS)
+* On exit, BERR_OUT(j) contains the componentwise relative backward
+* error for righthandside j from the formula
+* max(i) ( abs(RES(i)) / ( abs(op(A_s))*abs(Y) + abs(B_s) )(i) )
+* where abs(Z) is the componentwise absolute value of the matrix
+* or vector Z. This is computed by ZLA_LIN_BERR.
+*
+* N_NORMS (input) INTEGER
+* Determines which error bounds to return (see ERR_BNDS_NORM
+* and ERR_BNDS_COMP).
+* If N_NORMS >= 1 return normwise error bounds.
+* If N_NORMS >= 2 return componentwise error bounds.
+*
+* ERR_BNDS_NORM (input/output) DOUBLE PRECISION array, dimension
+* (NRHS, N_ERR_BNDS)
+* For each righthand side, this array contains information about
+* various error bounds and condition numbers corresponding to the
+* normwise relative error, which is defined as follows:
+*
+* Normwise relative error in the ith solution vector:
+* max_j (abs(XTRUE(j,i)  X(j,i)))
+* 
+* max_j abs(X(j,i))
+*
+* The array is indexed by the type of error information as described
+* below. There currently are up to three pieces of information
+* returned.
+*
+* The first index in ERR_BNDS_NORM(i,:) corresponds to the ith
+* righthand side.
+*
+* The second index in ERR_BNDS_NORM(:,err) contains the following
+* three fields:
+* err = 1 "Trust/don't trust" boolean. Trust the answer if the
+* reciprocal condition number is less than the threshold
+* sqrt(n) * slamch('Epsilon').
+*
+* err = 2 "Guaranteed" error bound: The estimated forward error,
+* almost certainly within a factor of 10 of the true error
+* so long as the next entry is greater than the threshold
+* sqrt(n) * slamch('Epsilon'). This error bound should only
+* be trusted if the previous boolean is true.
+*
+* err = 3 Reciprocal condition number: Estimated normwise
+* reciprocal condition number. Compared with the threshold
+* sqrt(n) * slamch('Epsilon') to determine if the error
+* estimate is "guaranteed". These reciprocal condition
+* numbers are 1 / (norm(Z^{1},inf) * norm(Z,inf)) for some
+* appropriately scaled matrix Z.
+* Let Z = S*A, where S scales each row by a power of the
+* radix so all absolute row sums of Z are approximately 1.
+*
+* This subroutine is only responsible for setting the second field
+* above.
+* See Lapack Working Note 165 for further details and extra
+* cautions.
+*
+* ERR_BNDS_COMP (input/output) DOUBLE PRECISION array, dimension
+* (NRHS, N_ERR_BNDS)
+* For each righthand side, this array contains information about
+* various error bounds and condition numbers corresponding to the
+* componentwise relative error, which is defined as follows:
+*
+* Componentwise relative error in the ith solution vector:
+* abs(XTRUE(j,i)  X(j,i))
+* max_j 
+* abs(X(j,i))
+*
+* The array is indexed by the righthand side i (on which the
+* componentwise relative error depends), and the type of error
+* information as described below. There currently are up to three
+* pieces of information returned for each righthand side. If
+* componentwise accuracy is not requested (PARAMS(3) = 0.0), then
+* ERR_BNDS_COMP is not accessed. If N_ERR_BNDS .LT. 3, then at most
+* the first (:,N_ERR_BNDS) entries are returned.
+*
+* The first index in ERR_BNDS_COMP(i,:) corresponds to the ith
+* righthand side.
+*
+* The second index in ERR_BNDS_COMP(:,err) contains the following
+* three fields:
+* err = 1 "Trust/don't trust" boolean. Trust the answer if the
+* reciprocal condition number is less than the threshold
+* sqrt(n) * slamch('Epsilon').
+*
+* err = 2 "Guaranteed" error bound: The estimated forward error,
+* almost certainly within a factor of 10 of the true error
+* so long as the next entry is greater than the threshold
+* sqrt(n) * slamch('Epsilon'). This error bound should only
+* be trusted if the previous boolean is true.
+*
+* err = 3 Reciprocal condition number: Estimated componentwise
+* reciprocal condition number. Compared with the threshold
+* sqrt(n) * slamch('Epsilon') to determine if the error
+* estimate is "guaranteed". These reciprocal condition
+* numbers are 1 / (norm(Z^{1},inf) * norm(Z,inf)) for some
+* appropriately scaled matrix Z.
+* Let Z = S*(A*diag(x)), where x is the solution for the
+* current righthand side and S scales each row of
+* A*diag(x) by a power of the radix so all absolute row
+* sums of Z are approximately 1.
+*
+* This subroutine is only responsible for setting the second field
+* above.
+* See Lapack Working Note 165 for further details and extra
+* cautions.
+*
+* RES (input) COMPLEX*16 array, dimension (N)
+* Workspace to hold the intermediate residual.
+*
+* AYB (input) DOUBLE PRECISION array, dimension (N)
+* Workspace.
+*
+* DY (input) COMPLEX*16 array, dimension (N)
+* Workspace to hold the intermediate solution.
+*
+* Y_TAIL (input) COMPLEX*16 array, dimension (N)
+* Workspace to hold the trailing bits of the intermediate solution.
+*
+* RCOND (input) DOUBLE PRECISION
+* Reciprocal scaled condition number. This is an estimate of the
+* reciprocal Skeel condition number of the matrix A after
+* equilibration (if done). If this is less than the machine
+* precision (in particular, if it is zero), the matrix is singular
+* to working precision. Note that the error may still be small even
+* if this number is very small and the matrix appears ill
+* conditioned.
+*
+* ITHRESH (input) INTEGER
+* The maximum number of residual computations allowed for
+* refinement. The default is 10. For 'aggressive' set to 100 to
+* permit convergence using approximate factorizations or
+* factorizations other than LU. If the factorization uses a
+* technique other than Gaussian elimination, the guarantees in
+* ERR_BNDS_NORM and ERR_BNDS_COMP may no longer be trustworthy.
+*
+* RTHRESH (input) DOUBLE PRECISION
+* Determines when to stop refinement if the error estimate stops
+* decreasing. Refinement will stop when the next solution no longer
+* satisfies norm(dx_{i+1}) < RTHRESH * norm(dx_i) where norm(Z) is
+* the infinity norm of Z. RTHRESH satisfies 0 < RTHRESH <= 1. The
+* default value is 0.5. For 'aggressive' set to 0.9 to permit
+* convergence on extremely illconditioned matrices. See LAWN 165
+* for more details.
+*
+* DZ_UB (input) DOUBLE PRECISION
+* Determines when to start considering componentwise convergence.
+* Componentwise convergence is only considered after each component
+* of the solution Y is stable, which we definte as the relative
+* change in each component being less than DZ_UB. The default value
+* is 0.25, requiring the first bit to be stable. See LAWN 165 for
+* more details.
+*
+* IGNORE_CWISE (input) LOGICAL
+* If .TRUE. then ignore componentwise convergence. Default value
+* is .FALSE..
+*
+* INFO (output) INTEGER
+* = 0: Successful exit.
+* < 0: if INFO = i, the ith argument to ZSYTRS had an illegal
+* value
+*
* =====================================================================
*
* .. Local Scalars ..
@@ 149,7 +387,7 @@
$ Y( 1, J ), 1, DCMPLX(1.0D+0), RES, 1, PREC_TYPE )
ELSE
CALL BLAS_ZSYMV2_X(UPLO2, N, DCMPLX(1.0D+0), A, LDA,
 $ Y(1, J), Y_TAIL, 1, DCMPLX(1.0D+0), RES, 1,
+ $ Y(1, J), Y_TAIL, 1, DCMPLX(1.0D+0), RES, 1,
$ PREC_TYPE)
END IF
@@ 280,10 +518,12 @@
* Compute error bounds.
*
IF ( N_NORMS .GE. 1 ) THEN
 ERRS_N( J, LA_LINRX_ERR_I ) = FINAL_DX_X / (1  DXRATMAX)
+ ERR_BNDS_NORM( J, LA_LINRX_ERR_I ) =
+ $ FINAL_DX_X / (1  DXRATMAX)
END IF
IF ( N_NORMS .GE. 2 ) THEN
 ERRS_C( J, LA_LINRX_ERR_I ) = FINAL_DZ_Z / (1  DZRATMAX)
+ ERR_BNDS_COMP( J, LA_LINRX_ERR_I ) =
+ $ FINAL_DZ_Z / (1  DZRATMAX)
END IF
*
* Compute componentwise relative backward error from formula
Modified: lapack/trunk/SRC/zla_syrpvgrw.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/zla_syrpvgrw.f?rev=650
==============================================================================
 lapack/trunk/SRC/zla_syrpvgrw.f (original)
+++ lapack/trunk/SRC/zla_syrpvgrw.f Tue Apr 7 20:05:18 2009
@@ 1,5 +1,5 @@
DOUBLE PRECISION FUNCTION ZLA_SYRPVGRW( UPLO, N, INFO, A, LDA, AF,
 $ LDAF, IPIV, WORK )
+ $ LDAF, IPIV, WORK )
*
*  LAPACK routine (version 3.2) 
*  Contributed by James Demmel, Deaglan Halligan, Yozo Hida and 
@@ 24,11 +24,50 @@
* Purpose
* =======
*
* ZLA_SYRPVGRW computes ... .
+* ZLA_SYRPVGRW computes the reciprocal pivot growth factor
+* norm(A)/norm(U). The "max absolute element" norm is used. If this is
+* much less than 1, the stability of the LU factorization of the
+* (equilibrated) matrix A could be poor. This also means that the
+* solution X, estimated condition numbers, and error bounds could be
+* unreliable.
*
* Arguments
* =========
*
+* UPLO (input) CHARACTER*1
+* = 'U': Upper triangle of A is stored;
+* = 'L': Lower triangle of A is stored.
+*
+* N (input) INTEGER
+* The number of linear equations, i.e., the order of the
+* matrix A. N >= 0.
+*
+* INFO (input) INTEGER
+* The value of INFO returned from ZSYTRF, .i.e., the pivot in
+* column INFO is exactly 0.
+*
+* NCOLS (input) INTEGER
+* The number of columns of the matrix A. NCOLS >= 0.
+*
+* A (input) COMPLEX*16 array, dimension (LDA,N)
+* On entry, the NbyN matrix A.
+*
+* LDA (input) INTEGER
+* The leading dimension of the array A. LDA >= max(1,N).
+*
+* AF (input) COMPLEX*16 array, dimension (LDAF,N)
+* The block diagonal matrix D and the multipliers used to
+* obtain the factor U or L as computed by ZSYTRF.
+*
+* LDAF (input) INTEGER
+* The leading dimension of the array AF. LDAF >= max(1,N).
+*
+* IPIV (input) INTEGER array, dimension (N)
+* Details of the interchanges and the block structure of D
+* as determined by ZSYTRF.
+*
+* WORK (input) COMPLEX*16 array, dimension (2*N)
+*
* =====================================================================
*
* .. Local Scalars ..
Modified: lapack/trunk/SRC/zlarscl2.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/zlarscl2.f?rev=650
==============================================================================
 lapack/trunk/SRC/zlarscl2.f (original)
+++ lapack/trunk/SRC/zlarscl2.f Tue Apr 7 20:05:18 2009
@@ 23,21 +23,32 @@
*
* ZLARSCL2 performs a reciprocal diagonal scaling on an vector:
* x < inv(D) * x
* where the diagonal matrix D is stored as a vector.
* Eventually to be replaced by BLAS_sge_diag_scale in the new BLAS
+* where the DOUBLE PRECISION diagonal matrix D is stored as a vector.
+*
+* Eventually to be replaced by BLAS_zge_diag_scale in the new BLAS
* standard.
*
* Arguments
* =========
* N (input) INTEGER
* The size of the vectors X and D.
*
* D (input) DOUBLE PRECISION array, length N
* Diagonal matrix D, stored as a vector of length N.
* X (input/output) COMPLEX*16 array, length N
* On entry, the vector X to be scaled by D.
* On exit, the scaled vector.
* ..
+* M (input) INTEGER
+* The number of rows of D and X. M >= 0.
+*
+* N (input) INTEGER
+* The number of columns of D and X. N >= 0.
+*
+* D (input) DOUBLE PRECISION array, length M
+* Diagonal matrix D, stored as a vector of length M.
+*
+* X (input/output) COMPLEX*16 array, dimension (LDX,N)
+* On entry, the vector X to be scaled by D.
+* On exit, the scaled vector.
+*
+* LDX (input) INTEGER
+* The leading dimension of the vector X. LDX >= 0.
+*
+* =====================================================================
+*
* .. Local Scalars ..
INTEGER I, J
* ..
@@ 45,10 +56,10 @@
*
DO J = 1, N
DO I = 1, M
 X(I,J) = X(I,J) / D(I)
+ X( I, J ) = X( I, J ) / D( I )
END DO
END DO
*
+
RETURN
END
*
+
Modified: lapack/trunk/SRC/zlascl2.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/zlascl2.f?rev=650
==============================================================================
 lapack/trunk/SRC/zlascl2.f (original)
+++ lapack/trunk/SRC/zlascl2.f Tue Apr 7 20:05:18 2009
@@ 23,21 +23,32 @@
*
* ZLASCL2 performs a diagonal scaling on a vector:
* x < D * x
* where the diagonal matrix D is stored as a vector.
* Eventually to be replaced by BLAS_sge_diag_scale in the new BLAS
+* where the DOUBLE PRECISION diagonal matrix D is stored as a vector.
+*
+* Eventually to be replaced by BLAS_zge_diag_scale in the new BLAS
* standard.
*
* Arguments
* =========
* N (input) INTEGER
* The size of the vectors X and D.
*
* D (input) DOUBLE PRECISION array, length N
* Diagonal matrix D, stored as a vector of length N.
* X (input/output) COMPLEX*16 array, length N
* On entry, the vector X to be scaled by D.
* On exit, the scaled vector.
* ..
+* M (input) INTEGER
+* The number of rows of D and X. M >= 0.
+*
+* N (input) INTEGER
+* The number of columns of D and X. N >= 0.
+*
+* D (input) DOUBLE PRECISION array, length M
+* Diagonal matrix D, stored as a vector of length M.
+*
+* X (input/output) COMPLEX*16 array, dimension (LDX,N)
+* On entry, the vector X to be scaled by D.
+* On exit, the scaled vector.
+*
+* LDX (input) INTEGER
+* The leading dimension of the vector X. LDX >= 0.
+*
+* =====================================================================
+*
* .. Local Scalars ..
INTEGER I, J
* ..
@@ 45,10 +56,10 @@
*
DO J = 1, N
DO I = 1, M
 X(I,J) = X(I,J) * D(I)
+ X( I, J ) = X( I, J ) * D( I )
END DO
END DO
*
+
RETURN
END
*
+
Modified: lapack/trunk/SRC/zporfsx.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/zporfsx.f?rev=650
==============================================================================
 lapack/trunk/SRC/zporfsx.f (original)
+++ lapack/trunk/SRC/zporfsx.f Tue Apr 7 20:05:18 2009
@@ 1,4 +1,4 @@
 Subroutine ZPORFSX( UPLO, EQUED, N, NRHS, A, LDA, AF, LDAF, S, B,
+ SUBROUTINE ZPORFSX( UPLO, EQUED, N, NRHS, A, LDA, AF, LDAF, S, B,
$ LDB, X, LDX, RCOND, BERR, N_ERR_BNDS,
$ ERR_BNDS_NORM, ERR_BNDS_COMP, NPARAMS, PARAMS,
$ WORK, RWORK, INFO )
@@ 35,7 +35,8 @@
* definite, and provides error bounds and backward error estimates
* for the solution. In addition to normwise error bound, the code
* provides maximum componentwise error bound if possible. See
* comments for ERR_BNDS for details of the error bounds.
+* comments for ERR_BNDS_NORM and ERR_BNDS_COMP for details of the
+* error bounds.
*
* The original system of linear equations may have been equilibrated
* before calling this routine, as described by arguments EQUED and S
Modified: lapack/trunk/SRC/zsyrfsx.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/zsyrfsx.f?rev=650
==============================================================================
 lapack/trunk/SRC/zsyrfsx.f (original)
+++ lapack/trunk/SRC/zsyrfsx.f Tue Apr 7 20:05:18 2009
@@ 1,4 +1,4 @@
 Subroutine ZSYRFSX( UPLO, EQUED, N, NRHS, A, LDA, AF, LDAF, IPIV,
+ SUBROUTINE ZSYRFSX( UPLO, EQUED, N, NRHS, A, LDA, AF, LDAF, IPIV,
$ S, B, LDB, X, LDX, RCOND, BERR, N_ERR_BNDS,
$ ERR_BNDS_NORM, ERR_BNDS_COMP, NPARAMS, PARAMS,
$ WORK, RWORK, INFO )
@@ 36,7 +36,7 @@
* provides error bounds and backward error estimates for the
* solution. In addition to normwise error bound, the code provides
* maximum componentwise error bound if possible. See comments for
* ERR_BNDS_N and ERR_BNDS_C for details of the error bounds.
+* ERR_BNDS_NORM and ERR_BNDS_COMP for details of the error bounds.
*
* The original system of linear equations may have been equilibrated
* before calling this routine, as described by arguments EQUED and S
Modified: lapack/trunk/SRC/zsysvxx.f
URL: https://icl.cs.utk.edu/trac/lapackdev/file/lapack/trunk/SRC/zsysvxx.f?rev=650
==============================================================================
 lapack/trunk/SRC/zsysvxx.f (original)
+++ lapack/trunk/SRC/zsysvxx.f Tue Apr 7 20:05:18 2009
@@ 115,6 +115,10 @@
* = 'E': The matrix A will be equilibrated if necessary, then
* copied to AF and factored.
*
+* UPLO (input) CHARACTER*1
+* = 'U': Upper triangle of A is stored;
+* = 'L': Lower triangle of A is stored.
+*
* N (input) INTEGER
* The number of linear equations, i.e., the order of the
* matrix A. N >= 0.