Open MPI logo

Open MPI User's Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Open MPI User's mailing list

Subject: [OMPI users] Calling MPI_send MPI_recv from a fortran subroutine
From: Pradeep Jha (pradeep_at_[hidden])
Date: 2013-02-28 09:59:02


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