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