179 SUBROUTINE slarzb( SIDE, TRANS, DIRECT, STOREV, M, N, K, L, V,
180 $ LDV, T, LDT, C, LDC, WORK, LDWORK )
187 CHARACTER DIRECT, SIDE, STOREV, TRANS
188 INTEGER K, L, LDC, LDT, LDV, LDWORK, M, N
191 REAL C( LDC, * ), T( LDT, * ), V( LDV, * ),
199 parameter( one = 1.0e+0 )
216 IF( m.LE.0 .OR. n.LE.0 )
222 IF( .NOT.lsame( direct,
'B' ) )
THEN
224 ELSE IF( .NOT.lsame( storev,
'R' ) )
THEN
228 CALL xerbla(
'SLARZB', -info )
232 IF( lsame( trans,
'N' ) )
THEN
238 IF( lsame( side,
'L' ) )
THEN
245 CALL scopy( n, c( j, 1 ), ldc, work( 1, j ), 1 )
252 $
CALL sgemm(
'Transpose',
'Transpose', n, k, l, one,
253 $ c( m-l+1, 1 ), ldc, v, ldv, one, work, ldwork )
257 CALL strmm(
'Right',
'Lower', transt,
'Non-unit', n, k, one,
259 $ ldt, work, ldwork )
265 c( i, j ) = c( i, j ) - work( j, i )
273 $
CALL sgemm(
'Transpose',
'Transpose', l, n, k, -one, v,
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,
298 $ ldt, work, ldwork )
304 c( i, j ) = c( i, j ) - work( i, j )
312 $
CALL sgemm(
'No transpose',
'No transpose', m, l, k,
314 $ work, ldwork, v, ldv, one, c( 1, n-l+1 ), ldc )
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