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