# ?larfb

Applies a block reflector or its transpose/conjugate-transpose to a general rectangular matrix.

## Syntax

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 )

## Description

The routine ?larfb applies a complex block reflector H or its transpose H' to a complex m-by-n matrix C from either left or right.

## Input Parameters

side

  CHARACTER*1.

  If `side = 'L'`: apply H or H' from the left

  If `side = 'R'`: apply H or H' from the right

trans

  CHARACTER*1.

  If `trans = 'N'`: apply H (No transpose)

  If `trans = 'C'`: apply H' (Conjugate transpose)

direct

  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)

storev

  CHARACTER*1.

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

  If `storev = 'C'`: Column-wise

  If `storev = 'R'`: Row-wise

m

  INTEGER. The number of rows of the matrix C.

n

  INTEGER. The number of columns of the matrix C.

k

  INTEGER. The order of the matrix T (equal to the number of elementary reflectors whose product defines the block reflector).

v

  REAL for slarfb

  DOUBLE PRECISION for dlarfb

  COMPLEX for clarfb

  COMPLEX*16 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.

ldv

  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`.

t

  REAL for slarfb

  DOUBLE PRECISION for dlarfb

  COMPLEX for clarfb

  COMPLEX*16 for zlarfb

  Array, DIMENSION (ldt,k).

  Contains the triangular k-by-k matrix T in the representation of the block reflector.

LDT

  INTEGER. The leading dimension of the array t.

  `ldt ≥ k`.

c

  REAL for slarfb

  DOUBLE PRECISION for dlarfb

  COMPLEX for clarfb

  COMPLEX*16 for zlarfb

  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 slarfb

  DOUBLE PRECISION for dlarfb

  COMPLEX for clarfb

  COMPLEX*16 for zlarfb

  Workspace array, DIMENSION (ldwork, k).

ldwork

  INTEGER. The leading dimension of the array work.

  If `side = 'L'`, `ldwork ≥ max(1, n)`;

  if `side = 'R'`, `ldwork ≥ max(1, m)`.

## Output Parameters

c

  On exit, c is overwritten by H*C, or H'*C, or C*H, or C*H'.

Parent topic: Auxiliary Routines