static char help[]= "Scatters between parallel vectors. \n\ uses block index sets\n\n"; #include int main(int argc,char **argv) { PetscErrorCode ierr; PetscInt bs=1,n=5,N,i,low; PetscInt ix0[3] = {5,7,9},iy0[3] = {1,2,4},ix1[3] = {2,3,1},iy1[3] = {0,3,9}; PetscMPIInt size,rank; PetscScalar *array; Vec x,x1,y; IS isx,isy; VecScatter ctx; VecScatterType type; PetscBool flg; ierr = PetscInitialize(&argc,&argv,(char*)0,help);if (ierr) return ierr; CHKERRMPI(MPI_Comm_size(PETSC_COMM_WORLD,&size)); CHKERRMPI(MPI_Comm_rank(PETSC_COMM_WORLD,&rank)); PetscCheckFalse(size <2,PETSC_COMM_WORLD,PETSC_ERR_WRONG_MPI_SIZE,"Must run more than one processor"); CHKERRQ(PetscOptionsGetInt(NULL,NULL,"-bs",&bs,NULL)); n = bs*n; /* Create vector x over shared memory */ CHKERRQ(VecCreate(PETSC_COMM_WORLD,&x)); CHKERRQ(VecSetSizes(x,n,PETSC_DECIDE)); CHKERRQ(VecSetFromOptions(x)); CHKERRQ(VecGetOwnershipRange(x,&low,NULL)); CHKERRQ(VecGetArray(x,&array)); for (i=0; i