dlarzt - 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 DLARZT( DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT) CHARACTER * 1 DIRECT, STOREV INTEGER N, K, LDV, LDT DOUBLE PRECISION V(LDV,*), TAU(*), T(LDT,*)
SUBROUTINE DLARZT_64( DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT) CHARACTER * 1 DIRECT, STOREV INTEGER*8 N, K, LDV, LDT DOUBLE PRECISION 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(8), DIMENSION(:) :: TAU REAL(8), 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(8), DIMENSION(:) :: TAU REAL(8), DIMENSION(:,:) :: V, T
#include <sunperf.h>
void dlarzt(char direct, char storev, int n, int k, double *v, int ldv, double *tau, double *t, int ldt);
void dlarzt_64(char direct, char storev, long n, long k, double *v, long ldv, double *tau, double *t, long ldt);
dlarzt 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 )