1 static char help[] = "Tests PetscHeapCreate()\n\n"; 2 3 #include <petscsys.h> 4 #include <petscviewer.h> 5 6 int main(int argc,char **args) 7 { 8 PetscErrorCode ierr; 9 PetscHeap h; 10 PetscInt id,val,cnt,*values; 11 12 ierr = PetscInitialize(&argc,&args,(char*)0,help);if (ierr) return ierr; 13 ierr = PetscHeapCreate(9,&h);CHKERRQ(ierr); 14 ierr = PetscHeapAdd(h,0,100);CHKERRQ(ierr); 15 ierr = PetscHeapAdd(h,1,19);CHKERRQ(ierr); 16 ierr = PetscHeapAdd(h,2,36);CHKERRQ(ierr); 17 ierr = PetscHeapAdd(h,3,17);CHKERRQ(ierr); 18 ierr = PetscHeapAdd(h,4,3);CHKERRQ(ierr); 19 ierr = PetscHeapAdd(h,5,25);CHKERRQ(ierr); 20 ierr = PetscHeapAdd(h,6,1);CHKERRQ(ierr); 21 ierr = PetscHeapAdd(h,8,2);CHKERRQ(ierr); 22 ierr = PetscHeapAdd(h,9,7);CHKERRQ(ierr); 23 ierr = PetscPrintf(PETSC_COMM_SELF,"Initial heap:\n");CHKERRQ(ierr); 24 ierr = PetscHeapView(h,NULL);CHKERRQ(ierr); 25 26 ierr = PetscHeapPop(h,&id,&val);CHKERRQ(ierr); 27 ierr = PetscHeapStash(h,id,val+10);CHKERRQ(ierr); 28 ierr = PetscHeapPop(h,&id,&val);CHKERRQ(ierr); 29 ierr = PetscHeapStash(h,id,val+10);CHKERRQ(ierr); 30 ierr = PetscPrintf(PETSC_COMM_SELF,"Pop two items, increment, and place in stash:\n");CHKERRQ(ierr); 31 ierr = PetscHeapView(h,NULL);CHKERRQ(ierr); 32 33 ierr = PetscHeapUnstash(h);CHKERRQ(ierr); 34 ierr = PetscPrintf(PETSC_COMM_SELF,"After unpacking the stash:\n");CHKERRQ(ierr); 35 ierr = PetscHeapView(h,NULL);CHKERRQ(ierr); 36 37 ierr = PetscMalloc1(9,&values);CHKERRQ(ierr); 38 ierr = PetscHeapPop(h,&id,&val);CHKERRQ(ierr); 39 cnt = 0; 40 while (id >= 0) { 41 values[cnt++] = val; 42 ierr = PetscHeapPop(h,&id,&val);CHKERRQ(ierr); 43 } 44 ierr = PetscPrintf(PETSC_COMM_SELF,"Sorted values:\n");CHKERRQ(ierr); 45 ierr = PetscIntView(cnt,values,PETSC_VIEWER_STDOUT_SELF);CHKERRQ(ierr); 46 ierr = PetscFree(values);CHKERRQ(ierr); 47 ierr = PetscHeapDestroy(&h);CHKERRQ(ierr); 48 ierr = PetscFinalize(); 49 return ierr; 50 } 51 52 53 54 55 /*TEST 56 57 test: 58 59 TEST*/ 60