15c6c1daeSBarry Smith 25c6c1daeSBarry Smith /* 35c6c1daeSBarry Smith Provides the calling sequences for all the basic PetscDraw routines. 45c6c1daeSBarry Smith */ 5af0996ceSBarry Smith #include <petsc/private/drawimpl.h> /*I "petscdraw.h" I*/ 65c6c1daeSBarry Smith 75c6c1daeSBarry Smith /*@ 85c6c1daeSBarry Smith PetscDrawSetViewPort - Sets the portion of the window (page) to which draw 95c6c1daeSBarry Smith routines will write. 105c6c1daeSBarry Smith 115c6c1daeSBarry Smith Collective on PetscDraw 125c6c1daeSBarry Smith 135c6c1daeSBarry Smith Input Parameters: 146b867d5aSJose E. Roman + xl - the horizontal coordinate of the lower left corner of the subwindow. 156b867d5aSJose E. Roman . yl - the vertical coordinate of the lower left corner of the subwindow. 166b867d5aSJose E. Roman . xr - the horizontal coordinate of the upper right corner of the subwindow. 176b867d5aSJose E. Roman . yr - the vertical coordinate of the upper right corner of the subwindow. 186b867d5aSJose E. Roman - draw - the drawing context 196b867d5aSJose E. Roman 206b867d5aSJose E. Roman Notes: 215c6c1daeSBarry Smith These numbers must always be between 0.0 and 1.0. 225c6c1daeSBarry Smith Lower left corner is (0,0). 235c6c1daeSBarry Smith 245c6c1daeSBarry Smith Level: advanced 255c6c1daeSBarry Smith 265c6c1daeSBarry Smith @*/ 275c6c1daeSBarry Smith PetscErrorCode PetscDrawSetViewPort(PetscDraw draw,PetscReal xl,PetscReal yl,PetscReal xr,PetscReal yr) 285c6c1daeSBarry Smith { 295c6c1daeSBarry Smith PetscErrorCode ierr; 305c6c1daeSBarry Smith 315c6c1daeSBarry Smith PetscFunctionBegin; 325c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 3357622a8eSBarry Smith if (xl < 0.0 || xr > 1.0 || yl < 0.0 || yr > 1.0 || xr <= xl || yr <= yl) SETERRQ4(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"ViewPort values must be >= 0 and <= 1: Instead %g %g %g %g",(double)xl,(double)yl,(double)xr,(double)yr); 345c6c1daeSBarry Smith draw->port_xl = xl; draw->port_yl = yl; 355c6c1daeSBarry Smith draw->port_xr = xr; draw->port_yr = yr; 365c6c1daeSBarry Smith if (draw->ops->setviewport) { 375c6c1daeSBarry Smith ierr = (*draw->ops->setviewport)(draw,xl,yl,xr,yr);CHKERRQ(ierr); 385c6c1daeSBarry Smith } 395c6c1daeSBarry Smith PetscFunctionReturn(0); 405c6c1daeSBarry Smith } 415c6c1daeSBarry Smith 425c6c1daeSBarry Smith /*@ 435c6c1daeSBarry Smith PetscDrawGetViewPort - Gets the portion of the window (page) to which draw 445c6c1daeSBarry Smith routines will write. 455c6c1daeSBarry Smith 465c6c1daeSBarry Smith Collective on PetscDraw 475c6c1daeSBarry Smith 485c6c1daeSBarry Smith Input Parameter: 495c6c1daeSBarry Smith . draw - the drawing context 505c6c1daeSBarry Smith 51*97bb3fdcSJose E. Roman Output Parameters: 526b867d5aSJose E. Roman + xl - the horizontal coordinate of the lower left corner of the subwindow. 536b867d5aSJose E. Roman . yl - the vertical coordinate of the lower left corner of the subwindow. 546b867d5aSJose E. Roman . xr - the horizontal coordinate of the upper right corner of the subwindow. 55*97bb3fdcSJose E. Roman - yr - the vertical coordinate of the upper right corner of the subwindow. 566b867d5aSJose E. Roman 576b867d5aSJose E. Roman Notes: 585c6c1daeSBarry Smith These numbers must always be between 0.0 and 1.0. 595c6c1daeSBarry Smith Lower left corner is (0,0). 605c6c1daeSBarry Smith 615c6c1daeSBarry Smith Level: advanced 625c6c1daeSBarry Smith 635c6c1daeSBarry Smith @*/ 645c6c1daeSBarry Smith PetscErrorCode PetscDrawGetViewPort(PetscDraw draw,PetscReal *xl,PetscReal *yl,PetscReal *xr,PetscReal *yr) 655c6c1daeSBarry Smith { 665c6c1daeSBarry Smith PetscFunctionBegin; 675c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 688f69470aSLisandro Dalcin PetscValidRealPointer(xl,2); 698f69470aSLisandro Dalcin PetscValidRealPointer(yl,3); 708f69470aSLisandro Dalcin PetscValidRealPointer(xr,4); 718f69470aSLisandro Dalcin PetscValidRealPointer(yr,5); 725c6c1daeSBarry Smith *xl = draw->port_xl; 735c6c1daeSBarry Smith *yl = draw->port_yl; 745c6c1daeSBarry Smith *xr = draw->port_xr; 755c6c1daeSBarry Smith *yr = draw->port_yr; 765c6c1daeSBarry Smith PetscFunctionReturn(0); 775c6c1daeSBarry Smith } 785c6c1daeSBarry Smith 795c6c1daeSBarry Smith /*@ 805c6c1daeSBarry Smith PetscDrawSplitViewPort - Splits a window shared by several processes into smaller 815c6c1daeSBarry Smith view ports. One for each process. 825c6c1daeSBarry Smith 835c6c1daeSBarry Smith Collective on PetscDraw 845c6c1daeSBarry Smith 855c6c1daeSBarry Smith Input Parameter: 865c6c1daeSBarry Smith . draw - the drawing context 875c6c1daeSBarry Smith 885c6c1daeSBarry Smith Level: advanced 895c6c1daeSBarry Smith 905c6c1daeSBarry Smith .seealso: PetscDrawDivideViewPort(), PetscDrawSetViewPort() 915c6c1daeSBarry Smith 925c6c1daeSBarry Smith @*/ 935c6c1daeSBarry Smith PetscErrorCode PetscDrawSplitViewPort(PetscDraw draw) 945c6c1daeSBarry Smith { 955c6c1daeSBarry Smith PetscErrorCode ierr; 965c6c1daeSBarry Smith PetscMPIInt rank,size; 97369cc0aeSBarry Smith PetscInt n; 985c6c1daeSBarry Smith PetscBool isnull; 995c6c1daeSBarry Smith PetscReal xl,xr,yl,yr,h; 1005c6c1daeSBarry Smith 1015c6c1daeSBarry Smith PetscFunctionBegin; 1025c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 1038f69470aSLisandro Dalcin ierr = PetscDrawIsNull(draw,&isnull);CHKERRQ(ierr); 1045c6c1daeSBarry Smith if (isnull) PetscFunctionReturn(0); 105ffc4695bSBarry Smith ierr = MPI_Comm_rank(PetscObjectComm((PetscObject)draw),&rank);CHKERRMPI(ierr); 106ffc4695bSBarry Smith ierr = MPI_Comm_size(PetscObjectComm((PetscObject)draw),&size);CHKERRMPI(ierr); 1075c6c1daeSBarry Smith 108369cc0aeSBarry Smith n = (PetscInt)(.1 + PetscSqrtReal((PetscReal)size)); 109a297a907SKarl Rupp while (n*n < size) n++; 1105c6c1daeSBarry Smith 1115c6c1daeSBarry Smith h = 1.0/n; 1125c6c1daeSBarry Smith xl = (rank % n)*h; 1135c6c1daeSBarry Smith xr = xl + h; 1145c6c1daeSBarry Smith yl = (rank / n)*h; 1155c6c1daeSBarry Smith yr = yl + h; 1165c6c1daeSBarry Smith 117e5ab1681SLisandro Dalcin ierr = PetscDrawCollectiveBegin(draw);CHKERRQ(ierr); 1185c6c1daeSBarry Smith ierr = PetscDrawLine(draw,xl,yl,xl,yr,PETSC_DRAW_BLACK);CHKERRQ(ierr); 1195c6c1daeSBarry Smith ierr = PetscDrawLine(draw,xl,yr,xr,yr,PETSC_DRAW_BLACK);CHKERRQ(ierr); 1205c6c1daeSBarry Smith ierr = PetscDrawLine(draw,xr,yr,xr,yl,PETSC_DRAW_BLACK);CHKERRQ(ierr); 1215c6c1daeSBarry Smith ierr = PetscDrawLine(draw,xr,yl,xl,yl,PETSC_DRAW_BLACK);CHKERRQ(ierr); 122e5ab1681SLisandro Dalcin ierr = PetscDrawCollectiveEnd(draw);CHKERRQ(ierr); 1235b399a63SLisandro Dalcin ierr = PetscDrawFlush(draw);CHKERRQ(ierr); 1245c6c1daeSBarry Smith 125e5ab1681SLisandro Dalcin draw->port_xl = xl + .05*h; 126e5ab1681SLisandro Dalcin draw->port_xr = xr - .05*h; 127e5ab1681SLisandro Dalcin draw->port_yl = yl + .05*h; 128e5ab1681SLisandro Dalcin draw->port_yr = yr - .05*h; 1295c6c1daeSBarry Smith 1305c6c1daeSBarry Smith if (draw->ops->setviewport) { 1315c6c1daeSBarry Smith ierr = (*draw->ops->setviewport)(draw,xl,yl,xr,yr);CHKERRQ(ierr); 1325c6c1daeSBarry Smith } 1335c6c1daeSBarry Smith PetscFunctionReturn(0); 1345c6c1daeSBarry Smith } 1355c6c1daeSBarry Smith 1365c6c1daeSBarry Smith /*@C 137cf79e978SBarry Smith PetscDrawViewPortsCreate - Splits a window into smaller view ports. Each processor shares all the viewports. 1385c6c1daeSBarry Smith 1395c6c1daeSBarry Smith Collective on PetscDraw 1405c6c1daeSBarry Smith 1415c6c1daeSBarry Smith Input Parameters: 1425c6c1daeSBarry Smith + draw - the drawing context 1435c6c1daeSBarry Smith - nports - the number of ports 1445c6c1daeSBarry Smith 1455c6c1daeSBarry Smith Output Parameter: 1465c6c1daeSBarry Smith . ports - a PetscDrawViewPorts context (C structure) 1475c6c1daeSBarry Smith 148cf79e978SBarry Smith Options Database: 1498e5aa403SBarry Smith . -draw_ports - display multiple fields in the same window with PetscDrawPorts instead of in separate windows 150cf79e978SBarry Smith 1515c6c1daeSBarry Smith Level: advanced 1525c6c1daeSBarry Smith 1535c6c1daeSBarry Smith .seealso: PetscDrawSplitViewPort(), PetscDrawSetViewPort(), PetscDrawViewPortsSet(), PetscDrawViewPortsDestroy() 1545c6c1daeSBarry Smith 1555c6c1daeSBarry Smith @*/ 156e5ab1681SLisandro Dalcin PetscErrorCode PetscDrawViewPortsCreate(PetscDraw draw,PetscInt nports,PetscDrawViewPorts **newports) 1575c6c1daeSBarry Smith { 158e5ab1681SLisandro Dalcin PetscDrawViewPorts *ports; 1595c6c1daeSBarry Smith PetscInt i,n; 1605c6c1daeSBarry Smith PetscBool isnull; 161e5ab1681SLisandro Dalcin PetscMPIInt rank; 1625c6c1daeSBarry Smith PetscReal *xl,*xr,*yl,*yr,h; 163e5ab1681SLisandro Dalcin PetscErrorCode ierr; 1645c6c1daeSBarry Smith 1655c6c1daeSBarry Smith PetscFunctionBegin; 1665c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 167e5ab1681SLisandro Dalcin if (nports < 1) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE, "Number of divisions must be positive: %d", nports); 168e5ab1681SLisandro Dalcin PetscValidPointer(newports,3); 169e118a51fSLisandro Dalcin ierr = PetscDrawIsNull(draw,&isnull);CHKERRQ(ierr); 170e5ab1681SLisandro Dalcin if (isnull) {*newports = NULL; PetscFunctionReturn(0);} 171ffc4695bSBarry Smith ierr = MPI_Comm_rank(PetscObjectComm((PetscObject)draw),&rank);CHKERRMPI(ierr); 1725c6c1daeSBarry Smith 173e5ab1681SLisandro Dalcin ierr = PetscNew(&ports);CHKERRQ(ierr); *newports = ports; 174e5ab1681SLisandro Dalcin ports->draw = draw; 175e5ab1681SLisandro Dalcin ports->nports = nports; 1765c6c1daeSBarry Smith ierr = PetscObjectReference((PetscObject)draw);CHKERRQ(ierr); 177e5ab1681SLisandro Dalcin /* save previous drawport of window */ 178e5ab1681SLisandro Dalcin ierr = PetscDrawGetViewPort(draw,&ports->port_xl,&ports->port_yl,&ports->port_xr,&ports->port_yr);CHKERRQ(ierr); 1795c6c1daeSBarry Smith 180369cc0aeSBarry Smith n = (PetscInt)(.1 + PetscSqrtReal((PetscReal)nports)); 181a297a907SKarl Rupp while (n*n < nports) n++; 1825c6c1daeSBarry Smith h = 1.0/n; 1835c6c1daeSBarry Smith 184cf79e978SBarry Smith ierr = PetscMalloc4(n*n,&xl,n*n,&xr,n*n,&yl,n*n,&yr);CHKERRQ(ierr); 185cf79e978SBarry Smith ports->xl = xl; 186cf79e978SBarry Smith ports->xr = xr; 187cf79e978SBarry Smith ports->yl = yl; 188cf79e978SBarry Smith ports->yr = yr; 189e5ab1681SLisandro Dalcin 190e5ab1681SLisandro Dalcin ierr = PetscDrawSetCoordinates(draw,0.0,0.0,1.0,1.0);CHKERRQ(ierr); 191e5ab1681SLisandro Dalcin ierr = PetscDrawCollectiveBegin(draw);CHKERRQ(ierr); 1925c6c1daeSBarry Smith for (i=0; i<n*n; i++) { 1935c6c1daeSBarry Smith xl[i] = (i % n)*h; 1945c6c1daeSBarry Smith xr[i] = xl[i] + h; 1955c6c1daeSBarry Smith yl[i] = (i / n)*h; 1965c6c1daeSBarry Smith yr[i] = yl[i] + h; 1975c6c1daeSBarry Smith 198e5ab1681SLisandro Dalcin if (!rank) { 1995c6c1daeSBarry Smith ierr = PetscDrawLine(draw,xl[i],yl[i],xl[i],yr[i],PETSC_DRAW_BLACK);CHKERRQ(ierr); 2005c6c1daeSBarry Smith ierr = PetscDrawLine(draw,xl[i],yr[i],xr[i],yr[i],PETSC_DRAW_BLACK);CHKERRQ(ierr); 2015c6c1daeSBarry Smith ierr = PetscDrawLine(draw,xr[i],yr[i],xr[i],yl[i],PETSC_DRAW_BLACK);CHKERRQ(ierr); 2025c6c1daeSBarry Smith ierr = PetscDrawLine(draw,xr[i],yl[i],xl[i],yl[i],PETSC_DRAW_BLACK);CHKERRQ(ierr); 2035c6c1daeSBarry Smith } 204e5ab1681SLisandro Dalcin 205e5ab1681SLisandro Dalcin xl[i] += .05*h; 206e5ab1681SLisandro Dalcin xr[i] -= .05*h; 207e5ab1681SLisandro Dalcin yl[i] += .05*h; 208e5ab1681SLisandro Dalcin yr[i] -= .05*h; 209e5ab1681SLisandro Dalcin } 210e5ab1681SLisandro Dalcin ierr = PetscDrawCollectiveEnd(draw);CHKERRQ(ierr); 211e5ab1681SLisandro Dalcin ierr = PetscDrawFlush(draw);CHKERRQ(ierr); 2125c6c1daeSBarry Smith PetscFunctionReturn(0); 2135c6c1daeSBarry Smith } 2145c6c1daeSBarry Smith 2155c6c1daeSBarry Smith /*@C 2165c6c1daeSBarry Smith PetscDrawViewPortsCreateRect - Splits a window into smaller 2175c6c1daeSBarry Smith view ports. Each processor shares all the viewports. The number 2185c6c1daeSBarry Smith of views in the x- and y-directions is specified. 2195c6c1daeSBarry Smith 2205c6c1daeSBarry Smith Collective on PetscDraw 2215c6c1daeSBarry Smith 2225c6c1daeSBarry Smith Input Parameters: 2235c6c1daeSBarry Smith + draw - the drawing context 2245c6c1daeSBarry Smith . nx - the number of x divisions 2255c6c1daeSBarry Smith - ny - the number of y divisions 2265c6c1daeSBarry Smith 2275c6c1daeSBarry Smith Output Parameter: 2285c6c1daeSBarry Smith . ports - a PetscDrawViewPorts context (C structure) 2295c6c1daeSBarry Smith 2305c6c1daeSBarry Smith Level: advanced 2315c6c1daeSBarry Smith 2325c6c1daeSBarry Smith .seealso: PetscDrawSplitViewPort(), PetscDrawSetViewPort(), PetscDrawViewPortsSet(), PetscDrawViewPortsDestroy() 2335c6c1daeSBarry Smith 2345c6c1daeSBarry Smith @*/ 235e5ab1681SLisandro Dalcin PetscErrorCode PetscDrawViewPortsCreateRect(PetscDraw draw,PetscInt nx,PetscInt ny,PetscDrawViewPorts **newports) 2365c6c1daeSBarry Smith { 237e5ab1681SLisandro Dalcin PetscDrawViewPorts *ports; 2385c6c1daeSBarry Smith PetscReal *xl,*xr,*yl,*yr,hx,hy; 239e5ab1681SLisandro Dalcin PetscInt i,j,k,n; 2405c6c1daeSBarry Smith PetscBool isnull; 241e5ab1681SLisandro Dalcin PetscMPIInt rank; 2425c6c1daeSBarry Smith PetscErrorCode ierr; 2435c6c1daeSBarry Smith 2445c6c1daeSBarry Smith PetscFunctionBegin; 2455c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 2465c6c1daeSBarry Smith if ((nx < 1) || (ny < 1)) SETERRQ2(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE, "Number of divisions must be positive: %d x %d", nx, ny); 247064a246eSJacob Faibussowitsch PetscValidPointer(newports,4); 248e118a51fSLisandro Dalcin ierr = PetscDrawIsNull(draw,&isnull);CHKERRQ(ierr); 249e5ab1681SLisandro Dalcin if (isnull) {*newports = NULL; PetscFunctionReturn(0);} 250ffc4695bSBarry Smith ierr = MPI_Comm_rank(PetscObjectComm((PetscObject)draw),&rank);CHKERRMPI(ierr); 251e118a51fSLisandro Dalcin 2525c6c1daeSBarry Smith n = nx*ny; 2535c6c1daeSBarry Smith hx = 1.0/nx; 2545c6c1daeSBarry Smith hy = 1.0/ny; 255e5ab1681SLisandro Dalcin ierr = PetscNew(&ports);CHKERRQ(ierr); *newports = ports; 256e5ab1681SLisandro Dalcin ports->draw = draw; 257e5ab1681SLisandro Dalcin ports->nports = n; 2585c6c1daeSBarry Smith ierr = PetscObjectReference((PetscObject) draw);CHKERRQ(ierr); 259e5ab1681SLisandro Dalcin /* save previous drawport of window */ 260e5ab1681SLisandro Dalcin ierr = PetscDrawGetViewPort(draw,&ports->port_xl,&ports->port_yl,&ports->port_xr,&ports->port_yr);CHKERRQ(ierr); 261e5ab1681SLisandro Dalcin 262cf79e978SBarry Smith ierr = PetscMalloc4(n,&xl,n,&xr,n,&yl,n,&yr);CHKERRQ(ierr); 263cf79e978SBarry Smith ports->xr = xr; 264cf79e978SBarry Smith ports->xl = xl; 265cf79e978SBarry Smith ports->yl = yl; 266cf79e978SBarry Smith ports->yr = yr; 267e5ab1681SLisandro Dalcin 268e5ab1681SLisandro Dalcin ierr = PetscDrawSetCoordinates(draw,0.0,0.0,1.0,1.0);CHKERRQ(ierr); 269e5ab1681SLisandro Dalcin ierr = PetscDrawCollectiveBegin(draw);CHKERRQ(ierr); 2705c6c1daeSBarry Smith for (i = 0; i < nx; i++) { 2715c6c1daeSBarry Smith for (j = 0; j < ny; j++) { 272e5ab1681SLisandro Dalcin k = j*nx+i; 2735c6c1daeSBarry Smith 2745c6c1daeSBarry Smith xl[k] = i*hx; 2755c6c1daeSBarry Smith xr[k] = xl[k] + hx; 2765c6c1daeSBarry Smith yl[k] = j*hy; 2775c6c1daeSBarry Smith yr[k] = yl[k] + hy; 2785c6c1daeSBarry Smith 279e5ab1681SLisandro Dalcin if (!rank) { 2805c6c1daeSBarry Smith ierr = PetscDrawLine(draw,xl[k],yl[k],xl[k],yr[k],PETSC_DRAW_BLACK);CHKERRQ(ierr); 2815c6c1daeSBarry Smith ierr = PetscDrawLine(draw,xl[k],yr[k],xr[k],yr[k],PETSC_DRAW_BLACK);CHKERRQ(ierr); 2825c6c1daeSBarry Smith ierr = PetscDrawLine(draw,xr[k],yr[k],xr[k],yl[k],PETSC_DRAW_BLACK);CHKERRQ(ierr); 2835c6c1daeSBarry Smith ierr = PetscDrawLine(draw,xr[k],yl[k],xl[k],yl[k],PETSC_DRAW_BLACK);CHKERRQ(ierr); 284e5ab1681SLisandro Dalcin } 2855c6c1daeSBarry Smith 286e5ab1681SLisandro Dalcin xl[k] += .05*hx; 287e5ab1681SLisandro Dalcin xr[k] -= .05*hx; 288e5ab1681SLisandro Dalcin yl[k] += .05*hy; 289e5ab1681SLisandro Dalcin yr[k] -= .05*hy; 2905c6c1daeSBarry Smith } 2915c6c1daeSBarry Smith } 292e5ab1681SLisandro Dalcin ierr = PetscDrawCollectiveEnd(draw);CHKERRQ(ierr); 293e5ab1681SLisandro Dalcin ierr = PetscDrawFlush(draw);CHKERRQ(ierr); 2945c6c1daeSBarry Smith PetscFunctionReturn(0); 2955c6c1daeSBarry Smith } 2965c6c1daeSBarry Smith 2975c6c1daeSBarry Smith /*@C 2985c6c1daeSBarry Smith PetscDrawViewPortsDestroy - frees a PetscDrawViewPorts object 2995c6c1daeSBarry Smith 3005c6c1daeSBarry Smith Collective on PetscDraw inside PetscDrawViewPorts 3015c6c1daeSBarry Smith 3025c6c1daeSBarry Smith Input Parameter: 3035c6c1daeSBarry Smith . ports - the PetscDrawViewPorts object 3045c6c1daeSBarry Smith 3055c6c1daeSBarry Smith Level: advanced 3065c6c1daeSBarry Smith 3075c6c1daeSBarry Smith .seealso: PetscDrawSplitViewPort(), PetscDrawSetViewPort(), PetscDrawViewPortsSet(), PetscDrawViewPortsCreate() 3085c6c1daeSBarry Smith 3095c6c1daeSBarry Smith @*/ 3105c6c1daeSBarry Smith PetscErrorCode PetscDrawViewPortsDestroy(PetscDrawViewPorts *ports) 3115c6c1daeSBarry Smith { 3125c6c1daeSBarry Smith PetscErrorCode ierr; 3135c6c1daeSBarry Smith 3145c6c1daeSBarry Smith PetscFunctionBegin; 3155c6c1daeSBarry Smith if (!ports) PetscFunctionReturn(0); 3168f69470aSLisandro Dalcin PetscValidPointer(ports,1); 3175c6c1daeSBarry Smith /* reset Drawport of Window back to previous value */ 3185c6c1daeSBarry Smith ierr = PetscDrawSetViewPort(ports->draw,ports->port_xl,ports->port_yl,ports->port_xr,ports->port_yr);CHKERRQ(ierr); 3195c6c1daeSBarry Smith ierr = PetscDrawDestroy(&ports->draw);CHKERRQ(ierr); 320cf79e978SBarry Smith ierr = PetscFree4(ports->xl,ports->xr,ports->yl,ports->yr);CHKERRQ(ierr); 3215c6c1daeSBarry Smith ierr = PetscFree(ports);CHKERRQ(ierr); 3225c6c1daeSBarry Smith PetscFunctionReturn(0); 3235c6c1daeSBarry Smith } 3245c6c1daeSBarry Smith 3255c6c1daeSBarry Smith /*@C 3265c6c1daeSBarry Smith PetscDrawViewPortsSet - sets a draw object to use a particular subport 3275c6c1daeSBarry Smith 3285c6c1daeSBarry Smith Logically Collective on PetscDraw inside PetscDrawViewPorts 3295c6c1daeSBarry Smith 330d8d19677SJose E. Roman Input Parameters: 3315c6c1daeSBarry Smith + ports - the PetscDrawViewPorts object 3325c6c1daeSBarry Smith - port - the port number, from 0 to nports-1 3335c6c1daeSBarry Smith 3345c6c1daeSBarry Smith Level: advanced 3355c6c1daeSBarry Smith 3365c6c1daeSBarry Smith .seealso: PetscDrawSplitViewPort(), PetscDrawSetViewPort(), PetscDrawViewPortsDestroy(), PetscDrawViewPortsCreate() 3375c6c1daeSBarry Smith 3385c6c1daeSBarry Smith @*/ 3395c6c1daeSBarry Smith PetscErrorCode PetscDrawViewPortsSet(PetscDrawViewPorts *ports,PetscInt port) 3405c6c1daeSBarry Smith { 3415c6c1daeSBarry Smith PetscErrorCode ierr; 3425c6c1daeSBarry Smith 3435c6c1daeSBarry Smith PetscFunctionBegin; 3448f69470aSLisandro Dalcin if (!ports) PetscFunctionReturn(0); 34545f3bb6eSLisandro Dalcin PetscValidPointer(ports,1); 346e5ab1681SLisandro Dalcin if (port < 0 || port > ports->nports-1) SETERRQ2(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"Port is out of range requested %d from 0 to %d\n",port,ports->nports-1); 3475c6c1daeSBarry Smith ierr = PetscDrawSetViewPort(ports->draw,ports->xl[port],ports->yl[port],ports->xr[port],ports->yr[port]);CHKERRQ(ierr); 3485c6c1daeSBarry Smith PetscFunctionReturn(0); 3495c6c1daeSBarry Smith } 350