Actual source code: ex19f.F

petsc-3.12.1 2019-10-22
Report Typos and Errors
  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*/