Actual source code: ex19f.F
petsc-3.7.1 2016-05-15
1: !
2: !
3: program main
4: implicit none
5: #include <petsc/finclude/petscsys.h>
6: #include <petsc/finclude/petscvec.h>
7: !
8: ! This example demonstrates basic use of the PETSc Fortran interface
9: ! to vectors.
10: !
11: PetscInt n
12: PetscErrorCode ierr
13: PetscBool flg
14: PetscScalar one,two,three,dot
15: PetscReal norm,rdot
16: Vec x,y,w
17: PetscOptions options
19: n = 20
20: one = 1.0
21: two = 2.0
22: three = 3.0
24: call PetscInitialize(PETSC_NULL_CHARACTER,ierr)
25: call PetscOptionsCreate(options,ierr)
26: call PetscOptionsGetInt(options,PETSC_NULL_CHARACTER, &
27: & '-n',n,flg,ierr)
28: call PetscOptionsDestroy(options,ierr)
30: ! Create a vector, then duplicate it
31: call VecCreate(PETSC_COMM_WORLD,x,ierr)
32: call VecSetSizes(x,PETSC_DECIDE,n,ierr)
33: call VecSetFromOptions(x,ierr)
34: call VecDuplicate(x,y,ierr)
35: call VecDuplicate(x,w,ierr)
37: call VecSet(x,one,ierr)
38: call VecSet(y,two,ierr)
40: call VecDot(x,y,dot,ierr)
41: rdot = PetscRealPart(dot)
42: write(6,100) rdot
43: 100 format('Result of inner product ',f10.4)
45: call VecScale(x,two,ierr)
46: call VecNorm(x,NORM_2,norm,ierr)
47: write(6,110) norm
48: 110 format('Result of scaling ',f10.4)
50: call VecCopy(x,w,ierr)
51: call VecNorm(w,NORM_2,norm,ierr)
52: write(6,120) norm
53: 120 format('Result of copy ',f10.4)
55: call VecAXPY(y,three,x,ierr)
56: call VecNorm(y,NORM_2,norm,ierr)
57: write(6,130) norm
58: 130 format('Result of axpy ',f10.4)
60: call VecDestroy(x,ierr)
61: call VecDestroy(y,ierr)
62: call VecDestroy(w,ierr)
63: call PetscFinalize(ierr)
64: end