/*@ PetscDrawLGCreate - Creates a line graph data structure. Collective over PetscDraw Input Parameters: + draw - the window where the graph will be made. - dim - the number of curves which will be drawn Output Parameters: . outctx - the line graph context Level: intermediate Concepts: line graph^creating .seealso: PetscDrawLGDestroy() @*/ PetscErrorCode PetscDrawLGCreate(PetscDraw draw,PetscInt dim,PetscDrawLG *outctx) { PetscErrorCode ierr; PetscBool isnull; PetscObject obj = (PetscObject)draw; PetscDrawLG lg; PetscFunctionBegin; PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); PetscValidPointer(outctx,2); ierr = PetscObjectTypeCompare(obj,PETSC_DRAW_NULL,&isnull);CHKERRQ(ierr); if (isnull) { ierr = PetscDrawOpenNull(((PetscObject)obj)->comm,(PetscDraw*)outctx);CHKERRQ(ierr); PetscFunctionReturn(0); } ierr = PetscHeaderCreate(lg,_p_PetscDrawLG,int,PETSC_DRAWLG_CLASSID,0,"PetscDrawLG","Line graph","Draw",((PetscObject)obj)->comm,PetscDrawLGDestroy,0);CHKERRQ(ierr); lg->view = 0; lg->destroy = 0; lg->nopts = 0; lg->win = draw; lg->dim = dim; lg->xmin = 1.e20; lg->ymin = 1.e20; lg->xmax = -1.e20; lg->ymax = -1.e20; ierr = PetscMalloc2(dim*CHUNCKSIZE,PetscReal,&lg->x,dim*CHUNCKSIZE,PetscReal,&lg->y);CHKERRQ(ierr); ierr = PetscLogObjectMemory(lg,2*dim*CHUNCKSIZE*sizeof(PetscReal));CHKERRQ(ierr); lg->len = dim*CHUNCKSIZE; lg->loc = 0; lg->use_dots= PETSC_FALSE; ierr = PetscDrawAxisCreate(draw,&lg->axis);CHKERRQ(ierr); ierr = PetscLogObjectParent(lg,lg->axis);CHKERRQ(ierr); *outctx = lg; PetscFunctionReturn(0); }
/*@ PetscDrawAxisCreate - Generate the axis data structure. Collective over PetscDraw Input Parameters: . win - PetscDraw object where axis to to be made Ouput Parameters: . axis - the axis datastructure Level: advanced @*/ PetscErrorCode PetscDrawAxisCreate(PetscDraw draw,PetscDrawAxis *axis) { PetscDrawAxis ad; PetscObject obj = (PetscObject)draw; PetscErrorCode ierr; PetscBool isnull; PetscFunctionBegin; PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); PetscValidPointer(axis,2); ierr = PetscObjectTypeCompare(obj,PETSC_DRAW_NULL,&isnull);CHKERRQ(ierr); if (isnull) { ierr = PetscDrawOpenNull(PetscObjectComm((PetscObject)obj),(PetscDraw*)axis);CHKERRQ(ierr); (*axis)->win = draw; PetscFunctionReturn(0); } ierr = PetscHeaderCreate(ad,_p_PetscDrawAxis,int,PETSC_DRAWAXIS_CLASSID,"PetscDrawAxis","Draw Axis","Draw",PetscObjectComm((PetscObject)obj),PetscDrawAxisDestroy,0);CHKERRQ(ierr); ierr = PetscLogObjectParent(draw,ad);CHKERRQ(ierr); ad->xticks = PetscADefTicks; ad->yticks = PetscADefTicks; ad->xlabelstr = PetscADefLabel; ad->ylabelstr = PetscADefLabel; ad->win = draw; ad->ac = PETSC_DRAW_BLACK; ad->tc = PETSC_DRAW_BLACK; ad->cc = PETSC_DRAW_BLACK; ad->xlabel = 0; ad->ylabel = 0; ad->toplabel = 0; *axis = ad; PetscFunctionReturn(0); }