The MPI standard provides the MPI_IN_PLACE to handle such situations. If one consider that each node works on the same amount of data, then the following call will do what you're looking for:

call MPI_Gather( MPI_IN_PLACE, var, MPI_REAL8,
                 a, var, MPI_REAL8,
                 0, MPI_COMM_WORLD, ierr )

For more information about MPI_Gather and the MPI_IN_PLACE please look in the MPI standard version 2.2 at page 143.

  george.


On Nov 23, 2009, at 09:37 , Eugene Loh wrote:

Anyhow, you can try:

call MPI_Gather(a (istart),var,MPI_REAL8,a,var,MPI_REAL8,0,MPI_COMM_WORLD,ierr)

Strictly speaking, this is not correct since the send and receive buffers overlap. So, the real thing to do is to declare a full array a(1:n) (only necessary on the root rank 0) and a "local" array a_local(istart:iend) on each process.

Reply via email to