table of contents
PSPOSVX(l) | LAPACK routine (version 1.5) | PSPOSVX(l) |
NAME¶
PSPOSVX - use the Cholesky factorization A = U**T*U or A = L*L**T to compute the solution to a real system of linear equations A(IA:IA+N-1,JA:JA+N-1) * X = B(IB:IB+N-1,JB:JB+NRHS-1),SYNOPSIS¶
- SUBROUTINE PSPOSVX(
- FACT, UPLO, N, NRHS, A, IA, JA, DESCA, AF, IAF, JAF, DESCAF, EQUED, SR, SC, B, IB, JB, DESCB, X, IX, JX, DESCX, RCOND, FERR, BERR, WORK, LWORK, IWORK, LIWORK, INFO )
- CHARACTER
- EQUED, FACT, UPLO
- INTEGER
- IA, IAF, IB, INFO, IX, JA, JAF, JB, JX, LIWORK, LWORK, N, NRHS
- REAL
- RCOND
- INTEGER
- DESCA( * ), DESCAF( * ), DESCB( * ), DESCX( * ), IWORK( * )
- REAL
- A( * ), AF( * ), B( * ), BERR( * ), FERR( * ), SC( * ), SR( * ), WORK( * ), X( * )
PURPOSE¶
PSPOSVX uses the Cholesky factorization A = U**T*U or A = L*L**T to compute the solution to a real system of linear equationsDTYPE_A = 1.
the BLACS process grid A is distribu-
ted over. The context itself is glo-
bal, but the handle (the integer
value) may vary.
array A.
array A.
the rows of the array.
the columns of the array.
row of the array A is distributed. CSRC_A (global) DESCA( CSRC_ ) The process column over which the
first column of the array A is
distributed.
array. LLD_A >= MAX(1,LOCr(M_A)).
LOCr( M ) = NUMROC( M, MB_A, MYROW, RSRC_A, NPROW ),
LOCc( N ) = NUMROC( N, NB_A, MYCOL, CSRC_A, NPCOL ). An upper bound for these quantities may be computed by:
LOCr( M ) <= ceil( ceil(M/MB_A)/NPROW )*MB_A
LOCc( N ) <= ceil( ceil(N/NB_A)/NPCOL )*NB_A
DESCRIPTION¶
The following steps are performed:the system:
diag(SR) * A * diag(SC) * inv(diag(SC)) * X = diag(SR) * B
Whether or not the system will be equilibrated depends on the
scaling of the matrix A, but if equilibration is used, A is
overwritten by diag(SR)*A*diag(SC) and B by diag(SR)*B.
factor the matrix A (after equilibration if FACT = 'E') as
A = U**T* U, if UPLO = 'U', or
A = L * L**T, if UPLO = 'L',
where U is an upper triangular matrix and L is a lower triangular
matrix.
of the matrix A. If the reciprocal of the condition number is
less than machine precision, steps 4-6 are skipped.
of A.
matrix and calculate error bounds and backward error estimates
for it.
diag(SR) so that it solves the original system before
equilibration.
ARGUMENTS¶
- FACT (global input) CHARACTER
- Specifies whether or not the factored form of the matrix A
is supplied on entry, and if not, whether the matrix A should be
equilibrated before it is factored. = 'F': On entry, AF contains the
factored form of A. If EQUED = 'Y', the matrix A has been equilibrated
with scaling factors given by S. A and AF will not be modified. = 'N': The
matrix A will be copied to AF and factored.
- UPLO (global input) CHARACTER
- = 'U': Upper triangle of A is stored;
- N (global input) INTEGER
- The number of rows and columns to be operated on, i.e. the order of the distributed submatrix A(IA:IA+N-1,JA:JA+N-1). N >= 0.
- NRHS (global input) INTEGER
- The number of right hand sides, i.e., the number of columns of the distributed submatrices B and X. NRHS >= 0.
- A (local input/local output) REAL pointer into
- the local memory to an array of local dimension ( LLD_A,
LOCc(JA+N-1) ). On entry, the symmetric matrix A, except if FACT = 'F' and
EQUED = 'Y', then A must contain the equilibrated matrix
diag(SR)*A*diag(SC). If UPLO = 'U', the leading N-by-N upper triangular
part of A contains the upper triangular part of the matrix A, and the
strictly lower triangular part of A is not referenced. If UPLO = 'L', the
leading N-by-N lower triangular part of A contains the lower triangular
part of the matrix A, and the strictly upper triangular part of A is not
referenced. A is not modified if FACT = 'F' or 'N', or if FACT = 'E' and
EQUED = 'N' on exit.
- IA (global input) INTEGER
- The row index in the global array A indicating the first row of sub( A ).
- JA (global input) INTEGER
- The column index in the global array A indicating the first column of sub( A ).
- DESCA (global and local input) INTEGER array of dimension DLEN_.
- The array descriptor for the distributed matrix A.
- AF (local input or local output) REAL pointer
- into the local memory to an array of local dimension (
LLD_AF, LOCc(JA+N-1)). If FACT = 'F', then AF is an input argument and on
entry contains the triangular factor U or L from the Cholesky
factorization A = U**T*U or A = L*L**T, in the same storage format as A.
If EQUED .ne. 'N', then AF is the factored form of the equilibrated matrix
diag(SR)*A*diag(SC).
- IAF (global input) INTEGER
- The row index in the global array AF indicating the first row of sub( AF ).
- JAF (global input) INTEGER
- The column index in the global array AF indicating the first column of sub( AF ).
- DESCAF (global and local input) INTEGER array of dimension DLEN_.
- The array descriptor for the distributed matrix AF.
- EQUED (global input/global output) CHARACTER
- Specifies the form of equilibration that was done. = 'N':
No equilibration (always true if FACT = 'N').
- SR (local input/local output) REAL array,
- dimension (LLD_A) The scale factors for A distributed across process rows; not accessed if EQUED = 'N'. SR is an input variable if FACT = 'F'; otherwise, SR is an output variable. If FACT = 'F' and EQUED = 'Y', each element of SR must be positive.
- SC (local input/local output) REAL array,
- dimension (LOC(N_A)) The scale factors for A distributed across process columns; not accessed if EQUED = 'N'. SC is an input variable if FACT = 'F'; otherwise, SC is an output variable. If FACT = 'F' and EQUED = 'Y', each element of SC must be positive.
- B (local input/local output) REAL pointer into
- the local memory to an array of local dimension ( LLD_B, LOCc(JB+NRHS-1) ). On entry, the N-by-NRHS right-hand side matrix B. On exit, if EQUED = 'N', B is not modified; if TRANS = 'N' and EQUED = 'R' or 'B', B is overwritten by diag(R)*B; if TRANS = 'T' or 'C' and EQUED = 'C' or 'B', B is overwritten by diag(C)*B.
- IB (global input) INTEGER
- The row index in the global array B indicating the first row of sub( B ).
- JB (global input) INTEGER
- The column index in the global array B indicating the first column of sub( B ).
- DESCB (global and local input) INTEGER array of dimension DLEN_.
- The array descriptor for the distributed matrix B.
- X (local input/local output) REAL pointer into
- the local memory to an array of local dimension ( LLD_X, LOCc(JX+NRHS-1) ). If INFO = 0, the N-by-NRHS solution matrix X to the original system of equations. Note that A and B are modified on exit if EQUED .ne. 'N', and the solution to the equilibrated system is inv(diag(SC))*X if TRANS = 'N' and EQUED = 'C' or or 'B'.
- IX (global input) INTEGER
- The row index in the global array X indicating the first row of sub( X ).
- JX (global input) INTEGER
- The column index in the global array X indicating the first column of sub( X ).
- DESCX (global and local input) INTEGER array of dimension DLEN_.
- The array descriptor for the distributed matrix X.
- RCOND (global output) REAL
- The estimate of the reciprocal condition number of the matrix A after equilibration (if done). If RCOND is less than the machine precision (in particular, if RCOND = 0), the matrix is singular to working precision. This condition is indicated by a return code of INFO > 0, and the solution and error bounds are not computed.
- FERR (local output) REAL array, dimension (LOC(N_B))
- The estimated forward error bounds for each solution vector X(j) (the j-th column of the solution matrix X). If XTRUE is the true solution, FERR(j) bounds the magnitude of the largest entry in (X(j) - XTRUE) divided by the magnitude of the largest entry in X(j). The quality of the error bound depends on the quality of the estimate of norm(inv(A)) computed in the code; if the estimate of norm(inv(A)) is accurate, the error bound is guaranteed.
- BERR (local output) REAL array, dimension (LOC(N_B))
- The componentwise relative backward error of each solution vector X(j) (i.e., the smallest relative change in any entry of A or B that makes X(j) an exact solution).
- WORK (local workspace/local output) REAL array,
- dimension (LWORK) On exit, WORK(1) returns the minimal and optimal LWORK.
- LWORK (local or global input) INTEGER
- The dimension of the array WORK. LWORK is local input and
must be at least LWORK = MAX( PSPOCON( LWORK ), PSPORFS( LWORK ) ) + LOCr(
N_A ). LWORK = 3*DESCA( LLD_ )
- IWORK (local workspace/local output) INTEGER array,
- dimension (LIWORK) On exit, IWORK(1) returns the minimal and optimal LIWORK.
- LIWORK (local or global input) INTEGER
- The dimension of the array IWORK. LIWORK is local input and
must be at least LIWORK = DESCA( LLD_ ) LIWORK = LOCr(N_A).
- INFO (global output) INTEGER
- = 0: successful exit
12 May 1997 | LAPACK version 1.5 |