Actual source code: ex12.c
2: static char help[] = "Demonstrates VecStrideScatter() and VecStrideGather().\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 v,s; /* vectors */
16: PetscInt n = 20;
17: PetscScalar one = 1.0;
19: PetscInitialize(&argc,&argv,(char*)0,help);
20: PetscOptionsGetInt(NULL,NULL,"-n",&n,NULL);
22: /*
23: Create multi-component vector with 2 components
24: */
25: VecCreate(PETSC_COMM_WORLD,&v);
26: VecSetSizes(v,PETSC_DECIDE,n);
27: VecSetBlockSize(v,2);
28: VecSetFromOptions(v);
30: /*
31: Create single-component vector
32: */
33: VecCreate(PETSC_COMM_WORLD,&s);
34: VecSetSizes(s,PETSC_DECIDE,n/2);
35: VecSetFromOptions(s);
37: /*
38: Set the vectors to entries to a constant value.
39: */
40: VecSet(v,one);
42: /*
43: Get the first component from the multi-component vector to the single vector
44: */
45: VecStrideGather(v,0,s,INSERT_VALUES);
47: VecView(s,PETSC_VIEWER_STDOUT_WORLD);
49: /*
50: Put the values back into the second component
51: */
52: VecStrideScatter(s,1,v,ADD_VALUES);
54: VecView(v,PETSC_VIEWER_STDOUT_WORLD);
56: /*
57: Free work space. All PETSc objects should be destroyed when they
58: are no longer needed.
59: */
60: VecDestroy(&v);
61: VecDestroy(&s);
62: PetscFinalize();
63: return 0;
64: }
66: /*TEST
68: test:
69: nsize: 2
71: TEST*/