Developer Reference for Intel® oneAPI Math Kernel Library for Fortran
?tpmlqt
Applies an orthogonal matrix obtained from a “triangular-pentagonal” block reflector to a general matrix.
Syntax
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 * CC * Qtrans = 'T'QT * CC * QTtrans = 'C'QH * CC * 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.