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