Developer Reference for Intel® oneAPI Math Kernel Library for Fortran

ID 766686
Date 3/31/2023
Public

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

Document Table of Contents

?orml2/?unml2

Multiplies a general matrix by the orthogonal/unitary matrix from a LQ factorization determined by ?gelqf (unblocked algorithm).

Syntax

call sorml2( side, trans, m, n, k, a, lda, tau, c, ldc, work, info )

call dorml2( side, trans, m, n, k, a, lda, tau, c, ldc, work, info )

call cunml2( side, trans, m, n, k, a, lda, tau, c, ldc, work, info )

call zunml2( side, trans, m, n, k, a, lda, tau, c, ldc, work, info )

Include Files
  • mkl.fi
Description

The routine ?orml2/?unml2 overwrites the general real/complex m-by-n matrix C with

Q*C if side = 'L' and trans = 'N', or

QT*C / QH*C if side = 'L' and trans = 'T' (for real flavors) or trans = 'C' (for complex flavors), or

C*Q if side = 'R' and trans = 'N', or

C*QT / C*QH if side = 'R' and trans = 'T' (for real flavors) or trans = 'C' (for complex flavors).

Here Q is a real orthogonal or complex unitary matrix defined as the product of k elementary reflectors

Q = H(k)*...*H(2)*H(1)for real flavors, or Q = (H(k))H*...*(H(2))H*(H(1))H for complex flavors as returned by ?gelqf.

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

Input Parameters
side

CHARACTER*1.

= 'L': apply Q or QT / QH from the left

= 'R': apply Q or QT / QH from the right

trans

CHARACTER*1.

= 'N': apply Q (no transpose)

= 'T': apply QT (transpose, for real flavors)

= 'C': apply QH (conjugate transpose, for complex flavors)

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.

a

REAL for sorml2

DOUBLE PRECISION for dorml2

COMPLEX for cunml2

DOUBLE COMPLEX for zunml2.

Array, DIMENSION

(lda, m) if side = 'L',

(lda, 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 ?gelqf in the first k rows of its array argument a. The array a is modified by the routine but restored on exit.

lda

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

tau

REAL for sorml2

DOUBLE PRECISION for dorml2

COMPLEX for cunml2

DOUBLE COMPLEX for zunml2.

Array, DIMENSION (k).

tau(i) must contain the scalar factor of the elementary reflector H(i), as returned by ?gelqf.

c

REAL for sorml2

DOUBLE PRECISION for dorml2

COMPLEX for cunml2

DOUBLE COMPLEX for zunml2.

Array, DIMENSION (ldc, n) On entry, the m-by-n matrix C.

ldc

INTEGER. The leading dimension of the array c. ldc max(1,m).

work

REAL for sorml2

DOUBLE PRECISION for dorml2

COMPLEX for cunml2

DOUBLE COMPLEX for zunml2.

Workspace array, DIMENSION

(n) if side = 'L',

(m) if side = 'R'

Output Parameters
c

On exit, c is overwritten by Q*C or QT*C / QH*C, or C*Q, or C*QT / C*QH.

info

INTEGER.

= 0: successful exit

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