615
616
617
618
619
620
621 CHARACTER*1 ADIST, TRANS
622 INTEGER ICONTXT, LCMP, LCMQ, LDA, LDB, M, N, NB
623 COMPLEX BETA
624
625
626 COMPLEX A( LDA, * ), B( LDB, * )
627
628
629
630
631
632
633
634
635
636
637
638
639 COMPLEX ONE
640 parameter( one = ( 1.0e+0, 0.0e+0 ) )
641
642
643 INTEGER IA, IB, K, INTV, JNTV
644
645
647
648
649 LOGICAL LSAME
650 INTEGER ICEIL
652
653
655
656
657
658 IF( lcmp.EQ.lcmq ) THEN
659 CALL pbcmatadd( icontxt, trans, n, m, one, a, lda, beta, b,
660 $ ldb )
661
662 ELSE
663
664
665
666 IF(
lsame( adist,
'C' ) )
THEN
667 intv = lcmp * nb
668 jntv = lcmq * nb
669 ia = 1
670 ib = 1
671 DO 10 k = 1,
iceil( m, intv )
673 $ one, a(ia,1), lda, beta, b(1,ib), ldb )
674 ia = ia + intv
675 ib = ib + jntv
676 10 CONTINUE
677
678
679
680 ELSE
681 intv = lcmp * nb
682 jntv = lcmq * nb
683 ia = 1
684 ib = 1
685 DO 20 k = 1,
iceil( n, jntv )
687 $ one, a(1,ia), lda, beta, b(ib,1), ldb )
688 ia = ia + jntv
689 ib = ib + intv
690 20 CONTINUE
691 END IF
692 END IF
693
694 RETURN
695
696
697
integer function iceil(inum, idenom)
subroutine pbcmatadd(icontxt, mode, m, n, alpha, a, lda, beta, b, ldb)