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?stedc

Computes all eigenvalues and eigenvectors of a symmetric tridiagonal matrix in parallel.

Syntax

call psstedc (compz, n, d, e, q, iq, jq, descq, work, lwork, iwork, liwork, info )

call pdstedc (compz, n, d, e, q, iq, jq, descq, work, lwork, iwork, liwork, info )

Description

p?stedc computes all eigenvalues and eigenvectors of a symmetric tridiagonal matrix in parallel, using the divide and conquer algorithm.

Input Parameters
compz

CHARACTER*1.

= 'N': Compute eigenvalues only. (NOT IMPLEMENTED YET)

= 'I': Compute eigenvectors of tridiagonal matrix also.

= 'V': Compute eigenvectors of original dense symmetric matrix also. On entry, Z contains the orthogonal matrix used to reduce the original matrix to tridiagonal form. (NOT IMPLEMENTED YET)

n

(global)

INTEGER.

The order of the tridiagonal matrix T. n >= 0.

d

(global)

REAL for psstedc

DOUBLE PRECISION for pdstedc

Array, size (n)

On entry, the diagonal elements of the tridiagonal matrix.

e

(global)

REAL for psstedc

DOUBLE PRECISION for pdstedc

Array, size (n-1).

On entry, the subdiagonal elements of the tridiagonal matrix.

iq

(global)

INTEGER.

Q's global row index, which points to the beginning of the submatrix which is to be operated on.

jq

(global)

INTEGER.

Q's global column index, which points to the beginning of the submatrix which is to be operated on.

descq

(global and local)

INTEGER.

Array of size dlen_.

The array descriptor for the distributed matrix Q.

work

(local)

REAL for psstedc

DOUBLE PRECISION for pdstedc

Array, size (lwork)

lwork

(local)

INTEGER.

The size of the array work.

lwork = 6*n + 2*NP*NQ

NP = numroc( n, NB, MYROW, DESCQ( rsrc_ ), NPROW )

NQ = numroc( n, NB, MYCOL, DESCQ( csrc_ ), NPCOL )

numroc is a ScaLAPACK tool function.

If lwork = -1, the lwork is global input and a workspace query is assumed; the routine only calculates the minimum size for the work array. The required workspace is returned as the first element of work and no error message is issued by pxerbla.

iwork

(local)

INTEGER.

Array, size (liwork)

liwork

INTEGER.

The size of the array iwork.

liwork = 2 + 7*n + 8*NPCOL

Output Parameters

d

On exit, if info = 0, the eigenvalues in descending order.

q

(local)

REAL for psstedc

DOUBLE PRECISION for pdstedc

Array, local size ( lld_q, LOCc(jq+n-1))

q contains the orthonormal eigenvectors of the symmetric tridiagonal matrix.

On output, q is distributed across the P processes in block cyclic format.

work

On output, work(1) returns the workspace needed.

iwork

On exit, if liwork > 0, iwork(1) returns the optimal liwork.

info

(global)

INTEGER.

= 0: successful exit.

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

> 0: The algorithm failed to compute the info/(n+1)-th eigenvalue while working on the submatrix lying in global rows and columns mod(info,n+1).