Actual source code: ex11f.F90

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

      7:   Vec x
      8:   PetscReal norm
      9:   PetscBool flg
     10:   PetscMPIInt rank
     11:   PetscInt, parameter :: bs = 2 ! block size
     12:   PetscInt n, comp
     13:   PetscErrorCode ierr
     14:   PetscScalar, parameter :: one = 1.0

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

     19:   n = 20
     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:   PetscCallA(VecSetBlockSize(x, bs, ierr))
     32:   PetscCallA(VecSetFromOptions(x, ierr))

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

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

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

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

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

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

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

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

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