1 static char help[] = "Tests VecSetValuesBlocked() on MPI vectors.\n\n";
2
3 #include <petscvec.h>
4
main(int argc,char ** argv)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);CHKERRQ(ierr);
15 ierr = MPI_Comm_rank(PETSC_COMM_WORLD,&rank);CHKERRQ(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