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)
XERBLA
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
subroutine dcopy(N, DX, INCX, DY, INCY)
DCOPY