181 SUBROUTINE clarzb( 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 C( LDC, * ), T( LDT, * ), V( LDV, * ),
201 parameter( one = ( 1.0e+0, 0.0e+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(
'CLARZB', -info )
234 IF( lsame( trans,
'N' ) )
THEN
240 IF( lsame( side,
'L' ) )
THEN
247 CALL ccopy( n, c( j, 1 ), ldc, work( 1, j ), 1 )
254 $
CALL cgemm(
'Transpose',
'Conjugate transpose', n, k, l,
255 $ one, c( m-l+1, 1 ), ldc, v, ldv, one, work,
260 CALL ctrmm(
'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 cgemm(
'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 ccopy( m, c( 1, j ), 1, work( 1, j ), 1 )
292 $
CALL cgemm(
'No transpose',
'Transpose', m, k, l, one,
293 $ c( 1, n-l+1 ), ldc, v, ldv, one, work, ldwork )
299 CALL clacgv( k-j+1, t( j, j ), 1 )
301 CALL ctrmm(
'Right',
'Lower', trans,
'Non-unit', m, k, one, t,
302 $ ldt, work, ldwork )
304 CALL clacgv( k-j+1, t( j, j ), 1 )
311 c( i, j ) = c( i, j ) - work( i, j )
319 CALL clacgv( k, v( 1, j ), 1 )
322 $
CALL cgemm(
'No transpose',
'No transpose', m, l, k, -one,
323 $ work, ldwork, v, ldv, one, c( 1, n-l+1 ), ldc )
325 CALL clacgv( k, v( 1, j ), 1 )
subroutine xerbla(srname, info)
subroutine ccopy(n, cx, incx, cy, incy)
CCOPY
subroutine cgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
CGEMM
subroutine clacgv(n, x, incx)
CLACGV conjugates a complex vector.
subroutine clarzb(side, trans, direct, storev, m, n, k, l, v, ldv, t, ldt, c, ldc, work, ldwork)
CLARZB applies a block reflector or its conjugate-transpose to a general matrix.
subroutine ctrmm(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)
CTRMM