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*/