Actual source code: ex22.c
1: /*$Id: ex22.c,v 1.21 2001/03/23 23:21:30 balay Exp $*/
3: static char help[] = "Scatters from a parallel vector to a parallel vector.nn";
5: #include "petscvec.h"
6: #include "petscsys.h"
8: int main(int argc,char **argv)
9: {
10: int n = 5,ierr;
11: int size,rank,N;
12: Scalar value,zero = 0.0;
13: Vec x,y;
14: IS is1,is2;
15: VecScatter ctx = 0;
17: PetscInitialize(&argc,&argv,(char*)0,help);
18: MPI_Comm_size(PETSC_COMM_WORLD,&size);
19: MPI_Comm_rank(PETSC_COMM_WORLD,&rank);
21: /* create two vectors */
22: N = size*n;
23: VecCreateMPI(PETSC_COMM_WORLD,PETSC_DECIDE,N,&y);
24: VecCreateMPI(PETSC_COMM_WORLD,PETSC_DECIDE,N,&x);
26: /* create two index sets */
27: ISCreateStride(PETSC_COMM_WORLD,n,n*rank,1,&is1);
28: ISCreateStride(PETSC_COMM_WORLD,n,(n*(rank+1))%N,1,&is2);
30: value = (Scalar)(rank+1);
31: VecSet(&value,x);
32: VecSet(&zero,y);
34: VecScatterCreate(x,is1,y,is2,&ctx);
35: VecScatterBegin(x,y,ADD_VALUES,SCATTER_FORWARD,ctx);
36: VecScatterEnd(x,y,ADD_VALUES,SCATTER_FORWARD,ctx);
37: VecScatterDestroy(ctx);
38:
39: VecView(y,PETSC_VIEWER_STDOUT_WORLD);
41: VecDestroy(x);
42: VecDestroy(y);
43: ISDestroy(is1);
44: ISDestroy(is2);
46: PetscFinalize();
47: return 0;
48: }
49: