Actual source code: ex29.c
petsc-3.4.2 2013-07-02
2: static char help[] = "Tests VecSetValues() and VecSetValuesBlocked() on MPI vectors.\n\
3: Where atleast a couple of mallocs will occur in the stash code.\n\n";
5: #include <petscvec.h>
9: int main(int argc,char **argv)
10: {
12: PetscMPIInt size;
13: PetscInt i,j,n = 50,bs;
14: PetscScalar val,*vals,zero=0.0;
15: Vec x;
17: PetscInitialize(&argc,&argv,(char*)0,help);
18: MPI_Comm_size(PETSC_COMM_WORLD,&size);
19: bs = size;
21: PetscOptionsGetInt(NULL,"-n",&n,NULL);
22: VecCreate(PETSC_COMM_WORLD,&x);
23: VecSetSizes(x,PETSC_DECIDE,n*bs);
24: VecSetBlockSize(x,bs);
25: VecSetFromOptions(x);
27: for (i=0; i<n*bs; i++) {
28: val = i*1.0;
29: VecSetValues(x,1,&i,&val,INSERT_VALUES);
30: }
31: VecAssemblyBegin(x);
32: VecAssemblyEnd(x);
34: VecView(x,PETSC_VIEWER_STDOUT_WORLD);
36: /* Now do the blocksetvalues */
37: VecSet(x,zero);
38: PetscMalloc(bs*sizeof(PetscScalar),&vals);
39: for (i=0; i<n; i++) {
40: for (j=0; j<bs; j++) vals[j] = (i*bs+j)*1.0;
41: VecSetValuesBlocked(x,1,&i,vals,INSERT_VALUES);
42: }
44: VecAssemblyBegin(x);
45: VecAssemblyEnd(x);
47: VecView(x,PETSC_VIEWER_STDOUT_WORLD);
49: VecDestroy(&x);
50: PetscFree(vals);
51: PetscFinalize();
52: return 0;
53: }