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: