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