Actual source code: ex1f.F90
1: !
2: ! Description: Creates an index set based on a set of integers. Views that index set
3: ! and then destroys it.
4: !
5: #include <petsc/finclude/petscis.h>
6: program main
7: use petscis
8: implicit none
10: PetscErrorCode ierr
11: PetscInt, parameter :: n = 5
12: PetscInt indices(n), i, n_out
13: PetscMPIInt rank
14: IS is
15: PetscInt, pointer :: indices2(:)
17: PetscCallA(PetscInitialize(ierr))
18: PetscCallMPIA(MPI_Comm_rank(PETSC_COMM_WORLD, rank, ierr))
20: ! Create an index set with 5 entries. Each processor creates
21: ! its own index set with its own list of integers.
22: indices = rank + [(i, i=1, n)]
23: PetscCallA(ISCreateGeneral(PETSC_COMM_SELF, n, indices, PETSC_COPY_VALUES, is, ierr))
25: ! Print the index set to stdout
26: PetscCallA(ISView(is, PETSC_VIEWER_STDOUT_SELF, ierr))
28: ! Get the number of indices in the set
29: PetscCallA(ISGetLocalSize(is, n_out, ierr))
31: ! Get the indices in the index set
32: PetscCallA(ISGetIndices(is, indices2, ierr))
34: ! Now any code that needs access to the list of integers
35: ! has access to it here
36: write (6, 100) rank, indices(1), indices(n_out)
37: 100 format('[', i5, '] First index = ', i5, ' fifth index = ', i5)
39: ! Once we no longer need access to the indices they should
40: ! returned to the system
41: PetscCallA(ISRestoreIndices(is, indices2, ierr))
43: ! All PETSc objects should be destroyed once they are
44: ! no longer needed
45: PetscCallA(ISDestroy(is, ierr))
46: PetscCallA(PetscFinalize(ierr))
47: end
49: !/*TEST
50: !
51: ! test:
52: ! filter: sort -b
53: ! filter_output: sort -b
54: !
55: !TEST*/