SUBROUTINE CLARZT( DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT) CHARACTER * 1 DIRECT, STOREV COMPLEX V(LDV,*), TAU(*), T(LDT,*) INTEGER N, K, LDV, LDT SUBROUTINE CLARZT_64( DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT) CHARACTER * 1 DIRECT, STOREV COMPLEX V(LDV,*), TAU(*), T(LDT,*) INTEGER*8 N, K, LDV, LDT
SUBROUTINE LARZT( DIRECT, STOREV, N, K, V, [LDV], TAU, T, [LDT]) CHARACTER(LEN=1) :: DIRECT, STOREV COMPLEX, DIMENSION(:) :: TAU COMPLEX, DIMENSION(:,:) :: V, T INTEGER :: N, K, LDV, LDT SUBROUTINE LARZT_64( DIRECT, STOREV, N, K, V, [LDV], TAU, T, [LDT]) CHARACTER(LEN=1) :: DIRECT, STOREV COMPLEX, DIMENSION(:) :: TAU COMPLEX, DIMENSION(:,:) :: V, T INTEGER(8) :: N, K, LDV, LDT
void clarzt(char direct, char storev, int n, int k, complex *v, int ldv, complex *tau, complex *t, int ldt);
void clarzt_64(char direct, char storev, long n, long k, complex *v, long ldv, complex *tau, complex *t, long ldt);
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.
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 )