Actual source code: ex29.c

  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
 6:  #include petscsys.h

 10: int main(int argc,char **argv)
 11: {
 13:   PetscMPIInt    size;
 14:   PetscInt       i,j,n = 50,bs;
 15:   PetscScalar    val,*vals,zero=0.0;
 16:   Vec            x;

 18:   PetscInitialize(&argc,&argv,(char*)0,help);
 19:   MPI_Comm_size(PETSC_COMM_WORLD,&size);
 20:   bs = size;

 22:   PetscOptionsGetInt(PETSC_NULL,"-n",&n,PETSC_NULL);
 23:   VecCreate(PETSC_COMM_WORLD,&x);
 24:   VecSetSizes(x,PETSC_DECIDE,n*bs);
 25:   VecSetBlockSize(x,bs);
 26:   VecSetFromOptions(x);

 28:   for (i=0; i<n*bs; i++) {
 29:     val  = i*1.0;
 30:     VecSetValues(x,1,&i,&val,INSERT_VALUES);
 31:   }
 32:   VecAssemblyBegin(x);
 33:   VecAssemblyEnd(x);

 35:   VecView(x,PETSC_VIEWER_STDOUT_WORLD);

 37:   /* Now do the blocksetvalues */
 38:   VecSet(x,zero);
 39:   PetscMalloc(bs*sizeof(PetscScalar),&vals);
 40:   for (i=0; i<n; i++) {
 41:     for (j=0; j<bs; j++) {
 42:       vals[j] = (i*bs+j)*1.0;
 43:     }
 44:     VecSetValuesBlocked(x,1,&i,vals,INSERT_VALUES);
 45:   }

 47:   VecAssemblyBegin(x);
 48:   VecAssemblyEnd(x);

 50:   VecView(x,PETSC_VIEWER_STDOUT_WORLD);

 52:   VecDestroy(x);
 53:   PetscFree(vals);
 54:   PetscFinalize();
 55:   return 0;
 56: }
 57: