1 
2 static char help[] = "Demonstrates scattering with strided index sets.\n\n";
3 
4 #include <petscvec.h>
5 
main(int argc,char ** argv)6 int main(int argc,char **argv)
7 {
8   PetscErrorCode ierr;
9   PetscInt       n   = 6,loc[6] = {0,1,2,3,4,5};
10   PetscScalar    two = 2.0,vals[6] = {10,11,12,13,14,15};
11   Vec            x,y;
12   IS             is1,is2;
13   VecScatter     ctx = 0;
14 
15   ierr = PetscInitialize(&argc,&argv,(char*)0,help);if (ierr) return ierr;
16 
17   /* create two vectors */
18   ierr = VecCreateSeq(PETSC_COMM_SELF,n,&x);CHKERRQ(ierr);
19   ierr = VecDuplicate(x,&y);CHKERRQ(ierr);
20 
21   /* create two index sets */
22   ierr = ISCreateStride(PETSC_COMM_SELF,3,0,2,&is1);CHKERRQ(ierr);
23   ierr = ISCreateStride(PETSC_COMM_SELF,3,1,2,&is2);CHKERRQ(ierr);
24 
25   ierr = VecSetValues(x,6,loc,vals,INSERT_VALUES);CHKERRQ(ierr);
26   ierr = VecView(x,PETSC_VIEWER_STDOUT_SELF);CHKERRQ(ierr);
27   ierr = PetscPrintf(PETSC_COMM_SELF,"----\n");CHKERRQ(ierr);
28   ierr = VecSet(y,two);CHKERRQ(ierr);
29   ierr = VecScatterCreate(x,is1,y,is2,&ctx);CHKERRQ(ierr);
30   ierr = VecScatterBegin(ctx,x,y,INSERT_VALUES,SCATTER_FORWARD);CHKERRQ(ierr);
31   ierr = VecScatterEnd(ctx,x,y,INSERT_VALUES,SCATTER_FORWARD);CHKERRQ(ierr);
32   ierr = VecScatterDestroy(&ctx);CHKERRQ(ierr);
33 
34   ierr = VecView(y,PETSC_VIEWER_STDOUT_SELF);CHKERRQ(ierr);
35 
36   ierr = ISDestroy(&is1);CHKERRQ(ierr);
37   ierr = ISDestroy(&is2);CHKERRQ(ierr);
38   ierr = VecDestroy(&x);CHKERRQ(ierr);
39   ierr = VecDestroy(&y);CHKERRQ(ierr);
40 
41   ierr = PetscFinalize();
42   return ierr;
43 }
44 
45 
46 
47 /*TEST
48 
49    test:
50 
51 TEST*/
52