xref: /petsc/src/vec/vec/tests/ex7.c (revision 2dfe29262b4468d5fbb057f165946753e529c684)
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   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 = ISCreateGeneral(PETSC_COMM_SELF,3,idx1,PETSC_COPY_VALUES,&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 /*TEST
46 
47    test:
48 
49 TEST*/
50