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