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

?gemlqt

Multiplies a general matrix by the orthogonal/unitary matrix Q of the LQ factorization formed by ?gelqt.

call sgemlqt(side, trans, m, n, k, mb, v, ldv, t, ldt, c, ldc, work, info)

call dgemlqt(side, trans, m, n, k, mb, v, ldv, t, ldt, c, ldc, work, info)

call cgemlqt(side, trans, m, n, k, mb, v, ldv, t, ldt, c, ldc, work, info)

call zgemlqt(side, trans, m, n, k, mb, v, ldv, t, ldt, c, ldc, work, info)

Description

?gemlqt overwrites the general real 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 or complex orthogonal matrix defined as the product of k elementary reflectors:

Q = H(k) H(k - 1) . . . H(1) = I - VTVT for real flavors

or

Q = H(k)HH(k - 1)H . . . H(1)H = I - VTVH for complex flavors

generated using the compact WY representation as returned by ?gelqt.

Q is of order m if side = 'L' and of order n if side = 'R'.

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

mb

INTEGER. The block size used for the storage of T. kmb 1. This must be the same value of mb used to generate T in ?gelqt.

v

REAL for sgemlqt

DOUBLE PRECISION for dgemlqt

COMPLEX for cgemlqt

COMPLEX*16 for zgemlqt

Array of size (ldv,m) if side = 'L' or (ldv,n) if side = 'R'. The i-th row must contain the vector which defines the elementary reflector H(i), for i = 1,2,...,k, as returned by ?gelqt in the first k rows of its array argument a.

ldv

INTEGER. The leading dimension of the array v. ldv max(1,k).

t

REAL for sgemlqt

DOUBLE PRECISION for dgemlqt

COMPLEX for cgemlqt

COMPLEX*16 for zgemlqt

Array of size (ldt,k). The upper triangular factors of the block reflectors as returned by ?gelqt, stored as a mb-by-k matrix.

ldt

INTEGER. The leading dimension of the array t. ldtmb.

c

REAL for sgemlqt

DOUBLE PRECISION for dgemlqt

COMPLEX for cgemlqt

COMPLEX*16 for zgemlqt

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

Output Parameters

c

On exit, c is overwritten by op(Q)*C or C*op(Q).

work

REAL for sgemlqt

DOUBLE PRECISION for dgemlqt

COMPLEX for cgemlqt

COMPLEX*16 for zgemlqt

Array. The size of work is n*mb if side = 'L', or m*mb if side = 'R'.

info

info = 0: successful exit.

info < 0: if info = -i, the i-th argument had an illegal value.