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 strmm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
STRMM
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 xerbla(SRNAME, INFO)
XERBLA
subroutine sgemm(TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
SGEMM
subroutine scopy(N, SX, INCX, SY, INCY)
SCOPY