xref: /petsc/src/sys/classes/draw/tests/ex3.c (revision 9371c9d470a9602b6d10a8bf50c9b2280a79e45a)
1c4762a1bSJed Brown 
2c4762a1bSJed Brown static char help[] = "Plots a simple line graph.\n";
3c4762a1bSJed Brown 
4c4762a1bSJed Brown #if defined(PETSC_APPLE_FRAMEWORK)
5c4762a1bSJed Brown #import <PETSc/petscsys.h>
6c4762a1bSJed Brown #import <PETSc/petscdraw.h>
7c4762a1bSJed Brown #else
8c4762a1bSJed Brown 
9c4762a1bSJed Brown #include <petscsys.h>
10c4762a1bSJed Brown #include <petscdraw.h>
11c4762a1bSJed Brown #endif
12c4762a1bSJed Brown 
13*9371c9d4SSatish Balay int main(int argc, char **argv) {
14c4762a1bSJed Brown   PetscDraw           draw;
15c4762a1bSJed Brown   PetscDrawLG         lg;
16c4762a1bSJed Brown   PetscDrawAxis       axis;
17c4762a1bSJed Brown   PetscInt            n = 15, i, x = 0, y = 0, width = 400, height = 300, nports = 1;
18c4762a1bSJed Brown   PetscBool           useports, flg;
19c4762a1bSJed Brown   const char         *xlabel, *ylabel, *toplabel, *legend;
20c4762a1bSJed Brown   PetscReal           xd, yd;
21c4762a1bSJed Brown   PetscDrawViewPorts *ports = NULL;
22c4762a1bSJed Brown 
23*9371c9d4SSatish Balay   toplabel = "Top Label";
24*9371c9d4SSatish Balay   xlabel   = "X-axis Label";
25*9371c9d4SSatish Balay   ylabel   = "Y-axis Label";
26*9371c9d4SSatish Balay   legend   = "Legend";
27c4762a1bSJed Brown 
28327415f7SBarry Smith   PetscFunctionBeginUser;
299566063dSJacob Faibussowitsch   PetscCall(PetscInitialize(&argc, &argv, NULL, help));
309566063dSJacob Faibussowitsch   PetscCall(PetscOptionsGetInt(NULL, NULL, "-x", &x, NULL));
319566063dSJacob Faibussowitsch   PetscCall(PetscOptionsGetInt(NULL, NULL, "-y", &y, NULL));
329566063dSJacob Faibussowitsch   PetscCall(PetscOptionsGetInt(NULL, NULL, "-width", &width, NULL));
339566063dSJacob Faibussowitsch   PetscCall(PetscOptionsGetInt(NULL, NULL, "-height", &height, NULL));
349566063dSJacob Faibussowitsch   PetscCall(PetscOptionsGetInt(NULL, NULL, "-n", &n, NULL));
359566063dSJacob Faibussowitsch   PetscCall(PetscOptionsGetInt(NULL, NULL, "-nports", &nports, &useports));
369566063dSJacob Faibussowitsch   PetscCall(PetscOptionsHasName(NULL, NULL, "-nolegend", &flg));
37c4762a1bSJed Brown   if (flg) legend = NULL;
389566063dSJacob Faibussowitsch   PetscCall(PetscOptionsHasName(NULL, NULL, "-notoplabel", &flg));
39c4762a1bSJed Brown   if (flg) toplabel = NULL;
409566063dSJacob Faibussowitsch   PetscCall(PetscOptionsHasName(NULL, NULL, "-noxlabel", &flg));
41c4762a1bSJed Brown   if (flg) xlabel = NULL;
429566063dSJacob Faibussowitsch   PetscCall(PetscOptionsHasName(NULL, NULL, "-noylabel", &flg));
43c4762a1bSJed Brown   if (flg) ylabel = NULL;
449566063dSJacob Faibussowitsch   PetscCall(PetscOptionsHasName(NULL, NULL, "-nolabels", &flg));
45*9371c9d4SSatish Balay   if (flg) {
46*9371c9d4SSatish Balay     toplabel = NULL;
47*9371c9d4SSatish Balay     xlabel   = NULL;
48*9371c9d4SSatish Balay     ylabel   = NULL;
49*9371c9d4SSatish Balay   }
50c4762a1bSJed Brown 
519566063dSJacob Faibussowitsch   PetscCall(PetscDrawCreate(PETSC_COMM_WORLD, 0, "Title", x, y, width, height, &draw));
529566063dSJacob Faibussowitsch   PetscCall(PetscDrawSetFromOptions(draw));
53c4762a1bSJed Brown   if (useports) {
549566063dSJacob Faibussowitsch     PetscCall(PetscDrawViewPortsCreate(draw, nports, &ports));
559566063dSJacob Faibussowitsch     PetscCall(PetscDrawViewPortsSet(ports, 0));
56c4762a1bSJed Brown   }
579566063dSJacob Faibussowitsch   PetscCall(PetscDrawLGCreate(draw, 1, &lg));
589566063dSJacob Faibussowitsch   PetscCall(PetscDrawLGSetUseMarkers(lg, PETSC_TRUE));
599566063dSJacob Faibussowitsch   PetscCall(PetscDrawLGGetAxis(lg, &axis));
609566063dSJacob Faibussowitsch   PetscCall(PetscDrawAxisSetColors(axis, PETSC_DRAW_BLACK, PETSC_DRAW_RED, PETSC_DRAW_BLUE));
619566063dSJacob Faibussowitsch   PetscCall(PetscDrawAxisSetLabels(axis, toplabel, xlabel, ylabel));
629566063dSJacob Faibussowitsch   PetscCall(PetscDrawLGSetLegend(lg, &legend));
639566063dSJacob Faibussowitsch   PetscCall(PetscDrawLGSetFromOptions(lg));
64c4762a1bSJed Brown 
65c4762a1bSJed Brown   for (i = 0; i <= n; i++) {
66*9371c9d4SSatish Balay     xd = (PetscReal)(i - 5);
67*9371c9d4SSatish Balay     yd = xd * xd;
689566063dSJacob Faibussowitsch     PetscCall(PetscDrawLGAddPoint(lg, &xd, &yd));
69c4762a1bSJed Brown   }
709566063dSJacob Faibussowitsch   PetscCall(PetscDrawLGDraw(lg));
719566063dSJacob Faibussowitsch   PetscCall(PetscDrawLGSave(lg));
72c4762a1bSJed Brown 
739566063dSJacob Faibussowitsch   PetscCall(PetscDrawViewPortsDestroy(ports));
749566063dSJacob Faibussowitsch   PetscCall(PetscDrawLGDestroy(&lg));
759566063dSJacob Faibussowitsch   PetscCall(PetscDrawDestroy(&draw));
769566063dSJacob Faibussowitsch   PetscCall(PetscFinalize());
77b122ec5aSJacob Faibussowitsch   return 0;
78c4762a1bSJed Brown }
79c4762a1bSJed Brown 
80c4762a1bSJed Brown /*TEST
81c4762a1bSJed Brown 
82c4762a1bSJed Brown    build:
83c4762a1bSJed Brown      requires: x
84c4762a1bSJed Brown 
85c4762a1bSJed Brown    test:
86c4762a1bSJed Brown      output_file: output/ex1_1.out
87c4762a1bSJed Brown 
88c4762a1bSJed Brown TEST*/
89