SUBROUTINE PARALLEL_SCATTERV(BUFF,SEND_NUM,SEND_OFFSET,TARG,TARG_NUM) INTEGER, INTENT(IN) :: TARG_NUM INTEGER, DIMENSION(4), INTENT(IN) :: SEND_NUM, SEND_OFFSET REAL, DIMENSION(TARG_NUM), INTENT(OUT):: TARG REAL, INTENT(IN) :: BUFF(SEND_OFFSET(4)+SEND_NUM(4)) CALL MPI_SCATTERV(BUFF,SEND_NUM,SEND_OFFSET,MPI_DOUBLE_PRECISION, & TARG,TARG_NUM,MPI_DOUBLE_PRECISION,0,MPI_COMM_WORLD,IER) END SUBROUTINE PARALLEL_SCATTERV PROGRAM MAIN INTEGER, DIMENSION(4) :: SNDCNT, SNDDSP INTEGER :: MYPN, MYINDX, IERR REAL, DIMENSION(10) :: SNDBUF, RCVBUF INCLUDE 'mpif.h' CALL MPI_INIT(IERR) CALL MPI_COMM_RANK(MPI_COMM_WORLD, MYPN, IERR) MYINDX = MYPN + 1 IF (MYPN.EQ.0) THEN SNDBUF = (/ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0 /) ELSE SNDBUF = 0.0 ENDIF SNDCNT = (/ 1, 2, 3, 4 /) SNDDSP = (/ 0, 1, 3, 6 /) ! CALL PARALLEL_SCATTERV(SNDBUF, SNDCNT, SNDDSP, SNDBUF, SNDCNT(MYINDX)) PRINT*, 'RANK: ',MYPN,' SNDBUF ',SNDBUF SNDCNT = (/ 0, 2, 3, 5 /) SNDDSP = (/ 0, 0, 2, 5 /) RCVBUF = 0.0 CALL PARALLEL_SCATTERV(SNDBUF, SNDCNT, SNDDSP, RCVBUF, SNDCNT(MYINDX)) PRINT*, 'RANK: ',MYPN,' RCVBUF ',RCVBUF CALL MPI_FINALIZE(IERR) END PROGRAM MAIN