179 SUBROUTINE dlarzb( 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 DOUBLE PRECISION C( LDC, * ), T( LDT, * ), V( LDV, * ),
199 parameter( one = 1.0d+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(
'DLARZB', -info )
232 IF( lsame( trans,
'N' ) )
THEN
238 IF( lsame( side,
'L' ) )
THEN
245 CALL dcopy( n, c( j, 1 ), ldc, work( 1, j ), 1 )
252 $
CALL dgemm(
'Transpose',
'Transpose', n, k, l, one,
253 $ c( m-l+1, 1 ), ldc, v, ldv, one, work, ldwork )
257 CALL dtrmm(
'Right',
'Lower', transt,
'Non-unit', n, k, one,
259 $ ldt, work, ldwork )
265 c( i, j ) = c( i, j ) - work( j, i )
273 $
CALL dgemm(
'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 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,
298 $ ldt, work, ldwork )
304 c( i, j ) = c( i, j ) - work( i, j )
312 $
CALL dgemm(
'No transpose',
'No transpose', m, l, k,
314 $ work, ldwork, v, ldv, one, c( 1, n-l+1 ), ldc )
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