# p?laqr4

Computes the eigenvalues of a Hessenberg matrix, and optionally computes the matrices from the Schur decomposition.

## Syntax

call pslaqr4 ( wantt , wantz , n , ilo , ihi , a , desca , wr , wi , iloz , ihiz , z , descz , t , ldt , v , ldv , work , lwork , info )

call pdlaqr4 ( wantt , wantz , n , ilo , ihi , a , desca , wr , wi , iloz , ihiz , z , descz , t , ldt , v , ldv , work , lwork , info )

## Description

p?laqr4 is an auxiliary routine used to find the Schur decomposition and or eigenvalues of a matrix already in Hessenberg form from cols ilo to ihi. This routine requires that the active block is small enough, i.e. ihi-ilo+1 ldt, so that it can be solved by LAPACK. Normally, it is called by p?laqr1. All the inputs are assumed to be valid without checking.

## Input Parameters

wantt

(global ) LOGICAL

= .TRUE.: the full Schur form T is required;

= .FALSE.: only eigenvalues are required.

wantz

(global ) LOGICAL

= .TRUE.: the matrix of Schur vectors Z is required;

= .FALSE.: Schur vectors are not required.

n

(global ) INTEGER

The order of the Hessenberg matrix A (and Z if wantz). n 0.

ilo, ihi

(global ) INTEGER

It is assumed that a is already upper quasi-triangular in rows and columns ihi+1:n, and that A(ilo,ilo-1) = 0 (unless ilo = 1). p?laqr4 works primarily with the Hessenberg submatrix in rows and columns ilo to ihi, but applies transformations to all of A if wantt is .TRUE.. 1 ilo max(1,ihi); ihi n.

a

REAL for pslaqr4

DOUBLE PRECISION for pdlaqr4

(global ) array of size (lld_a,LOCc(n))

The upper Hessenberg matrix A.

desca

(global and local) INTEGER array of size dlen_.

The array descriptor for the distributed matrix a.

iloz, ihiz

(global ) INTEGER

Specify the rows of the matrix Z to which transformations must be applied if wantz is .TRUE.. 1 iloz ilo; ihi ihiz n.

z

REAL for pslaqr4

DOUBLE PRECISION for pdlaqr4

(global ) array.

If wantz is .TRUE., on entry z must contain the current matrix Z of transformations accumulated by p?hseqr.

If wantz is .FALSE., z is not referenced.

descz

(global and local) INTEGER array of size dlen_.

The array descriptor for the distributed matrix Z.

t

REAL for pslaqr4

DOUBLE PRECISION for pdlaqr4

(local workspace) array of size ldt*(ihi-ilo+1).

ldt

(local ) INTEGER

The leading dimension of the array t. ldt ihi-ilo+1.

v

REAL for pslaqr4

DOUBLE PRECISION for pdlaqr4

(local workspace) array of size ldv*(ihi-ilo+1).

ldv

(local ) INTEGER

The leading dimension of the array v. ldv ihi-ilo+1.

work

REAL for pslaqr4

DOUBLE PRECISION for pdlaqr4

(local workspace) array of size lwork.

lwork

(local ) INTEGER

The size of the work array work.

lwork ihi-ilo+1.

## OUTPUT Parameters

a

On exit, if wantt is .TRUE., the matrix A is upper quasi-triangular in rows and columns ilo:ihi, with any 2-by-2 or larger diagonal blocks not yet in standard form. If wantt is .FALSE., the contents of a are unspecified on exit.

wr, wi

REAL for pslaqr4

DOUBLE PRECISION for pdlaqr4

(global replicated ) array of size n

The real and imaginary parts, respectively, of the computed eigenvalues ilo to ihi are stored in the corresponding elements of wr and wi. If two eigenvalues are computed as a complex conjugate pair, they are stored in consecutive elements of wr and wi, say the i-th and (i+1)th, with wi(i) > 0 and wi(i+1) < 0. If wantt is .TRUE., the eigenvalues are stored in the same order as on the diagonal of the Schur form returned in a. The matrix A may be returned with larger diagonal blocks until the next release.

z

If wantz is .TRUE., z is updated with transformations applied only to the submatrix Z(iloz:ihiz,ilo:ihi).

info

(global ) INTEGER

< 0: parameter number -info incorrect or inconsistent;

= 0: successful exit;

> 0: p?laqr4 failed to compute all the eigenvalues ilo to ihi in a total of 30*(ihi-ilo+1) iterations; if info = i, elements i+1:ihi of wr and wi contain those eigenvalues which have been successfully computed.