Developer Reference for Intel® oneAPI Math Kernel Library for Fortran

ID 766686
Date 3/31/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?trtrs

Solves a system of linear equations with a triangular distributed matrix.

Syntax

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

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

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

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

Include Files

Description

The p?trtrsroutine solves for X one of the following systems of linear equations:

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

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

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

where sub(A) = A(ia:ia+n-1, ja:ja+n-1) is a triangular distributed matrix of order n, and sub(B) denotes the distributed matrix B(ib:ib+n-1, jb:jb+nrhs-1).

A check is made to verify that sub(A) is nonsingular.

Input Parameters
uplo

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

Indicates whether sub(A) is upper or lower triangular:

If uplo = 'U', then sub(A) is upper triangular.

If uplo = 'L', then sub(A) is lower triangular.

trans

(global) CHARACTER*1. 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.

diag

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

If diag = 'N', then sub(A) is not a unit triangular matrix.

If diag = 'U', then sub(A) is unit triangular.

n

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

nrhs

(global) INTEGER. The number of right-hand sides; i.e., the number of columns of the distributed matrix sub(B) (nrhs0).

a, b

(local)

REAL for pstrtrs

DOUBLE PRECISION for pdtrtrs

COMPLEX for pctrtrs

DOUBLE COMPLEX for pztrtrs.

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

The array a contains the local pieces of the distributed triangular matrix sub(A).

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

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

If diag = 'U', the diagonal elements of sub(A) are also not referenced and are assumed to be 1.

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

ia, ja

(global) INTEGER. The row and column indices in the global matrix A indicating the first row and the first column of the matrix sub(A), respectively.

desca

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

ib, jb

(global) INTEGER. The row and column indices in the global matrix B indicating the first row and the first column of the matrix sub(B), respectively.

descb

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

Output Parameters
b

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

info

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

info < 0:

if the i-th argument is an array and the j-th 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.

info> 0:

if info = i, the i-th diagonal element of sub(A) is zero, indicating that the submatrix is singular and the solutions X have not been computed.

See Also