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 in the matrix A. The value of m must be at least zero.
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.