# p?dbsv

Solves a general band system of linear equations.

## Syntax

call psdbsv(n, bwl, bwu, nrhs, a, ja, desca, b, ib, descb, work, lwork, info)

call pddbsv(n, bwl, bwu, nrhs, a, ja, desca, b, ib, descb, work, lwork, info)

call pcdbsv(n, bwl, bwu, nrhs, a, ja, desca, b, ib, descb, work, lwork, info)

call pzdbsv(n, bwl, bwu, nrhs, a, ja, desca, b, ib, descb, work, lwork, info)

## Description

This routine solves the system of linear equations

`A(1:n, ja:ja+n-1)* X = B(ib:ib+n-1, 1:nrhs)`,

where `A(1:n, ja:ja+n-1)` is an n-by-n real/complex banded diagonally dominant-like distributed matrix with bandwidth bwl, bwu.

Gaussian elimination without pivoting is used to factor a reordering of the matrix into LU.

## Input Parameters

n

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

bwl

  (global) INTEGER. Number of subdiagonals. `0 ≤ bwl ≤ n-1`.

bwu

  (global) INTEGER. Number of subdiagonals. `0 ≤ bwu ≤ n-1`.

nrhs

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

a

  (local). REAL for psdbsv

  DOUBLE PRECISION for pddbsv

  COMPLEX for pcdbsv

  DOUBLE COMPLEX for pzdbsv.

  Pointer into the local memory to an array with first dimension `lld_a ≥ (bwl+bwu+1)` (stored in desca). On entry, this array contains the local pieces of the distributed matrix.

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 of dimension dlen.

  If `1d type (dtype_a=501 or 502)`, `dlen ≥ 7`;

  If `2d type (dtype_a=1)`, `dlen ≥ 9`.

  The array descriptor for the distributed matrix A.

  Contains information of mapping of A to memory.

b

  (local)

  REAL for psdbsv

  DOUBLE PRECISON for pddbsv

  COMPLEX for pcdbsv

  DOUBLE COMPLEX for pzdbsv.

  Pointer into the local memory to an array of local lead dimension `lld_b ≥ nb`. On entry, this array contains the local pieces of the right hand sides `B(ib:ib+n-1, 1:nrhs)`.

ib

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

descb

  (global and local) INTEGER array of dimension dlen.

  If `1d type (dtype_b =502), dlen ≥ 7`;

  If `2d type (dtype_b =1), dlen ≥ 9`.

  The array descriptor for the distributed matrix B.

  Contains information of mapping of B to memory.

work

  (local).

  REAL for psdbsv

  DOUBLE PRECISON for pddbsv

  COMPLEX for pcdbsv

  DOUBLE COMPLEX for pzdbsv.

  Temporary workspace. This space may be overwritten in between calls to routines. work must be the size given in lwork.

lwork

  (local or global) INTEGER. Size of user-input workspace work. If lwork is too small, the minimal acceptable size will be returned in `work(1)` and an error code is returned.

  `lwork ≥ nb(bwl+bwu)+6max(bwl,bwu)*max(bwl,bwu)+max((max(bwl,bwu)nrhs), max(bwl,bwu)*max(bwl,bwu))`

## Output Parameters

a

  On exit, this array contains information containing details of the factorization.

  Note that permutations are performed on the matrix, so that the factors returned are different from those returned by LAPACK.

b

  On exit, this contains the local piece of the solutions distributed matrix X.

work

  On exit, `work(1)` contains the minimal lwork.

info

  (local) INTEGER. If `info=0`, the execution is successful.

  `< 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`.

  `> 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 positive definite, and the factorization was not completed.

Parent topic: Driver Routines