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*/