Developer Reference for Intel® oneAPI Math Kernel Library for Fortran
?tpmqrt
Applies a real or complex orthogonal matrix obtained from a “triangular-pentagonal” complex block reflector to a general real or complex matrix, which consists of two blocks.
Syntax
call stpmqrt ( side , trans , m , n , k , l , nb , v , ldv , t , ldt , a , lda , b , ldb , work , info )
call dtpmqrt ( side , trans , m , n , k , l , nb , v , ldv , t , ldt , a , lda , b , ldb , work , info )
call ctpmqrt ( side , trans , m , n , k , l , nb , v , ldv , t , ldt , a , lda , b , ldb , work , info )
call ztpmqrt ( side , trans , m , n , k , l , nb , v , ldv , t , ldt , a , lda , b , ldb , work , info )
call tpmqrt ( v , t , a , b , k , nb [ , trans ] [ , side ] [ , info ] )
Include Files
mkl.fi , mkl_lapack.f90
Description
stpmqrt dtpmqrt ctpmqrt ztpmqrt
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 :
The size of the trapezoidal block V2 is determined by the parameter l , where 0 ≤ l ≤ k . V2 is upper trapezoidal, consisting of the first l rows of a k -by- k upper triangular matrix.
If l = k , V2 is upper triangular;
If l =0, there is no trapezoidal block, so V = V1 is rectangular.
If side = ‘L’:
where A is k -by- n , B is m -by- n and V is m -by- k .
If side = ‘R’:
where A is m -by- k , B is m -by- n and V is n -by- k .
The real/complex orthogonal matrix Q is formed from V and T .
If trans =’N’ and side =’L’, c contains Q * C on exit.
If trans =’T’ and side =’L’, C contains QT * C on exit.
If trans =’C’ and side =’L’, C contains QH * C on exit.
If trans =’N’ and side =’R’, C contains C * Q on exit.
If trans =’T’ and side =’R’, C contains C * QT on exit.
If trans =’C’ and side =’R’, C contains C * QH on exit.
Input Parameters
- side
-
CHARACTER*1 ='L' : apply Q , QT , or QH from the left. ='R' : apply Q , QT , or QH from the right.
- trans
-
CHARACTER*1 ='N' , no transpose, apply Q . ='T' , transpose, apply QT . ='C' , transpose, apply QH .
m
INTEGER . The number of rows in the matrix B , (m ≥ 0) .
n
INTEGER . The number of columns in the matrix B , (n ≥ 0) .
k
INTEGER . The number of elementary reflectors whose product defines the matrix Q , (k ≥ 0) .
l
INTEGER . The order of the trapezoidal part of V ( k ≥ l ≥ 0).
nb
INTEGER .
The block size used for the storage of t , k ≥ nb ≥ 1. This must be the same value of nb used to generate t in tpqrt .
- v
-
REAL for stpmqrt DOUBLE PRECISION for dtpmqrt COMPLEX for ctpmqrt COMPLEX*16 for ztpmqrt .
Size ( ldv , k )
The i th column must contain the vector which defines the elementary reflector H ( i ), for i = 1,2, ..., k , as returned by tpqrt in array argument b .
ldv
INTEGER . The leading dimension of the array v .
If side = ‘L’, ldv must be at least max(1, m ) ;
If side = ‘R’, ldv must be at least max(1, n ) .
- t
-
REAL for stpmqrt DOUBLE PRECISION for dtpmqrt COMPLEX for ctpmqrt COMPLEX*16 for ztpmqrt .
Array, size ( ldt , k ) .
The upper triangular factors of the block reflectors as returned by tpqrt , stored as an nb -by- k matrix.
ldt
INTEGER . The leading dimension of the array t . ldt must be at least nb .
- a
-
REAL for stpmqrt DOUBLE PRECISION for dtpmqrt COMPLEX for ctpmqrt COMPLEX*16 for ztpmqrt .
If side = ‘L’, size ( lda , n ) .
If side = ‘R’, size ( lda , k ) .
The k -by- n or m -by- k matrix A .
lda
INTEGER . The leading dimension of the array a .
If side = ‘L’, lda must be at least max(1, k ) .
If side = ‘R’, lda must be at least max(1, m ) .
- b
-
REAL for stpmqrt DOUBLE PRECISION for dtpmqrt COMPLEX for ctpmqrt COMPLEX*16 for ztpmqrt .
Size ( ldb , n ) .
The m -by- n matrix B .
ldb
INTEGER . The leading dimension of the array b . ldb must be at least max(1, m ) .
- work
-
REAL for stpmqrt DOUBLE PRECISION for dtpmqrt COMPLEX for ctpmqrt COMPLEX*16 for ztpmqrt . Workspace array. If side = ‘L’ DIMENSION n * nb . If side = ‘R’ DIMENSION m * nb .
Output Parameters
- a
-
Overwritten by the corresponding block of the product Q * C , C * Q , QT * C , C * QT , QH * C , or C * QH .
- b
-
Overwritten by the corresponding block of the product Q * C , C * Q , QT * C , C * QT , QH * C , or C * QH .
info
(global) INTEGER .
= 0 : the execution is successful.
< 0 : if info = - i , the i th argument had an illegal value.
Return Values
No return value, info is an Output Parameter.