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(ISGetIndices(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(ISRestoreIndices(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*/