Actual source code: ex32f.F

  1: !
  2: !
  3: !  Tests PescOffsetFortran()
  4: !  duplicated
  5:       program main
  6:        implicit none

 8:  #include finclude/petscsys.h
 9:  #include finclude/petscis.h
 10:  #include finclude/petscvec.h

 12:       PetscErrorCode ierr
 13:       PetscInt  n
 14:       PetscMPIInt size

 16:       PetscScalar  v_v1(1),v_v2(1)
 17:       Vec     v
 18:       PetscInt i
 19:       PetscOffset i_v1,i_v2
 20: 
 21:       n=8
 22:       call PetscInitialize(PETSC_NULL_CHARACTER,ierr)
 23:       call MPI_Comm_size(PETSC_COMM_WORLD,size,ierr)
 24:       if (size .gt. 1) then
 25:         print*,'Example for one processor only'
 26:         call MPI_Abort(MPI_COMM_WORLD,0,ierr)
 27:       endif

 29:       call VecCreateMPI(PETSC_COMM_WORLD,PETSC_DECIDE,n,v,ierr)
 30:       call VecGetArray(v,v_v1,i_v1,ierr)

 32:       do 10, i=1,n
 33:         v_v1(i_v1 + i) = i
 34:  10   continue
 35:       call VecRestoreArray(v,v_v1,i_v1,ierr)

 37:       call VecView(v,PETSC_VIEWER_STDOUT_WORLD,ierr)

 39:       call VecGetArray(v,v_v1,i_v1,ierr)
 40:       call PetscOffsetFortran(v_v2,v_v1,i_v2,ierr)
 41:       i_v2 = i_v1 + i_v2
 42:       do 20, i=1,n
 43:         print*,i,v_v2(i_v2 + i)
 44:  20   continue
 45:       call VecRestoreArray(v,v_v1,i_v1,ierr)

 47:       call VecDestroy(v,ierr)
 48:       call PetscFinalize(ierr)
 49: 
 50:       end
 51: