720
721
722
723
724
725
726 CHARACTER*1 TRANS
727 INTEGER ICONTXT, N, NB, NZ, INCX, INCY, JINX, JINY
728 REAL BETA
729
730
731 REAL X( * ), Y( * )
732
733
734
735
736
737
738
739
740
741
743
744
745 INTEGER ICEIL
747
748
750
751
752 REAL ONE
753 parameter( one = 1.0e+0 )
754
755
756 INTEGER IX, IY, JZ, K, ITER, LENX, LENY
757
758 IF( jinx.EQ.1 .AND. jiny.EQ.1 ) THEN
759 CALL pbsvecadd( icontxt, trans, n, one, x, incx, beta,
760 $ y, incy )
761
762 ELSE
763 ix = 0
764 iy = 0
765 jz = nz
766 lenx = nb * jinx
767 leny = nb * jiny
768 iter =
iceil( n+nz, lenx )
769
770 IF( iter.GT.1 ) THEN
771 CALL pbsvecadd( icontxt, trans, nb-jz, one, x(ix*incx+1),
772 $ incx, beta, y(iy*incy+1), incy )
773 ix = ix + lenx - jz
774 iy = iy + leny - jz
775 jz = 0
776
777 DO 10 k = 2, iter-1
778 CALL pbsvecadd( icontxt, trans, nb, one, x(ix*incx+1),
779 $ incx, beta, y(iy*incy+1), incy )
780 ix = ix + lenx
781 iy = iy + leny
782 10 CONTINUE
783 END IF
784
785 CALL pbsvecadd( icontxt, trans,
min( n-ix, nb-jz ), one,
786 $ x(ix*incx+1), incx, beta, y(iy*incy+1), incy )
787 END IF
788
789 RETURN
790
791
792
integer function iceil(inum, idenom)
subroutine pbsvecadd(icontxt, mode, n, alpha, x, incx, beta, y, incy)