program main include 'mpif.h' parameter (BUFSIZE = 2048) integer ierr, rank integer tag, status(MPI_STATUS_SIZE) integer size, messagesize real message(BUFSIZE) real BUFFER*(*) call MPI_INIT(ierr) call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierr) tag = 0 messagesize = BUFSIZE if (rank == 0) then print *, 'Hello world! I am proc ', rank, 1 ', sending to proc 1..' size = BUFSIZE * 4 + MPI_BSEND_OVERHEAD call MPI_BUFFER_ATTACH(BUFFER, size, ierr) C C The buffer size in MPI_BSEND must be interger C If you put a parameter in it, eg.BUFSIZE, it will cause error C call MPI_BSEND(message, messagesize, MPI_REAL, 1 1, tag, MPI_COMM_WORLD, ierr) call MPI_BUFFER_DETACH(BUFFER, size, ierr) else if (rank == 1) then call SLEEP(3) print *, 'Hello world! I am proc ', rank, 1 ', just wake up!!' call MPI_RECV(message, BUFSIZE, MPI_REAL, 1 0, tag, MPI_COMM_WORLD, status, ierr) print *, 'Hello world! Received 1 message ', 1 'proc 1!!' endif print *, 'Proc ', rank, ' finished!!' call MPI_FINALIZE(ierr) end