# p?pbtrf

Computes the Cholesky factorization of a symmetric (Hermitian) positive-definite banded distributed matrix.

## Syntax

call pspbtrf(uplo, n, bw, a, ja, desca, af, laf, work, lwork, info)

call pdpbtrf(uplo, n, bw, a, ja, desca, af, laf, work, lwork, info)

call pcpbtrf(uplo, n, bw, a, ja, desca, af, laf, work, lwork, info)

call pzpbtrf(uplo, n, bw, a, ja, desca, af, laf, work, lwork, info)

## Description

This routine computes the Cholesky factorization of an n-by-n real symmetric or complex Hermitian positive-definite banded distributed matrix `A(1:n, ja:ja+n-1)`.

The resulting factorization is not the same factorization as returned from LAPACK. Additional permutations are performed on the matrix for the sake of parallelism.

The factorization has the form:

`A(1:n, ja:ja+n-1) = P*UH*PT`, if `uplo='U'`, or

`A(1:n, ja:ja+n-1) = P*L*LH*PT`, if `uplo='L'`,

where P is a permutation matrix and U and L are banded upper and lower triangular matrices, respectively.

## Input Parameters

uplo

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

  If `uplo = 'U'`, upper triangle of `A(1:n, ja:ja+n-1)` is stored;

  If `uplo = 'L'`, lower triangle of `A(1:n, ja:ja+n-1)` is stored.

n

  (global) INTEGER. The order of the distributed submatrix `A(1:n, ja:ja+n-1)`.

  `(n≥0)`.

bw

  (global) INTEGER.

  The number of superdiagonals of the distributed matrix if `uplo = 'U'`, or the number of subdiagonals if `uplo = 'U' (bw≥0)`.

a

  (local)

  REAL for pspbtrf

  DOUBLE PRECISON for pdpbtrf

  COMPLEX for pcpbtrf

  DOUBLE COMPLEX for pzpbtrf.

  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 upper or lower triangle of the symmetric/Hermitian band distributed matrix `A(1:n, ja:ja+n-1)` to be factored.

ja

  (global) INTEGER. The index in the global array A that points to the start of the matrix to be operated on ( which may be either all of A or a submatrix of A).

desca

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

  If `desca(dtype_) = 501`, then `dlen_ ≥ 7`;

  else if `desca(dtype_) = 1`, then `dlen_ ≥ 9`.

laf

  (local) INTEGER. The dimension of the array af.

  Must be `laf ≥ (NB+2*bw)*bw`.

  If laf is not large enough, an error code will be returned and the minimum acceptable size will be returned in af(1).

work

  (local) Same type as a. Workspace array of dimension lwork .

lwork

  (local or global) INTEGER. The size of the work array, must be `lwork ≥ bw2`.

## Output Parameters

a

  On exit, if `info=0`, contains the permuted triangular factor U or L from the Cholesky factorization of the band matrix `A(1:n, ja:ja+n-1)`, as specified by uplo.

af

  (local)

  REAL for pspbtrf

  DOUBLE PRECISON for pdpbtrf

  COMPLEX for pcpbtrf

  DOUBLE COMPLEX for pzpbtrf.

  Array, dimension (laf). Auxiliary Fillin space. Fillin is created during the factorization routine p?pbtrf and this is stored in af. Note that if a linear system is to be solved using p?pbtrs after the factorization routine, af must not be altered.

`work(1)`

  On exit, `work(1)` contains the minimum value of lwork required for optimum performance.

info

  (global) INTEGER.

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

  `info < 0`:

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

  `info>0`:

  If `info = k ≤ NPROCS`, the submatrix stored on processor info and factored locally was not positive definite, and the factorization was not completed.

  If `info = k > NPROCS`, the submatrix stored on processor `info-NPROCS` representing interactions with other processors was not nonsingular, and the factorization was not completed.

Parent topic: Routines for Matrix Factorization