Actual source code: ex29.c

  1: static char help[] = "Tests PetscHeapCreate()\n\n";

  3: #include <petscsys.h>
  4: #include <petscviewer.h>

  6: int main(int argc,char **args)
  7: {
  8:   PetscHeap      h;
  9:   PetscInt       id,val,cnt,*values;

 11:   PetscInitialize(&argc,&args,(char*)0,help);
 12:   PetscHeapCreate(9,&h);
 13:   PetscHeapAdd(h,0,100);
 14:   PetscHeapAdd(h,1,19);
 15:   PetscHeapAdd(h,2,36);
 16:   PetscHeapAdd(h,3,17);
 17:   PetscHeapAdd(h,4,3);
 18:   PetscHeapAdd(h,5,25);
 19:   PetscHeapAdd(h,6,1);
 20:   PetscHeapAdd(h,8,2);
 21:   PetscHeapAdd(h,9,7);
 22:   PetscPrintf(PETSC_COMM_SELF,"Initial heap:\n");
 23:   PetscHeapView(h,NULL);

 25:   PetscHeapPop(h,&id,&val);
 26:   PetscHeapStash(h,id,val+10);
 27:   PetscHeapPop(h,&id,&val);
 28:   PetscHeapStash(h,id,val+10);
 29:   PetscPrintf(PETSC_COMM_SELF,"Pop two items, increment, and place in stash:\n");
 30:   PetscHeapView(h,NULL);

 32:   PetscHeapUnstash(h);
 33:   PetscPrintf(PETSC_COMM_SELF,"After unpacking the stash:\n");
 34:   PetscHeapView(h,NULL);

 36:   PetscMalloc1(9,&values);
 37:   PetscHeapPop(h,&id,&val);
 38:   cnt  = 0;
 39:   while (id >= 0) {
 40:     values[cnt++] = val;
 41:     PetscHeapPop(h,&id,&val);
 42:   }
 43:   PetscPrintf(PETSC_COMM_SELF,"Sorted values:\n");
 44:   PetscIntView(cnt,values,PETSC_VIEWER_STDOUT_SELF);
 45:   PetscFree(values);
 46:   PetscHeapDestroy(&h);
 47:   PetscFinalize();
 48:   return 0;
 49: }

 51: /*TEST

 53:    test:

 55: TEST*/