249 SUBROUTINE ctprfb( SIDE, TRANS, DIRECT, STOREV, M, N, K, L,
250 $ V, LDV, T, LDT, A, LDA, B, LDB, WORK, LDWORK )
258INTEGER K, L, LDA, , LDT, LDV, LDWORK, M, N
261 COMPLEX A( LDA, * ), B( LDB, * ), T( LDT, * ),
262 $ v( ldv, * ), work( ldwork, * )
269 parameter( one = (1.0,0.0), zero = (0.0,0.0) )
272 INTEGER I, J, MP, NP, KP
273 LOGICAL LEFT, FORWARD, COLUMN, RIGHT, BACKWARD, ROW
289 IF( m.LE.0 .OR. n.LE.0 .OR. k.LE.0 .OR. l.LT.0 )
RETURN
291 IF( lsame( storev,
'C' ) )
THEN
294 ELSE IF ( lsame( storev,
'R' ) )
THEN
302 IF( lsame( side,
'L' ) )
THEN
305 ELSE IF( lsame( side,
'R' ) )
THEN
313 IF( lsame( direct,
'F' ) )
THEN
316 ELSE IF( lsame( direct,
'B' ) )
THEN
326 IF( column .AND. forward .AND. left )
THEN
348 work( i, j ) = b( m-l+i, j )
351 CALL ctrmm(
'L',
'U',
'C',
'N', l, n, one, v( mp, 1 ), ldv,
353 CALL cgemm(
'C',
'N', l, n, m-l, one, v, ldv, b, ldb,
354 $ one, work, ldwork )
355 CALL cgemm(
'C', 'n
', K-L, N, M, ONE, V( 1, KP ), LDV,
356 $ B, LDB, ZERO, WORK( KP, 1 ), LDWORK )
360 WORK( I, J ) = WORK( I, J ) + A( I, J )
364 CALL CTRMM( 'l
', 'u
', TRANS, 'n
', K, N, ONE, T, LDT,
369 A( I, J ) = A( I, J ) - WORK( I, J )
373 CALL CGEMM( 'n
', 'n
', M-L, N, K, -ONE, V, LDV, WORK, LDWORK,
375 CALL CGEMM( 'n
', 'n
', L, N, K-L, -ONE, V( MP, KP ), LDV,
376 $ WORK( KP, 1 ), LDWORK, ONE, B( MP, 1 ), LDB )
377 CALL CTRMM( 'l
', 'u
', 'n
', 'n
', L, N, ONE, V( MP, 1 ), LDV,
381 B( M-L+I, J ) = B( M-L+I, J ) - WORK( I, J )
387.AND..AND.
ELSE IF( COLUMN FORWARD RIGHT ) THEN
408 WORK( I, J ) = B( I, N-L+J )
411 CALL CTRMM( 'r
', 'u
', 'n
', 'n
', M, L, ONE, V( NP, 1 ), LDV,
413 CALL CGEMM( 'n
', 'n
', M, L, N-L, ONE, B, LDB,
414 $ V, LDV, ONE, WORK, LDWORK )
415 CALL CGEMM( 'n
', 'n
', M, K-L, N, ONE, B, LDB,
416 $ V( 1, KP ), LDV, ZERO, WORK( 1, KP ), LDWORK )
420 WORK( I, J ) = WORK( I, J ) + A( I, J )
424 CALL CTRMM( 'r
', 'u
', TRANS, 'n
', M, K, ONE, T, LDT,
429 A( I, J ) = A( I, J ) - WORK( I, J )
433 CALL CGEMM( 'n
', 'c
', M, N-L, K, -ONE, WORK, LDWORK,
434 $ V, LDV, ONE, B, LDB )
435 CALL CGEMM( 'n
', 'c
', M, L, K-L, -ONE, WORK( 1, KP ), LDWORK,
436 $ V( NP, KP ), LDV, ONE, B( 1, NP ), LDB )
437 CALL CTRMM( 'r
', 'u
', 'c
', 'n
', M, L, ONE, V( NP, 1 ), LDV,
441 B( I, N-L+J ) = B( I, N-L+J ) - WORK( I, J )
447.AND..AND.
ELSE IF( COLUMN BACKWARD LEFT ) THEN
469 WORK( K-L+I, J ) = B( I, J )
473 CALL CTRMM( 'l
', 'l
', 'c
', 'n
', L, N, ONE, V( 1, KP ), LDV,
474 $ WORK( KP, 1 ), LDWORK )
475 CALL CGEMM( 'c
', 'n
', L, N, M-L, ONE, V( MP, KP ), LDV,
476 $ B( MP, 1 ), LDB, ONE, WORK( KP, 1 ), LDWORK )
477 CALL CGEMM( 'c
', 'n
', K-L, N, M, ONE, V, LDV,
478 $ B, LDB, ZERO, WORK, LDWORK )
482 WORK( I, J ) = WORK( I, J ) + A( I, J )
486 CALL CTRMM( 'l
', 'l
', TRANS, 'n
', K, N, ONE, T, LDT,
491 A( I, J ) = A( I, J ) - WORK( I, J )
495 CALL CGEMM( 'n
', 'n
', M-L, N, K, -ONE, V( MP, 1 ), LDV,
496 $ WORK, LDWORK, ONE, B( MP, 1 ), LDB )
497 CALL CGEMM( 'n
', 'n
', L, N, K-L, -ONE, V, LDV,
498 $ WORK, LDWORK, ONE, B, LDB )
499 CALL CTRMM( 'l
', 'l
', 'n
', 'n
', L, N, ONE, V( 1, KP ), LDV,
500 $ WORK( KP, 1 ), LDWORK )
503 B( I, J ) = B( I, J ) - WORK( K-L+I, J )
509.AND..AND.
ELSE IF( COLUMN BACKWARD RIGHT ) THEN
530 WORK( I, K-L+J ) = B( I, J )
533 CALL CTRMM( 'r
', 'l
', 'n
', 'n
', M, L, ONE, V( 1, KP ), LDV,
534 $ WORK( 1, KP ), LDWORK )
535 CALL CGEMM( 'n
', 'n
', M, L, N-L, ONE, B( 1, NP ), LDB,
536 $ V( NP, KP ), LDV, ONE, WORK( 1, KP ), LDWORK )
537 CALL CGEMM( 'n
', 'n
', M, K-L, N, ONE, B, LDB,
538 $ V, LDV, ZERO, WORK, LDWORK )
542 WORK( I, J ) = WORK( I, J ) + A( I, J )
546 CALL CTRMM( 'r
', 'l
', TRANS, 'n
', M, K, ONE, T, LDT,
551 A( I, J ) = A( I, J ) - WORK( I, J )
555 CALL CGEMM( 'n
', 'c
', M, N-L, K, -ONE, WORK, LDWORK,
556 $ V( NP, 1 ), LDV, ONE, B( 1, NP ), LDB )
557 CALL CGEMM( 'n
', 'c
', M, L, K-L, -ONE, WORK, LDWORK,
558 $ V, LDV, ONE, B, LDB )
559 CALL CTRMM( 'r
', 'l
', 'c
', 'n
', M, L, ONE, V( 1, KP ), LDV,
560 $ WORK( 1, KP ), LDWORK )
563 B( I, J ) = B( I, J ) - WORK( I, K-L+J )
569.AND..AND.
ELSE IF( ROW FORWARD LEFT ) THEN
590 WORK( I, J ) = B( M-L+I, J )
593 CALL CTRMM( 'l
', 'l
', 'n
', 'n
', L, N, ONE, V( 1, MP ), LDV,
595 CALL CGEMM( 'n
', 'n
', L, N, M-L, ONE, V, LDV,B, LDB,
596 $ ONE, WORK, LDWORK )
597 CALL CGEMM( 'n
', 'n
', K-L, N, M, ONE, V( KP, 1 ), LDV,
598 $ B, LDB, ZERO, WORK( KP, 1 ), LDWORK )
602 WORK( I, J ) = WORK( I, J ) + A( I, J )
606 CALL CTRMM( 'l
', 'u
', TRANS, 'n
', K, N, ONE, T, LDT,
611 A( I, J ) = A( I, J ) - WORK( I, J )
615 CALL CGEMM( 'c
', 'n
', M-L, N, K, -ONE, V, LDV, WORK, LDWORK,
617 CALL CGEMM( 'c
', 'n
', L, N, K-L, -ONE, V( KP, MP ), LDV,
618 $ WORK( KP, 1 ), LDWORK, ONE, B( MP, 1 ), LDB )
619 CALL CTRMM( 'l
', 'l
', 'c
', 'n
', L, N, ONE, V( 1, MP ), LDV,
623 B( M-L+I, J ) = B( M-L+I, J ) - WORK( I, J )
629.AND..AND.
ELSE IF( ROW FORWARD RIGHT ) THEN
649 WORK( I, J ) = B( I, N-L+J )
652 CALL CTRMM( 'r
', 'l
', 'c
', 'n
', M, L, ONE, V( 1, NP ), LDV,
654 CALL CGEMM( 'n
', 'c
', M, L, N-L, ONE, B, LDB, V, LDV,
655 $ ONE, WORK, LDWORK )
656 CALL CGEMM( 'n
', 'c
', M, K-L, N, ONE, B, LDB,
657 $ V( KP, 1 ), LDV, ZERO, WORK( 1, KP ), LDWORK )
661 WORK( I, J ) = WORK( I, J ) + A( I, J )
665 CALL CTRMM( 'r
', 'u
', TRANS, 'n
', M, K, ONE, T, LDT,
670 A( I, J ) = A( I, J ) - WORK( I, J )
674 CALL CGEMM( 'n
', 'n
', M, N-L, K, -ONE, WORK, LDWORK,
675 $ V, LDV, ONE, B, LDB )
676 CALL CGEMM( 'n
', 'n
', M, L, K-L, -ONE, WORK( 1, KP ), LDWORK,
677 $ V( KP, NP ), LDV, ONE, B( 1, NP ), LDB )
678 CALL CTRMM( 'r
', 'l
', 'n
', 'n
', M, L, ONE, V( 1, NP ), LDV,
682 B( I, N-L+J ) = B( I, N-L+J ) - WORK( I, J )
688.AND..AND.
ELSE IF( ROW BACKWARD LEFT ) THEN
709 WORK( K-L+I, J ) = B( I, J )
712 CALL CTRMM( 'l
', 'u
', 'n
', 'n
', L, N, ONE, V( KP, 1 ), LDV,
713 $ WORK( KP, 1 ), LDWORK )
714 CALL CGEMM( 'n
', 'n
', L, N, M-L, ONE, V( KP, MP ), LDV,
715 $ B( MP, 1 ), LDB, ONE, WORK( KP, 1 ), LDWORK )
716 CALL CGEMM( 'n
', 'n
', K-L, N, M, ONE, V, LDV, B, LDB,
717 $ ZERO, WORK, LDWORK )
721 WORK( I, J ) = WORK( I, J ) + A( I, J )
725 CALL CTRMM( 'l
', 'l
', TRANS, 'n
', K, N, ONE, T, LDT,
730 A( I, J ) = A( I, J ) - WORK( I, J )
734 CALL CGEMM( 'c
', 'n
', M-L, N, K, -ONE, V( 1, MP ), LDV,
735 $ WORK, LDWORK, ONE, B( MP, 1 ), LDB )
736 CALL CGEMM( 'c
', 'n
', L, N, K-L, -ONE, V, LDV,
737 $ WORK, LDWORK, ONE, B, LDB )
738 CALL CTRMM( 'l
', 'u
', 'c
', 'n
', L, N, ONE, V( KP, 1 ), LDV,
739 $ WORK( KP, 1 ), LDWORK )
742 B( I, J ) = B( I, J ) - WORK( K-L+I, J )
748.AND..AND.
ELSE IF( ROW BACKWARD RIGHT ) THEN
768 WORK( I, K-L+J ) = B( I, J )
771 CALL CTRMM( 'r
', 'u
', 'c
', 'n
', M, L, ONE, V( KP, 1 ), LDV,
772 $ WORK( 1, KP ), LDWORK )
773 CALL CGEMM( 'n
', 'c
', M, L, N-L, ONE, B( 1, NP ), LDB,
774 $ V( KP, NP ), LDV, ONE, WORK( 1, KP ), LDWORK )
775 CALL CGEMM( 'n
', 'c
', M, K-L, N, ONE, B, LDB, V, LDV,
776 $ ZERO, WORK, LDWORK )
780 WORK( I, J ) = WORK( I, J ) + A( I, J )
784 CALL CTRMM( 'r
', 'l
', TRANS, 'n
', M, K, ONE, T, LDT,
789 A( I, J ) = A( I, J ) - WORK( I, J )
793 CALL CGEMM( 'n
', 'n
', M, N-L, K, -ONE, WORK, LDWORK,
794 $ V( 1, NP ), LDV, ONE, B( 1, NP ), LDB )
795 CALL CGEMM( 'n
', 'n
', M, L, K-L , -ONE, WORK, LDWORK,
796 $ V, LDV, ONE, B, LDB )
797 CALL CTRMM( 'r
', 'u
', 'n
', 'n
', M, L, ONE, V( KP, 1 ), LDV,
798 $ WORK( 1, KP ), LDWORK )
801 B( I, J ) = B( I, J ) - WORK( I, K-L+J )
subroutine ctprfb(side, trans, direct, storev, m, n, k, l, v, ldv, t, ldt, a, lda, b, ldb, work, ldwork)
CTPRFB applies a real or complex "triangular-pentagonal" blocked reflector to a real or complex matri...
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