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