793
794
795
796
797
798
799 CHARACTER*1 ADIST
800 INTEGER ICONTXT, M, N, NB, LDA, LDB, LCMP, LCMQ, NINT
801 COMPLEX BETA
802
803
804 COMPLEX A( LDA, * ), B( LDB, * )
805
806
807
808
809
810
811
812
813
814
815
816 COMPLEX ONE
817 parameter( one = ( 1.0e+0, 0.0e+0 ) )
818
819
820 INTEGER JA, JB, K, INTV
821
822
823 LOGICAL LSAME
824 INTEGER ICEIL
826
827
829
830
831
832 IF(
lsame( adist,
'R' ) )
THEN
833 intv = nb * lcmq
834 ja = 1
835 jb = 1
836 DO 10 k = 1,
iceil( nint, nb )
837 CALL pbcmatadd( icontxt,
'G', m,
min( n-jb+1, nb ), one,
838 $ a(1,ja), lda, beta, b(1,jb), ldb )
839 ja = ja + nb
840 jb = jb + intv
841 10 CONTINUE
842
843
844
845 ELSE
846 intv = nb * lcmp
847 ja = 1
848 jb = 1
849 DO 20 k = 1,
iceil( nint, nb )
850 CALL pbcmatadd( icontxt,
'G',
min( m-jb+1, nb ), n, one,
851 $ a(ja,1), lda, beta, b(jb,1), ldb )
852 ja = ja + nb
853 jb = jb + intv
854 20 CONTINUE
855 END IF
856
857 RETURN
858
859
860
integer function iceil(inum, idenom)
subroutine pbcmatadd(icontxt, mode, m, n, alpha, a, lda, beta, b, ldb)