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