Actual source code: ex29.c

  1: /*$Id: ex29.c,v 1.21 2001/09/11 16:32:10 bsmith Exp $*/

  3: static char help[] = "Tests VecSetValues and VecSetValuesBlocked() on MPI vectors.n
  4: Where atleast a couple of mallocs will occur in the stash code.nn";

 6:  #include petscvec.h
 7:  #include petscsys.h

  9: int main(int argc,char **argv)
 10: {
 11:   int          i,j,n = 50,ierr,bs,size;
 12:   PetscScalar  val,*vals,zero=0.0;
 13:   Vec          x;

 15:   PetscInitialize(&argc,&argv,(char*)0,help);
 16:   MPI_Comm_size(PETSC_COMM_WORLD,&size);
 17:   bs = size;

 19:   PetscOptionsGetInt(PETSC_NULL,"-n",&n,PETSC_NULL);
 20:   VecCreate(PETSC_COMM_WORLD,&x);
 21:   VecSetSizes(x,PETSC_DECIDE,n*bs);
 22:   VecSetBlockSize(x,bs);
 23:   VecSetFromOptions(x);

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

 32:   VecView(x,PETSC_VIEWER_STDOUT_WORLD);

 34:   /* Now do the blocksetvalues */
 35:   VecSet(&zero,x);
 36:   PetscMalloc(bs*sizeof(PetscScalar),&vals);
 37:   for (i=0; i<n; i++) {
 38:     for (j=0; j<bs; j++) {
 39:       vals[j] = (i*bs+j)*1.0;
 40:     }
 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: }
 54: