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