xref: /petsc/src/mat/tests/ex29.c (revision c4762a1b19cd2af06abeed90e8f9d34fb975dd94)
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