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