Actual source code: ex11f.F90

  1: !
  2:       program main
  3: #include <petsc/finclude/petscvec.h>
  4:       use petscvec
  5:       implicit none

  7:       Vec               x
  8:       PetscReal         norm
  9:       PetscBool  flg
 10:       PetscMPIInt rank
 11:       PetscInt n,bs,comp
 12:       PetscErrorCode ierr
 13:       PetscScalar       one

 15:       PetscCallA(PetscInitialize(ierr))
 16:       PetscCallMPIA(MPI_Comm_rank(PETSC_COMM_WORLD,rank,ierr))

 18:       n   = 20
 19:       one = 1.0
 20:       PetscCallA(PetscOptionsGetInt(PETSC_NULL_OPTIONS,PETSC_NULL_CHARACTER,'-n',n,flg,ierr))

 22: !
 23: !     Create a vector, specifying only its global dimension.
 24: !     When using VecCreate(), VecSetSizes() and VecSetFromOptions(),
 25: !     the vector format (currently parallel,
 26: !     shared, or sequential) is determined at runtime.  Also, the parallel
 27: !     partitioning of the vector is determined by PETSc at runtime.

 29:       PetscCallA(VecCreate(PETSC_COMM_WORLD,x,ierr))
 30:       PetscCallA(VecSetSizes(x,PETSC_DECIDE,n,ierr))
 31:       bs = 2
 32:       PetscCallA(VecSetBlockSize(x,bs,ierr))
 33:       PetscCallA(VecSetFromOptions(x,ierr))

 35: !
 36: !     Set the vectors to entries to a constant value.
 37: !
 38:       PetscCallA(VecSet(x,one,ierr))

 40:       PetscCallA(VecNorm(x,NORM_2,norm,ierr))
 41:       if (rank .eq. 0) then
 42:          write (6,100) norm
 43:  100     format ('L_2 Norm of entire vector ',1pe9.2)
 44:       endif

 46:       comp = 0
 47:       PetscCallA(VecStrideNorm(x,comp,NORM_2,norm,ierr))
 48:       if (rank .eq. 0) then
 49:          write (6,200) norm
 50:  200     format ('L_2 Norm of subvector 0',1pe9.2)
 51:       endif

 53:       comp = 1
 54:       PetscCallA(VecStrideNorm(x,comp,NORM_2,norm,ierr))
 55:       if (rank .eq. 0) then
 56:          write (6,300) norm
 57:  300     format ('L_2 Norm of subvector 1',1pe9.2)
 58:       endif

 60:       PetscCallA(VecStrideNorm(x,comp,NORM_1,norm,ierr))
 61:       if (rank .eq. 0) then
 62:          write (6,400) norm
 63:  400     format ('L_1 Norm of subvector 0',1pe9.2)
 64:       endif

 66:       PetscCallA(VecStrideNorm(x,comp,NORM_INFINITY,norm,ierr))
 67:       if (rank .eq. 0) then
 68:          write (6,500) norm
 69:  500     format ('L_1 Norm of subvector 1',1pe9.2)
 70:       endif

 72: !
 73: !     Free work space.  All PETSc objects should be destroyed when they
 74: !     are no longer needed.

 76:       PetscCallA(VecDestroy(x,ierr))
 77:       PetscCallA(PetscFinalize(ierr))
 78:       end

 80: !/*TEST
 81: !
 82: !     test:
 83: !       nsize: 2
 84: !
 85: !TEST*/