1 static char help[] = "Plots a simple line graph.\n"; 2 3 #if defined(PETSC_APPLE_FRAMEWORK) 4 #import <PETSc/petscsys.h> 5 #import <PETSc/petscdraw.h> 6 #else 7 8 #include <petscsys.h> 9 #include <petscdraw.h> 10 #endif 11 12 int main(int argc, char **argv) 13 { 14 PetscDraw draw; 15 PetscDrawLG lg; 16 PetscDrawAxis axis; 17 PetscInt n = 15, i, nports = 1; 18 int x = 0, y = 0, width = 400, height = 300; 19 PetscBool useports, flg; 20 const char *xlabel, *ylabel, *toplabel, *legend; 21 PetscReal xd, yd; 22 PetscDrawViewPorts *ports = NULL; 23 24 toplabel = "Top Label"; 25 xlabel = "X-axis Label"; 26 ylabel = "Y-axis Label"; 27 legend = "Legend"; 28 29 PetscFunctionBeginUser; 30 PetscCall(PetscInitialize(&argc, &argv, NULL, help)); 31 PetscCall(PetscOptionsGetMPIInt(NULL, NULL, "-x", &x, NULL)); 32 PetscCall(PetscOptionsGetMPIInt(NULL, NULL, "-y", &y, NULL)); 33 PetscCall(PetscOptionsGetMPIInt(NULL, NULL, "-width", &width, NULL)); 34 PetscCall(PetscOptionsGetMPIInt(NULL, NULL, "-height", &height, NULL)); 35 PetscCall(PetscOptionsGetInt(NULL, NULL, "-n", &n, NULL)); 36 PetscCall(PetscOptionsGetInt(NULL, NULL, "-nports", &nports, &useports)); 37 PetscCall(PetscOptionsHasName(NULL, NULL, "-nolegend", &flg)); 38 if (flg) legend = NULL; 39 PetscCall(PetscOptionsHasName(NULL, NULL, "-notoplabel", &flg)); 40 if (flg) toplabel = NULL; 41 PetscCall(PetscOptionsHasName(NULL, NULL, "-noxlabel", &flg)); 42 if (flg) xlabel = NULL; 43 PetscCall(PetscOptionsHasName(NULL, NULL, "-noylabel", &flg)); 44 if (flg) ylabel = NULL; 45 PetscCall(PetscOptionsHasName(NULL, NULL, "-nolabels", &flg)); 46 if (flg) { 47 toplabel = NULL; 48 xlabel = NULL; 49 ylabel = NULL; 50 } 51 52 PetscCall(PetscDrawCreate(PETSC_COMM_WORLD, 0, "Title", x, y, width, height, &draw)); 53 PetscCall(PetscDrawSetFromOptions(draw)); 54 if (useports) { 55 PetscCall(PetscDrawViewPortsCreate(draw, nports, &ports)); 56 PetscCall(PetscDrawViewPortsSet(ports, 0)); 57 } 58 PetscCall(PetscDrawLGCreate(draw, 1, &lg)); 59 PetscCall(PetscDrawLGSetUseMarkers(lg, PETSC_TRUE)); 60 PetscCall(PetscDrawLGGetAxis(lg, &axis)); 61 PetscCall(PetscDrawAxisSetColors(axis, PETSC_DRAW_BLACK, PETSC_DRAW_RED, PETSC_DRAW_BLUE)); 62 PetscCall(PetscDrawAxisSetLabels(axis, toplabel, xlabel, ylabel)); 63 PetscCall(PetscDrawLGSetLegend(lg, &legend)); 64 PetscCall(PetscDrawLGSetFromOptions(lg)); 65 66 for (i = 0; i <= n; i++) { 67 xd = (PetscReal)(i - 5); 68 yd = xd * xd; 69 PetscCall(PetscDrawLGAddPoint(lg, &xd, &yd)); 70 } 71 PetscCall(PetscDrawLGDraw(lg)); 72 PetscCall(PetscDrawLGSave(lg)); 73 74 PetscCall(PetscDrawViewPortsDestroy(ports)); 75 PetscCall(PetscDrawLGDestroy(&lg)); 76 PetscCall(PetscDrawDestroy(&draw)); 77 PetscCall(PetscFinalize()); 78 return 0; 79 } 80 81 /*TEST 82 83 build: 84 requires: x 85 86 test: 87 output_file: output/empty.out 88 89 TEST*/ 90