Loading...
Searching...
No Matches

## zlarzt()

subroutine zlarzt | ( | character | direct,
|  | character | storev,
|  | integer | n,
|  | integer | k,
|  | complex*16, dimension( ldv, * ) | v,
|  | integer | ldv,
|  | complex*16, dimension( * ) | tau,
|  | complex*16, dimension( ldt, * ) | t,
|  | integer | ldt )

ZLARZT forms the triangular factor T of a block reflector H = I - vtvH.

Download ZLARZT + dependencies [TGZ] [ZIP] [TXT]

Purpose:

      !>
      !> ZLARZT forms the triangular factor T of a 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**H
      !>
      !> 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**H * T * V
      !>
      !> Currently, only STOREV = 'R' and DIRECT = 'B' are supported.
      !>

Parameters

  [in]

  DIRECT

      !>          DIRECT is CHARACTER*1
      !>          Specifies the order in which the elementary reflectors are
      !>          multiplied to form the block reflector:
      !>          = 'F': H = H(1) H(2) . . . H(k) (Forward, not supported yet)
      !>          = 'B': H = H(k) . . . H(2) H(1) (Backward)
      !>

  [in]

  STOREV

      !>          STOREV is CHARACTER*1
      !>          Specifies how the vectors which define the elementary
      !>          reflectors are stored (see also Further Details):
      !>          = 'C': columnwise                        (not supported yet)
      !>          = 'R': rowwise
      !>

  [in]

  N

      !>          N is INTEGER
      !>          The order of the block reflector H. N >= 0.
      !>

  [in]

  K

      !>          K is INTEGER
      !>          The order of the triangular factor T (= the number of
      !>          elementary reflectors). K >= 1.
      !>

  [in,out]

  V

      !>          V is COMPLEX*16 array, dimension
      !>                               (LDV,K) if STOREV = 'C'
      !>                               (LDV,N) if STOREV = 'R'
      !>          The matrix V. See further details.
      !>

  [in]

  LDV

      !>          LDV is INTEGER
      !>          The leading dimension of the array V.
      !>          If STOREV = 'C', LDV >= max(1,N); if STOREV = 'R', LDV >= K.
      !>

  [in]

  TAU

      !>          TAU is COMPLEX*16 array, dimension (K)
      !>          TAU(i) must contain the scalar factor of the elementary
      !>          reflector H(i).
      !>

  [out]

  T

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

  [in]

  LDT

      !>          LDT is INTEGER
      !>          The leading dimension of the array T. LDT >= K.
      !>

Author
  Univ. of Tennessee
  Univ. of California Berkeley
  Univ. of Colorado Denver
  NAG Ltd.

Contributors:
  A. Petitet, Computer Science Dept., Univ. of Tenn., Knoxville, USA

Further Details:

      !>
      !>  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.
      !>
      !>  DIRECT = 'F' and STOREV = 'C':         DIRECT = 'F' and STOREV = 'R':
      !>
      !>                                              ______V_____
      !>         ( v1 v2 v3 )                        /            \
      !>         ( v1 v2 v3 )                      ( v1 v1 v1 v1 v1 . . . . 1 )
      !>     V = ( v1 v2 v3 )                      ( v2 v2 v2 v2 v2 . . . 1   )
      !>         ( v1 v2 v3 )                      ( v3 v3 v3 v3 v3 . . 1     )
      !>         ( v1 v2 v3 )
      !>            .  .  .
      !>            .  .  .
      !>            1  .  .
      !>               1  .
      !>                  1
      !>
      !>  DIRECT = 'B' and STOREV = 'C':         DIRECT = 'B' and STOREV = 'R':
      !>
      !>                                                        ______V_____
      !>            1                                          /            \
      !>            .  1                           ( 1 . . . . v1 v1 v1 v1 v1 )
      !>            .  .  1                        ( . 1 . . . v2 v2 v2 v2 v2 )
      !>            .  .  .                        ( . . 1 . . v3 v3 v3 v3 v3 )
      !>            .  .  .
      !>         ( v1 v2 v3 )
      !>         ( v1 v2 v3 )
      !>     V = ( v1 v2 v3 )
      !>         ( v1 v2 v3 )
      !>         ( v1 v2 v3 )
      !>