Developer Reference for Intel® oneAPI Math Kernel Library for Fortran

ID 766686
Date 11/07/2023
Public

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

Document Table of Contents

?gemlq

Multiples a matrix C by a real orthogonal or complex unitary matrix Q, as computed by ?gelq.

call sgemlq(side, trans, m, n, k, a, lda, t, tsize, c, ldc, work, lwork, info)

call dgemlq(side, trans, m, n, k, a, lda, t, tsize, c, ldc, work, lwork, info)

call cgemlq(side, trans, m, n, k, a, lda, t, tsize, c, ldc, work, lwork, info)

call zgemlq(side, trans, m, n, k, a, lda, t, tsize, c, ldc, work, lwork, info)

Description

The ?gemlq 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 ?gelq, and

Op(Q) = Q, or

Op(Q) = QT, or

Op(Q) = QH.

NOTE:

You must use ?gelq for LQ factorization before calling ?gemlq. ?gemlq is not compatible with LQ factorization routines other than ?gelq.

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 short and wide, a highly scalable algorithm is used to avoid communication overhead. Otherwise, ?ormlq or ?unmlq is used.

NOTE:

An optimized version of ?gemlq is not available.

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

n

INTEGER. The number of columns of the matrix C. n 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 sgemlq

DOUBLE PRECISION for dgemlq

COMPLEX for cgemlq

COMPLEX*16 for zgemlq

Array of size (lda,m) if side = 'L', or (lda,n) if side = 'R'.

Part of the data structure to represent Q as returned by ?gelq.

lda

INTEGER . The leading dimension of the array a. lda max(1,k).

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

tsize

INTEGER. The size of the array t. tsize 5.

c

REAL for sgemlq

DOUBLE PRECISION for dgemlq

COMPLEX for cgemlq

COMPLEX*16 for zgemlq

Array, size (ldc,n). On entry, a 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.