Intel® oneAPI Math Kernel Library Developer Reference - Fortran
Applies a block reflector or its transpose/conjugate-transpose to a general rectangular matrix.
call slarfb( side, trans, direct, storev, m, n, k, v, ldv, t, ldt, c, ldc, work, ldwork )
call dlarfb( side, trans, direct, storev, m, n, k, v, ldv, t, ldt, c, ldc, work, ldwork )
call clarfb( side, trans, direct, storev, m, n, k, v, ldv, t, ldt, c, ldc, work, ldwork )
call zlarfb( side, trans, direct, storev, m, n, k, v, ldv, t, ldt, c, ldc, work, ldwork )
The real flavors of the routine ?larfb apply a real block reflector H or its transpose HT to a real m-by-n matrix C from either left or right.
The complex flavors of the routine ?larfb apply a complex block reflector H or its conjugate transpose HH to a complex m-by-n matrix C from either left or right.
The data types are given for the Fortran interface.
CHARACTER*1.
If side = 'L': apply H or HT for real flavors and H or HH for complex flavors from the left.
If side = 'R': apply H or HT for real flavors and H or HH for complex flavors from the right.
CHARACTER*1.
If trans = 'N': apply H (No transpose).
If trans = 'C': apply HH (Conjugate transpose).
If trans = 'T': apply HT (Transpose).
CHARACTER*1.
Indicates how H is formed from a product of elementary reflectors
If direct = 'F': H = H(1)*H(2)*. . . *H(k) (forward)
If direct = 'B': H = H(k)* . . . H(2)*H(1) (backward)
CHARACTER*1.
Indicates how the vectors which define the elementary reflectors are stored:
If storev = 'C': Column-wise
If storev = 'R': Row-wise
INTEGER. The number of rows of the matrix C.
INTEGER. The number of columns of the matrix C.
INTEGER. The order of the matrix T (equal to the number of elementary reflectors whose product defines the block reflector).
REAL for slarfb
DOUBLE PRECISION for dlarfb
COMPLEX for clarfb
DOUBLE COMPLEX for zlarfb
Array, DIMENSION
(ldv, k) if storev = 'C'
(ldv, m) if storev = 'R' and side = 'L'
(ldv, n) if storev = 'R' and side = 'R'
The matrix v. See Application Notes below.
INTEGER. The leading dimension of the array v.
If storev = 'C' and side = 'L', ldv≥ max(1,m);
if storev = 'C' and side = 'R', ldv≥ max(1,n);
if storev = 'R', ldv≥k.
REAL for slarfb
DOUBLE PRECISION for dlarfb
COMPLEX for clarfb
DOUBLE COMPLEX for zlarfb
Array, size (ldt,k).
Contains the triangular k-by-k matrix T in the representation of the block reflector.
INTEGER. The leading dimension of the array t.
ldt≥k.
REAL for slarfb
DOUBLE PRECISION for dlarfb
COMPLEX for clarfb
DOUBLE COMPLEX for zlarfb
Array, size (ldc,n).
On entry, the m-by-n matrix C.
INTEGER. The leading dimension of the array c.
ldc≥ max(1,m).
REAL for slarfb
DOUBLE PRECISION for dlarfb
COMPLEX for clarfb
DOUBLE COMPLEX for zlarfb
Workspace array, DIMENSION (ldwork, k).
INTEGER. The leading dimension of the array work.
If side = 'L', ldwork≥ max(1, n);
if side = 'R', ldwork≥ max(1, m).
On exit, c is overwritten by the product of the following:
H*C, or HT*C, or C*H, or C*HT for real flavors
H*C, or HH*C, or C*H, or C*HH for complex flavors
INTEGER.
If info = 0, the execution is successful.
If info = -i, the i-th parameter had an illegal value.
If info = -1011, memory allocation error occurred.
The shape of the matrix V and the storage of the vectors which define the H(i) is best illustrated by the following example with n = 5 and k = 3. The elements equal to 1 are not stored; the corresponding array elements are modified but restored on exit. The rest of the array is not used.