181 SUBROUTINE slarzb( SIDE, TRANS, DIRECT, STOREV, M, N, K, L, V,
182 $ LDV, T, LDT, C, LDC, WORK, LDWORK )
189 CHARACTER DIRECT, SIDE, STOREV, TRANS
190 INTEGER K, L, LDC, LDT, LDV, LDWORK, M, N
193 REAL C( LDC, * ), T( LDT, * ), V( LDV, * ),
201 parameter( one = 1.0e+0 )
218 IF( m.LE.0 .OR. n.LE.0 )
224 IF( .NOT.lsame( direct,
'B' ) )
THEN
226 ELSE IF( .NOT.lsame( storev,
'R' ) )
THEN
230 CALL xerbla(
'SLARZB', -info )
234 IF( lsame( trans,
'N' ) )
THEN
240 IF( lsame( side,
'L' ) )
THEN
247 CALL scopy( n, c( j, 1 ), ldc, work( 1, j ), 1 )
254 $
CALL sgemm(
'Transpose',
'Transpose', n, k, l, one,
255 $ c( m-l+1, 1 ), ldc, v, ldv, one, work, ldwork )
259 CALL strmm(
'Right',
'Lower', transt,
'Non-unit', n, k, one, t,
260 $ ldt, work, ldwork )
266 c( i, j ) = c( i, j ) - work( j, i )
274 $
CALL sgemm(
'Transpose',
'Transpose', l, n, k, -one, v, ldv,
275 $ work, ldwork, one, c( m-l+1, 1 ), ldc )
277 ELSE IF( lsame( side,
'R' ) )
THEN
284 CALL scopy( m, c( 1, j ), 1, work( 1, j ), 1 )
291 $
CALL sgemm(
'No transpose',
'Transpose', m, k, l, one,
292 $ c( 1, n-l+1 ), ldc, v, ldv, one, work, ldwork )
296 CALL strmm(
'Right',
'Lower', trans,
'Non-unit', m, k, one, t,
297 $ ldt, work, ldwork )
303 c( i, j ) = c( i, j ) - work( i, j )
311 $
CALL sgemm(
'No transpose',
'No transpose', m, l, k, -one,
312 $ work, ldwork, v, ldv, one, c( 1, n-l+1 ), ldc )
subroutine xerbla(srname, info)
subroutine scopy(n, sx, incx, sy, incy)
SCOPY
subroutine sgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
SGEMM
subroutine slarzb(side, trans, direct, storev, m, n, k, l, v, ldv, t, ldt, c, ldc, work, ldwork)
SLARZB applies a block reflector or its transpose to a general matrix.
subroutine strmm(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)
STRMM