Actual source code: ex19f.F
petsc-3.12.2 2019-11-22
1: !
2: !
3: program main
4: #include <petsc/finclude/petscvec.h>
5: use petscvec
6: implicit none
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: if (ierr .ne. 0) then
26: print*,'Unable to initialize PETSc'
27: stop
28: endif
29: call PetscOptionsCreate(options,ierr)
30: call PetscOptionsGetInt(options,PETSC_NULL_CHARACTER, &
31: & '-n',n,flg,ierr)
32: call PetscOptionsDestroy(options,ierr)
34: ! Create a vector, then duplicate it
35: call VecCreate(PETSC_COMM_WORLD,x,ierr)
36: call VecSetSizes(x,PETSC_DECIDE,n,ierr)
37: call VecSetFromOptions(x,ierr)
38: call VecDuplicate(x,y,ierr)
39: call VecDuplicate(x,w,ierr)
41: call VecSet(x,one,ierr)
42: call VecSet(y,two,ierr)
44: call VecDot(x,y,dot,ierr)
45: rdot = PetscRealPart(dot)
46: write(6,100) rdot
47: 100 format('Result of inner product ',f10.4)
49: call VecScale(x,two,ierr)
50: call VecNorm(x,NORM_2,norm,ierr)
51: write(6,110) norm
52: 110 format('Result of scaling ',f10.4)
54: call VecCopy(x,w,ierr)
55: call VecNorm(w,NORM_2,norm,ierr)
56: write(6,120) norm
57: 120 format('Result of copy ',f10.4)
59: call VecAXPY(y,three,x,ierr)
60: call VecNorm(y,NORM_2,norm,ierr)
61: write(6,130) norm
62: 130 format('Result of axpy ',f10.4)
64: call VecDestroy(x,ierr)
65: call VecDestroy(y,ierr)
66: call VecDestroy(w,ierr)
67: call PetscFinalize(ierr)
68: end
71: !/*TEST
72: !
73: ! test:
74: !
75: !TEST*/