PARAMETER (N=7) INTEGER SENDBUF(N),RECBUF(N,10),BACKBUF(N) INCLUDE 'mpif.h' C INITIALIZE MPI CALL MPI_INIT (IERR) C NPES = NUMBER OF PROCESSORS CALL MPI_COMM_SIZE (MPI_COMM_WORLD,NPES,IERR) C ITASK = MY PROCESSOR NUMBER CALL MPI_COMM_RANK (MPI_COMM_WORLD,ITASK,IERR) C ON PROC #0: SENDBUF = 1, 2, 3, 4, 5, 6, 7 C #1: SENDBUF = 11,12,13,14,15,16,17 C #2: SENDBUF = 21,22,23,24,25,26,27 C #3: SENDBUF = 31,32,33,34,35,36,37 C etc. DO I=1,N SENDBUF(I) = 10*ITASK + I ENDDO C GATHER DATA FROM SENDBUF ON ALL PROCS C TO RECBUF ON PROC iroot iroot = 0 CALL MPI_GATHER(SENDBUF,N,MPI_INTEGER, & RECBUF,N,MPI_INTEGER, & iroot,MPI_COMM_WORLD,IERR) if (ITASK.EQ.iroot) THEN PRINT *, ' MPI_GATHER',ITASK DO I=1,NPES PRINT *, (RECBUF(J,I),J=1,N) ENDDO ENDIF C SCATTER DATA FROM RECBUF ON PROC iroot C BACK TO BACKBUF ON ALL PROCS CALL MPI_SCATTER(RECBUF,N,MPI_INTEGER, & BACKBUF,N,MPI_INTEGER, & iroot,MPI_COMM_WORLD,IERR) PRINT *, ' MPI_SCATTER',ITASK,BACKBUF C ADD DATA FROM EACH PROC's SENDBUF(I) C TOGETHER AND SAVE IN BACKBUF(I) ON iroot CALL MPI_REDUCE(SENDBUF,BACKBUF,N,MPI_INTEGER, & MPI_SUM,iroot,MPI_COMM_WORLD,IERR) IF (ITASK.EQ.iroot) THEN PRINT *, ' MPI_REDUCE',ITASK,BACKBUF ENDIF C ADD DATA FROM EACH PROC's SENDBUF(I) C TOGETHER AND SAVE IN BACKBUF(I) ON EACH PROC CALL MPI_ALLREDUCE(SENDBUF,BACKBUF,N,MPI_INTEGER, & MPI_SUM,MPI_COMM_WORLD,IERR) PRINT *, ' MPI_ALLREDUCE',ITASK,BACKBUF C SEND DATA FROM SENDBUF ON PROC iroot C TO SENDBUF ON ALL PROCs CALL MPI_BCAST(SENDBUF,N,MPI_INTEGER,iroot, & MPI_COMM_WORLD,IERR) PRINT *, ' MPI_BCAST',ITASK,SENDBUF CALL MPI_FINALIZE(IERR) STOP END Results with NPES=4: MPI_GATHER 0 1 2 3 4 5 6 7 11 12 13 14 15 16 17 21 22 23 24 25 26 27 31 32 33 34 35 36 37 MPI_SCATTER 0 1 2 3 4 5 6 7 MPI_SCATTER 1 11 12 13 14 15 16 17 MPI_SCATTER 2 21 22 23 24 25 26 27 MPI_SCATTER 3 31 32 33 34 35 36 37 MPI_REDUCE 0 64 68 72 76 80 84 88 MPI_ALLREDUCE 0 64 68 72 76 80 84 88 MPI_ALLREDUCE 1 64 68 72 76 80 84 88 MPI_ALLREDUCE 2 64 68 72 76 80 84 88 MPI_ALLREDUCE 3 64 68 72 76 80 84 88 MPI_BCAST 0 1 2 3 4 5 6 7 MPI_BCAST 1 1 2 3 4 5 6 7 MPI_BCAST 2 1 2 3 4 5 6 7 MPI_BCAST 3 1 2 3 4 5 6 7