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