table of contents
PCGESVX(l) | LAPACK routine (version 1.5) | PCGESVX(l) |
NAME¶
PCGESVX - use the LU factorization to compute the solution to a complex 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 PCGESVX(
- FACT, TRANS, N, NRHS, A, IA, JA, DESCA, AF, IAF, JAF, DESCAF, IPIV, EQUED, R, C, B, IB, JB, DESCB, X, IX, JX, DESCX, RCOND, FERR, BERR, WORK, LWORK, RWORK, LRWORK, INFO )
- CHARACTER
- EQUED, FACT, TRANS
- INTEGER
- IA, IAF, IB, INFO, IX, JA, JAF, JB, JX, LRWORK, LWORK, N, NRHS
- REAL
- RCOND
- INTEGER
- DESCA( * ), DESCAF( * ), DESCB( * ), DESCX( * ), IPIV( * )
- REAL
- BERR( * ), C( * ), FERR( * ), R( * ), RWORK( * )
- COMPLEX
- A( * ), AF( * ), B( * ), WORK( * ), X( * )
PURPOSE¶
PCGESVX uses the LU factorization to compute the solution to a complex 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¶
In the following description, A denotes A(IA:IA+N-1,JA:JA+N-1), B denotes B(IB:IB+N-1,JB:JB+NRHS-1) and X denotesthe system:
TRANS = 'N': diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
TRANS = 'T': (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
TRANS = 'C': (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*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(R)*A*diag(C) and B by diag(R)*B (if TRANS='N')
or diag(C)*B (if TRANS = 'T' or 'C').
matrix A (after equilibration if FACT = 'E') as
A = P * L * U,
where P is a permutation matrix, L is a unit lower triangular
matrix, and U is upper triangular.
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.
premultiplied by diag(C) (if TRANS = 'N') or diag(R) (if
TRANS = 'T' or 'C') 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(IA:IA+N-1,JA:JA+N-1) is supplied on entry, and if not,
- TRANS (global input) CHARACTER
-
- 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(IB:IB+N-1,JB:JB+NRHS-1) and
- A (local input/local output) COMPLEX pointer into
- the local memory to an array of local dimension
(LLD_A,LOCc(JA+N-1)). On entry, the N-by-N matrix A(IA:IA+N-1,JA:JA+N-1).
If FACT = 'F' and EQUED is not 'N',
- 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) COMPLEX pointer
- into the local memory to an array of local dimension
(LLD_AF,LOCc(JA+N-1)). If FACT = 'F', then AF(IAF:IAF+N-1,JAF:JAF+N-1) is
an input argument and on entry contains the factors L and U from the
factorization A(IA:IA+N-1,JA:JA+N-1) = P*L*U as computed by PCGETRF. If
EQUED .ne. 'N', then AF is the factored form of the equilibrated matrix
A(IA:IA+N-1,JA:JA+N-1).
- 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.
- IPIV (local input or local output) INTEGER array, dimension
- LOCr(M_A)+MB_A. If FACT = 'F', then IPIV is an input argu-
ment and on entry contains the pivot indices from the fac- torization
A(IA:IA+N-1,JA:JA+N-1) = P*L*U as computed by PCGETRF; IPIV(i) -> The
global row local row i was swapped with. This array must be aligned with
A( IA:IA+N-1, * ).
- EQUED (global input or global output) CHARACTER
- Specifies the form of equilibration that was done. = 'N':
No equilibration (always true if FACT = 'N').
- R (local input or local output) REAL array,
- dimension LOCr(M_A). The row scale factors for
A(IA:IA+N-1,JA:JA+N-1).
- C (local input or local output) REAL array,
- dimension LOCc(N_A). The column scale factors for
A(IA:IA+N-1,JA:JA+N-1).
- B (local input/local output) COMPLEX 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(IB:IB+N-1,JB:JB+NRHS-1). On exit, if
- 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) COMPLEX 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(IX:IX+N-1,JX:JX+NRHS-1) to the original
- 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(IA:IA+N-1,JA:JA+N-1) 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.
- FERR (local output) REAL array, dimension LOCc(N_B)
- The estimated forward error bounds for each solution vector X(j) (the j-th column of the solution matrix X(IX:IX+N-1,JX:JX+NRHS-1). 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 estimate is as reliable as the estimate for RCOND, and is almost always a slight overestimate of the true error. FERR is replicated in every process row, and is aligned with the matrices B and X.
- BERR (local output) REAL array, dimension LOCc(N_B).
- The componentwise relative backward error of each solution
vector X(j) (i.e., the smallest relative change in any entry of
A(IA:IA+N-1,JA:JA+N-1) or
- WORK (local workspace/local output) COMPLEX 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( PCGECON( LWORK ), PCGERFS( LWORK ) ) + LOCr(
N_A ).
- RWORK (local workspace/local output) REAL array,
- dimension (LRWORK) On exit, RWORK(1) returns the minimal and optimal LRWORK.
- LRWORK (local or global input) INTEGER
- The dimension of the array RWORK. LRWORK is local input and
must be at least LRWORK = 2*LOCc(N_A).
- INFO (global output) INTEGER
- = 0: successful exit
12 May 1997 | LAPACK version 1.5 |