On Feb 28, 2013, at 9:59 AM, Pradeep Jha <prad...@ccs.engg.nagoya-u.ac.jp> wrote:
> Is it possible to call the MPI_send and MPI_recv commands inside a subroutine > and not the main program? Yes. > 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? You seem to have several errors in the sendrecv subroutine. I would strongly encourage you to use "implicit none" to avoid many of these errors. Here's a few errors I see offhand: - tag is not initialized - what's send_length(1)? - use MPI_INTEGER, not MPI_INT (MPI_INT = C int, MPI_INTEGER = Fortran INTEGER) > 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 > > _______________________________________________ > users mailing list > us...@open-mpi.org > http://www.open-mpi.org/mailman/listinfo.cgi/users -- Jeff Squyres jsquy...@cisco.com For corporate legal information go to: http://www.cisco.com/web/about/doing_business/legal/cri/