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.