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/


Reply via email to