1 SUBROUTINE clarft( DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT )
12 COMPLEX t( ldt, * ), tau( * ), v( ldv, * )
107 parameter( one = ( 1.0e+0, 0.0e+0 ),
108 $ zero = ( 0.0e+0, 0.0e+0 ) )
111 INTEGER i, j, prevlastv, lastv
115 EXTERNAL cgemv, clacgv, ctrmv
128 IF( lsame( direct,
'F' ) )
THEN
131 prevlastv =
max( prevlastv, i )
132 IF( tau( i ).EQ.zero )
THEN
145 IF( lsame(
storev,
'C' ) )
THEN
147 DO lastv = n, i+1, -1
148 IF( v( lastv, i ).NE.zero ) goto 55
151 j =
min( lastv, prevlastv )
155 CALL cgemv(
'Conjugate transpose', j-i+1, i-1,
156 $ -tau( i ), v( i, 1 ), ldv, v( i, i ), 1,
157 $ zero, t( 1, i ), 1 )
160 DO lastv = n, i+1, -1
161 IF( v( i, lastv ).NE.zero ) goto 65
164 j =
min( lastv, prevlastv )
169 $ CALL clacgv( j-i, v( i, i+1 ), ldv )
170 CALL cgemv(
'No transpose', i-1, j-i+1, -tau( i ),
171 $ v( 1, i ), ldv, v( i, i ), ldv, zero,
174 $ CALL clacgv( j-i, v( i, i+1 ), ldv )
180 CALL ctrmv(
'Upper',
'No transpose',
'Non-unit', i-1, t,
181 $ ldt, t( 1, i ), 1 )
184 prevlastv =
max( prevlastv, lastv )
193 IF( tau( i ).EQ.zero )
THEN
205 IF( lsame(
storev,
'C' ) )
THEN
210 IF( v( lastv, i ).NE.zero ) goto 75
213 j =
max( lastv, prevlastv )
218 CALL cgemv(
'Conjugate transpose', n-k+i-j+1, k-i,
219 $ -tau( i ), v( j, i+1 ), ldv, v( j, i ),
220 $ 1, zero, t( i+1, i ), 1 )
227 IF( v( i, lastv ).NE.zero ) goto 85
230 j =
max( lastv, prevlastv )
235 CALL clacgv( n-k+i-1-j+1, v( i, j ), ldv )
236 CALL cgemv(
'No transpose', k-i, n-k+i-j+1,
237 $ -tau( i ), v( i+1, j ), ldv, v( i, j ), ldv,
238 $ zero, t( i+1, i ), 1 )
239 CALL clacgv( n-k+i-1-j+1, v( i, j ), ldv )
245 CALL ctrmv(
'Lower',
'No transpose',
'Non-unit', k-i,
246 $ t( i+1, i+1 ), ldt, t( i+1, i ), 1 )
248 prevlastv =
min( prevlastv, lastv )