Date: 2022-08-02T03:13:36+00:00

Actual source code: ex11.c

      2: static char help[] = "Demonstrates VecStrideNorm().\n\n";

      4: /*
      5:   Include "petscvec.h" so that we can use vectors.  Note that this file
      6:   automatically includes:
      7:      petscsys.h       - base PETSc routines   petscis.h     - index sets
      8:      petscviewer.h - viewers
      9: */

     11: #include <petscvec.h>

     13: int main(int argc,char **argv)
     14: {
     15:   Vec            x;               /* vectors */
     16:   PetscReal      norm;
     17:   PetscInt       n = 20;
     18:   PetscScalar    one = 1.0;

     20:   PetscInitialize(&argc,&argv,(char*)0,help);
     21:   PetscOptionsGetInt(NULL,NULL,"-n",&n,NULL);

     23:   /*
     24:      Create a vector, specifying only its global dimension.
     25:      When using VecCreate(), VecSetSizes() and VecSetFromOptions(),
     26:      the vector format (currently parallel,
     27:      shared, or sequential) is determined at runtime.  Also, the parallel
     28:      partitioning of the vector is determined by PETSc at runtime.

     30:      Routines for creating particular vector types directly are:
     31:         VecCreateSeq() - uniprocessor vector
     32:         VecCreateMPI() - distributed vector, where the user can
     33:                          determine the parallel partitioning
     34:         VecCreateShared() - parallel vector that uses shared memory
     35:                             (available only on the SGI); otherwise,
     36:                             is the same as VecCreateMPI()

     38:      With VecCreate(), VecSetSizes() and VecSetFromOptions() the option
     39:      -vec_type mpi or -vec_type shared causes the
     40:      particular type of vector to be formed.

     42:   */
     43:   VecCreate(PETSC_COMM_WORLD,&x);
     44:   VecSetSizes(x,PETSC_DECIDE,n);
     45:   VecSetBlockSize(x,2);
     46:   VecSetFromOptions(x);

     48:   /*
     49:      Set the vectors to entries to a constant value.
     50:   */
     51:   VecSet(x,one);

     53:   VecNorm(x,NORM_2,&norm);
     54:   PetscPrintf(PETSC_COMM_WORLD,"L_2 Norm of entire vector: %g\n",(double)norm);

     56:   VecNorm(x,NORM_1,&norm);
     57:   PetscPrintf(PETSC_COMM_WORLD,"L_1 Norm of entire vector: %g\n",(double)norm);

     59:   VecNorm(x,NORM_INFINITY,&norm);
     60:   PetscPrintf(PETSC_COMM_WORLD,"L_inf Norm of entire vector: %g\n",(double)norm);

     62:   VecStrideNorm(x,0,NORM_2,&norm);
     63:   PetscPrintf(PETSC_COMM_WORLD,"L_2 Norm of sub-vector 0: %g\n",(double)norm);

     65:   VecStrideNorm(x,0,NORM_1,&norm);
     66:   PetscPrintf(PETSC_COMM_WORLD,"L_1 Norm of sub-vector 0: %g\n",(double)norm);

     68:   VecStrideNorm(x,0,NORM_INFINITY,&norm);
     69:   PetscPrintf(PETSC_COMM_WORLD,"L_inf Norm of sub-vector 0: %g\n",(double)norm);

     71:   VecStrideNorm(x,1,NORM_2,&norm);
     72:   PetscPrintf(PETSC_COMM_WORLD,"L_2 Norm of sub-vector 1: %g\n",(double)norm);

     74:   VecStrideNorm(x,1,NORM_1,&norm);
     75:   PetscPrintf(PETSC_COMM_WORLD,"L_1 Norm of sub-vector 1: %g\n",(double)norm);

     77:   VecStrideNorm(x,1,NORM_INFINITY,&norm);
     78:   PetscPrintf(PETSC_COMM_WORLD,"L_inf Norm of sub-vector 1: %g\n",(double)norm);

     80:   /*
     81:      Free work space.  All PETSc objects should be destroyed when they
     82:      are no longer needed.
     83:   */
     84:   VecDestroy(&x);
     85:   PetscFinalize();
     86:   return 0;
     87: }

     89: /*TEST

     91:      test:
     92:        nsize: 2

     94: TEST*/