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, * ), T( 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 xerbla(srname, info)
subroutine zcopy(n, zx, incx, zy, incy)
ZCOPY
subroutine zgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
ZGEMM
subroutine zlacgv(n, x, incx)
ZLACGV conjugates a complex vector.
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