Actual source code: ex11f90.F90

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

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

     15:   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:   !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, 2_PETSC_INT_KIND, 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, 0_PETSC_INT_KIND, 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, 0_PETSC_INT_KIND, 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, 0_PETSC_INT_KIND, 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, 1_PETSC_INT_KIND, 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, 1_PETSC_INT_KIND, 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, 1_PETSC_INT_KIND, 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*/