# p?trtri

Computes the inverse of a triangular distributed matrix.

## Syntax

call pstrtri(uplo, diag, n, a, ia, ja, desca, info)

call pdtrtri(uplo, diag, n, a, ia, ja, desca, info)

call pctrtri(uplo, diag, n, a, ia, ja, desca, info)

call pztrtri(uplo, diag, n, a, ia, ja, desca, info)

## Description

This routine computes the inverse of a real or complex upper or lower triangular distributed matrix `sub(A) = A(ia:ia+n-1, ja:ja+n-1)`.

## Input Parameters

uplo

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

  Specifies whether the distributed matrix sub(A) is upper or lower triangular.

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

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

diag

  CHARACTER*1. Must be 'N' or 'U'.

  Specifies whether or not the distributed matrix sub(A) is unit triangular.

  If `diag = 'N'`, then sub(A) is non-unit triangular.

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

n

  (global) INTEGER. The number of rows and columns to be operated on, that is, the order of the distributed submatrix sub(A) `(n≥0)`.

a

  (local)

  REAL for pstrtri

  DOUBLE PRECISION for pdtrtri

  COMPLEX for pctrtri

  DOUBLE COMPLEX for pztrtri.

  Pointer into the local memory to an array of local dimension `a(lld_a,LOCc(ja+n-1))`.

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

  If `uplo = 'U'`, the leading n-by-n upper triangular part of sub(A) contains the upper triangular matrix to be inverted, 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.

ia, ja

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

desca

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

## Output Parameters

a

  On exit, overwritten by the (triangular) inverse of the original matrix.

info

  (global) 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 = k, A(ia+k-1, ja+k-1)` is exactly zero. The triangular matrix sub(A) is singular and its inverse can not be computed.

Parent topic: Routines for Matrix Inversion