Developer Reference for Intel® oneAPI Math Kernel Library for Fortran
?gemqr
Multiples a matrix C by a real orthogonal or complex unitary matrix Q , as computed by ?geqr , with best performance for tall and skinny matrices.
Syntax
call sgemqr ( side , trans , m , n , k , a , lda , t , tsize , c , ldc , work , lwork , info )
call dgemqr ( side , trans , m , n , k , a , lda , t , tsize , c , ldc , work , lwork , info )
call cgemqr ( side , trans , m , n , k , a , lda , t , tsize , c , ldc , work , lwork , info )
call zgemqr ( side , trans , m , n , k , a , lda , t , tsize , c , ldc , work , lwork , info )
Description
The ?gemqr routine multiplies an m -by- n matrix C by Op( Q ), where matrix Q is the factor from the LQ factorization of matrix A formed by ?geqr , and
Op( Q ) = Q , or
Op( Q ) = QT , or
Op( Q ) = QH .
You must use ?geqr for LQ factorization before calling ?gemqr . ?gemqr is not compatible with QR factorization routines other than ?geqr .
For real flavors, C is real and Q is real orthogonal.
For complex flavors, C is complex and Q is complex unitary.
If matrix A is tall and skinny, a highly scalable algorithm is used to avoid communication overhead. Otherwise, ?ormqr or ?unmqr is used.
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' : Conjugate transpose, Op( Q ) = QH .
m
INTEGER . The number of rows of the matrix A . 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.
If side = ‘L’, m ≥ k ≥ 0. if side = ‘R’, n ≥ k ≥ 0.
- a
-
REAL for sgemqr DOUBLE PRECISION for dgemqr COMPLEX for cgemqr COMPLEX*16 for zgemqr Array, size (lda,k) . Part of the data structure to represent Q as returned by ?geqr .
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 sgemlq DOUBLE PRECISION for dgemlq COMPLEX for cgemlq COMPLEX*16 for zgemlq Array, size (max(5,tsize)) . Part of the data structure to represent Q as returned by ?geqr .
tsize
INTEGER . The size of the array t . tsize ≥ 5.
- c
-
REAL for sgemqr DOUBLE PRECISION for dgemqr COMPLEX for cgemqr COMPLEX*16 for zgemqr Array of size (ldc,n) . On entry, contains the m -by- n matrix C .
ldc
INTEGER . The leading dimension of the array c . ldc ≥ max(1,m) .
lwork
INTEGER . The size of the array work .
If lwork = -1 , then a workspace query is assumed; the routine only calculates the optimal size of the work array and returns this value as work(1) ; 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 sgemlq DOUBLE PRECISION for dgemlq COMPLEX for cgemlq COMPLEX*16 for zgemlq Workspace array of size (max(1,lwork)) .
info
INTEGER .
info = 0 indicates a successful exit.
info < 0: if info = - i , the i -th argument had an illegal value.