Actual source code: ex13.c
2: static char help[] = "Demonstrates VecStrideSum().\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: PetscScalar sum;
17: PetscInt n = 20;
18: PetscScalar one = 1.0;
21: PetscInitialize(&argc, &argv, (char *)0, help);
22: PetscOptionsGetInt(NULL, NULL, "-n", &n, NULL);
24: /*
25: Create a vector, specifying only its global dimension.
26: When using VecCreate(), VecSetSizes() and VecSetFromOptions(),
27: the vector format (currently parallel,
28: shared, or sequential) is determined at runtime. Also, the parallel
29: partitioning of the vector is determined by PETSc at runtime.
31: Routines for creating particular vector types directly are:
32: VecCreateSeq() - uniprocessor vector
33: VecCreateMPI() - distributed vector, where the user can
34: determine the parallel partitioning
35: VecCreateShared() - parallel vector that uses shared memory
36: (available only on the SGI); otherwise,
37: is the same as VecCreateMPI()
39: With VecCreate(), VecSetSizes() and VecSetFromOptions() the option
40: -vec_type mpi or -vec_type shared causes the
41: particular type of vector to be formed.
43: */
44: VecCreate(PETSC_COMM_WORLD, &x);
45: VecSetSizes(x, PETSC_DECIDE, n);
46: VecSetBlockSize(x, 2);
47: VecSetFromOptions(x);
49: /*
50: Set the subvector entries to a constant value.
51: */
52: VecSet(x, one);
53: VecStrideScale(x, 1, -2);
55: VecSum(x, &sum);
56: PetscPrintf(PETSC_COMM_WORLD, "Sum of entire vector: %g\n", (double)PetscRealPart(sum));
58: VecStrideSum(x, 0, &sum);
59: PetscPrintf(PETSC_COMM_WORLD, "Sum of sub-vector 0: %g\n", (double)PetscRealPart(sum));
61: VecStrideSum(x, 1, &sum);
62: PetscPrintf(PETSC_COMM_WORLD, "Sum of sub-vector 1: %g\n", (double)PetscRealPart(sum));
64: /*
65: Free work space. All PETSc objects should be destroyed when they
66: are no longer needed.
67: */
68: VecDestroy(&x);
69: PetscFinalize();
70: return 0;
71: }
73: /*TEST
75: test:
76: nsize: 2
78: TEST*/