Is it possible to call the MPI_send and MPI_recv commands inside a
subroutine and not the main program? I have written a minimal program for
what I am trying to do. It is compiling fine but it is not working. The
program just hangs in the "sendrecv" subroutine. Any ideas how can I do it?
main.f
program main
include 'mpif.h'
integer me, np, ierror
call MPI_init( ierror )
call MPI_comm_rank( mpi_comm_world, me, ierror )
call MPI_comm_size( mpi_comm_world, np, ierror )
call sendrecv(me, np)
call mpi_finalize( ierror )
stop
end
sendrecv.f
subroutine sendrecv(me, np)
include 'mpif.h'
integer np, me, sender
integer, dimension(mpi_status_size) :: status
integer, dimension(1) :: recv, send
if (me.eq.0) then
do sender = 1, np-1
call mpi_recv(recv, 1, mpi_int, sender, tag,
& mpi_comm_world, status, ierror)
end do
end if
if ((me.ge.1).and.(me.lt.np)) then
send_length(1) = me*12
call mpi_send(send, 1, mpi_int, 0, tag,
& mpi_comm_world, ierror)
end if
return
end