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