Developer Reference for Intel® oneAPI Math Kernel Library for Fortran

ID 766686
Date 10/31/2024
Public
Document Table of Contents

?tpmlqt

Applies an orthogonal matrix obtained from a "triangular-pentagonal" block reflector to a general matrix.

call stpmlqt(side, trans, m, n, k, l, mb, v, ldv, t, ldt, a, lda, b, ldb, work, info)

call dtpmlqt(side, trans, m, n, k, l, mb, v, ldv, t, ldt, a, lda, b, ldb, work, info)

call ctpmlqt(side, trans, m, n, k, l, mb, v, ldv, t, ldt, a, lda, b, ldb, work, info)

call ztpmlqt(side, trans, m, n, k, l, mb, v, ldv, t, ldt, a, lda, b, ldb, work, info)

Description

?tpmlqt applies an orthogonal matrix Q obtained from a "triangular-pentagonal" block reflector H to a general matrix C, which consists of two blocks A and B.

The columns of the pentagonal matrix V contain the elementary reflectors H(1), H(2), ..., H(k); V is composed of a rectangular block V1 and a trapezoidal block V2:

V = [V1] [V2].

The size of the trapezoidal block V2 is determined by the parameter l, where 0 lk; V2 is lower trapezoidal, consisting of the first l rows of a k-by-k upper triangular matrix. If l=k, V2 is lower triangular; if l=0, there is no trapezoidal block, hence V = V1 is rectangular.

If side = 'L':

C = [A] [B]

where A is k-by-n, B is m-by-n, and C is k-by-m.

If side = 'R':

C = [AB]

where A is m-by-k, B is m-by-n, and C is k-by-n.

The real orthogonal matrix Q is formed from V and T.

If trans='N' and side='L', C is on exit replaced with Q * C.

C is on exit replaced with

  side = 'L' side = 'R'
trans = 'N' Q*C C*Q
trans = 'T' QT*C C*QT
trans = 'C' QH*C C*QH

Input Parameters

side

CHARACTER*1.

= 'L': apply op(Q) from the left;

= 'R': apply op(Q) from the right.

trans

CHARACTER*1.

= 'N': No transpose, op(Q) = Q;

= 'T': Transpose, op(Q) = QT;

= 'C': Transpose, op(Q) = QH.

m

INTEGER. The number of rows of the matrix B. m 0.

n

INTEGER. The number of columns of the matrix B. n 0.

k

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

l

INTEGER. The order of the trapezoidal part of V. kl 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 ?tplqt.

v

REAL for stpmlqt

DOUBLE PRECISION for dtpmlqt

COMPLEX for ctpmlqt

COMPLEX*16 for ztpmlqt

Array of size (lda,k). The i-th row must contain the vector which defines the elementary reflector H(i), for i = 1,2,...,k, as returned by ?tplqt in b.

ldv

INTEGER. The leading dimension of the array v. If side = 'L', ldv max(1, m); if side = 'R', ldv max(1, n).

t

REAL for stpmlqt

DOUBLE PRECISION for dtpmlqt

COMPLEX for ctpmlqt

COMPLEX*16 for ztpmlqt

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

ldt

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

a

REAL for stpmlqt

DOUBLE PRECISION for dtpmlqt

COMPLEX for ctpmlqt

COMPLEX*16 for ztpmlqt

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

On entry, the k-by-n or m-by-k matrix A.

lda

INTEGER. The leading dimension of the array a. If side = 'L', LDC max(1, k); if side = 'R', LDC max(1, m).

b

REAL for stpmlqt

DOUBLE PRECISION for dtpmlqt

COMPLEX for ctpmlqt

COMPLEX*16 for ztpmlqt

Array of size (ldb, n). On entry, the m-by-n matrix B.

ldb

INTEGER. The leading dimension of the array b. ldb max(1, m).

Output Parameters

a

On exit, a is overwritten by the corresponding block of op(Q)*C or C*op(Q) See Description.

b

REAL for stpmlqt

DOUBLE PRECISION for dtpmlqt

COMPLEX for ctpmlqt

COMPLEX*16 for ztpmlqt

On exit, b is overwritten by the corresponding block of op(Q)*C or C*op(Q) See Description.

work

REAL for stpmlqt

DOUBLE PRECISION for dtpmlqt

COMPLEX for ctpmlqt

COMPLEX*16 for ztpmlqt

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

info

INTEGER.

info = 0: successful exit.

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