-
template<typename T>
void laqr5(logical *wantt, logical *wantz, integer *kacc22, integer *n, integer *ktop, integer *kbot, integer *nshfts, T *sr, T *si, T *h, integer *ldh, integer *iloz, integer *ihiz, T *z, integer *ldz, T *v, integer *ldv, T *u, integer *ldu, integer *nv, T *wv, integer *ldwv, integer *nh, T *wh, integer *ldwh)# LAQR5 performs a single small-bulge multi-shift QR sweep.
Purpose:
LAQR5, called by SLAQR0, performs a single small-bulge multi-shift QR sweep.
- Parameters:
WANTT – [in]
WANTT is LOGICAL
WANTT = .true. if the quasi-triangular Schur factor is being computed. WANTT is set to .false. otherwise.
WANTZ – [in]
WANTZ is LOGICAL
WANTZ = .true. if the orthogonal Schur factor is being computed. WANTZ is set to .false. otherwise.
KACC22 – [in]
KACC22 is INTEGER with value 0, 1, or 2.
Specifies the computation mode of far-from-diagonal orthogonal updates.
= 0: SLAQR5 does not accumulate reflections and does not use matrix-matrix multiply to update far-from-diagonal matrix entries.
= 1: SLAQR5 accumulates reflections and uses matrix-matrix multiply to update the far-from-diagonal matrix entries.
= 2: SLAQR5 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 – [in]
N is INTEGER
N is the order of the Hessenberg matrix H upon which this subroutine operates.
KTOP – [in] KTOP is INTEGER
KBOT – [in]
KBOT is INTEGER
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 – [in]
NSHFTS is INTEGER
NSHFTS gives the number of simultaneous shifts. NSHFTS must be positive and even.
SR – [inout] SR is REAL array, dimension (NSHFTS)
SI – [inout]
SI is REAL array, dimension (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. On output SR and SI may be reordered.
H – [inout]
H is REAL array, dimension (LDH,N)
On input H contains a Hessenberg matrix. On output 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.
LDH – [in]
LDH is INTEGER
LDH is the leading dimension of H just as declared in the calling procedure. LDH >= MAX(1,N).
ILOZ – [in] ILOZ is INTEGER
IHIZ – [in]
IHIZ is INTEGER
Specify the rows of Z to which transformations must be applied if WANTZ is .TRUE.. 1 <= ILOZ <= IHIZ <= N
Z – [inout]
Z is REAL array, dimension (LDZ,IHIZ)
If WANTZ = .TRUE., then the QR Sweep orthogonal similarity transformation is accumulated into Z(ILOZ:IHIZ,ILOZ:IHIZ) from the right.
If WANTZ = .FALSE., then Z is unreferenced.LDZ – [in]
LDZ is INTEGER
LDZ is the leading dimension of Z just as declared in the calling procedure. LDZ >= N.
V – [out] V is REAL array, dimension (LDV,NSHFTS/2)
LDV – [in]
LDV is INTEGER
LDV is the leading dimension of V as declared in the calling procedure. LDV >= 3.
U – [out] U is REAL array, dimension (LDU,3*NSHFTS-3)
LDU – [in]
LDU is INTEGER
LDU is the leading dimension of U just as declared in the in the calling subroutine. LDU >= 3*NSHFTS-3.
NV – [in]
NV is INTEGER
NV is the number of rows in WV agailable for workspace. NV >= 1.
WV – [out] WV is REAL array, dimension (LDWV,3*NSHFTS-3)
LDWV – [in] LDWV is INTEGER LDWV is the leading dimension of WV as declared in the in the calling subroutine. LDWV >= NV.
NH – [in] NH is INTEGER NH is the number of columns in array WH available for workspace. NH >= 1.
WH – [out] WH is REAL array, dimension (LDWH,NH)
LDWH – [in]
LDWH is INTEGER
Leading dimension of WH just as declared in the calling procedure. LDWH >= 3*NSHFTS-3.
-
template<typename T>
void laqr5(logical *wantt, logical *wantz, integer *kacc22, integer *n, integer *ktop, integer *kbot, integer *nshfts, T *s, T *h, integer *ldh, integer *iloz, integer *ihiz, T *z, integer *ldz, T *v, integer *ldv, T *u, integer *ldu, integer *nv, T *wv, integer *ldwv, integer *nh, T *wh, integer *ldwh)#