Visible to Intel only — GUID: GUID-0706DA86-C75D-4B21-BFC5-754F0950EBB6
Visible to Intel only — GUID: GUID-0706DA86-C75D-4B21-BFC5-754F0950EBB6
?tpmlqt
Applies an orthogonal matrix obtained from a "triangular-pentagonal" block reflector to a general matrix.
call stpmlqt(side, trans, m, n, k, l, mb, v, ldv, t, ldt, a, lda, b, ldb, work, info)
call dtpmlqt(side, trans, m, n, k, l, mb, v, ldv, t, ldt, a, lda, b, ldb, work, info)
call ctpmlqt(side, trans, m, n, k, l, mb, v, ldv, t, ldt, a, lda, b, ldb, work, info)
call ztpmlqt(side, trans, m, n, k, l, mb, v, ldv, t, ldt, a, lda, b, ldb, work, info)
Description
?tpmlqt applies an orthogonal matrix Q obtained from a "triangular-pentagonal" block reflector H to a general matrix C, which consists of two blocks A and B.
The columns of the pentagonal matrix V contain the elementary reflectors H(1), H(2), ..., H(k); V is composed of a rectangular block V1 and a trapezoidal block V2:
V = [V1] [V2].
The size of the trapezoidal block V2 is determined by the parameter l, where 0 ≤l≤k; V2 is lower trapezoidal, consisting of the first l rows of a k-by-k upper triangular matrix. If l=k, V2 is lower triangular; if l=0, there is no trapezoidal block, hence V = V1 is rectangular.
If side = 'L':
C = [A] [B]
where A is k-by-n, B is m-by-n, and C is k-by-m.
If side = 'R':
C = [AB]
where A is m-by-k, B is m-by-n, and C is k-by-n.
The real orthogonal matrix Q is formed from V and T.
If trans='N' and side='L', C is on exit replaced with Q * C.
C is on exit replaced with
side = 'L' | side = 'R' | |
---|---|---|
trans = 'N' | Q*C | C*Q |
trans = 'T' | QT*C | C*QT |
trans = 'C' | QH*C | C*QH |
Input Parameters
- side
-
CHARACTER*1.
= 'L': apply op(Q) from the left;
= 'R': apply op(Q) from the right.
- trans
-
CHARACTER*1.
= 'N': No transpose, op(Q) = Q;
= 'T': Transpose, op(Q) = QT;
= 'C': Transpose, op(Q) = QH.
- m
-
INTEGER. The number of rows of the matrix B. m≥ 0.
- n
-
INTEGER. The number of columns of the matrix B. n≥ 0.
- k
-
INTEGER. The number of elementary reflectors whose product defines the matrix Q.
- l
-
INTEGER. The order of the trapezoidal part of V. k≥l≥ 0.
- mb
-
INTEGER. The block size used for the storage of T. k≥mb≥ 1. This must be the same value of mb used to generate T in ?tplqt.
- v
-
REAL for stpmlqt
DOUBLE PRECISION for dtpmlqt
COMPLEX for ctpmlqt
COMPLEX*16 for ztpmlqt
Array of size (lda,k). The i-th row must contain the vector which defines the elementary reflector H(i), for i = 1,2,...,k, as returned by ?tplqt in b.
- ldv
-
INTEGER. The leading dimension of the array v. If side = 'L', ldv≥ max(1, m); if side = 'R', ldv≥ max(1, n).
- t
-
REAL for stpmlqt
DOUBLE PRECISION for dtpmlqt
COMPLEX for ctpmlqt
COMPLEX*16 for ztpmlqt
Array of size (ldt,k). The upper triangular factors of the block reflectors as returned by ?tplqt, stored as a mb-by-k matrix.
- ldt
-
INTEGER. The leading dimension of the array t. ldt≥mb.
- a
-
REAL for stpmlqt
DOUBLE PRECISION for dtpmlqt
COMPLEX for ctpmlqt
COMPLEX*16 for ztpmlqt
Array of size (lda,n) if side = 'L', or size (lda,k) if side = 'R'.
On entry, the k-by-n or m-by-k matrix A.
- lda
-
INTEGER. The leading dimension of the array a. If side = 'L', LDC ≥ max(1, k); if side = 'R', LDC ≥ max(1, m).
- b
-
REAL for stpmlqt
DOUBLE PRECISION for dtpmlqt
COMPLEX for ctpmlqt
COMPLEX*16 for ztpmlqt
Array of size (ldb, n). On entry, the m-by-n matrix B.
- ldb
-
INTEGER. The leading dimension of the array b. ldb≥ max(1, m).
Output Parameters
- a
-
On exit, a is overwritten by the corresponding block of op(Q)*C or C*op(Q) See Description.
- b
-
REAL for stpmlqt
DOUBLE PRECISION for dtpmlqt
COMPLEX for ctpmlqt
COMPLEX*16 for ztpmlqt
On exit, b is overwritten by the corresponding block of op(Q)*C or C*op(Q) See Description.
- work
-
REAL for stpmlqt
DOUBLE PRECISION for dtpmlqt
COMPLEX for ctpmlqt
COMPLEX*16 for ztpmlqt
Array. The size of work is n*mb if side = 'L', or m*mb if side = 'R'.
- info
-
INTEGER.
info = 0: successful exit.
info < 0: if info = -i, the i-th argument had an illegal value.