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[] )
16 int dims[2], periods[2];
19 MTest_Init( &argc, &argv );
21 MPI_Comm_size( MPI_COMM_WORLD, &size );
22 MPI_Comm_rank( MPI_COMM_WORLD, &rank );
25 MPI_Cart_create( MPI_COMM_WORLD, 1, dims, periods, 0, &comm );
26 MPI_Cart_shift( comm, 0, 1, &source, &dest );
27 if (source != ((rank - 1 + size) % size)) {
29 printf( "source for shift 1 is %d\n", source );
31 if (dest != ((rank + 1) % size)) {
33 printf( "dest for shift 1 is %d\n", dest );
35 MPI_Cart_shift( comm, 0, 0, &source, &dest );
38 printf( "Source for shift 0 is %d\n", source );
42 printf( "Dest for shift 0 is %d\n", dest );
44 MPI_Cart_shift( comm, 0, -1, &source, &dest );
45 if (source != ((rank + 1) % size)) {
47 printf( "source for shift -1 is %d\n", source );
49 if (dest != ((rank - 1 + size) % size)) {
51 printf( "dest for shift -1 is %d\n", dest );
54 /* Now, with non-periodic */
55 MPI_Comm_free( &comm );
57 MPI_Cart_create( MPI_COMM_WORLD, 1, dims, periods, 0, &comm );
58 MPI_Cart_shift( comm, 0, 1, &source, &dest );
59 if ((rank > 0 && source != (rank - 1)) ||
60 (rank == 0 && source != MPI_PROC_NULL)) {
62 printf( "source for non-periodic shift 1 is %d\n", source );
64 if ((rank < size-1 && dest != rank + 1) ||
65 ((rank == size-1) && dest != MPI_PROC_NULL)) {
67 printf( "dest for non-periodic shift 1 is %d\n", dest );
69 MPI_Cart_shift( comm, 0, 0, &source, &dest );
72 printf( "Source for non-periodic shift 0 is %d\n", source );
76 printf( "Dest for non-periodic shift 0 is %d\n", dest );
78 MPI_Cart_shift( comm, 0, -1, &source, &dest );
79 if ((rank < size - 1 && source != rank + 1) ||
80 (rank == size - 1 && source != MPI_PROC_NULL)) {
83 printf( "source for non-periodic shift -1 is %d\n", source );
85 if ((rank > 0 && dest != rank - 1) ||
86 (rank == 0 && dest != MPI_PROC_NULL)) {
88 printf( "dest for non-periodic shift -1 is %d\n", dest );
90 MPI_Comm_free( &comm );
92 MTest_Finalize( errs );