Actual source code: ex19f.F90
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: PetscCallA(PetscInitialize(ierr))
25: PetscCallA(PetscOptionsCreate(options, ierr))
26: PetscCallA(PetscOptionsGetInt(options, PETSC_NULL_CHARACTER, '-n', n, flg, ierr))
27: PetscCallA(PetscOptionsDestroy(options, ierr))
29: ! Create a vector, then duplicate it
30: PetscCallA(VecCreate(PETSC_COMM_WORLD, x, ierr))
31: PetscCallA(VecSetSizes(x, PETSC_DECIDE, n, ierr))
32: PetscCallA(VecSetFromOptions(x, ierr))
33: PetscCallA(VecDuplicate(x, y, ierr))
34: PetscCallA(VecDuplicate(x, w, ierr))
36: PetscCallA(VecSet(x, one, ierr))
37: PetscCallA(VecSet(y, two, ierr))
39: PetscCallA(VecDot(x, y, dot, ierr))
40: rdot = PetscRealPart(dot)
41: write (6, 100) rdot
42: 100 format('Result of inner product ', f10.4)
44: PetscCallA(VecScale(x, two, ierr))
45: PetscCallA(VecNorm(x, NORM_2, norm, ierr))
46: write (6, 110) norm
47: 110 format('Result of scaling ', f10.4)
49: PetscCallA(VecCopy(x, w, ierr))
50: PetscCallA(VecNorm(w, NORM_2, norm, ierr))
51: write (6, 120) norm
52: 120 format('Result of copy ', f10.4)
54: PetscCallA(VecAXPY(y, three, x, ierr))
55: PetscCallA(VecNorm(y, NORM_2, norm, ierr))
56: write (6, 130) norm
57: 130 format('Result of axpy ', f10.4)
59: PetscCallA(VecDestroy(x, ierr))
60: PetscCallA(VecDestroy(y, ierr))
61: PetscCallA(VecDestroy(w, ierr))
62: PetscCallA(PetscFinalize(ierr))
63: end
65: !/*TEST
66: !
67: ! test:
68: !
69: !TEST*/