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, , LDV, , 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 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
subroutine cgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
CGEMM