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

?tprfb

Applies a real or complex "triangular-pentagonal" blocked reflector to a real or complex matrix, which is composed of two blocks.

Syntax

call stprfb(side, trans, direct, storev, m, n, k, l, v, ldv, t, ldt, a, lda, b, ldb, work, ldwork)

call dtprfb(side, trans, direct, storev, m, n, k, l, v, ldv, t, ldt, a, lda, b, ldb, work, ldwork)

call ctprfb(side, trans, direct, storev, m, n, k, l, v, ldv, t, ldt, a, lda, b, ldb, work, ldwork)

call ztprfb(side, trans, direct, storev, m, n, k, l, v, ldv, t, ldt, a, lda, b, ldb, work, ldwork)

call tprfb(t, v, a, b[, direct][, storev][, side][, trans])

Include Files

  • mkl.fi, lapack.f90

Description

The ?tprfb routine applies a real or complex "triangular-pentagonal" block reflector H, HT, or HH from either the left or the right to a real or complex matrix C, which is composed of two blocks A and B.

The block B is m-by-n. If side = 'R', A is m-by-k, and if side = 'L', A is of size k-by-n.



The pentagonal matrix V is composed of a rectangular block V1 and a trapezoidal block V2. The size of the trapezoidal block is determined by the parameter l, where 0≤lk. if l=k, the V2 block of V is triangular; if l=0, there is no trapezoidal block, thus V = V1 is rectangular.

  direct='F' direct='B'
storev='C'

V2 is upper trapezoidal (first l rows of k-by-k upper triangular)


V2 is lower trapezoidal (last l rows of k-by-k lower triangular matrix)
storev='R'

V2 is lower trapezoidal (first l columns of k-by-k lower triangular matrix)


V2 is upper trapezoidal (last l columns of k-by-k upper triangular matrix)
  side='L' side='R'
storev='C'

V is m-by-k

V2 is l-by-k

V is n-by-k

V2 is l-by-k

storev='R'

V is k-by-m

V2 is k-by-l

V is k-by-n

V2 is k-by-l

Input Parameters

side

CHARACTER*1.

= 'L': apply H, HT, or HH from the left,

= 'R': apply H, HT, or HH from the right.

trans

CHARACTER*1.

= 'N': apply H (no transpose),

= 'T': apply HT (transpose),

= 'C': apply HH (conjugate transpose).

direct

CHARACTER*1.

Indicates how H is formed from a product of elementary reflectors:

= 'F': H = H(1) H(2) . . . H(k) (Forward),

= 'B': H = H(k) . . . H(2) H(1) (Backward).

storev

CHARACTER*1.

Indicates how the vectors that define the elementary reflectors are stored:

= 'C': Columns,

= 'R': Rows.

m

INTEGER. The total number of rows in the matrix B (m ≥ 0).

n

INTEGER. The number of columns in B (n ≥ 0).

k

INTEGER. The order of the matrix T, which is the number of elementary reflectors whose product defines the block reflector. (k ≥ 0)

l

INTEGER. The order of the trapezoidal part of V. (kl ≥ 0).

v

REAL for stprfb

DOUBLE PRECISION for dtprfb

COMPLEX for ctprfb

COMPLEX*16 for ztprfb.

DIMENSION (ldv, k) if storev = 'C',

DIMENSION (ldv, m) if storev = 'R' and side = 'L',

DIMENSION (ldv, n) if storev = 'R' and side = 'R'.

The pentagonal matrix V, which contains the elementary reflectors H(1), H(2), ..., H(k).

ldv

INTEGER. The leading dimension of the array v.

If storev = 'C' and side = 'L', at least max(1, m).

If storev = 'C' and side = 'R', at least max(1, n).

If storev = 'R' , at least k.

t

REAL for stprfb

DOUBLE PRECISION for dtprfb

COMPLEX for ctprfb

COMPLEX*16 for ztprfb.

Array size (ldt, k). The triangular k-by-k matrix T in the representation of the block reflector.

ldt

INTEGER. The leading dimension of the array t (ldtk).

a

REAL for stprfb

DOUBLE PRECISION for dtprfb

COMPLEX for ctprfb

COMPLEX*16 for ztprfb.

DIMENSION (lda, n) if side = 'L',

DIMENSION (lda, k) if side = 'R'.

The k-by-n or m-by-k matrix A.

lda

INTEGER. The leading dimension of the array a.

If side = 'L', at least max(1, k).

If side = 'R', at least max(1, m).

b

REAL for stprfb

DOUBLE PRECISION for dtprfb

COMPLEX for ctprfb

COMPLEX*16 for ztprfb.

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

ldb

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

work

REAL for stprfb

DOUBLE PRECISION for dtprfb

COMPLEX for ctprfb

COMPLEX*16 for ztprfb.

DIMENSION (ldwork, n) if side = 'L',

DIMENSION (ldwork, k) if side = 'R'.

Workspace array.

ldwork

INTEGER. The leading dimension of the array work.

If side = 'L', at least k.

If side = 'R', at least m.

Output Parameters

a

Contains the corresponding block of H*C, HT*C, HH*C, C*H, C*HT, or C*HH.

b

Contains the corresponding block of H*C, HT*C, HH*C, C*H, C*HT, or C*HH.

info

INTEGER. If info = 0, the execution is successful.

If info < 0, the i-th parameter had an illegal value.

If info = -1011, memory allocation error occurred.