Actual source code: ex1f90.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: !
7: program main
8: #include <petsc/finclude/petscis.h>
9: use petscis
10: implicit none
12: PetscErrorCode ierr
13: PetscInt indices(5),n
14: PetscInt five
15: PetscMPIInt rank
16: PetscInt, pointer :: idx(:)
17: IS is
19: five = 5
20: PetscCallA(PetscInitialize(ierr))
21: PetscCallMPIA(MPI_Comm_rank(PETSC_COMM_WORLD,rank,ierr))
23: ! Create an index set with 5 entries. Each processor creates
24: ! its own index set with its own list of integers.
26: indices(1) = rank + 1
27: indices(2) = rank + 2
28: indices(3) = rank + 3
29: indices(4) = rank + 4
30: indices(5) = rank + 5
31: PetscCallA(ISCreateGeneral(PETSC_COMM_SELF,five,indices,PETSC_COPY_VALUES,is,ierr))
33: ! Print the index set to stdout
35: PetscCallA(ISView(is,PETSC_VIEWER_STDOUT_SELF,ierr))
37: ! Get the number of indices in the set
39: PetscCallA(ISGetLocalSize(is,n,ierr))
41: ! Get the indices in the index set
43: PetscCallA(ISGetIndicesF90(is,idx,ierr))
45: if (associated(idx)) then
46: write (*,*) 'Association check passed'
47: else
48: write (*,*) 'Association check failed'
49: endif
51: ! Now any code that needs access to the list of integers
52: ! has access to it here
54: write(6,50) idx
55: 50 format(5I3)
57: write(6,100) rank,idx(1),idx(5)
58: 100 format('[',i5,'] First index = ',i5,' fifth index = ',i5)
60: ! Once we no longer need access to the indices they should
61: ! returned to the system
63: PetscCallA(ISRestoreIndicesF90(is,idx,ierr))
65: ! All PETSc objects should be destroyed once they are
66: ! no longer needed
68: PetscCallA(ISDestroy(is,ierr))
69: PetscCallA(PetscFinalize(ierr))
70: end
72: !/*TEST
73: !
74: ! test:
75: ! filter: sort -b
76: ! filter_output: sort -b
77: !
78: !TEST*/