Developer Reference for Intel® oneAPI Math Kernel Library for Fortran

ID 766686
Date 3/22/2024
Public

A newer version of this document is available. Customers should click here to go to the newest version.

Document Table of Contents

?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.

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.

NOTE:

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. mn 0.

k

INTEGER. The number of elementary reflectors whose product defines the matrix Q.

If side = 'L', mk 0.

if side = 'R', nk 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', ldamax(1,m).

If side = 'R', ldamax(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. ldcmax(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.