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;
12: PetscInitialize(&argc, &args, (char *)0, help);
13: PetscHeapCreate(9, &h);
14: PetscHeapAdd(h, 0, 100);
15: PetscHeapAdd(h, 1, 19);
16: PetscHeapAdd(h, 2, 36);
17: PetscHeapAdd(h, 3, 17);
18: PetscHeapAdd(h, 4, 3);
19: PetscHeapAdd(h, 5, 25);
20: PetscHeapAdd(h, 6, 1);
21: PetscHeapAdd(h, 8, 2);
22: PetscHeapAdd(h, 9, 7);
23: PetscPrintf(PETSC_COMM_SELF, "Initial heap:\n");
24: PetscHeapView(h, NULL);
26: PetscHeapPop(h, &id, &val);
27: PetscHeapStash(h, id, val + 10);
28: PetscHeapPop(h, &id, &val);
29: PetscHeapStash(h, id, val + 10);
30: PetscPrintf(PETSC_COMM_SELF, "Pop two items, increment, and place in stash:\n");
31: PetscHeapView(h, NULL);
33: PetscHeapUnstash(h);
34: PetscPrintf(PETSC_COMM_SELF, "After unpacking the stash:\n");
35: PetscHeapView(h, NULL);
37: PetscMalloc1(9, &values);
38: PetscHeapPop(h, &id, &val);
39: cnt = 0;
40: while (id >= 0) {
41: values[cnt++] = val;
42: PetscHeapPop(h, &id, &val);
43: }
44: PetscPrintf(PETSC_COMM_SELF, "Sorted values:\n");
45: PetscIntView(cnt, values, PETSC_VIEWER_STDOUT_SELF);
46: PetscFree(values);
47: PetscHeapDestroy(&h);
48: PetscFinalize();
49: return 0;
50: }
52: /*TEST
54: test:
56: TEST*/