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: !
      6: !
      7:       program main
      8: #include <petsc/finclude/petscis.h>
      9:       use petscis
     10:       implicit none

     12:       PetscErrorCode ierr
     13:       PetscInt n,indices(5),index1,index5
     14:       PetscMPIInt rank
     15:       IS          is
     16:       PetscInt, pointer :: indices2(:)

     18:       PetscCallA(PetscInitialize(ierr))
     19:       PetscCallMPIA(MPI_Comm_rank(PETSC_COMM_WORLD,rank,ierr))

     21: !  Create an index set with 5 entries. Each processor creates
     22: !  its own index set with its own list of integers.

     24:       indices(1) = rank + 1
     25:       indices(2) = rank + 2
     26:       indices(3) = rank + 3
     27:       indices(4) = rank + 4
     28:       indices(5) = rank + 5

     30: !     if using 64-bit integers cannot pass 5 into routine expecting an integer*8
     31:       n = 5
     32:       PetscCallA(ISCreateGeneral(PETSC_COMM_SELF,n,indices,PETSC_COPY_VALUES,is,ierr))

     34: !  Print the index set to stdout

     36:       PetscCallA(ISView(is,PETSC_VIEWER_STDOUT_SELF,ierr))

     38: !  Get the number of indices in the set

     40:       PetscCallA(ISGetLocalSize(is,n,ierr))

     42: !   Get the indices in the index set

     44:       PetscCallA(ISGetIndicesF90(is,indices2,ierr))

     46: !   Now any code that needs access to the list of integers
     47: !   has access to it here

     49: !
     50: !      Bug in IRIX64-F90 libraries - write/format cannot handle integer(integer*8 + integer)
     51: !

     53:       index1 = indices(1)
     54:       index5 = indices(5)
     55:       write(6,100) rank,index1,index5
     56:  100  format('[',i5,'] First index = ',i5,' fifth index = ',i5)

     58: !   Once we no longer need access to the indices they should
     59: !   returned to the system

     61:       PetscCallA(ISRestoreIndicesF90(is,indices2,ierr))

     63: !   All PETSc objects should be destroyed once they are
     64: !   no longer needed

     66:       PetscCallA(ISDestroy(is,ierr))
     67:       PetscCallA(PetscFinalize(ierr))
     68:       end

     70: !/*TEST
     71: !
     72: !   test:
     73: !      filter: sort -b
     74: !      filter_output: sort -b
     75: !
     76: !TEST*/