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