#include <stdio.h>
#include "mpi.h"
int main( argc, argv )
int argc;
char **argv;
{
int rank, value, size, false=0;
int right_nbr, left_nbr;
MPI_Comm ring_comm;
MPI_Status status;
MPI_Init( &argc, &argv );
MPI_Comm_size( MPI_COMM_WORLD, &size );
MPI_Cart_create( MPI_COMM_WORLD, 1, &size, &false, 1, &ring_comm );
MPI_Cart_shift( ring_comm, 0, 1, &left_nbr, &right_nbr );
MPI_Comm_rank( ring_comm, &rank );
MPI_Comm_size( ring_comm, &size );
do {
if (rank == 0) {
scanf( "%d", &value );
MPI_Send( &value, 1, MPI_INT, right_nbr, 0, ring_comm );
}
else {
MPI_Recv( &value, 1, MPI_INT, left_nbr, 0, ring_comm,
&status );
MPI_Send( &value, 1, MPI_INT, right_nbr, 0, ring_comm );
}
printf( "Process %d got %d\n", rank, value );
} while (value >= 0);
MPI_Finalize( );
return 0;
}