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 */
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)) || (rank == 0 && source != MPI_PROC_NULL)) {
61 printf("source for non-periodic shift 1 is %d\n", source);
63 if ((rank < size - 1 && dest != rank + 1) || ((rank == size - 1) && dest != MPI_PROC_NULL)) {
65 printf("dest for non-periodic shift 1 is %d\n", dest);
67 MPI_Cart_shift(comm, 0, 0, &source, &dest);
70 printf("Source for non-periodic shift 0 is %d\n", source);
74 printf("Dest for non-periodic shift 0 is %d\n", dest);
76 MPI_Cart_shift(comm, 0, -1, &source, &dest);
77 if ((rank < size - 1 && source != rank + 1) || (rank == size - 1 && source != MPI_PROC_NULL)) {
80 printf("source for non-periodic shift -1 is %d\n", source);
82 if ((rank > 0 && dest != rank - 1) || (rank == 0 && dest != MPI_PROC_NULL)) {
84 printf("dest for non-periodic shift -1 is %d\n", dest);