Actual source code: ex5.c
2: static char help[] = "Demonstrates using ISLocalToGlobalMappings with block size.\n\n";
4: #include <petscis.h>
5: #include <petscviewer.h>
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;
14: PetscInitialize(&argc, &argv, (char *)0, help);
16: /*
17: Create a local to global mapping. Each processor independently
18: creates a mapping
19: */
20: PetscIntView(n, indices, PETSC_VIEWER_STDOUT_WORLD);
21: ISLocalToGlobalMappingCreate(PETSC_COMM_WORLD, 2, n, indices, PETSC_COPY_VALUES, &mapping);
23: /*
24: Map a set of local indices to their global values
25: */
26: PetscIntView(m, input, PETSC_VIEWER_STDOUT_WORLD);
27: ISLocalToGlobalMappingApply(mapping, m, input, output);
28: PetscIntView(m, output, PETSC_VIEWER_STDOUT_WORLD);
30: /*
31: Map some global indices to local, retaining the ones without a local index by -1
32: */
33: for (i = 0; i < 13; i++) inglobals[i] = i;
34: PetscIntView(13, inglobals, PETSC_VIEWER_STDOUT_WORLD);
35: ISGlobalToLocalMappingApply(mapping, IS_GTOLM_MASK, 13, inglobals, NULL, outlocals);
36: PetscIntView(13, outlocals, PETSC_VIEWER_STDOUT_WORLD);
38: /*
39: Map some block global indices to local, dropping the ones without a local index.
40: */
41: PetscIntView(13, inglobals, PETSC_VIEWER_STDOUT_WORLD);
42: ISGlobalToLocalMappingApplyBlock(mapping, IS_GTOLM_DROP, 13, inglobals, &m, outlocals);
43: PetscIntView(m, outlocals, PETSC_VIEWER_STDOUT_WORLD);
45: /*
46: Free the space used by the local to global mapping
47: */
48: ISLocalToGlobalMappingDestroy(&mapping);
50: PetscFinalize();
51: return 0;
52: }
54: /*TEST
56: test:
58: TEST*/