(S|D|C|Z)LARFB

Single, double, single complex, and double complex LARFB.

Description

Applies a block reflector to a rectangular matrix from the left or right.

If SIDE is ‘L’,

C \assign H * C

If SIDE is ‘R’,

C \assign C * H

If TRANS is ‘T’ then \trans{H} is used. If TRANS is ‘C’ then \herm{H} is used.

The block reflector matrix is formed as a product of elementary reflectors. When DIRECT is ‘F’:

H = H_1 \mult H_2 \mult \dots \mult H_k

When DIRECT is ‘B’:

H = H_k \mult H_{k-1} \mult \dots \mult H_1

The vectors that define each elementary reflector are stored either as rows or columns of a matrix V depending on STOREV.

LAPACK Interface

void slarfb(const char *SIDE, const char *TRANS, const char *DIRECT, const char *STOREV,
    const qml_long *M, const qml_long *N, const qml_long *K, const float *V,
    const qml_long *LDV, const float *T, const qml_long *LDT, float *C,
    const qml_long *LDC, float *WORK, const qml_long *LDWORK);

void dlarfb(const char *SIDE, const char *TRANS, const char *DIRECT, const char *STOREV,
    const qml_long *M, const qml_long *N, const qml_long *K, const double *V,
    const qml_long *LDV, const double *T, const qml_long *LDT, double *C,
    const qml_long *LDC, double *WORK, const qml_long *LDWORK);

void clarfb(const char *SIDE, const char *TRANS, const char *DIRECT, const char *STOREV,
    const qml_long *M, const qml_long *N, const qml_long *K,
    const qml_single_complex *V, const qml_long *LDV, const qml_single_complex *T,
    const qml_long *LDT, qml_single_complex *C, const qml_long *LDC,
    qml_single_complex *WORK, const qml_long *LDWORK);

void zlarfb(const char *SIDE, const char *TRANS, const char *DIRECT, const char *STOREV,
    const qml_long *M, const qml_long *N, const qml_long *K,
    const qml_double_complex *V, const qml_long *LDV, const qml_double_complex *T,
    const qml_long *LDT, qml_double_complex *C, const qml_long *LDC,
    qml_double_complex *WORK, const qml_long *LDWORK);

Arguments

SIDE Which side to mulplify reflector from, ‘L’ or ‘R’
TRANS Whether to transpose reflector matrix, ‘N’, ‘T’, or ‘C’
DIRECT Direction to apply elementary reflectors
STOREV Storage format of elementary reflector vectors
M Number of rows of C
N Number of columns of C
K The number of elementary reflectors in the block
V Matrix storing reflector vectors
LDV Leading dimension of V
T Triangular K x K matrix storing reflectors
LDT Leading dimension of T
C Matrix of size M x N
LDC Leading dimension of C
WORK Work space matrix of size at least N x K if SIDE is ‘L’, or M x K if SIDE is ‘R’
LDWORK Leading dimension of WORK matrix