# ?larzb

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

## Syntax

call slarzb( side, trans, direct, storev, m, n, k, l, v, ldv, t, ldt, c, ldc, work, ldwork )

call dlarzb( side, trans, direct, storev, m, n, k, l, v, ldv, t, ldt, c, ldc, work, ldwork )

call clarzb( side, trans, direct, storev, m, n, k, l, v, ldv, t, ldt, c, ldc, work, ldwork )

call zlarzb( side, trans, direct, storev, m, n, k, l, v, ldv, t, ldt, c, ldc, work, ldwork )

## Description

The routine applies a real/complex block reflector H or its transpose HT (or HH for complex flavors) to a real/complex distributed m-by-n matrix C from the left or the right. Currently, only `storev = 'R'` and `direct = 'B'` are supported.

## Input Parameters

side

  CHARACTER*1.

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

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

trans

  CHARACTER*1.

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

  If `trans='C'`: apply HT/HH (transpose/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, not supported)

  = 'B': `H = H(k)*...*H(2)*H(1)` (backward)

storev

  CHARACTER*1.

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

  = 'C': Column-wise (not supported)

  = '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).

l

  INTEGER. The number of columns of the matrix V containing the meaningful part of the Householder reflectors.

  If `side = 'L'`, `m ≥ l ≥ 0`, if `side = 'R'`, `n ≥ l ≥ 0`.

v

  REAL for slarzb

  DOUBLE PRECISION for dlarzb

  COMPLEX for clarzb

  COMPLEX*16 for zlarzb

  Array, DIMENSION (ldv, nv).

  If `storev = 'C'`, `nv = k`;

  if `storev = 'R'`, `nv = l`.

ldv

  INTEGER. The leading dimension of the array v.

  If `storev = 'C'`, `ldv ≥ l`; if `storev = 'R'`, `ldv ≥ k`.

t

  REAL for slarzb

  DOUBLE PRECISION for dlarzb

  COMPLEX for clarzb

  COMPLEX*16 for zlarzb

  Array, DIMENSION (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.

  `ldt ≥ k`.

c

  REAL for slarzb

  DOUBLE PRECISION for dlarzb

  COMPLEX for clarzb

  COMPLEX*16 for zlarzb

  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 slarzb

  DOUBLE PRECISION for dlarzb

  COMPLEX for clarzb

  COMPLEX*16 for zlarzb

  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 HT/HH*C, or C*H, or C*HT/HH.

Parent topic: Auxiliary Routines