HP-MPI User's Guide (11th Edition)
Example applications
send_receive.f
Appendix A 223
send_receive.f
In this Fortran 77 example, process 0 sends an array to other processes
in the default communicator MPI_COMM_WORLD.
program main
include 'mpif.h'
integer rank, size, to, from, tag, count, i, ierr
integer src, dest
integer st_source, st_tag, st_count
integer status(MPI_STATUS_SIZE)
double precision data(100)
call MPI_Init(ierr)
call MPI_Comm_rank(MPI_COMM_WORLD, rank, ierr)
call MPI_Comm_size(MPI_COMM_WORLD, size, ierr)
if (size .eq. 1) then
print *, 'must have at least 2 processes'
call MPI_Finalize(ierr)
stop
endif
print *, 'Process ', rank, ' of ', size, ' is alive'
dest = size - 1
src = 0
if (rank .eq. src) then
to = dest
count = 10
tag = 2001
do i=1, 10
data(i) = 1
enddo
call MPI_Send(data, count, MPI_DOUBLE_PRECISION,
+ to, tag, MPI_COMM_WORLD, ierr)
endif
if (rank .eq. dest) then
tag = MPI_ANY_TAG
count = 10
from = MPI_ANY_SOURCE
call MPI_Recv(data, count, MPI_DOUBLE_PRECISION,
+ from, tag, MPI_COMM_WORLD, status, ierr)
call MPI_Get_Count(status, MPI_DOUBLE_PRECISION,
+ st_count, ierr)