# ?larzt

Forms the triangular factor T of a block reflector H = I - V*T*VH.

## Syntax

call slarzt( direct, storev, n, k, v, ldv, tau, t, ldt )

call dlarzt( direct, storev, n, k, v, ldv, tau, t, ldt )

call clarzt( direct, storev, n, k, v, ldv, tau, t, ldt )

call zlarzt( direct, storev, n, k, v, ldv, tau, t, ldt )

## Description

The routine forms the triangular factor T of a real/complex block reflector H of order > n, which is defined as a product of k elementary reflectors.

If `direct = 'F'`, `H = H(1)`*`H(2)*...*H(k)`, and T is upper triangular.

If `direct = 'B'`, `H = H(k)*...*H(2)*H(1)`, and T is lower triangular.

If `storev = 'C'`, the vector which defines the elementary reflector H(i) is stored in the i-th column of the array v, and `H = I-V*T*V'`

If `storev = 'R'`, the vector which defines the elementary reflector H(i) is stored in the i-th row of the array v, and `H = I-V'*T*V`

Currently, only `storev = 'R'` and `direct = 'B'` are supported.

## Input Parameters

direct

  CHARACTER*1.

  Specifies the order in which the elementary reflectors are multiplied to form the block reflector:

  If `direct = 'F'`: `H = H(1)*H(2)*...*H(k)` (forward, not supported)

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

storev

  CHARACTER*1.

  Specifies how the vectors which define the elementary reflectors are stored (see also Application Notes below):

  If `storev = 'C'`: column-wise (not supported)

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

n

  INTEGER. The order of the block reflector H. `n ≥ 0`.

k

  INTEGER. The order of the triangular factor T (equal to the number of elementary reflectors). `k ≥ 1`.

v

  REAL for slarzt

  DOUBLE PRECISION for dlarzt

  COMPLEX for clarzt

  COMPLEX*16 for zlarzt

  Array, DIMENSION

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

  (ldv, n) if `storev = 'R'` The matrix V.

ldv

  INTEGER. The leading dimension of the array v.

  If `storev = 'C'`, `ldv ≥ max(1,n)`;

  if `storev = 'R'`, `ldv ≥ k`.

tau

  REAL for slarzt

  DOUBLE PRECISION for dlarzt

  COMPLEX for clarzt

  COMPLEX*16 for zlarzt

  Array, DIMENSION (k). tau(i) must contain the scalar factor of the elementary reflector H(i).

ldt

  INTEGER. The leading dimension of the output array t.

  `ldt ≥ k`.

## Output Parameters

t

  REAL for slarzt

  DOUBLE PRECISION for dlarzt

  COMPLEX for clarzt

  COMPLEX*16 for zlarzt

  Array, DIMENSION (ldt,k). The k-by-k triangular factor T of the block reflector. If `direct = 'F'`, T is upper triangular; if `direct = 'B'`, T is lower triangular. The rest of the array is not used.

v

  The matrix V. See Application Notes below.

## Application Notes

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.

Parent topic: Auxiliary Routines