Actual source code: ex11f90.F90
petsc-3.13.6 2020-09-29
Report Typos and Errors

      1:    !Concepts: vectors^norms of sub-vectors
      2:    !Processors: n
      3:
      4:   program main
      5:  #include <petsc/finclude/petscvec.h>
      6:   use petscvec
      7:   implicit none

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

     19:   call PetscInitialize(PETSC_NULL_CHARACTER,ierr)
     20:   if (ierr /= 0) then
     21:    print*,'PetscInitialize failed'
     22:    stop
     23:   endif
     24:
     25:   call MPI_Comm_rank(PETSC_COMM_WORLD,rank,ierr)
     26:
     27:   call PetscOptionsGetInt(PETSC_NULL_OPTIONS,PETSC_NULL_CHARACTER,"-n",n,flg,ierr);CHKERRA(ierr)

     30:      !Create a vector, specifying only its global dimension.
     31:      !When using VecCreate(), VecSetSizes() and VecSetFromOptions(),
     32:      !the vector format (currently parallel,
     33:      !shared, or sequential) is determined at runtime.  Also, the parallel
     34:      !partitioning of the vector is determined by PETSc at runtime.

     36:      !Routines for creating particular vector types directly are:
     37:      !VecCreateSeq() - uniprocessor vector
     38:      !VecCreateMPI() - distributed vector, where the user can
     39:                          !determine the parallel partitioning
     40:         !VecCreateShared() - parallel vector that uses shared memory
     41:                             !(available only on the SGI) otherwise,
     42:                             !is the same as VecCreateMPI()

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

     48:   call VecCreate(PETSC_COMM_WORLD,x,ierr);CHKERRA(ierr)
     49:
     50:   call VecSetSizes(x,PETSC_DECIDE,n,ierr);CHKERRA(ierr)
     51:   !
     52:   call VecSetBlockSize(x,two,ierr);CHKERRA(ierr)
     53:   call VecSetFromOptions(x,ierr);CHKERRA(ierr)

     56:      !Set the vectors to entries to a constant value.
     57:
     58:   call VecSet(x,sone,ierr);CHKERRA(ierr)

     60:   call VecNorm(x,NORM_2,norm,ierr);CHKERRA(ierr)
     61:   write(outputString,*) norm
     62:   call PetscPrintf(PETSC_COMM_WORLD,"L_2 Norm of entire vector: "//trim(outputString)//"\n",ierr);CHKERRA(ierr)
     63:
     64:   call VecNorm(x,NORM_1,norm,ierr);CHKERRA(ierr)
     65:   write(outputString,*) norm
     66:   call PetscPrintf(PETSC_COMM_WORLD,"L_1 Norm of entire vector: "//trim(outputString)//"\n",ierr);CHKERRA(ierr)
     67:
     68:   call VecNorm(x,NORM_INFINITY,norm,ierr);CHKERRA(ierr)
     69:   write(outputString,*) norm
     70:   call PetscPrintf(PETSC_COMM_WORLD,"L_inf Norm of entire vector: "//trim(outputString)//"\n",ierr);CHKERRA(ierr)
     71:
     72:   call VecStrideNorm(x,zero,NORM_2,norm,ierr);CHKERRA(ierr)
     73:   write(outputString,*) norm
     74:   call PetscPrintf(PETSC_COMM_WORLD,"L_2 Norm of sub-vector 0: "//trim(outputString)//"\n",ierr);CHKERRA(ierr)

     76:   call VecStrideNorm(x,zero,NORM_1,norm,ierr);CHKERRA(ierr)
     77:   write(outputString,*) norm
     78:   call PetscPrintf(PETSC_COMM_WORLD,"L_1 Norm of sub-vector 0: "//trim(outputString)//"\n",ierr);CHKERRA(ierr)

     80:   call VecStrideNorm(x,zero,NORM_INFINITY,norm,ierr);CHKERRA(ierr)
     81:   write(outputString,*) norm
     82:   call PetscPrintf(PETSC_COMM_WORLD,"L_inf Norm of sub-vector 0: "//trim(outputString)//"\n",ierr);CHKERRA(ierr)

     84:   call VecStrideNorm(x,one,NORM_2,norm,ierr);CHKERRA(ierr)
     85:   write(outputString,*) norm
     86:   call PetscPrintf(PETSC_COMM_WORLD,"L_2 Norm of sub-vector 1: "//trim(outputString)//"\n",ierr);CHKERRA(ierr)

     88:   call VecStrideNorm(x,one,NORM_1,norm,ierr);CHKERRA(ierr)
     89:   write(outputString,*) norm
     90:   call PetscPrintf(PETSC_COMM_WORLD,"L_1 Norm of sub-vector 1: "//trim(outputString)//"\n",ierr);CHKERRA(ierr)

     92:   call VecStrideNorm(x,one,NORM_INFINITY,norm,ierr);CHKERRA(ierr)
     93:   write(outputString,*) norm
     94:   call PetscPrintf(PETSC_COMM_WORLD,"L_inf Norm of sub-vector 1: "//trim(outputString)//"\n",ierr);CHKERRA(ierr)
     95:
     96:
     97:      !Free work space.  All PETSc objects should be destroyed when they
     98:      !are no longer needed.
     99:   call VecDestroy(x,ierr);CHKERRA(ierr)
    100:   call PetscFinalize(ierr);CHKERRA(ierr)
    101:
    102: end program

    105: !/*TEST
    106: !
    107: !     test:
    108: !       nsize: 2
    109: !
    110: !TEST*/