xref: /petsc/src/vec/is/tests/ex6.c (revision d71ae5a4db6382e7f06317b8d368875286fe9008)
1 static char help[] = "Tests ISRenumber.\n\n";
2 
3 #include <petscis.h>
4 
5 PetscErrorCode TestRenumber(IS is, IS mult)
6 {
7   IS       nis;
8   PetscInt N;
9 
10   PetscFunctionBegin;
11   PetscCall(PetscPrintf(PetscObjectComm((PetscObject)is), "\n-----------------\n"));
12   PetscCall(PetscPrintf(PetscObjectComm((PetscObject)is), "\nInitial\n"));
13   PetscCall(ISView(is, NULL));
14   if (mult) {
15     PetscCall(PetscPrintf(PetscObjectComm((PetscObject)is), "\nMult\n"));
16     PetscCall(ISView(mult, NULL));
17   }
18   PetscCall(ISRenumber(is, mult, &N, NULL));
19   PetscCall(PetscPrintf(PetscObjectComm((PetscObject)is), "\nRenumbered, unique entries %" PetscInt_FMT "\n", N));
20   PetscCall(ISRenumber(is, mult, NULL, &nis));
21   PetscCall(ISView(nis, NULL));
22   PetscCall(ISDestroy(&nis));
23   PetscFunctionReturn(0);
24 }
25 
26 int main(int argc, char **argv)
27 {
28   IS          is;
29   PetscMPIInt size, rank;
30 
31   PetscFunctionBeginUser;
32   PetscCall(PetscInitialize(&argc, &argv, NULL, help));
33   PetscCallMPI(MPI_Comm_size(PETSC_COMM_WORLD, &size));
34   PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD, &rank));
35 
36   for (PetscInt c = 0; c < 3; c++) {
37     IS mult = NULL;
38 
39     PetscCall(ISCreateStride(PETSC_COMM_WORLD, 0, 0, 0, &is));
40     if (c) {
41       PetscInt n;
42       PetscCall(ISGetLocalSize(is, &n));
43       PetscCall(ISCreateStride(PETSC_COMM_WORLD, n, c - 2, 0, &mult));
44     }
45     PetscCall(TestRenumber(is, mult));
46     PetscCall(ISDestroy(&is));
47     PetscCall(ISDestroy(&mult));
48 
49     PetscCall(ISCreateStride(PETSC_COMM_WORLD, 2, -rank - 1, -4, &is));
50     if (c) {
51       PetscInt n;
52       PetscCall(ISGetLocalSize(is, &n));
53       PetscCall(ISCreateStride(PETSC_COMM_WORLD, n, c - 2, 0, &mult));
54     }
55     PetscCall(TestRenumber(is, mult));
56     PetscCall(ISDestroy(&is));
57     PetscCall(ISDestroy(&mult));
58 
59     PetscCall(ISCreateStride(PETSC_COMM_WORLD, 10, 4 + rank, 2, &is));
60     if (c) {
61       PetscInt n;
62       PetscCall(ISGetLocalSize(is, &n));
63       PetscCall(ISCreateStride(PETSC_COMM_WORLD, n, c - 2, 1, &mult));
64     }
65     PetscCall(TestRenumber(is, mult));
66     PetscCall(ISDestroy(&is));
67     PetscCall(ISDestroy(&mult));
68 
69     PetscCall(ISCreateStride(PETSC_COMM_WORLD, 10, -rank - 1, 2, &is));
70     if (c) {
71       PetscInt n;
72       PetscCall(ISGetLocalSize(is, &n));
73       PetscCall(ISCreateStride(PETSC_COMM_WORLD, n, c - 2, 1, &mult));
74     }
75     PetscCall(TestRenumber(is, mult));
76     PetscCall(ISDestroy(&is));
77     PetscCall(ISDestroy(&mult));
78   }
79   /* Finalize */
80   PetscCall(PetscFinalize());
81   return 0;
82 }
83 
84 /*TEST
85 
86   test:
87     suffix: 1
88     nsize: {{1 2}separate output}
89 
90 TEST*/
91