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