p?laqr5
p?laqr5
Performs a single small-bulge multi-shift QR sweep.
Syntax
void pslaqr5
(
MKL_INT*
wantt
,
MKL_INT*
wantz
,
MKL_INT*
kacc22
,
MKL_INT*
n
,
MKL_INT*
ktop
,
MKL_INT*
kbot
,
MKL_INT*
nshfts
,
float*
sr
,
float*
si
,
float*
h
,
MKL_INT*
desch
,
MKL_INT*
iloz
,
MKL_INT*
ihiz
,
float*
z
,
MKL_INT*
descz
,
float*
work
,
MKL_INT*
lwork
,
MKL_INT*
iwork
,
MKL_INT*
liwork
);
void pdlaqr5
(
MKL_INT*
wantt
,
MKL_INT*
wantz
,
MKL_INT*
kacc22
,
MKL_INT*
n
,
MKL_INT*
ktop
,
MKL_INT*
kbot
,
MKL_INT*
nshfts
,
double*
sr
,
double*
si
,
double*
h
,
MKL_INT*
desch
,
MKL_INT*
iloz
,
MKL_INT*
ihiz
,
double*
z
,
MKL_INT*
descz
,
double*
work
,
MKL_INT*
lwork
,
MKL_INT*
iwork
,
MKL_INT*
liwork
);
Include Files
- mkl_scalapack.h
Description
This auxiliary
function
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 a Hessenberg matrix H
. Input Parameters
- wantt
- (global) scalarwanttis non-zeroif the quasi-triangular Schur factor is being computed.wanttis set tozerootherwise.
- wantz
- (global) scalarwantzis non-zeroif the orthogonal Schur factor is being computed.wantzis set tozerootherwise.
- kacc22
- (global)Value 0, 1, or 2. Specifies the computation mode of far-from-diagonal orthogonal updates.= 0:p?laqr5does not accumulate reflections and does not use matrix-matrix multiply to update far-from-diagonal matrix entries.= 1:p?laqr5accumulates reflections and uses matrix-matrix multiply to update the far-from-diagonal matrix entries.= 2:p?laqr5accumulates 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) scalarThe order of the Hessenberg matrixHand, ifwantzis non-zero, the order of the orthogonal matrixZ.
- ktop,kbot
- (global) scalarThese 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 eitherktop= 1 orH(ktop,ktop-1) = 0 and eitherkbot=norH(kbot+1,kbot) = 0.
- nshfts
- (global) scalarnshftsgives the number of simultaneous shifts.nshftsmust be positive and even.
- sr,si
- (global) Array of sizenshftssrcontains the real parts andsicontains the imaginary parts of thenshftsshifts of origin that define the multi-shift QR sweep.
- h
- (local) Array of sizelld_h*(LOCcn)On inputhcontains a Hessenberg matrixH.
- desch
- (global and local)array of sizedlen_.The array descriptor for the distributed matrixH.
- iloz,ihiz
- (global)Specify the rows of the matrixZto which transformations must be applied ifwantzis non-zero. 1≤iloz≤ihiz≤n
- z
- (local) array of sizelld_z*(LOCcn)Ifwantzis non-zero, then the QR Sweep orthogonal similarity transformation is accumulated into the matrixZ(iloz:ihiz,kbot:ktop) from the right. Ifwantzequals zero, thenzis unreferenced.
- descz
- (global and local) array of sizedlen_.The array descriptor for the distributed matrixZ.
- work
- (local workspace) array of sizelwork
- lwork
- (local)The size of theworkarray (lwork≥1).Iflwork=-1, then a workspace query is assumed.
- iwork
- (local workspace) array of sizeliwork
- liwork
- (local)The size of theiworkarray (liwork≥1).Ifliwork=-1, then a workspace query is assumed.
Output Parameters
- h
- A multi-shift QR sweep with shiftssr(j)+i*si(j) is applied to the isolated diagonal block in rows and columnsktopthroughkbotof the matrixH.
- z
- Ifwantzis non-zero,zis updated with transformations applied only to the submatrixZ(iloz:ihiz,kbot:ktop).
- work[0]
- On exit, ifinfo= 0,work[0]returns the optimallwork.
- iwork[0]
- On exit, ifinfo= 0,iwork[0]returns the optimalliwork.