1 static char help[] = "Tests ISRenumber.\n\n";
2
3 #include <petscis.h>
4
TestRenumber(IS is,IS mult)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(PETSC_SUCCESS);
24 }
25
main(int argc,char ** argv)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