slarzt - form the triangular factor T of a real block reflector H of order > n, which is defined as a product of k elementary reflectors
SUBROUTINE SLARZT( DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT) CHARACTER * 1 DIRECT, STOREV INTEGER N, K, LDV, LDT REAL V(LDV,*), TAU(*), T(LDT,*)
SUBROUTINE SLARZT_64( DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT) CHARACTER * 1 DIRECT, STOREV INTEGER*8 N, K, LDV, LDT REAL V(LDV,*), TAU(*), T(LDT,*)
SUBROUTINE LARZT( DIRECT, STOREV, N, K, V, [LDV], TAU, T, [LDT]) CHARACTER(LEN=1) :: DIRECT, STOREV INTEGER :: N, K, LDV, LDT REAL, DIMENSION(:) :: TAU REAL, DIMENSION(:,:) :: V, T
SUBROUTINE LARZT_64( DIRECT, STOREV, N, K, V, [LDV], TAU, T, [LDT]) CHARACTER(LEN=1) :: DIRECT, STOREV INTEGER(8) :: N, K, LDV, LDT REAL, DIMENSION(:) :: TAU REAL, DIMENSION(:,:) :: V, T
#include <sunperf.h>
void slarzt(char direct, char storev, int n, int k, float *v, int ldv, float *tau, float *t, int ldt);
void slarzt_64(char direct, char storev, long n, long k, float *v, long ldv, float *tau, float *t, long ldt);
slarzt forms the triangular factor T of a real 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.
= 'F': H = H(1) H(2) . . . H(k) (Forward, not supported yet)
= 'B': H = H(k) . . . H(2) H(1) (Backward)
= 'R': rowwise
TAU(i)
must contain the scalar factor of the elementary
reflector H(i).
Based on contributions by
A. Petitet, Computer Science Dept., Univ. of Tenn., Knoxville, USA
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 )