xref: /petsc/src/vec/is/is/tutorials/ex5.c (revision 8fb5bd83c3955fefcf33a54e3bb66920a9fa884b)
1 
2 static char help[] = "Demonstrates using ISLocalToGlobalMappings with block size.\n\n";
3 
4 #include <petscis.h>
5 #include <petscviewer.h>
6 
7 int main(int argc,char **argv)
8 {
9   PetscInt               i,n = 4,indices[] = {0,3,9,12},m = 2,input[] = {0,2};
10   PetscInt               output[2],inglobals[13],outlocals[13];
11   ISLocalToGlobalMapping mapping;
12 
13   PetscCall(PetscInitialize(&argc,&argv,(char*)0,help));
14 
15   /*
16       Create a local to global mapping. Each processor independently
17      creates a mapping
18   */
19   PetscCall(PetscIntView(n,indices,PETSC_VIEWER_STDOUT_WORLD));
20   PetscCall(ISLocalToGlobalMappingCreate(PETSC_COMM_WORLD,2,n,indices,PETSC_COPY_VALUES,&mapping));
21 
22   /*
23      Map a set of local indices to their global values
24   */
25   PetscCall(PetscIntView(m,input,PETSC_VIEWER_STDOUT_WORLD));
26   PetscCall(ISLocalToGlobalMappingApply(mapping,m,input,output));
27   PetscCall(PetscIntView(m,output,PETSC_VIEWER_STDOUT_WORLD));
28 
29   /*
30      Map some global indices to local, retaining the ones without a local index by -1
31   */
32   for (i=0; i<13; i++) inglobals[i] = i;
33   PetscCall(PetscIntView(13,inglobals,PETSC_VIEWER_STDOUT_WORLD));
34   PetscCall(ISGlobalToLocalMappingApply(mapping,IS_GTOLM_MASK,13,inglobals,NULL,outlocals));
35   PetscCall(PetscIntView(13,outlocals,PETSC_VIEWER_STDOUT_WORLD));
36 
37   /*
38      Map some block global indices to local, dropping the ones without a local index.
39   */
40   PetscCall(PetscIntView(13,inglobals,PETSC_VIEWER_STDOUT_WORLD));
41   PetscCall(ISGlobalToLocalMappingApplyBlock(mapping,IS_GTOLM_DROP,13,inglobals,&m,outlocals));
42   PetscCall(PetscIntView(m,outlocals,PETSC_VIEWER_STDOUT_WORLD));
43 
44   /*
45      Free the space used by the local to global mapping
46   */
47   PetscCall(ISLocalToGlobalMappingDestroy(&mapping));
48 
49   PetscCall(PetscFinalize());
50   return 0;
51 }
52 
53 /*TEST
54 
55    test:
56 
57 TEST*/
58