p?laqr5

Performs a single small-bulge multi-shift QR sweep.

Syntax

Fortran:

call pslaqr5 ( wantt , wantz , kacc22 , n , ktop , kbot , nshfts , sr , si , h , desch , iloz , ihiz , z , descz , work , lwork , iwork , liwork )

call pdlaqr5 ( wantt , wantz , kacc22 , n , ktop , kbot , nshfts , sr , si , h , desch , iloz , ihiz , z , descz , work , lwork , iwork , liwork )

Include Files

  • C: mkl_scalapack.h

Description

This auxiliary subroutine called by p?laqr0 performs a single small-bulge multi-shift QR sweep by chasing separated groups of bulges along the main block diagonal of h.

Input Parameters

wantt

(global) LOGICAL scalar

wantt = .TRUE. if the quasi-triangular Schur factor is being computed. wantt is set to .FALSE. otherwise.

wantz

(global) LOGICAL scalar

wantz = .TRUE. if the orthogonal Schur factor is being computed. wantz is set to .FALSE. otherwise.

kacc22

(global) INTEGER

Value 0, 1, or 2. Specifies the computation mode of far-from-diagonal orthogonal updates.

= 0: p?laqr5 does not accumulate reflections and does not use matrix-matrix multiply to update far-from-diagonal matrix entries.

= 1: p?laqr5 accumulates reflections and uses matrix-matrix multiply to update the far-from-diagonal matrix entries.

= 2: p?laqr5 accumulates reflections, uses matrix-matrix multiply to update the far-from-diagonal matrix entries, and takes advantage of 2-by-2 block structure during matrix multiplies.

n

(global) INTEGER scalar

The order of the Hessenberg matrix h and, if wantz is .TRUE., the order of the orthogonal matrix Z.

ktop, kbot

(global) INTEGER scalar

These are the first and last rows and columns of an isolated diagonal block upon which the QR sweep is to be applied. It is assumed without a check that either ktop = 1 or h(ktop,ktop-1) = 0 and either kbot = n or h(kbot+1,kbot) = 0.

nshfts

(global) INTEGER scalar

nshfts gives the number of simultaneous shifts. nshfts must be positive and even.

sr, si

REAL for pslaqr5

DOUBLE PRECISION for pdlaqr5

(global) Array of size (nshfts)

sr contains the real parts and si contains the imaginary parts of the nshfts shifts of origin that define the multi-shift QR sweep.

h

REAL for pslaqr5

DOUBLE PRECISION for pdlaqr5

(local) Array of size (desch(lld_),LOCc(n))

On input h contains a Hessenberg matrix.

desch

(global and local) INTEGER

array of dimension dlen_.

The array descriptor for the distributed matrix h.

iloz, ihiz

(global) INTEGER

Specify the rows of z to which transformations must be applied if wantz is .TRUE.. 1 iloz ihiz n

z

REAL for pslaqr5

DOUBLE PRECISION for pdlaqr5

(local) array of size (descz(lld_),LOCc(n))

If wantz = .TRUE., then the QR Sweep orthogonal similarity transformation is accumulated into z(iloz:ihiz,kbot:ktop) from the right. If wantz = .FALSE., then z is unreferenced.

descz

(global and local) INTEGER array of dimension dlen_.

The array descriptor for the distributed matrix z.

work

REAL for pslaqr5

DOUBLE PRECISION for pdlaqr5

(local workspace) array, dimension(lwork)

lwork

(local) INTEGER

The size of the work array (lwork1).

If lwork=-1, then a workspace query is assumed.

iwork

(local workspace) INTEGER array, dimension (liwork)

liwork

(local) INTEGER

The size of the iwork array (liwork1).

If liwork=-1, then a workspace query is assumed.

Output Parameters

h

A multi-shift QR sweep with shifts sr(j)+i*si(j) is applied to the isolated diagonal block in rows and columns ktop through kbot.

z

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

work(1)

On exit, if info = 0, work(1) returns the optimal lwork.

iwork(1)

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

Pour de plus amples informations sur les optimisations de compilation, consultez notre Avertissement concernant les optimisations.