xref: /petsc/src/vec/vec/tests/ex7.c (revision 5f80ce2ab25dff0f4601e710601cbbcecf323266)
1 
2 static char help[] = "Demonstrates a scatter with a stride and general index set.\n\n";
3 
4 #include <petscvec.h>
5 
6 int main(int argc,char **argv)
7 {
8   PetscErrorCode ierr;
9   PetscInt       n   = 6,idx1[3] = {0,1,2},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   CHKERRQ(VecCreateSeq(PETSC_COMM_SELF,n,&x));
19   CHKERRQ(VecDuplicate(x,&y));
20 
21   /* create two index sets */
22   CHKERRQ(ISCreateStride(PETSC_COMM_SELF,3,0,2,&is1));
23   CHKERRQ(ISCreateGeneral(PETSC_COMM_SELF,3,idx1,PETSC_COPY_VALUES,&is2));
24 
25   CHKERRQ(VecSetValues(x,6,loc,vals,INSERT_VALUES));
26   CHKERRQ(VecView(x,PETSC_VIEWER_STDOUT_SELF));
27   CHKERRQ(PetscPrintf(PETSC_COMM_SELF,"----\n"));
28   CHKERRQ(VecSet(y,two));
29   CHKERRQ(VecScatterCreate(x,is1,y,is2,&ctx));
30   CHKERRQ(VecScatterBegin(ctx,x,y,INSERT_VALUES,SCATTER_FORWARD));
31   CHKERRQ(VecScatterEnd(ctx,x,y,INSERT_VALUES,SCATTER_FORWARD));
32   CHKERRQ(VecScatterDestroy(&ctx));
33 
34   CHKERRQ(VecView(y,PETSC_VIEWER_STDOUT_SELF));
35 
36   CHKERRQ(ISDestroy(&is1));
37   CHKERRQ(ISDestroy(&is2));
38   CHKERRQ(VecDestroy(&x));
39   CHKERRQ(VecDestroy(&y));
40 
41   ierr = PetscFinalize();
42   return ierr;
43 }
44 
45 /*TEST
46 
47    test:
48 
49 TEST*/
50