1 static char help[] = "Tests VecSetValuesBlocked() on MPI vectors.\n\n"; 2 3 #include <petscvec.h> 4 5 int main(int argc,char **argv) 6 { 7 PetscErrorCode ierr; 8 PetscMPIInt size,rank; 9 PetscInt i,n = 8,bs = 2,indices[2]; 10 PetscScalar values[4]; 11 Vec x; 12 13 ierr = PetscInitialize(&argc,&argv,(char*)0,help);if (ierr) return ierr; 14 ierr = MPI_Comm_size(PETSC_COMM_WORLD,&size);CHKERRMPI(ierr); 15 ierr = MPI_Comm_rank(PETSC_COMM_WORLD,&rank);CHKERRMPI(ierr); 16 17 if (size != 2) SETERRQ(PETSC_COMM_WORLD,PETSC_ERR_WRONG_MPI_SIZE,"Must be run with two processors"); 18 19 /* create vector */ 20 ierr = VecCreate(PETSC_COMM_WORLD,&x);CHKERRQ(ierr); 21 ierr = VecSetSizes(x,PETSC_DECIDE,n);CHKERRQ(ierr); 22 ierr = VecSetBlockSize(x,bs);CHKERRQ(ierr); 23 ierr = VecSetFromOptions(x);CHKERRQ(ierr); 24 25 if (!rank) { 26 for (i=0; i<4; i++) values[i] = i+1; 27 indices[0] = 0; 28 indices[1] = 2; 29 ierr = VecSetValuesBlocked(x,2,indices,values,INSERT_VALUES);CHKERRQ(ierr); 30 } 31 ierr = VecAssemblyBegin(x);CHKERRQ(ierr); 32 ierr = VecAssemblyEnd(x);CHKERRQ(ierr); 33 34 /* 35 Resulting vector should be 1 2 0 0 3 4 0 0 36 */ 37 ierr = VecView(x,PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr); 38 39 /* test insertion with negative indices */ 40 ierr = VecSetOption(x,VEC_IGNORE_NEGATIVE_INDICES,PETSC_TRUE);CHKERRQ(ierr); 41 if (!rank) { 42 for (i=0; i<4; i++) values[i] = -(i+1); 43 indices[0] = -1; 44 indices[1] = 3; 45 ierr = VecSetValuesBlocked(x,2,indices,values,INSERT_VALUES);CHKERRQ(ierr); 46 } 47 ierr = VecAssemblyBegin(x);CHKERRQ(ierr); 48 ierr = VecAssemblyEnd(x);CHKERRQ(ierr); 49 50 /* 51 Resulting vector should be 1 2 0 0 3 4 -3 -4 52 */ 53 ierr = VecView(x,PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr); 54 55 ierr = VecDestroy(&x);CHKERRQ(ierr); 56 57 ierr = PetscFinalize(); 58 return ierr; 59 } 60 61 62 63 /*TEST 64 65 test: 66 nsize: 2 67 68 TEST*/ 69