program main include 'mpif.h' integer ierr, errs, toterrs integer request integer status(MPI_STATUS_SIZE) integer rank, size, buf(10) logical flag C call MPI_Init( ierr ) errs = 0 C call MPI_Comm_size( MPI_COMM_WORLD, size, ierr ) if (size .lt. 2) then print *, 'Must have at least two processes' call MPI_Abort( MPI_COMM_WORLD, 1, ierr ) endif call MPI_Comm_rank( MPI_COMM_WORLD, rank, ierr ) if (rank .eq. 0) then do i = 1, 10 buf(i) = i enddo call MPI_Isend( buf, 10, MPI_INTEGER, size - 1, 1, $ MPI_COMM_WORLD, request, ierr ) call MPI_Wait( request, status, ierr ) endif if (rank .eq. size - 1) then call MPI_Irecv( buf, 10, MPI_INTEGER, 0, 1, MPI_COMM_WORLD, $ request, ierr ) C call MPI_Wait( request, status, ierr ) flag = .FALSE. do while (.not. flag) call MPI_Test( request, flag, status, ierr ) enddo C C Check the results do i = 1, 10 if (buf(i) .ne. i) then errs = errs + 1 endif enddo endif C call MPI_Allreduce( errs, toterrs, 1, MPI_INTEGER, MPI_SUM, $ MPI_COMM_WORLD, ierr ) if (rank .eq. 0) then if (toterrs .gt. 0) then print *, "Found ", toterrs, " Errors" else PRINT *, " No Errors" endif endif call MPI_Finalize( ierr ) end