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