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 == 0) then
 42:     write (6, 100) norm
 43: 100 format('L_2 Norm of entire vector ', 1pe9.2)
 44:   end if

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

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

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

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

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