# p?posv

Solves a symmetric positive definite system of linear equations.

## Syntax

call psposv(uplo, n, nrhs, a, ia, ja, desca, b, ib, jb, descb, info)

call pdposv(uplo, n, nrhs, a, ia, ja, desca, b, ib, jb, descb, info)

call pcposv(uplo, n, nrhs, a, ia, ja, desca, b, ib, jb, descb, info)

call pzposv(uplo, n, nrhs, a, ia, ja, desca, b, ib, jb, descb, info)

## Description

This routine computes the solution to a real/complex system of linear equations

`sub(A)*X = sub(B)`,

where sub(A) denotes `A(ia:ia+n-1,ja:ja+n-1)` and is an n-by-n symmetric/Hermitian distributed positive definite matrix and X and sub(B) denoting `B(ib:ib+n-1,jb:jb+nrhs-1)` are n-by-nrhs distributed matrices. The Cholesky decomposition is used to factor sub(A) as

`sub(A) = UT*U`, if `uplo = 'U'`, or

`sub(A) = L*LT`, if `uplo = 'L'`,

where U is an upper triangular matrix and L is a lower triangular matrix. The factored form of sub(A) is then used to solve the system of equations.

## Input Parameters

uplo

  (global). CHARACTER. Must be 'U' or 'L'.

  Indicates whether the upper or lower triangular part of sub(A) is stored.

n

  (global) INTEGER. The order of the distributed submatrix sub(A) `(n ≥ 0)`.

nrhs

  INTEGER. The number of right-hand sides; the number of columns of the distributed submatrix sub(B) `(nrhs ≥ 0)`.

a

  (local)

  REAL for psposv

  DOUBLE PRECISION for pdposv

  COMPLEX for pcposv

  COMPLEX*16 for pzposv.

  Pointer into the local memory to an array of dimension `(lld_a, LOCc(ja+n-1))`. On entry, this array contains the local pieces of the n-by-n symmetric distributed matrix sub(A) to be factored.

  If `uplo = 'U'`, the leading n-by-n upper triangular part of sub(A) contains the upper triangular part of the matrix, and its strictly lower triangular part is not referenced.

  If `uplo = 'L'`, the leading n-by-n lower triangular part of sub(A) contains the lower triangular part of the distributed matrix, and its strictly upper triangular part is not referenced.

ia, ja

  (global) INTEGER. The row and column indices in the global array a indicating the first row and the first column of the submatrix A, respectively.

desca

  (global and local) INTEGER array, dimension (dlen_). The array descriptor for the distributed matrix A.

b

  (local)

  REAL for psposv

  DOUBLE PRECISON for pdposv

  COMPLEX for pcposv

  COMPLEX*16 for pzposv.

  Pointer into the local memory to an array of dimension `(lld_b,LOC(jb+nrhs-1))`. On entry, the local pieces of the right hand sides distributed matrix sub(B).

ib, jb

  (global) INTEGER. The row and column indices in the global array b indicating the first row and the first column of the submatrix B, respectively.

descb

  (global and local) INTEGER array, dimension (dlen_). The array descriptor for the distributed matrix B.

## Output Parameters

a

  On exit, if `info = 0`, this array contains the local pieces of the factor U or L from the Cholesky factorization `sub(A) = UH*U`, or L*LH.

b

  On exit, if `info = 0`, sub(B) is overwritten by the solution distributed matrix X.

info

  (global) INTEGER.

  If `info =0`, the execution is successful.

  If `info < 0`: If the i-th argument is an array and the j-entry had an illegal value, then `info = -(i*100+j)`, if the i-th argument is a scalar and had an illegal value, then `info = -i`.

  If `info > 0`: If `info = k`, the leading minor of order k, `A(ia:ia+k-1, ja:ja+k-1)` is not positive definite, and the factorization could not be completed, and the solution has not been computed.

Parent topic: Driver Routines