197 SUBROUTINE clarfb( SIDE, TRANS, DIRECT, STOREV, M, N, K, V, LDV,
198 $ T, LDT, C, LDC, WORK, LDWORK )
206 CHARACTER DIRECT, SIDE, STOREV, TRANS
207 INTEGER K, LDC, LDT, LDV, LDWORK, M, N
210 COMPLEX C( LDC, * ), T( LDT, * ), V( LDV, * ),
218 parameter( one = ( 1.0e+0, 0.0e+0 ) )
238 IF( m.LE.0 .OR. n.LE.0 )
241 IF( lsame( trans,
'N' ) )
THEN
247 IF( lsame( storev,
'C' ) )
THEN
249 IF( lsame( direct,
'F' ) )
THEN
255 IF( lsame( side,
'L' ) )
THEN
265 CALL ccopy( n, c( j, 1 ), ldc, work( 1, j ), 1 )
266 CALL clacgv( n, work( 1, j ), 1 )
271 CALL ctrmm(
'Right',
'Lower',
'No transpose',
'Unit', n,
272 $ k, one, v, ldv, work, ldwork )
277 CALL cgemm(
'Conjugate transpose',
'No transpose', n,
278 $ k, m-k, one, c( k+1, 1 ), ldc,
279 $ v( k+1, 1 ), ldv, one, work, ldwork )
284 CALL ctrmm(
'Right',
'Upper', transt,
'Non-unit', n, k,
285 $ one, t, ldt, work, ldwork )
293 CALL cgemm(
'No transpose',
'Conjugate transpose',
294 $ m-k, n, k, -one, v( k+1, 1 ), ldv, work,
295 $ ldwork, one, c( k+1, 1 ), ldc )
300 CALL ctrmm(
'Right',
'Lower',
'Conjugate transpose',
301 $
'Unit', n, k, one, v, ldv, work, ldwork )
307 c( j, i ) = c( j, i ) - conjg( work( i, j ) )
311 ELSE IF( lsame( side,
'R' ) )
THEN
320 CALL ccopy( m, c( 1, j ), 1, work( 1, j ), 1 )
325 CALL ctrmm(
'Right',
'Lower',
'No transpose',
'Unit', m,
326 $ k, one, v, ldv, work, ldwork )
331 CALL cgemm(
'No transpose',
'No transpose', m, k, n-k,
332 $ one, c( 1, k+1 ), ldc, v( k+1, 1 ), ldv,
333 $ one, work, ldwork )
338 CALL ctrmm(
'Right',
'Upper', trans,
'Non-unit', m, k,
339 $ one, t, ldt, work, ldwork )
347 CALL cgemm(
'No transpose',
'Conjugate transpose', m,
348 $ n-k, k, -one, work, ldwork, v( k+1, 1 ),
349 $ ldv, one, c( 1, k+1 ), ldc )
354 CALL ctrmm(
'Right',
'Lower',
'Conjugate transpose',
355 $
'Unit', m, k, one, v, ldv, work, ldwork )
361 c( i, j ) = c( i, j ) - work( i, j )
372 IF( lsame( side,
'L' ) )
THEN
382 CALL ccopy( n, c( m-k+j, 1 ), ldc, work( 1, j ), 1 )
383 CALL clacgv( n, work( 1, j ), 1 )
388 CALL ctrmm(
'Right',
'Upper',
'No transpose',
'Unit', n,
389 $ k, one, v( m-k+1, 1 ), ldv, work, ldwork )
394 CALL cgemm(
'Conjugate transpose',
'No transpose', n,
395 $ k, m-k, one, c, ldc, v, ldv, one, work,
401 CALL ctrmm(
'Right',
'Lower', transt,
'Non-unit', n, k,
402 $ one, t, ldt, work, ldwork )
410 CALL cgemm(
'No transpose',
'Conjugate transpose',
411 $ m-k, n, k, -one, v, ldv, work, ldwork,
417 CALL ctrmm(
'Right',
'Upper',
'Conjugate transpose',
418 $
'Unit', n, k, one, v( m-k+1, 1 ), ldv, work,
425 c( m-k+j, i ) = c( m-k+j, i ) -
426 $ conjg( work( i, j ) )
430 ELSE IF( lsame( side,
'R' ) )
THEN
439 CALL ccopy( m, c( 1, n-k+j ), 1, work( 1, j ), 1 )
444 CALL ctrmm(
'Right',
'Upper',
'No transpose',
'Unit', m,
445 $ k, one, v( n-k+1, 1 ), ldv, work, ldwork )
450 CALL cgemm(
'No transpose',
'No transpose', m, k, n-k,
451 $ one, c, ldc, v, ldv, one, work, ldwork )
456 CALL ctrmm(
'Right',
'Lower', trans,
'Non-unit', m, k,
457 $ one, t, ldt, work, ldwork )
465 CALL cgemm(
'No transpose',
'Conjugate transpose', m,
466 $ n-k, k, -one, work, ldwork, v, ldv, one,
472 CALL ctrmm(
'Right',
'Upper',
'Conjugate transpose',
473 $
'Unit', m, k, one, v( n-k+1, 1 ), ldv, work,
480 c( i, n-k+j ) = c( i, n-k+j ) - work( i, j )
486 ELSE IF( lsame( storev,
'R' ) )
THEN
488 IF( lsame( direct,
'F' ) )
THEN
493 IF( lsame( side,
'L' ) )
THEN
503 CALL ccopy( n, c( j, 1 ), ldc, work( 1, j ), 1 )
504 CALL clacgv( n, work( 1, j ), 1 )
509 CALL ctrmm(
'Right',
'Upper',
'Conjugate transpose',
510 $
'Unit', n, k, one, v, ldv, work, ldwork )
515 CALL cgemm(
'Conjugate transpose',
516 $
'Conjugate transpose', n, k, m-k, one,
517 $ c( k+1, 1 ), ldc, v( 1, k+1 ), ldv, one,
523 CALL ctrmm(
'Right',
'Upper', transt,
'Non-unit', n, k,
524 $ one, t, ldt, work, ldwork )
532 CALL cgemm(
'Conjugate transpose',
533 $
'Conjugate transpose', m-k, n, k, -one,
534 $ v( 1, k+1 ), ldv, work, ldwork, one,
540 CALL ctrmm(
'Right',
'Upper',
'No transpose',
'Unit', n,
541 $ k, one, v, ldv, work, ldwork )
547 c( j, i ) = c( j, i ) - conjg( work( i, j ) )
551 ELSE IF( lsame( side,
'R' ) )
THEN
560 CALL ccopy( m, c( 1, j ), 1, work( 1, j ), 1 )
565 CALL ctrmm(
'Right',
'Upper',
'Conjugate transpose',
566 $
'Unit', m, k, one, v, ldv, work, ldwork )
571 CALL cgemm(
'No transpose',
'Conjugate transpose', m,
572 $ k, n-k, one, c( 1, k+1 ), ldc,
573 $ v( 1, k+1 ), ldv, one, work, ldwork )
578 CALL ctrmm(
'Right',
'Upper', trans,
'Non-unit', m, k,
579 $ one, t, ldt, work, ldwork )
587 CALL cgemm(
'No transpose',
'No transpose', m, n-k, k,
588 $ -one, work, ldwork, v( 1, k+1 ), ldv, one,
594 CALL ctrmm(
'Right',
'Upper',
'No transpose',
'Unit', m,
595 $ k, one, v, ldv, work, ldwork )
601 c( i, j ) = c( i, j ) - work( i, j )
612 IF( lsame( side,
'L' ) )
THEN
622 CALL ccopy( n, c( m-k+j, 1 ), ldc, work( 1, j ), 1 )
623 CALL clacgv( n, work( 1, j ), 1 )
628 CALL ctrmm(
'Right',
'Lower',
'Conjugate transpose',
629 $
'Unit', n, k, one, v( 1, m-k+1 ), ldv, work,
635 CALL cgemm(
'Conjugate transpose',
636 $
'Conjugate transpose', n, k, m-k, one, c,
637 $ ldc, v, ldv, one, work, ldwork )
642 CALL ctrmm(
'Right',
'Lower', transt,
'Non-unit', n, k,
643 $ one, t, ldt, work, ldwork )
651 CALL cgemm(
'Conjugate transpose',
652 $
'Conjugate transpose', m-k, n, k, -one, v,
653 $ ldv, work, ldwork, one, c, ldc )
658 CALL ctrmm(
'Right',
'Lower',
'No transpose',
'Unit', n,
659 $ k, one, v( 1, m-k+1 ), ldv, work, ldwork )
665 c( m-k+j, i ) = c( m-k+j, i ) -
666 $ conjg( work( i, j ) )
670 ELSE IF( lsame( side,
'R' ) )
THEN
679 CALL ccopy( m, c( 1, n-k+j ), 1, work( 1, j ), 1 )
684 CALL ctrmm(
'Right',
'Lower',
'Conjugate transpose',
685 $
'Unit', m, k, one, v( 1, n-k+1 ), ldv, work,
691 CALL cgemm(
'No transpose',
'Conjugate transpose', m,
692 $ k, n-k, one, c, ldc, v, ldv, one, work,
698 CALL ctrmm(
'Right',
'Lower', trans,
'Non-unit', m, k,
699 $ one, t, ldt, work, ldwork )
707 CALL cgemm(
'No transpose',
'No transpose', m, n-k, k,
708 $ -one, work, ldwork, v, ldv, one, c, ldc )
713 CALL ctrmm(
'Right',
'Lower',
'No transpose',
'Unit', m,
714 $ k, one, v( 1, n-k+1 ), ldv, work, ldwork )
720 c( i, n-k+j ) = c( i, n-k+j ) - work( i, j )