Solves a system of linear equations with a diagonally dominant-like tridiagonal distributed matrix using the factorization computed by p?dttrf.

Syntax

void psdttrs (char *trans , MKL_INT *n , MKL_INT *nrhs , float *dl , float *d , float *du , 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 pddttrs (char *trans , MKL_INT *n , MKL_INT *nrhs , double *dl , double *d , double *du , 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 pcdttrs (char *trans , MKL_INT *n , MKL_INT *nrhs , MKL_Complex8 *dl , MKL_Complex8 *d , MKL_Complex8 *du , 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 pzdttrs (char *trans , MKL_INT *n , MKL_INT *nrhs , MKL_Complex16 *dl , MKL_Complex16 *d , MKL_Complex16 *du , 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?dttrsfunction solves for X one of the systems of equations:

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

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

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

where sub(A) =A(1:n, ja:ja+n-1) is a diagonally dominant-like tridiagonal distributed matrix, and sub(B) denotes the distributed matrix B(ib:ib+n-1, 1:nrhs).

This function uses the LU factorization computed by p?dttrf.

Input Parameters

trans

(global) Must be 'N' or 'T' or 'C'.

Indicates the form of the equations:

If trans = 'N', then sub(A)*X = sub(B) is solved for X.

If trans = 'T', then (sub(A))T*X = sub(B) is solved for X.

If trans = 'C', then (sub(A))H*X = sub(B) is solved for X.

n

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

nrhs

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

dl, d, du

(local)

Pointers to the local arrays of size nb_a each.

On entry, these arrays contain details of the factorization. Globally, dl[0] and du[n-1] are not referenced; dl and du must be aligned with d.

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 or dtype_a = 502, then dlen_ 7;

else if dtype_a = 1, then dlen_ 9.

b

(local) Same type as d.

Pointer into the local memory to an array of local size lld_b*LOCc(nrhs)

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

ib

(global) The row index in the global matrix B indicating 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) 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 of size laf and (lwork), respectively.

The array af contains auxiliary fill-in space. The fill-in space is created in a call to the factorization function p?dttrf and is stored in af. If a linear system is to be solved using p?dttrs after the factorization function,af must not be altered.

The array work is a workspace array.

laf

(local) The size of the array af.

Must be lafNB*(bwl+bwu)+6*(bwl+bwu)*(bwl+2*bwu).

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 lwork 10*NPCOL+4*nrhs.

Output Parameters

b

On exit, this array contains the local pieces of the 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.