xref: /petsc/src/vec/is/tests/ex6.c (revision 76d901e46dda72c1afe96306c7cb4731c47d4e87)
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