181 SUBROUTINE dlarzb( 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 DOUBLE PRECISION C( LDC, * ), T( LDT, * ), V( LDV, * ),
201 parameter( one = 1.0d+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(
'DLARZB', -info )
234 IF( lsame( trans,
'N' ) )
THEN
240 IF( lsame( side,
'L' ) )
THEN
247 CALL dcopy( n, c( j, 1 ), ldc, work( 1, j ), 1 )
254 $
CALL dgemm(
'Transpose',
'Transpose', n, k, l, one,
255 $ c( m-l+1, 1 ), ldc, v, ldv, one, work, ldwork )
259 CALL dtrmm(
'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 dgemm(
'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 dcopy( m, c( 1, j ), 1, work( 1, j ), 1 )
291 $
CALL dgemm(
'No transpose',
'Transpose', m, k, l, one,
292 $ c( 1, n-l+1 ), ldc, v, ldv, one, work, ldwork )
296 CALL dtrmm(
'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 dgemm(
'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 dcopy(n, dx, incx, dy, incy)
DCOPY
subroutine dgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
DGEMM
subroutine dlarzb(side, trans, direct, storev, m, n, k, l, v, ldv, t, ldt, c, ldc, work, ldwork)
DLARZB applies a block reflector or its transpose to a general matrix.
subroutine dtrmm(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)
DTRMM