181 SUBROUTINE zlarzb( 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 COMPLEX*16 C( LDC, * ), ( LDT, * ), V( LDV, * ),
201 parameter( one = ( 1.0d+0, 0.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(
'ZLARZB', -info )
234 IF( lsame( trans,
'N' ) )
THEN
240 IF( lsame( side,
'L' ) )
THEN
247 CALL zcopy( n, c( j, 1 ), ldc, work( 1, j ), 1 )
254 $
CALL zgemm(
'Transpose',
'Conjugate transpose', n, k, l,
255 $ one, c( m-l+1, 1 ), ldc, v, ldv, one, work,
260 CALL ztrmm(
'Right',
'Lower', transt,
'Non-unit', n, k, one, t,
261 $ ldt, work, ldwork )
267 c( i, j ) = c( i, j ) - work( j, i )
275 $
CALL zgemm(
'Transpose',
'Transpose', l, n, k, -one, v, ldv,
276 $ work, ldwork, one, c( m-l+1, 1 ), ldc )
278 ELSE IF( lsame( side,
'R' ) )
THEN
285 CALL zcopy( m, c( 1, j ), 1, work( 1, j ), 1 )
292 $
CALL zgemm( 'no transpose
', 'transpose
', M, K, L, ONE,
293 $ C( 1, N-L+1 ), LDC, V, LDV, ONE, WORK, LDWORK )
299 CALL ZLACGV( K-J+1, T( J, J ), 1 )
301 CALL ZTRMM( 'right
', 'lower
', TRANS, 'non-unit
', M, K, ONE, T,
302 $ LDT, WORK, LDWORK )
304 CALL ZLACGV( K-J+1, T( J, J ), 1 )
311 C( I, J ) = C( I, J ) - WORK( I, J )
319 CALL ZLACGV( K, V( 1, J ), 1 )
322 $ CALL ZGEMM( 'no transpose
', 'no transpose
', M, L, K, -ONE,
323 $ WORK, LDWORK, V, LDV, ONE, C( 1, N-L+1 ), LDC )
325 CALL ZLACGV( K, V( 1, J ), 1 )
subroutine zlarzb(side, trans, direct, storev, m, n, k, l, v, ldv, t, ldt, c, ldc, work, ldwork)
ZLARZB applies a block reflector or its conjugate-transpose to a general matrix.
subroutine ztrmm(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)
ZTRMM
subroutine zgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
ZGEMM