xref: /petsc/src/ts/tutorials/phasefield/potentials.c (revision 5f80ce2ab25dff0f4601e710601cbbcecf323266)
1c4762a1bSJed Brown 
2c4762a1bSJed Brown static char help[] = "Plots the various potentials used in the examples.\n";
3c4762a1bSJed Brown 
4c4762a1bSJed Brown #include <petscdmda.h>
5c4762a1bSJed Brown #include <petscts.h>
6c4762a1bSJed Brown #include <petscdraw.h>
7c4762a1bSJed Brown 
8c4762a1bSJed Brown int main(int argc,char **argv)
9c4762a1bSJed Brown {
10c4762a1bSJed Brown   PetscDrawLG               lg;
11c4762a1bSJed Brown   PetscErrorCode            ierr;
12c4762a1bSJed Brown   PetscInt                  Mx = 100,i;
13c4762a1bSJed Brown   PetscReal                 x,hx = .1/Mx,pause,xx[3],yy[3];
14c4762a1bSJed Brown   PetscDraw                 draw;
15c4762a1bSJed Brown   const char *const         legend[] = {"(1 - u^2)^2","1 - u^2","-(1 - u)log(1 - u)"};
16c4762a1bSJed Brown   PetscDrawAxis             axis;
17c4762a1bSJed Brown   PetscDrawViewPorts        *ports;
18c4762a1bSJed Brown 
19c4762a1bSJed Brown   PetscFunctionBegin;
20c4762a1bSJed Brown   ierr = PetscInitialize(&argc,&argv,0,help);if (ierr) return ierr;
21*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscViewerDrawResize(PETSC_VIEWER_DRAW_(PETSC_COMM_WORLD),1200,800));
22*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscViewerDrawGetDrawLG(PETSC_VIEWER_DRAW_(PETSC_COMM_WORLD),0,&lg));
23*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawLGGetDraw(lg,&draw));
24*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawCheckResizedWindow(draw));
25*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawViewPortsCreateRect(draw,1,2,&ports));
26*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawLGGetAxis(lg,&axis));
27*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawLGReset(lg));
28c4762a1bSJed Brown 
29c4762a1bSJed Brown   /*
30c4762a1bSJed Brown       Plot the  energies
31c4762a1bSJed Brown   */
32*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawLGSetDimension(lg,3));
33*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawViewPortsSet(ports,1));
34c4762a1bSJed Brown   x    = .9;
35c4762a1bSJed Brown   for (i=0; i<Mx; i++) {
36c4762a1bSJed Brown     xx[0] = xx[1] = xx[2] = x;
37c4762a1bSJed Brown     yy[0] = (1.-x*x)*(1. - x*x);
38c4762a1bSJed Brown     yy[1] = (1. - x*x);
39c4762a1bSJed Brown     yy[2] = -(1.-x)*PetscLogReal(1.-x);
40*5f80ce2aSJacob Faibussowitsch     CHKERRQ(PetscDrawLGAddPoint(lg,xx,yy));
41c4762a1bSJed Brown     x    += hx;
42c4762a1bSJed Brown   }
43*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawGetPause(draw,&pause));
44*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawSetPause(draw,0.0));
45*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawAxisSetLabels(axis,"Energy","",""));
46*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawLGSetLegend(lg,legend));
47*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawLGDraw(lg));
48c4762a1bSJed Brown 
49c4762a1bSJed Brown   /*
50c4762a1bSJed Brown       Plot the  forces
51c4762a1bSJed Brown   */
52*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawViewPortsSet(ports,0));
53*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawLGReset(lg));
54c4762a1bSJed Brown   x    = .9;
55c4762a1bSJed Brown   for (i=0; i<Mx; i++) {
56c4762a1bSJed Brown     xx[0] = xx[1] = xx[2] = x;
57c4762a1bSJed Brown     yy[0] = x*x*x - x;
58c4762a1bSJed Brown     yy[1] = -x;
59c4762a1bSJed Brown     yy[2] = 1.0 + PetscLogReal(1. - x);
60*5f80ce2aSJacob Faibussowitsch     CHKERRQ(PetscDrawLGAddPoint(lg,xx,yy));
61c4762a1bSJed Brown     x    += hx;
62c4762a1bSJed Brown   }
63*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawAxisSetLabels(axis,"Derivative","",""));
64*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawLGSetLegend(lg,NULL));
65*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawLGDraw(lg));
66c4762a1bSJed Brown 
67*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawSetPause(draw,pause));
68*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawPause(draw));
69*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawViewPortsDestroy(ports));
70c4762a1bSJed Brown   ierr = PetscFinalize();
71c4762a1bSJed Brown   return ierr;
72c4762a1bSJed Brown }
73c4762a1bSJed Brown 
74c4762a1bSJed Brown /*TEST
75c4762a1bSJed Brown 
76c4762a1bSJed Brown    test:
77c4762a1bSJed Brown      requires: x
78c4762a1bSJed Brown 
79c4762a1bSJed Brown TEST*/
80