Actual source code: ex11f90.F90

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

  6:   Vec        ::   x
  7:   PetscReal  :: norm
  8:   PetscMPIInt :: rank
  9:   PetscInt,parameter :: n = 20
 10:   PetscErrorCode :: ierr
 11:   PetscScalar,parameter :: sone = 1.0
 12:   PetscBool :: flg
 13:   character(len=PETSC_MAX_PATH_LEN) :: outputString
 14:   PetscInt,parameter :: zero = 0, one = 1, two = 2

 16:   PetscCallA(PetscInitialize(ierr))

 18:   PetscCallMPIA(MPI_Comm_rank(PETSC_COMM_WORLD,rank,ierr))

 20:   PetscCallA(PetscOptionsGetInt(PETSC_NULL_OPTIONS,PETSC_NULL_CHARACTER,'-n',n,flg,ierr))

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

 28:      !Routines for creating particular vector types directly are:
 29:      !VecCreateSeq() - uniprocessor vector
 30:      !VecCreateMPI() - distributed vector, where the user can
 31:                          !determine the parallel partitioning
 32:      !VecCreateShared() - parallel vector that uses shared memory
 33:                             !(available only on the SGI) otherwise,
 34:                             !is the same as VecCreateMPI()

 36:      !With VecCreate(), VecSetSizes() and VecSetFromOptions() the option
 37:      !-vec_type mpi or -vec_type shared causes the
 38:      !particular type of vector to be formed.

 40:   PetscCallA(VecCreate(PETSC_COMM_WORLD,x,ierr))

 42:   PetscCallA(VecSetSizes(x,PETSC_DECIDE,n,ierr))
 43:   !
 44:   PetscCallA(VecSetBlockSize(x,two,ierr))
 45:   PetscCallA(VecSetFromOptions(x,ierr))

 47:      !Set the vectors to entries to a constant value.

 49:   PetscCallA(VecSet(x,sone,ierr))

 51:   PetscCallA(VecNorm(x,NORM_2,norm,ierr))
 52:   write(outputString,*) norm
 53:   PetscCallA(PetscPrintf(PETSC_COMM_WORLD,'L_2 Norm of entire vector: '//trim(outputString)//'\n',ierr))

 55:   PetscCallA(VecNorm(x,NORM_1,norm,ierr))
 56:   write(outputString,*) norm
 57:   PetscCallA(PetscPrintf(PETSC_COMM_WORLD,'L_1 Norm of entire vector: '//trim(outputString)//'\n',ierr))

 59:   PetscCallA(VecNorm(x,NORM_INFINITY,norm,ierr))
 60:   write(outputString,*) norm
 61:   PetscCallA(PetscPrintf(PETSC_COMM_WORLD,'L_inf Norm of entire vector: '//trim(outputString)//'\n',ierr))

 63:   PetscCallA(VecStrideNorm(x,zero,NORM_2,norm,ierr))
 64:   write(outputString,*) norm
 65:   PetscCallA(PetscPrintf(PETSC_COMM_WORLD,'L_2 Norm of sub-vector 0: '//trim(outputString)//'\n',ierr))

 67:   PetscCallA(VecStrideNorm(x,zero,NORM_1,norm,ierr))
 68:   write(outputString,*) norm
 69:   PetscCallA(PetscPrintf(PETSC_COMM_WORLD,'L_1 Norm of sub-vector 0: '//trim(outputString)//'\n',ierr))

 71:   PetscCallA(VecStrideNorm(x,zero,NORM_INFINITY,norm,ierr))
 72:   write(outputString,*) norm
 73:   PetscCallA(PetscPrintf(PETSC_COMM_WORLD,'L_inf Norm of sub-vector 0: '//trim(outputString)//'\n',ierr))

 75:   PetscCallA(VecStrideNorm(x,one,NORM_2,norm,ierr))
 76:   write(outputString,*) norm
 77:   PetscCallA(PetscPrintf(PETSC_COMM_WORLD,'L_2 Norm of sub-vector 1: '//trim(outputString)//'\n',ierr))

 79:   PetscCallA(VecStrideNorm(x,one,NORM_1,norm,ierr))
 80:   write(outputString,*) norm
 81:   PetscCallA(PetscPrintf(PETSC_COMM_WORLD,'L_1 Norm of sub-vector 1: '//trim(outputString)//'\n',ierr))

 83:   PetscCallA(VecStrideNorm(x,one,NORM_INFINITY,norm,ierr))
 84:   write(outputString,*) norm
 85:   PetscCallA(PetscPrintf(PETSC_COMM_WORLD,'L_inf Norm of sub-vector 1: '//trim(outputString)//'\n',ierr))

 87:   !Free work space.  All PETSc objects should be destroyed when they
 88:   !are no longer needed.
 89:   PetscCallA(VecDestroy(x,ierr))
 90:   PetscCallA(PetscFinalize(ierr))

 92: end program

 94: !/*TEST
 95: !
 96: !     test:
 97: !       nsize: 2
 98: !
 99: !TEST*/