static char help[]= " Test VecScatter with x, y on different communicators\n\n"; #include int main(int argc,char **argv) { PetscErrorCode ierr; PetscInt i,n=5,rstart; PetscScalar *val; const PetscScalar *dat; Vec x,y1,y2; MPI_Comm newcomm; PetscMPIInt nproc,rank; IS ix; VecScatter vscat1,vscat2; PetscFunctionBegin; ierr = PetscInitialize(&argc,&argv,(char*)0,help);if (ierr) return ierr; ierr = MPI_Comm_size(PETSC_COMM_WORLD,&nproc);CHKERRMPI(ierr); ierr = MPI_Comm_rank(PETSC_COMM_WORLD,&rank);CHKERRMPI(ierr); if (nproc != 2) SETERRQ(PETSC_COMM_WORLD,PETSC_ERR_WRONG_MPI_SIZE,"This test must run with exactly two MPI ranks\n"); /* Create MPI vectors x and y, which are on the same comm (i.e., MPI_IDENT) */ ierr = VecCreateMPI(PETSC_COMM_WORLD,n,PETSC_DECIDE,&x);CHKERRQ(ierr); ierr = VecDuplicate(x,&y1);CHKERRQ(ierr); ierr = VecGetOwnershipRange(x,&rstart,NULL);CHKERRQ(ierr); /* Set x's value locally. x would be {0., 1., 2., ..., 9.} */ ierr = VecGetArray(x,&val);CHKERRQ(ierr); for (i=0; i