/*@ PetscDrawLGDestroy - Frees all space taken up by line graph data structure. Collective over PetscDrawLG Input Parameter: . lg - the line graph context Level: intermediate .seealso: PetscDrawLGCreate() @*/ PetscErrorCode PetscDrawLGDestroy(PetscDrawLG *lg) { PetscErrorCode ierr; PetscInt i; PetscFunctionBegin; if (!*lg) PetscFunctionReturn(0); if (((PetscObject)(*lg))->classid != PETSC_DRAW_CLASSID) { PetscValidHeaderSpecific(*lg,PETSC_DRAWLG_CLASSID,1); } if (--((PetscObject)(*lg))->refct > 0) {*lg = 0; PetscFunctionReturn(0);} if (((PetscObject)(*lg))->classid == PETSC_DRAW_CLASSID) { ierr = PetscObjectDestroy((PetscObject*)lg);CHKERRQ(ierr); PetscFunctionReturn(0); } if ((*lg)->legend) { for (i=0; i<(*lg)->dim; i++) { ierr = PetscFree((*lg)->legend[i]);CHKERRQ(ierr); } ierr = PetscFree((*lg)->legend);CHKERRQ(ierr); } ierr = PetscFree((*lg)->colors);CHKERRQ(ierr); ierr = PetscDrawAxisDestroy(&(*lg)->axis);CHKERRQ(ierr); ierr = PetscFree2((*lg)->x,(*lg)->y);CHKERRQ(ierr); ierr = PetscHeaderDestroy(lg);CHKERRQ(ierr); PetscFunctionReturn(0); }
/* collective on KSP */ PetscErrorCode KSPPlotEigenContours_Private(KSP ksp,PetscInt neig,const PetscReal *r,const PetscReal *c) { PetscErrorCode ierr; PetscReal xmin,xmax,ymin,ymax,*xloc,*yloc,*value,px0,py0,rscale,iscale; PetscInt M,N,i,j; PetscMPIInt rank; PetscViewer viewer; PetscDraw draw; PetscDrawAxis drawaxis; PetscFunctionBegin; ierr = MPI_Comm_rank(((PetscObject)ksp)->comm,&rank);CHKERRQ(ierr); if (rank) PetscFunctionReturn(0); M = 80; N = 80; xmin = r[0]; xmax = r[0]; ymin = c[0]; ymax = c[0]; for (i=1; i<neig; i++) { xmin = PetscMin(xmin,r[i]); xmax = PetscMax(xmax,r[i]); ymin = PetscMin(ymin,c[i]); ymax = PetscMax(ymax,c[i]); } ierr = PetscMalloc3(M,PetscReal,&xloc,N,PetscReal,&yloc,M*N,PetscReal,&value);CHKERRQ(ierr); for (i=0; i<M; i++) xloc[i] = xmin - 0.1*(xmax-xmin) + 1.2*(xmax-xmin)*i/(M-1); for (i=0; i<N; i++) yloc[i] = ymin - 0.1*(ymax-ymin) + 1.2*(ymax-ymin)*i/(N-1); ierr = PolyEval(neig,r,c,0,0,&px0,&py0);CHKERRQ(ierr); rscale = px0/(PetscSqr(px0)+PetscSqr(py0)); iscale = -py0/(PetscSqr(px0)+PetscSqr(py0)); for (j=0; j<N; j++) { for (i=0; i<M; i++) { PetscReal px,py,tx,ty,tmod; ierr = PolyEval(neig,r,c,xloc[i],yloc[j],&px,&py);CHKERRQ(ierr); tx = px*rscale - py*iscale; ty = py*rscale + px*iscale; tmod = PetscSqr(tx) + PetscSqr(ty); /* modulus of the complex polynomial */ if (tmod > 1) tmod = 1.0; if (tmod > 0.5 && tmod < 1) tmod = 0.5; if (tmod > 0.2 && tmod < 0.5) tmod = 0.2; if (tmod > 0.05 && tmod < 0.2) tmod = 0.05; if (tmod < 1e-3) tmod = 1e-3; value[i+j*M] = PetscLogScalar(tmod) / PetscLogScalar(10.0); } } ierr = PetscViewerDrawOpen(PETSC_COMM_SELF,0,"Iteratively Computed Eigen-contours",PETSC_DECIDE,PETSC_DECIDE,450,450,&viewer);CHKERRQ(ierr); ierr = PetscViewerDrawGetDraw(viewer,0,&draw);CHKERRQ(ierr); ierr = PetscDrawTensorContour(draw,M,N,PETSC_NULL,PETSC_NULL,value);CHKERRQ(ierr); if (0) { ierr = PetscDrawAxisCreate(draw,&drawaxis);CHKERRQ(ierr); ierr = PetscDrawAxisSetLimits(drawaxis,xmin,xmax,ymin,ymax);CHKERRQ(ierr); ierr = PetscDrawAxisSetLabels(drawaxis,"Eigen-counters","real","imag");CHKERRQ(ierr); ierr = PetscDrawAxisDraw(drawaxis);CHKERRQ(ierr); ierr = PetscDrawAxisDestroy(&drawaxis);CHKERRQ(ierr); } ierr = PetscViewerDestroy(&viewer);CHKERRQ(ierr); ierr = PetscFree3(xloc,yloc,value);CHKERRQ(ierr); PetscFunctionReturn(0); }
/*@C PetscDrawBarDestroy - Frees all space taken up by bar graph data structure. Collective over PetscDrawBar Input Parameter: . bar - The bar graph context Level: intermediate .seealso: PetscDrawBarCreate() @*/ PetscErrorCode PetscDrawBarDestroy(PetscDrawBar *bar) { PetscErrorCode ierr; PetscFunctionBegin; if (!*bar) PetscFunctionReturn(0); PetscValidHeaderSpecific(*bar,PETSC_DRAWBAR_CLASSID,1); if (--((PetscObject)(*bar))->refct > 0) PetscFunctionReturn(0); ierr = PetscFree((*bar)->values);CHKERRQ(ierr); ierr = PetscStrArrayDestroy(&(*bar)->labels);CHKERRQ(ierr); ierr = PetscDrawAxisDestroy(&(*bar)->axis);CHKERRQ(ierr); ierr = PetscDrawDestroy(&(*bar)->win);CHKERRQ(ierr); ierr = PetscHeaderDestroy(bar);CHKERRQ(ierr); PetscFunctionReturn(0); }
/*@C PetscDrawHGDestroy - Frees all space taken up by histogram data structure. Collective over PetscDrawHG Input Parameter: . hist - The histogram context Level: intermediate .seealso: PetscDrawHGCreate() @*/ PetscErrorCode PetscDrawHGDestroy(PetscDrawHG *hist) { PetscErrorCode ierr; PetscFunctionBegin; if (!*hist) PetscFunctionReturn(0); PetscValidHeaderSpecific(*hist,PETSC_DRAWHG_CLASSID,1); if (--((PetscObject)(*hist))->refct > 0) {*hist = NULL; PetscFunctionReturn(0);} ierr = PetscFree((*hist)->bins);CHKERRQ(ierr); ierr = PetscFree((*hist)->values);CHKERRQ(ierr); ierr = PetscDrawAxisDestroy(&(*hist)->axis);CHKERRQ(ierr); ierr = PetscDrawDestroy(&(*hist)->win);CHKERRQ(ierr); ierr = PetscHeaderDestroy(hist);CHKERRQ(ierr); PetscFunctionReturn(0); }
static PetscErrorCode PetscViewerDestroy_Draw(PetscViewer v) { PetscErrorCode ierr; PetscInt i; PetscViewer_Draw *vdraw = (PetscViewer_Draw*)v->data; PetscFunctionBegin; if (vdraw->singleton_made) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ORDER,"Destroying PetscViewer without first restoring singleton"); for (i=0; i<vdraw->draw_max; i++) { ierr = PetscDrawAxisDestroy(&vdraw->drawaxis[i]);CHKERRQ(ierr); ierr = PetscDrawLGDestroy(&vdraw->drawlg[i]);CHKERRQ(ierr); ierr = PetscDrawDestroy(&vdraw->draw[i]);CHKERRQ(ierr); } ierr = PetscFree(vdraw->display);CHKERRQ(ierr); ierr = PetscFree(vdraw->title);CHKERRQ(ierr); ierr = PetscFree3(vdraw->draw,vdraw->drawlg,vdraw->drawaxis);CHKERRQ(ierr); ierr = PetscFree(vdraw->bounds);CHKERRQ(ierr); ierr = PetscFree(vdraw->drawtype);CHKERRQ(ierr); ierr = PetscFree(v->data);CHKERRQ(ierr); PetscFunctionReturn(0); }
void PETSC_STDCALL petscdrawaxisdestroy_(PetscDrawAxis axis, int *__ierr ){ *__ierr = PetscDrawAxisDestroy( (PetscDrawAxis)PetscToPointer((axis) )); }