Actual source code: ex19f.F90
1: !
2: !
3: #include <petsc/finclude/petscvec.h>
4: program main
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 dot
15: PetscScalar, parameter :: one = 1.0, two = 2.0, three = 3.0
16: PetscReal norm, rdot
17: Vec x, y, w
18: PetscOptions options
20: PetscCallA(PetscInitialize(ierr))
21: PetscCallA(PetscOptionsCreate(options, ierr))
22: n = 20
23: PetscCallA(PetscOptionsGetInt(options, PETSC_NULL_CHARACTER, '-n', n, flg, ierr))
24: PetscCallA(PetscOptionsDestroy(options, ierr))
26: ! Create a vector, then duplicate it
27: PetscCallA(VecCreate(PETSC_COMM_WORLD, x, ierr))
28: PetscCallA(VecSetSizes(x, PETSC_DECIDE, n, ierr))
29: PetscCallA(VecSetFromOptions(x, ierr))
30: PetscCallA(VecDuplicate(x, y, ierr))
31: PetscCallA(VecDuplicate(x, w, ierr))
33: PetscCallA(VecSet(x, one, ierr))
34: PetscCallA(VecSet(y, two, ierr))
36: PetscCallA(VecDot(x, y, dot, ierr))
37: rdot = PetscRealPart(dot)
38: write (6, 100) rdot
39: 100 format('Result of inner product ', f10.4)
41: PetscCallA(VecScale(x, two, ierr))
42: PetscCallA(VecNorm(x, NORM_2, norm, ierr))
43: write (6, 110) norm
44: 110 format('Result of scaling ', f10.4)
46: PetscCallA(VecCopy(x, w, ierr))
47: PetscCallA(VecNorm(w, NORM_2, norm, ierr))
48: write (6, 120) norm
49: 120 format('Result of copy ', f10.4)
51: PetscCallA(VecAXPY(y, three, x, ierr))
52: PetscCallA(VecNorm(y, NORM_2, norm, ierr))
53: write (6, 130) norm
54: 130 format('Result of axpy ', f10.4)
56: PetscCallA(VecDestroy(x, ierr))
57: PetscCallA(VecDestroy(y, ierr))
58: PetscCallA(VecDestroy(w, ierr))
59: PetscCallA(PetscFinalize(ierr))
60: end
62: !/*TEST
63: !
64: ! test:
65: !
66: !TEST*/