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