1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
4 * (C) 2003 by Argonne National Laboratory.
5 * See COPYRIGHT in top-level directory.
11 int main( int argc, char **argv )
14 int rank, size, wrank, wsize, dest, a, b;
18 MTest_Init( &argc, &argv );
20 /* Can we run comm dup at all? */
21 MPI_Comm_dup( MPI_COMM_WORLD, &newcomm );
23 /* Check basic properties */
24 MPI_Comm_size( MPI_COMM_WORLD, &wsize );
25 MPI_Comm_rank( MPI_COMM_WORLD, &wrank );
26 MPI_Comm_size( newcomm, &size );
27 MPI_Comm_rank( newcomm, &rank );
29 if (size != wsize || rank != wrank) {
31 fprintf( stderr, "Size (%d) or rank (%d) wrong\n", size, rank );
35 /* Can we communicate with this new communicator? */
41 MPI_Sendrecv( &a, 1, MPI_INT, dest, 0,
42 &b, 1, MPI_INT, dest, 0, newcomm, &status );
45 fprintf( stderr, "Received %d expected %d on %d\n", b, dest, rank );
48 if (status.MPI_SOURCE != dest) {
50 fprintf( stderr, "Source not set correctly in status on %d\n",
55 else if (rank == size-1) {
59 MPI_Sendrecv( &a, 1, MPI_INT, dest, 0,
60 &b, 1, MPI_INT, dest, 0, newcomm, &status );
63 fprintf( stderr, "Received %d expected %d on %d\n", b, dest, rank );
66 if (status.MPI_SOURCE != dest) {
68 fprintf( stderr, "Source not set correctly in status on %d\n",
74 MPI_Comm_free( &newcomm );
76 MTest_Finalize( errs );