183 SUBROUTINE dlarzb( SIDE, TRANS, DIRECT, STOREV, M, N, K, L, V,
184 $ LDV, T, LDT, C, LDC, WORK, LDWORK )
192 CHARACTER DIRECT, SIDE, STOREV, TRANS
193 INTEGER K, L, LDC, LDT, LDV, LDWORK, M, N
196 DOUBLE PRECISION C( ldc, * ), T( ldt, * ), V( ldv, * ),
204 parameter( one = 1.0d+0 )
221 IF( m.LE.0 .OR. n.LE.0 )
227 IF( .NOT.lsame( direct,
'B' ) )
THEN 229 ELSE IF( .NOT.lsame( storev,
'R' ) )
THEN 233 CALL xerbla(
'DLARZB', -info )
237 IF( lsame( trans,
'N' ) )
THEN 243 IF( lsame( side,
'L' ) )
THEN 250 CALL dcopy( n, c( j, 1 ), ldc, work( 1, j ), 1 )
257 $
CALL dgemm(
'Transpose',
'Transpose', n, k, l, one,
258 $ c( m-l+1, 1 ), ldc, v, ldv, one, work, ldwork )
262 CALL dtrmm(
'Right',
'Lower', transt,
'Non-unit', n, k, one, t,
263 $ ldt, work, ldwork )
269 c( i, j ) = c( i, j ) - work( j, i )
277 $
CALL dgemm(
'Transpose',
'Transpose', l, n, k, -one, v, ldv,
278 $ work, ldwork, one, c( m-l+1, 1 ), ldc )
280 ELSE IF( lsame( side,
'R' ) )
THEN 287 CALL dcopy( m, c( 1, j ), 1, work( 1, j ), 1 )
294 $
CALL dgemm(
'No transpose',
'Transpose', m, k, l, one,
295 $ c( 1, n-l+1 ), ldc, v, ldv, one, work, ldwork )
299 CALL dtrmm(
'Right',
'Lower', trans,
'Non-unit', m, k, one, t,
300 $ ldt, work, ldwork )
306 c( i, j ) = c( i, j ) - work( i, j )
314 $
CALL dgemm(
'No transpose',
'No transpose', m, l, k, -one,
315 $ work, ldwork, v, ldv, one, c( 1, n-l+1 ), ldc )
subroutine dcopy(N, DX, INCX, DY, INCY)
DCOPY
subroutine dtrmm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
DTRMM
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 xerbla(SRNAME, INFO)
XERBLA