Actual source code: ex11.c
1: static char help[] = "Demonstrates VecStrideNorm().\n\n";
3: /*
4: Include "petscvec.h" so that we can use vectors. Note that this file
5: automatically includes:
6: petscsys.h - base PETSc routines petscis.h - index sets
7: petscviewer.h - viewers
8: */
10: #include <petscvec.h>
12: int main(int argc, char **argv)
13: {
14: Vec x; /* vectors */
15: PetscReal norm;
16: PetscInt n = 20;
17: PetscScalar one = 1.0;
19: PetscFunctionBeginUser;
20: PetscCall(PetscInitialize(&argc, &argv, (char *)0, help));
21: PetscCall(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.
29: */
30: PetscCall(VecCreate(PETSC_COMM_WORLD, &x));
31: PetscCall(VecSetSizes(x, PETSC_DECIDE, n));
32: PetscCall(VecSetBlockSize(x, 2));
33: PetscCall(VecSetFromOptions(x));
35: /*
36: Set the vectors to entries to a constant value.
37: */
38: PetscCall(VecSet(x, one));
40: PetscCall(VecNorm(x, NORM_2, &norm));
41: PetscCall(PetscPrintf(PETSC_COMM_WORLD, "L_2 Norm of entire vector: %g\n", (double)norm));
43: PetscCall(VecNorm(x, NORM_1, &norm));
44: PetscCall(PetscPrintf(PETSC_COMM_WORLD, "L_1 Norm of entire vector: %g\n", (double)norm));
46: PetscCall(VecNorm(x, NORM_INFINITY, &norm));
47: PetscCall(PetscPrintf(PETSC_COMM_WORLD, "L_inf Norm of entire vector: %g\n", (double)norm));
49: PetscCall(VecStrideNorm(x, 0, NORM_2, &norm));
50: PetscCall(PetscPrintf(PETSC_COMM_WORLD, "L_2 Norm of sub-vector 0: %g\n", (double)norm));
52: PetscCall(VecStrideNorm(x, 0, NORM_1, &norm));
53: PetscCall(PetscPrintf(PETSC_COMM_WORLD, "L_1 Norm of sub-vector 0: %g\n", (double)norm));
55: PetscCall(VecStrideNorm(x, 0, NORM_INFINITY, &norm));
56: PetscCall(PetscPrintf(PETSC_COMM_WORLD, "L_inf Norm of sub-vector 0: %g\n", (double)norm));
58: PetscCall(VecStrideNorm(x, 1, NORM_2, &norm));
59: PetscCall(PetscPrintf(PETSC_COMM_WORLD, "L_2 Norm of sub-vector 1: %g\n", (double)norm));
61: PetscCall(VecStrideNorm(x, 1, NORM_1, &norm));
62: PetscCall(PetscPrintf(PETSC_COMM_WORLD, "L_1 Norm of sub-vector 1: %g\n", (double)norm));
64: PetscCall(VecStrideNorm(x, 1, NORM_INFINITY, &norm));
65: PetscCall(PetscPrintf(PETSC_COMM_WORLD, "L_inf Norm of sub-vector 1: %g\n", (double)norm));
67: /*
68: Free work space. All PETSc objects should be destroyed when they
69: are no longer needed.
70: */
71: PetscCall(VecDestroy(&x));
72: PetscCall(PetscFinalize());
73: return 0;
74: }
76: /*TEST
78: test:
79: nsize: 2
81: TEST*/