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: 145c6c1daeSBarry Smith + xl,yl,xr,yr - upper right and lower left corners of subwindow 155c6c1daeSBarry Smith These numbers must always be between 0.0 and 1.0. 165c6c1daeSBarry Smith Lower left corner is (0,0). 175c6c1daeSBarry Smith - draw - the drawing context 185c6c1daeSBarry Smith 195c6c1daeSBarry Smith Level: advanced 205c6c1daeSBarry Smith 215c6c1daeSBarry Smith @*/ 225c6c1daeSBarry Smith PetscErrorCode PetscDrawSetViewPort(PetscDraw draw,PetscReal xl,PetscReal yl,PetscReal xr,PetscReal yr) 235c6c1daeSBarry Smith { 245c6c1daeSBarry Smith PetscErrorCode ierr; 255c6c1daeSBarry Smith 265c6c1daeSBarry Smith PetscFunctionBegin; 275c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 2857622a8eSBarry 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); 295c6c1daeSBarry Smith draw->port_xl = xl; draw->port_yl = yl; 305c6c1daeSBarry Smith draw->port_xr = xr; draw->port_yr = yr; 315c6c1daeSBarry Smith if (draw->ops->setviewport) { 325c6c1daeSBarry Smith ierr = (*draw->ops->setviewport)(draw,xl,yl,xr,yr);CHKERRQ(ierr); 335c6c1daeSBarry Smith } 345c6c1daeSBarry Smith PetscFunctionReturn(0); 355c6c1daeSBarry Smith } 365c6c1daeSBarry Smith 375c6c1daeSBarry Smith /*@ 385c6c1daeSBarry Smith PetscDrawGetViewPort - Gets the portion of the window (page) to which draw 395c6c1daeSBarry Smith routines will write. 405c6c1daeSBarry Smith 415c6c1daeSBarry Smith Collective on PetscDraw 425c6c1daeSBarry Smith 435c6c1daeSBarry Smith Input Parameter: 445c6c1daeSBarry Smith . draw - the drawing context 455c6c1daeSBarry Smith 465c6c1daeSBarry Smith Output Parameter: 475c6c1daeSBarry Smith . xl,yl,xr,yr - upper right and lower left corners of subwindow 485c6c1daeSBarry Smith These numbers must always be between 0.0 and 1.0. 495c6c1daeSBarry Smith Lower left corner is (0,0). 505c6c1daeSBarry Smith 515c6c1daeSBarry Smith Level: advanced 525c6c1daeSBarry Smith 535c6c1daeSBarry Smith @*/ 545c6c1daeSBarry Smith PetscErrorCode PetscDrawGetViewPort(PetscDraw draw,PetscReal *xl,PetscReal *yl,PetscReal *xr,PetscReal *yr) 555c6c1daeSBarry Smith { 565c6c1daeSBarry Smith PetscFunctionBegin; 575c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 588f69470aSLisandro Dalcin PetscValidRealPointer(xl,2); 598f69470aSLisandro Dalcin PetscValidRealPointer(yl,3); 608f69470aSLisandro Dalcin PetscValidRealPointer(xr,4); 618f69470aSLisandro Dalcin PetscValidRealPointer(yr,5); 625c6c1daeSBarry Smith *xl = draw->port_xl; 635c6c1daeSBarry Smith *yl = draw->port_yl; 645c6c1daeSBarry Smith *xr = draw->port_xr; 655c6c1daeSBarry Smith *yr = draw->port_yr; 665c6c1daeSBarry Smith PetscFunctionReturn(0); 675c6c1daeSBarry Smith } 685c6c1daeSBarry Smith 695c6c1daeSBarry Smith /*@ 705c6c1daeSBarry Smith PetscDrawSplitViewPort - Splits a window shared by several processes into smaller 715c6c1daeSBarry Smith view ports. One for each process. 725c6c1daeSBarry Smith 735c6c1daeSBarry Smith Collective on PetscDraw 745c6c1daeSBarry Smith 755c6c1daeSBarry Smith Input Parameter: 765c6c1daeSBarry Smith . draw - the drawing context 775c6c1daeSBarry Smith 785c6c1daeSBarry Smith Level: advanced 795c6c1daeSBarry Smith 805c6c1daeSBarry Smith .seealso: PetscDrawDivideViewPort(), PetscDrawSetViewPort() 815c6c1daeSBarry Smith 825c6c1daeSBarry Smith @*/ 835c6c1daeSBarry Smith PetscErrorCode PetscDrawSplitViewPort(PetscDraw draw) 845c6c1daeSBarry Smith { 855c6c1daeSBarry Smith PetscErrorCode ierr; 865c6c1daeSBarry Smith PetscMPIInt rank,size; 87369cc0aeSBarry Smith PetscInt n; 885c6c1daeSBarry Smith PetscBool isnull; 895c6c1daeSBarry Smith PetscReal xl,xr,yl,yr,h; 905c6c1daeSBarry Smith 915c6c1daeSBarry Smith PetscFunctionBegin; 925c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 938f69470aSLisandro Dalcin ierr = PetscDrawIsNull(draw,&isnull);CHKERRQ(ierr); 945c6c1daeSBarry Smith if (isnull) PetscFunctionReturn(0); 95ffc4695bSBarry Smith ierr = MPI_Comm_rank(PetscObjectComm((PetscObject)draw),&rank);CHKERRMPI(ierr); 96ffc4695bSBarry Smith ierr = MPI_Comm_size(PetscObjectComm((PetscObject)draw),&size);CHKERRMPI(ierr); 975c6c1daeSBarry Smith 98369cc0aeSBarry Smith n = (PetscInt)(.1 + PetscSqrtReal((PetscReal)size)); 99a297a907SKarl Rupp while (n*n < size) n++; 1005c6c1daeSBarry Smith 1015c6c1daeSBarry Smith h = 1.0/n; 1025c6c1daeSBarry Smith xl = (rank % n)*h; 1035c6c1daeSBarry Smith xr = xl + h; 1045c6c1daeSBarry Smith yl = (rank / n)*h; 1055c6c1daeSBarry Smith yr = yl + h; 1065c6c1daeSBarry Smith 107e5ab1681SLisandro Dalcin ierr = PetscDrawCollectiveBegin(draw);CHKERRQ(ierr); 1085c6c1daeSBarry Smith ierr = PetscDrawLine(draw,xl,yl,xl,yr,PETSC_DRAW_BLACK);CHKERRQ(ierr); 1095c6c1daeSBarry Smith ierr = PetscDrawLine(draw,xl,yr,xr,yr,PETSC_DRAW_BLACK);CHKERRQ(ierr); 1105c6c1daeSBarry Smith ierr = PetscDrawLine(draw,xr,yr,xr,yl,PETSC_DRAW_BLACK);CHKERRQ(ierr); 1115c6c1daeSBarry Smith ierr = PetscDrawLine(draw,xr,yl,xl,yl,PETSC_DRAW_BLACK);CHKERRQ(ierr); 112e5ab1681SLisandro Dalcin ierr = PetscDrawCollectiveEnd(draw);CHKERRQ(ierr); 1135b399a63SLisandro Dalcin ierr = PetscDrawFlush(draw);CHKERRQ(ierr); 1145c6c1daeSBarry Smith 115e5ab1681SLisandro Dalcin draw->port_xl = xl + .05*h; 116e5ab1681SLisandro Dalcin draw->port_xr = xr - .05*h; 117e5ab1681SLisandro Dalcin draw->port_yl = yl + .05*h; 118e5ab1681SLisandro Dalcin draw->port_yr = yr - .05*h; 1195c6c1daeSBarry Smith 1205c6c1daeSBarry Smith if (draw->ops->setviewport) { 1215c6c1daeSBarry Smith ierr = (*draw->ops->setviewport)(draw,xl,yl,xr,yr);CHKERRQ(ierr); 1225c6c1daeSBarry Smith } 1235c6c1daeSBarry Smith PetscFunctionReturn(0); 1245c6c1daeSBarry Smith } 1255c6c1daeSBarry Smith 1265c6c1daeSBarry Smith /*@C 127cf79e978SBarry Smith PetscDrawViewPortsCreate - Splits a window into smaller view ports. Each processor shares all the viewports. 1285c6c1daeSBarry Smith 1295c6c1daeSBarry Smith Collective on PetscDraw 1305c6c1daeSBarry Smith 1315c6c1daeSBarry Smith Input Parameters: 1325c6c1daeSBarry Smith + draw - the drawing context 1335c6c1daeSBarry Smith - nports - the number of ports 1345c6c1daeSBarry Smith 1355c6c1daeSBarry Smith Output Parameter: 1365c6c1daeSBarry Smith . ports - a PetscDrawViewPorts context (C structure) 1375c6c1daeSBarry Smith 138cf79e978SBarry Smith Options Database: 1398e5aa403SBarry Smith . -draw_ports - display multiple fields in the same window with PetscDrawPorts instead of in separate windows 140cf79e978SBarry Smith 1415c6c1daeSBarry Smith Level: advanced 1425c6c1daeSBarry Smith 1435c6c1daeSBarry Smith .seealso: PetscDrawSplitViewPort(), PetscDrawSetViewPort(), PetscDrawViewPortsSet(), PetscDrawViewPortsDestroy() 1445c6c1daeSBarry Smith 1455c6c1daeSBarry Smith @*/ 146e5ab1681SLisandro Dalcin PetscErrorCode PetscDrawViewPortsCreate(PetscDraw draw,PetscInt nports,PetscDrawViewPorts **newports) 1475c6c1daeSBarry Smith { 148e5ab1681SLisandro Dalcin PetscDrawViewPorts *ports; 1495c6c1daeSBarry Smith PetscInt i,n; 1505c6c1daeSBarry Smith PetscBool isnull; 151e5ab1681SLisandro Dalcin PetscMPIInt rank; 1525c6c1daeSBarry Smith PetscReal *xl,*xr,*yl,*yr,h; 153e5ab1681SLisandro Dalcin PetscErrorCode ierr; 1545c6c1daeSBarry Smith 1555c6c1daeSBarry Smith PetscFunctionBegin; 1565c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 157e5ab1681SLisandro Dalcin if (nports < 1) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE, "Number of divisions must be positive: %d", nports); 158e5ab1681SLisandro Dalcin PetscValidPointer(newports,3); 159e118a51fSLisandro Dalcin ierr = PetscDrawIsNull(draw,&isnull);CHKERRQ(ierr); 160e5ab1681SLisandro Dalcin if (isnull) {*newports = NULL; PetscFunctionReturn(0);} 161ffc4695bSBarry Smith ierr = MPI_Comm_rank(PetscObjectComm((PetscObject)draw),&rank);CHKERRMPI(ierr); 1625c6c1daeSBarry Smith 163e5ab1681SLisandro Dalcin ierr = PetscNew(&ports);CHKERRQ(ierr); *newports = ports; 164e5ab1681SLisandro Dalcin ports->draw = draw; 165e5ab1681SLisandro Dalcin ports->nports = nports; 1665c6c1daeSBarry Smith ierr = PetscObjectReference((PetscObject)draw);CHKERRQ(ierr); 167e5ab1681SLisandro Dalcin /* save previous drawport of window */ 168e5ab1681SLisandro Dalcin ierr = PetscDrawGetViewPort(draw,&ports->port_xl,&ports->port_yl,&ports->port_xr,&ports->port_yr);CHKERRQ(ierr); 1695c6c1daeSBarry Smith 170369cc0aeSBarry Smith n = (PetscInt)(.1 + PetscSqrtReal((PetscReal)nports)); 171a297a907SKarl Rupp while (n*n < nports) n++; 1725c6c1daeSBarry Smith h = 1.0/n; 1735c6c1daeSBarry Smith 174cf79e978SBarry Smith ierr = PetscMalloc4(n*n,&xl,n*n,&xr,n*n,&yl,n*n,&yr);CHKERRQ(ierr); 175cf79e978SBarry Smith ports->xl = xl; 176cf79e978SBarry Smith ports->xr = xr; 177cf79e978SBarry Smith ports->yl = yl; 178cf79e978SBarry Smith ports->yr = yr; 179e5ab1681SLisandro Dalcin 180e5ab1681SLisandro Dalcin ierr = PetscDrawSetCoordinates(draw,0.0,0.0,1.0,1.0);CHKERRQ(ierr); 181e5ab1681SLisandro Dalcin ierr = PetscDrawCollectiveBegin(draw);CHKERRQ(ierr); 1825c6c1daeSBarry Smith for (i=0; i<n*n; i++) { 1835c6c1daeSBarry Smith xl[i] = (i % n)*h; 1845c6c1daeSBarry Smith xr[i] = xl[i] + h; 1855c6c1daeSBarry Smith yl[i] = (i / n)*h; 1865c6c1daeSBarry Smith yr[i] = yl[i] + h; 1875c6c1daeSBarry Smith 188e5ab1681SLisandro Dalcin if (!rank) { 1895c6c1daeSBarry Smith ierr = PetscDrawLine(draw,xl[i],yl[i],xl[i],yr[i],PETSC_DRAW_BLACK);CHKERRQ(ierr); 1905c6c1daeSBarry Smith ierr = PetscDrawLine(draw,xl[i],yr[i],xr[i],yr[i],PETSC_DRAW_BLACK);CHKERRQ(ierr); 1915c6c1daeSBarry Smith ierr = PetscDrawLine(draw,xr[i],yr[i],xr[i],yl[i],PETSC_DRAW_BLACK);CHKERRQ(ierr); 1925c6c1daeSBarry Smith ierr = PetscDrawLine(draw,xr[i],yl[i],xl[i],yl[i],PETSC_DRAW_BLACK);CHKERRQ(ierr); 1935c6c1daeSBarry Smith } 194e5ab1681SLisandro Dalcin 195e5ab1681SLisandro Dalcin xl[i] += .05*h; 196e5ab1681SLisandro Dalcin xr[i] -= .05*h; 197e5ab1681SLisandro Dalcin yl[i] += .05*h; 198e5ab1681SLisandro Dalcin yr[i] -= .05*h; 199e5ab1681SLisandro Dalcin } 200e5ab1681SLisandro Dalcin ierr = PetscDrawCollectiveEnd(draw);CHKERRQ(ierr); 201e5ab1681SLisandro Dalcin ierr = PetscDrawFlush(draw);CHKERRQ(ierr); 2025c6c1daeSBarry Smith PetscFunctionReturn(0); 2035c6c1daeSBarry Smith } 2045c6c1daeSBarry Smith 2055c6c1daeSBarry Smith /*@C 2065c6c1daeSBarry Smith PetscDrawViewPortsCreateRect - Splits a window into smaller 2075c6c1daeSBarry Smith view ports. Each processor shares all the viewports. The number 2085c6c1daeSBarry Smith of views in the x- and y-directions is specified. 2095c6c1daeSBarry Smith 2105c6c1daeSBarry Smith Collective on PetscDraw 2115c6c1daeSBarry Smith 2125c6c1daeSBarry Smith Input Parameters: 2135c6c1daeSBarry Smith + draw - the drawing context 2145c6c1daeSBarry Smith . nx - the number of x divisions 2155c6c1daeSBarry Smith - ny - the number of y divisions 2165c6c1daeSBarry Smith 2175c6c1daeSBarry Smith Output Parameter: 2185c6c1daeSBarry Smith . ports - a PetscDrawViewPorts context (C structure) 2195c6c1daeSBarry Smith 2205c6c1daeSBarry Smith Level: advanced 2215c6c1daeSBarry Smith 2225c6c1daeSBarry Smith .seealso: PetscDrawSplitViewPort(), PetscDrawSetViewPort(), PetscDrawViewPortsSet(), PetscDrawViewPortsDestroy() 2235c6c1daeSBarry Smith 2245c6c1daeSBarry Smith @*/ 225e5ab1681SLisandro Dalcin PetscErrorCode PetscDrawViewPortsCreateRect(PetscDraw draw,PetscInt nx,PetscInt ny,PetscDrawViewPorts **newports) 2265c6c1daeSBarry Smith { 227e5ab1681SLisandro Dalcin PetscDrawViewPorts *ports; 2285c6c1daeSBarry Smith PetscReal *xl,*xr,*yl,*yr,hx,hy; 229e5ab1681SLisandro Dalcin PetscInt i,j,k,n; 2305c6c1daeSBarry Smith PetscBool isnull; 231e5ab1681SLisandro Dalcin PetscMPIInt rank; 2325c6c1daeSBarry Smith PetscErrorCode ierr; 2335c6c1daeSBarry Smith 2345c6c1daeSBarry Smith PetscFunctionBegin; 2355c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 2365c6c1daeSBarry 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); 237064a246eSJacob Faibussowitsch PetscValidPointer(newports,4); 238e118a51fSLisandro Dalcin ierr = PetscDrawIsNull(draw,&isnull);CHKERRQ(ierr); 239e5ab1681SLisandro Dalcin if (isnull) {*newports = NULL; PetscFunctionReturn(0);} 240ffc4695bSBarry Smith ierr = MPI_Comm_rank(PetscObjectComm((PetscObject)draw),&rank);CHKERRMPI(ierr); 241e118a51fSLisandro Dalcin 2425c6c1daeSBarry Smith n = nx*ny; 2435c6c1daeSBarry Smith hx = 1.0/nx; 2445c6c1daeSBarry Smith hy = 1.0/ny; 245e5ab1681SLisandro Dalcin ierr = PetscNew(&ports);CHKERRQ(ierr); *newports = ports; 246e5ab1681SLisandro Dalcin ports->draw = draw; 247e5ab1681SLisandro Dalcin ports->nports = n; 2485c6c1daeSBarry Smith ierr = PetscObjectReference((PetscObject) draw);CHKERRQ(ierr); 249e5ab1681SLisandro Dalcin /* save previous drawport of window */ 250e5ab1681SLisandro Dalcin ierr = PetscDrawGetViewPort(draw,&ports->port_xl,&ports->port_yl,&ports->port_xr,&ports->port_yr);CHKERRQ(ierr); 251e5ab1681SLisandro Dalcin 252cf79e978SBarry Smith ierr = PetscMalloc4(n,&xl,n,&xr,n,&yl,n,&yr);CHKERRQ(ierr); 253cf79e978SBarry Smith ports->xr = xr; 254cf79e978SBarry Smith ports->xl = xl; 255cf79e978SBarry Smith ports->yl = yl; 256cf79e978SBarry Smith ports->yr = yr; 257e5ab1681SLisandro Dalcin 258e5ab1681SLisandro Dalcin ierr = PetscDrawSetCoordinates(draw,0.0,0.0,1.0,1.0);CHKERRQ(ierr); 259e5ab1681SLisandro Dalcin ierr = PetscDrawCollectiveBegin(draw);CHKERRQ(ierr); 2605c6c1daeSBarry Smith for (i = 0; i < nx; i++) { 2615c6c1daeSBarry Smith for (j = 0; j < ny; j++) { 262e5ab1681SLisandro Dalcin k = j*nx+i; 2635c6c1daeSBarry Smith 2645c6c1daeSBarry Smith xl[k] = i*hx; 2655c6c1daeSBarry Smith xr[k] = xl[k] + hx; 2665c6c1daeSBarry Smith yl[k] = j*hy; 2675c6c1daeSBarry Smith yr[k] = yl[k] + hy; 2685c6c1daeSBarry Smith 269e5ab1681SLisandro Dalcin if (!rank) { 2705c6c1daeSBarry Smith ierr = PetscDrawLine(draw,xl[k],yl[k],xl[k],yr[k],PETSC_DRAW_BLACK);CHKERRQ(ierr); 2715c6c1daeSBarry Smith ierr = PetscDrawLine(draw,xl[k],yr[k],xr[k],yr[k],PETSC_DRAW_BLACK);CHKERRQ(ierr); 2725c6c1daeSBarry Smith ierr = PetscDrawLine(draw,xr[k],yr[k],xr[k],yl[k],PETSC_DRAW_BLACK);CHKERRQ(ierr); 2735c6c1daeSBarry Smith ierr = PetscDrawLine(draw,xr[k],yl[k],xl[k],yl[k],PETSC_DRAW_BLACK);CHKERRQ(ierr); 274e5ab1681SLisandro Dalcin } 2755c6c1daeSBarry Smith 276e5ab1681SLisandro Dalcin xl[k] += .05*hx; 277e5ab1681SLisandro Dalcin xr[k] -= .05*hx; 278e5ab1681SLisandro Dalcin yl[k] += .05*hy; 279e5ab1681SLisandro Dalcin yr[k] -= .05*hy; 2805c6c1daeSBarry Smith } 2815c6c1daeSBarry Smith } 282e5ab1681SLisandro Dalcin ierr = PetscDrawCollectiveEnd(draw);CHKERRQ(ierr); 283e5ab1681SLisandro Dalcin ierr = PetscDrawFlush(draw);CHKERRQ(ierr); 2845c6c1daeSBarry Smith PetscFunctionReturn(0); 2855c6c1daeSBarry Smith } 2865c6c1daeSBarry Smith 2875c6c1daeSBarry Smith /*@C 2885c6c1daeSBarry Smith PetscDrawViewPortsDestroy - frees a PetscDrawViewPorts object 2895c6c1daeSBarry Smith 2905c6c1daeSBarry Smith Collective on PetscDraw inside PetscDrawViewPorts 2915c6c1daeSBarry Smith 2925c6c1daeSBarry Smith Input Parameter: 2935c6c1daeSBarry Smith . ports - the PetscDrawViewPorts object 2945c6c1daeSBarry Smith 2955c6c1daeSBarry Smith Level: advanced 2965c6c1daeSBarry Smith 2975c6c1daeSBarry Smith .seealso: PetscDrawSplitViewPort(), PetscDrawSetViewPort(), PetscDrawViewPortsSet(), PetscDrawViewPortsCreate() 2985c6c1daeSBarry Smith 2995c6c1daeSBarry Smith @*/ 3005c6c1daeSBarry Smith PetscErrorCode PetscDrawViewPortsDestroy(PetscDrawViewPorts *ports) 3015c6c1daeSBarry Smith { 3025c6c1daeSBarry Smith PetscErrorCode ierr; 3035c6c1daeSBarry Smith 3045c6c1daeSBarry Smith PetscFunctionBegin; 3055c6c1daeSBarry Smith if (!ports) PetscFunctionReturn(0); 3068f69470aSLisandro Dalcin PetscValidPointer(ports,1); 3075c6c1daeSBarry Smith /* reset Drawport of Window back to previous value */ 3085c6c1daeSBarry Smith ierr = PetscDrawSetViewPort(ports->draw,ports->port_xl,ports->port_yl,ports->port_xr,ports->port_yr);CHKERRQ(ierr); 3095c6c1daeSBarry Smith ierr = PetscDrawDestroy(&ports->draw);CHKERRQ(ierr); 310cf79e978SBarry Smith ierr = PetscFree4(ports->xl,ports->xr,ports->yl,ports->yr);CHKERRQ(ierr); 3115c6c1daeSBarry Smith ierr = PetscFree(ports);CHKERRQ(ierr); 3125c6c1daeSBarry Smith PetscFunctionReturn(0); 3135c6c1daeSBarry Smith } 3145c6c1daeSBarry Smith 3155c6c1daeSBarry Smith /*@C 3165c6c1daeSBarry Smith PetscDrawViewPortsSet - sets a draw object to use a particular subport 3175c6c1daeSBarry Smith 3185c6c1daeSBarry Smith Logically Collective on PetscDraw inside PetscDrawViewPorts 3195c6c1daeSBarry Smith 320*d8d19677SJose E. Roman Input Parameters: 3215c6c1daeSBarry Smith + ports - the PetscDrawViewPorts object 3225c6c1daeSBarry Smith - port - the port number, from 0 to nports-1 3235c6c1daeSBarry Smith 3245c6c1daeSBarry Smith Level: advanced 3255c6c1daeSBarry Smith 3265c6c1daeSBarry Smith .seealso: PetscDrawSplitViewPort(), PetscDrawSetViewPort(), PetscDrawViewPortsDestroy(), PetscDrawViewPortsCreate() 3275c6c1daeSBarry Smith 3285c6c1daeSBarry Smith @*/ 3295c6c1daeSBarry Smith PetscErrorCode PetscDrawViewPortsSet(PetscDrawViewPorts *ports,PetscInt port) 3305c6c1daeSBarry Smith { 3315c6c1daeSBarry Smith PetscErrorCode ierr; 3325c6c1daeSBarry Smith 3335c6c1daeSBarry Smith PetscFunctionBegin; 3348f69470aSLisandro Dalcin if (!ports) PetscFunctionReturn(0); 33545f3bb6eSLisandro Dalcin PetscValidPointer(ports,1); 336e5ab1681SLisandro 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); 3375c6c1daeSBarry Smith ierr = PetscDrawSetViewPort(ports->draw,ports->xl[port],ports->yl[port],ports->xr[port],ports->yr[port]);CHKERRQ(ierr); 3385c6c1daeSBarry Smith PetscFunctionReturn(0); 3395c6c1daeSBarry Smith } 340