Purpose ======= LA_SPSVX computes the solution to a linear system of equations A*X = B, where A is a real or complex symmetric matrix stored in packed format and X and B are rectangular matrices or vectors. LA_HPSVX computes the solution to a linear system of equations A*X = B, where A is a complex Hermitian matrix stored in packed format and X and B are rectangular matrices or vectors. LA_SPSVX and LA_HPSVX can also optionally estimate the condition number of A and compute error bounds. ========= SUBROUTINE LA_SPSVX / LA_HPSVX( AP, B, X, UPLO=uplo, AFP=afp, & IPIV=ipiv, FACT=fact, FERR=ferr, BERR=berr, & RCOND=rcond, INFO=info ) (), INTENT(IN) :: AP(:), (), INTENT(OUT) :: CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO (), INTENT(INOUT), OPTIONAL :: AFP(:) INTEGER, INTENT(INOUT), OPTIONAL :: IPIV(:) CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: FACT REAL(), INTENT(OUT), OPTIONAL :: , RCOND INTEGER, INTENT(OUT), OPTIONAL :: INFO where ::= REAL | COMPLEX ::= KIND(1.0) | KIND(1.0D0) ::= B(:,:) | B(:) ::= X(:,:) | X(:) ::= FERR(:), BERR(:) | FERR, BERR Arguments ========= AP (input) REAL or COMPLEX array, shape (:) with size(AP ) = n*(n + 1)/2, where n is the order of A. On entry, the upper or lower triangle of matrix A in packed storage. The elements are stored columnwise as follows: if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j<=n; if UPLO = 'L', AP(i + (j-1)*(2n-j)/2) = A(i,j) for 1<=j<=i<=n. B (input) REAL or COMPLEX array, shape (:,:) with size(B,1) = n or shape (:) with size(B) = n. The matrix B. X (output) REAL or COMPLEX array, shape (:,:) with size(X,1) = n and size(X,2) = size(B,2), or shape (:) with size(X) = n. The solution matrix X . UPLO Optional (input) CHARACTER(LEN=1). = 'U': Upper triangle of A is stored; = 'L': Lower triangle of A is stored. Default value: 'U'. AFP Optional (input or output) REAL or COMPLEX array, shape (:,:) with the same size as AP. If FACT = 'F', then AFP is an input argument that contains the block diagonal matrix D and the multipliers used to obtain the factor L or U from the factorization of A, returned by a previous call to LA_SPSVX or LA_HPSVX and stored as a packed triangular matrix in the same storage format as A. If FACT = 'N', then AFP is an output argument that contains the block diagonal matrix D and the multipliers used to obtain the factor L or U from the factorization of A, stored as a packed triangular matrix in the same storage format as A. IPIV Optional (input or output) INTEGER array, shape (:) with size(IPIV) = size(A,1). If FACT = 'F', then IPIV is an input argument that contains details of the row and column interchanges and the block structure of D. If IPIV(k) > 0 , then rows and columns k and IPIV(k) were interchanged and D(k,k) is a 1 by 1 diagonal block. If IPIV(k) < 0 , then there are two cases: 1. If UPLO = 'U' and IPIV(k) = IPIV(k-1) < 0, then rows and columns (k-1) and -IPIV(k) were interchanged and D(k-1:k,k-1:k) is a 2 by 2 diagonal block. 2. If UPLO = 'L' and IPIV(k) = IPIV(k+1) < 0, then rows and columns (k+1) and -IPIV(k) were interchanged and D(k:k+1,k:k+1) is a 2 by 2 diagonal block. If FACT = 'N', then IPIV is an output argument and on exit contains details of the interchanges and the block structure of D (as described above). FACT Optional (input) CHARACTER(LEN=1). Specifies whether the factored form of A has been supplied on entry. = 'N': The matrix A will be copied to AFP and factored. = 'F': AFP and IPIV contain the factored form of A. Default value: 'N'. FERR Optional (output) REAL array of shape (:), with size(FERR)= size(X,2), or REAL scalar. The estimated forward error bound for each solution vector X(j) (the j-th column of the solution matrix X). If XTRUE is the true solution corresponding to X(j) , FERR(j) is an estimated upper bound for the magnitude of the largest element in (X(j)-XTRUE) divided by the magnitude of the largest element in X(j). The estimate is as reliable as the estimate for RCOND, and is almost always a slight overestimate of the true error. BERR Optional (output) REAL array of shape (:), with size(BERR) = size(X,2), or REAL scalar. The componentwise relative backward error of each solution vector X(j) (i.e., the smallest relative change in any element of A or B that makes X(j) an exact solution). RCOND Optional (output) REAL The estimate of the reciprocal condition number of A. If RCOND is less than the machine precision, the matrix is singular to working precision. This condition is indicated by a return code of INFO > 0. INFO (output) INTEGER = 0: successful exit. < 0: if INFO = -i, the i-th argument had an illegal value. > 0: if INFO = i, and i is <= n: D(i,i) = 0. The factorization has been completed, but the block diagonal matrix D is singular, so the solution could not be computed. = n+1: D is nonsingular, but RCOND is less than machine precision, so the matrix is singular to working precision. Nevertheless, the solution and error bounds are computed because the computed solution can be more accurate than the value of RCOND would suggest. n is the order of A. If INFO is not present and an error occurs, then the program is terminated with an error message.