Actual source code: ex1.c
2: static char help[] = "Creating a general index set.\n\n";
4: /*
5: Include petscis.h so we can use PETSc IS objects. Note that this automatically
6: includes petscsys.h.
7: */
8: #include <petscis.h>
9: #include <petscviewer.h>
11: int main(int argc, char **argv)
12: {
13: PetscInt *indices, n;
14: const PetscInt *nindices;
15: PetscMPIInt rank;
16: IS is;
19: PetscInitialize(&argc, &argv, (char *)0, help);
20: MPI_Comm_rank(PETSC_COMM_WORLD, &rank);
22: /*
23: Create an index set with 5 entries. Each processor creates
24: its own index set with its own list of integers.
25: */
26: PetscMalloc1(5, &indices);
27: indices[0] = rank + 1;
28: indices[1] = rank + 2;
29: indices[2] = rank + 3;
30: indices[3] = rank + 4;
31: indices[4] = rank + 5;
32: ISCreateGeneral(PETSC_COMM_SELF, 5, indices, PETSC_COPY_VALUES, &is);
33: /*
34: Note that ISCreateGeneral() has made a copy of the indices
35: so we may (and generally should) free indices[]
36: */
37: PetscFree(indices);
39: /*
40: Print the index set to stdout
41: */
42: ISView(is, PETSC_VIEWER_STDOUT_SELF);
44: /*
45: Get the number of indices in the set
46: */
47: ISGetLocalSize(is, &n);
49: /*
50: Get the indices in the index set
51: */
52: ISGetIndices(is, &nindices);
53: /*
54: Now any code that needs access to the list of integers
55: has access to it here through indices[].
56: */
57: PetscPrintf(PETSC_COMM_SELF, "[%d] First index %" PetscInt_FMT "\n", rank, nindices[0]);
59: /*
60: Once we no longer need access to the indices they should
61: returned to the system
62: */
63: ISRestoreIndices(is, &nindices);
65: /*
66: One should destroy any PETSc object once one is completely
67: done with it.
68: */
69: ISDestroy(&is);
70: PetscFinalize();
71: return 0;
72: }
74: /*TEST
76: test:
78: TEST*/