Developer Reference for Intel® oneAPI Math Kernel Library for Fortran
?lamtsqr
Multiplies a general matrix by the product of blocked elementary reflectors computed by tall skinny QR factorization ( ?latsqr )
Syntax
call slamtsqr ( side , trans , m , n , k , mb , nb , a , lda , t , ldt , c , ldc , work , lwork , info )
call dlamtsqr ( side , trans , m , n , k , mb , nb , a , lda , t , ldt , c , ldc , work , lwork , info )
call clamtsqr ( side , trans , m , n , k , mb , nb , a , lda , t , ldt , c , ldc , work , lwork , info )
call zlamtsqr ( side , trans , m , n , k , mb , nb , a , lda , t , ldt , c , ldc , work , lwork , info )
Description
?lamtsqr overwrites the general real or complex m -by- n matrix C with
side = 'L' |
side = 'R' |
|
|---|---|---|
trans = 'N' |
Q * C |
C * Q |
trans = 'T' |
QT * C |
C * QT |
trans = 'C' |
QH * C |
C * QH |
where Q is a real orthogonal matrix defined as the product of blocked elementary reflectors computed by tall skinny QR factorization ( ?latsqr ). Tall-Skinny QR (TSQR) performs QR by a sequence of orthogonal transformations, representing Q as a product of other orthogonal matrices
Q = Q (1) * Q (2) * … * Q ( k )
where each Q ( i ) zeros out subdiagonal entries of a block of mb rows of A :
Q (1) zeros out the subdiagonal entries of rows 1: mb of A ,
Q (2) zeros out the bottom mb - n rows of rows [1: n , mb + 1:2* mb - n ] of A ,
Q (3) zeros out the bottom mb - n rows of rows [1: n , 2* mb - n + 1:3* mb - 2* n ] of A … .
Q (1) is computed by geqrt , which represents Q (1) by Householder vectors stored under the diagonal of rows 1: mb of a , and by upper triangular block reflectors, stored in array t (1: ldt , 1: n ). For more information, see geqrt (Computes a blocked QR factorization of a general real or complex matrix using the compact WY representation of Q.) .
Q ( i ) for i > 1 is computed by tpqrt , which represents Q ( i ) by Householder vectors stored in rows [( i - 1)*( mb - n ) + n + 1: i *( mb - n ) + n ] of a , and by upper triangular block reflectors, stored in array t (1: ldt , ( i - 1)* n + 1: i * n ). The last Q ( k ) may use fewer rows. For more information, see tpqrt (Computes a blocked QR factorization of a real or complex “triangular-pentagonal” matrix, which is composed of a triangular block and a pentagonal block, using the compact WY representation for Q.) . For more details of the overall algorithm, see [DEMMEL12].
Input Parameters
side
CHARACTER*1 .
If side = ‘L’: apply op( Q ) from the left; if side = ‘R’: apply op( Q ) from the right.
trans
CHARACTER*1 .
If trans = ‘N’: No transpose, op( Q ) = Q ; if trans = ‘T’: Transpose, op( Q ) = QT ; if trans = ‘C’: Transpose, op( Q ) = QH .
m
INTEGER . The number of rows of the matrix C . m ≥ 0.
n
INTEGER . The number of columns of the matrix C . m ≥ n ≥ 0.
k
INTEGER . The number of elementary reflectors whose product defines the matrix Q . n ≥ k ≥ 0;
mb
INTEGER . The block size to be used in the blocked QR. mb > n . (Must be the same as in ?latsqr )
nb
INTEGER . The column block size to be used in the blocked QR. n ≥ nb ≥ 1.
- a
-
REAL for slamtsqr DOUBLE PRECISION for dlamtsqr COMPLEX for clamtsqr COMPLEX*16 for zlamtsqr Array of size ( lda , k ). The i -th column must contain the vector which defines the blocked elementary reflector H(i), for i = 1,2,…, k , as returned by ?latsqr in the first k columns of its array argument a .
lda
INTEGER . The leading dimension of the array a .
If side = ‘L’, lda ≥ max(1, m ); if side = ‘R’, lda ≥ max(1, n ).
- t
-
REAL for slamtsqr DOUBLE PRECISION for dlamtsqr COMPLEX for clamtsqr COMPLEX*16 for zlamtsqr Array of size ( n * Number of blocks(ceiling( m - k / mb - k ))). The blocked upper triangular block reflectors stored in compact form as a sequence of upper triangular blocks, as described previously.
ldt
INTEGER . The leading dimension of the array t . ldt ≥ nb .
- c
-
REAL for slamtsqr DOUBLE PRECISION for dlamtsqr COMPLEX for clamtsqr COMPLEX*16 for zlamtsqr Array of size ( ldc , n ). On entry, the m -by- n matrix C .
ldc
INTEGER . The leading dimension of the array c . ldc ≥ max(1, m ).
lwork
INTEGER . The dimension of the array work . If side = ‘L’, lwork ≥ max(1, n )* nb ; if side = ‘R’, lwork ≥ max(1, mb )* nb . If lwork = -1, then a workspace query is assumed; the routine only calculates the optimal size of the work array, returns this value as the first entry of the work array, and no error message related to lwork is issued by xerbla .
Output Parameters
- c
-
On exit, c is overwritten by op( Q )* C or C *op( Q ).
- work
-
REAL for slamtsqr DOUBLE PRECISION for dlamtsqr COMPLEX for clamtsqr COMPLEX*16 for zlamtsqr Workspace array of size (max(1, lwork )).
info
INTEGER .
info = 0: successful exit.
info < 0: if info = - i , the i -th argument had an illegal value.