Developer Reference for Intel® oneAPI Math Kernel Library for C

ID 766684
Date 11/07/2023
Public

A newer version of this document is available. Customers should click here to go to the newest version.

Document Table of Contents

p?pbtrs

Solves a system of linear equations with a Cholesky-factored symmetric/Hermitian positive-definite band matrix.

Syntax

void pspbtrs (char *uplo , MKL_INT *n , MKL_INT *bw , MKL_INT *nrhs , float *a , MKL_INT *ja , MKL_INT *desca , float *b , MKL_INT *ib , MKL_INT *descb , float *af , MKL_INT *laf , float *work , MKL_INT *lwork , MKL_INT *info );

void pdpbtrs (char *uplo , MKL_INT *n , MKL_INT *bw , MKL_INT *nrhs , double *a , MKL_INT *ja , MKL_INT *desca , double *b , MKL_INT *ib , MKL_INT *descb , double *af , MKL_INT *laf , double *work , MKL_INT *lwork , MKL_INT *info );

void pcpbtrs (char *uplo , MKL_INT *n , MKL_INT *bw , MKL_INT *nrhs , MKL_Complex8 *a , MKL_INT *ja , MKL_INT *desca , MKL_Complex8 *b , MKL_INT *ib , MKL_INT *descb , MKL_Complex8 *af , MKL_INT *laf , MKL_Complex8 *work , MKL_INT *lwork , MKL_INT *info );

void pzpbtrs (char *uplo , MKL_INT *n , MKL_INT *bw , MKL_INT *nrhs , MKL_Complex16 *a , MKL_INT *ja , MKL_INT *desca , MKL_Complex16 *b , MKL_INT *ib , MKL_INT *descb , MKL_Complex16 *af , MKL_INT *laf , MKL_Complex16 *work , MKL_INT *lwork , MKL_INT *info );

Include Files

  • mkl_scalapack.h

Description

The p?pbtrsfunction solves for X a system of distributed linear equations in the form:

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

where sub(A) = A(1:n, ja:ja+n-1) is an n-by-n real symmetric or complex Hermitian positive definite distributed band matrix, and sub(B) denotes the distributed matrix B(ib:ib+n-1, 1:nrhs).

This function uses Cholesky factorization

sub(A) = P*UH*U*PT, or sub(A) = P*L*LH*PT

computed by p?pbtrf.

Input Parameters

uplo

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

If uplo = 'U', upper triangle of sub(A) is stored;

If uplo = 'L', lower triangle of sub(A) is stored.

n

(global) The order of the distributed matrix sub(A) (n0).

bw

(global) The number of superdiagonals of the distributed matrix if uplo = 'U', or the number of subdiagonals if uplo = 'L' (bw0).

nrhs

(global) The number of right hand sides; the number of columns of the distributed matrix sub(B) (nrhs0).

a, b

(local)

Pointers into the local memory to arrays of local sizes lld_a*LOCc(ja+n-1) and lld_b*LOCc(nrhs-1), respectively.

The array a contains the permuted triangular factor U or L from the Cholesky factorization sub(A) = P*UH*U*PT, or sub(A) = P*L*LH*PT of the band matrix A, as returned by p?pbtrf.

On entry, the array b contains the local pieces of the n-by-nrhs right hand side distributed matrix sub(B).

ja

(global) The index in the global matrix A indicating 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) array of size dlen_. The array descriptor for the distributed matrix A.

If dtype_a = 501, then dlen_ 7;

else if dtype_a = 1, then dlen_ 9.

ib

(global) The row index in the global matrix B indicating the first row of the matrix sub(B).

descb

(global and local) array of size dlen_. The array descriptor for the distributed matrix B.

If dtype_b = 502, then dlen_ 7;

else if dtype_b = 1, then dlen_ 9.

af, work

(local) Arrays, same type as a.

The array af is of size laf. It contains auxiliary fill-in space. The fill-in space is created in a call to the factorization function p?dbtrf and is stored in af.

The array work is a workspace array of size lwork.

laf

(local) The size of the array af.

Must be lafnrhs*bw.

If laf is not large enough, an error code will be returned and the minimum acceptable size will be returned in af[0].

lwork

(local or global) The size of the array work, must be at least lworkbw2.

Output Parameters

b

On exit, if info=0, this array contains the local pieces of the n-by-nrhs solution distributed matrix X.

work[0]

On exit, work[0] contains the minimum value of lwork required for optimum performance.

info

If info=0, the execution is successful.

info < 0:

If the i-th argument is an array and the j-th entry, indexed j - 1, 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.

See Also