162 SUBROUTINE slarft( DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT )
169 CHARACTER DIRECT, STOREV
170 INTEGER K, LDT, LDV, N
173 REAL T( LDT, * ), TAU( * ), V( LDV, * )
180 parameter( one = 1.0e+0, zero = 0.0e+0 )
183 INTEGER I, J, PREVLASTV, LASTV
199 IF( lsame( direct,
'F' ) )
THEN
202 prevlastv =
max( i, prevlastv )
203 IF( tau( i ).EQ.zero )
THEN
214 IF( lsame( storev,
'C' ) )
THEN
216 DO lastv = n, i+1, -1
217 IF( v( lastv, i ).NE.zero )
EXIT
220 t( j, i ) = -tau( i ) * v( i , j )
222 j =
min( lastv, prevlastv )
226 CALL sgemv(
'Transpose', j-i, i-1, -tau( i ),
227 $ v( i+1, 1 ), ldv, v( i+1, i ), 1, one,
231 DO lastv = n, i+1, -1
232 IF( v( i, lastv ).NE.zero )
EXIT
235 t( j, i ) = -tau( i ) * v( j , i )
237 j =
min( lastv, prevlastv )
241 CALL sgemv(
'No transpose', i-1, j-i, -tau( i ),
242 $ v( 1, i+1 ), ldv, v( i, i+1 ), ldv,
243 $ one, t( 1, i ), 1 )
248 CALL strmv(
'Upper',
'No transpose', 'non-unit
', I-1, T,
249 $ LDT, T( 1, I ), 1 )
252 PREVLASTV = MAX( PREVLASTV, LASTV )
261.EQ.
IF( TAU( I )ZERO ) THEN
273 IF( LSAME( STOREV, 'c
' ) ) THEN
276.NE.
IF( V( LASTV, I )ZERO ) EXIT
279 T( J, I ) = -TAU( I ) * V( N-K+I , J )
281 J = MAX( LASTV, PREVLASTV )
285 CALL SGEMV( 'transpose
', N-K+I-J, K-I, -TAU( I ),
286 $ V( J, I+1 ), LDV, V( J, I ), 1, ONE,
291.NE.
IF( V( I, LASTV )ZERO ) EXIT
294 T( J, I ) = -TAU( I ) * V( J, N-K+I )
296 J = MAX( LASTV, PREVLASTV )
300 CALL SGEMV( 'no transpose
', K-I, N-K+I-J,
301 $ -TAU( I ), V( I+1, J ), LDV, V( I, J ), LDV,
302 $ ONE, T( I+1, I ), 1 )
307 CALL STRMV( 'lower
', 'no transpose
', 'non-unit
', K-I,
308 $ T( I+1, I+1 ), LDT, T( I+1, I ), 1 )
310 PREVLASTV = MIN( PREVLASTV, LASTV )
subroutine slarft(direct, storev, n, k, v, ldv, tau, t, ldt)
SLARFT forms the triangular factor T of a block reflector H = I - vtvH
subroutine sgemv(trans, m, n, alpha, a, lda, x, incx, beta, y, incy)
SGEMV
subroutine strmv(uplo, trans, diag, n, a, lda, x, incx)
STRMV