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 PetscFunctionBegin; 305c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 312c71b3e2SJacob Faibussowitsch PetscCheck(xl >= 0.0 && xr <= 1.0 && yl >= 0.0 && yr <= 1.0 && xr > xl && yr > yl,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); 325c6c1daeSBarry Smith draw->port_xl = xl; draw->port_yl = yl; 335c6c1daeSBarry Smith draw->port_xr = xr; draw->port_yr = yr; 34*dbbe0bcdSBarry Smith PetscTryTypeMethod(draw,setviewport,xl,yl,xr,yr); 355c6c1daeSBarry Smith PetscFunctionReturn(0); 365c6c1daeSBarry Smith } 375c6c1daeSBarry Smith 385c6c1daeSBarry Smith /*@ 395c6c1daeSBarry Smith PetscDrawGetViewPort - Gets the portion of the window (page) to which draw 405c6c1daeSBarry Smith routines will write. 415c6c1daeSBarry Smith 425c6c1daeSBarry Smith Collective on PetscDraw 435c6c1daeSBarry Smith 445c6c1daeSBarry Smith Input Parameter: 455c6c1daeSBarry Smith . draw - the drawing context 465c6c1daeSBarry Smith 4797bb3fdcSJose E. Roman Output Parameters: 486b867d5aSJose E. Roman + xl - the horizontal coordinate of the lower left corner of the subwindow. 496b867d5aSJose E. Roman . yl - the vertical coordinate of the lower left corner of the subwindow. 506b867d5aSJose E. Roman . xr - the horizontal coordinate of the upper right corner of the subwindow. 5197bb3fdcSJose E. Roman - yr - the vertical coordinate of the upper right corner of the subwindow. 526b867d5aSJose E. Roman 536b867d5aSJose E. Roman Notes: 545c6c1daeSBarry Smith These numbers must always be between 0.0 and 1.0. 555c6c1daeSBarry Smith Lower left corner is (0,0). 565c6c1daeSBarry Smith 575c6c1daeSBarry Smith Level: advanced 585c6c1daeSBarry Smith 595c6c1daeSBarry Smith @*/ 605c6c1daeSBarry Smith PetscErrorCode PetscDrawGetViewPort(PetscDraw draw,PetscReal *xl,PetscReal *yl,PetscReal *xr,PetscReal *yr) 615c6c1daeSBarry Smith { 625c6c1daeSBarry Smith PetscFunctionBegin; 635c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 648f69470aSLisandro Dalcin PetscValidRealPointer(xl,2); 658f69470aSLisandro Dalcin PetscValidRealPointer(yl,3); 668f69470aSLisandro Dalcin PetscValidRealPointer(xr,4); 678f69470aSLisandro Dalcin PetscValidRealPointer(yr,5); 685c6c1daeSBarry Smith *xl = draw->port_xl; 695c6c1daeSBarry Smith *yl = draw->port_yl; 705c6c1daeSBarry Smith *xr = draw->port_xr; 715c6c1daeSBarry Smith *yr = draw->port_yr; 725c6c1daeSBarry Smith PetscFunctionReturn(0); 735c6c1daeSBarry Smith } 745c6c1daeSBarry Smith 755c6c1daeSBarry Smith /*@ 765c6c1daeSBarry Smith PetscDrawSplitViewPort - Splits a window shared by several processes into smaller 775c6c1daeSBarry Smith view ports. One for each process. 785c6c1daeSBarry Smith 795c6c1daeSBarry Smith Collective on PetscDraw 805c6c1daeSBarry Smith 815c6c1daeSBarry Smith Input Parameter: 825c6c1daeSBarry Smith . draw - the drawing context 835c6c1daeSBarry Smith 845c6c1daeSBarry Smith Level: advanced 855c6c1daeSBarry Smith 86db781477SPatrick Sanan .seealso: `PetscDrawDivideViewPort()`, `PetscDrawSetViewPort()` 875c6c1daeSBarry Smith 885c6c1daeSBarry Smith @*/ 895c6c1daeSBarry Smith PetscErrorCode PetscDrawSplitViewPort(PetscDraw draw) 905c6c1daeSBarry Smith { 915c6c1daeSBarry Smith PetscMPIInt rank,size; 92369cc0aeSBarry Smith PetscInt n; 935c6c1daeSBarry Smith PetscBool isnull; 945c6c1daeSBarry Smith PetscReal xl,xr,yl,yr,h; 955c6c1daeSBarry Smith 965c6c1daeSBarry Smith PetscFunctionBegin; 975c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 989566063dSJacob Faibussowitsch PetscCall(PetscDrawIsNull(draw,&isnull)); 995c6c1daeSBarry Smith if (isnull) PetscFunctionReturn(0); 1009566063dSJacob Faibussowitsch PetscCallMPI(MPI_Comm_rank(PetscObjectComm((PetscObject)draw),&rank)); 1019566063dSJacob Faibussowitsch PetscCallMPI(MPI_Comm_size(PetscObjectComm((PetscObject)draw),&size)); 1025c6c1daeSBarry Smith 103369cc0aeSBarry Smith n = (PetscInt)(.1 + PetscSqrtReal((PetscReal)size)); 104a297a907SKarl Rupp while (n*n < size) n++; 1055c6c1daeSBarry Smith 1065c6c1daeSBarry Smith h = 1.0/n; 1075c6c1daeSBarry Smith xl = (rank % n)*h; 1085c6c1daeSBarry Smith xr = xl + h; 1095c6c1daeSBarry Smith yl = (rank / n)*h; 1105c6c1daeSBarry Smith yr = yl + h; 1115c6c1daeSBarry Smith 112d0609cedSBarry Smith PetscDrawCollectiveBegin(draw); 1139566063dSJacob Faibussowitsch PetscCall(PetscDrawLine(draw,xl,yl,xl,yr,PETSC_DRAW_BLACK)); 1149566063dSJacob Faibussowitsch PetscCall(PetscDrawLine(draw,xl,yr,xr,yr,PETSC_DRAW_BLACK)); 1159566063dSJacob Faibussowitsch PetscCall(PetscDrawLine(draw,xr,yr,xr,yl,PETSC_DRAW_BLACK)); 1169566063dSJacob Faibussowitsch PetscCall(PetscDrawLine(draw,xr,yl,xl,yl,PETSC_DRAW_BLACK)); 117d0609cedSBarry Smith PetscDrawCollectiveEnd(draw); 1189566063dSJacob Faibussowitsch PetscCall(PetscDrawFlush(draw)); 1195c6c1daeSBarry Smith 120e5ab1681SLisandro Dalcin draw->port_xl = xl + .05*h; 121e5ab1681SLisandro Dalcin draw->port_xr = xr - .05*h; 122e5ab1681SLisandro Dalcin draw->port_yl = yl + .05*h; 123e5ab1681SLisandro Dalcin draw->port_yr = yr - .05*h; 1245c6c1daeSBarry Smith 125*dbbe0bcdSBarry Smith PetscTryTypeMethod(draw,setviewport,xl,yl,xr,yr); 1265c6c1daeSBarry Smith PetscFunctionReturn(0); 1275c6c1daeSBarry Smith } 1285c6c1daeSBarry Smith 1295c6c1daeSBarry Smith /*@C 130cf79e978SBarry Smith PetscDrawViewPortsCreate - Splits a window into smaller view ports. Each processor shares all the viewports. 1315c6c1daeSBarry Smith 1325c6c1daeSBarry Smith Collective on PetscDraw 1335c6c1daeSBarry Smith 1345c6c1daeSBarry Smith Input Parameters: 1355c6c1daeSBarry Smith + draw - the drawing context 1365c6c1daeSBarry Smith - nports - the number of ports 1375c6c1daeSBarry Smith 1385c6c1daeSBarry Smith Output Parameter: 1395c6c1daeSBarry Smith . ports - a PetscDrawViewPorts context (C structure) 1405c6c1daeSBarry Smith 141cf79e978SBarry Smith Options Database: 142e1dfdf8eSBarry Smith . -draw_ports - display multiple fields in the same window with PetscDrawPorts() instead of in separate windows 143cf79e978SBarry Smith 1445c6c1daeSBarry Smith Level: advanced 1455c6c1daeSBarry Smith 146db781477SPatrick Sanan .seealso: `PetscDrawSplitViewPort()`, `PetscDrawSetViewPort()`, `PetscDrawViewPortsSet()`, `PetscDrawViewPortsDestroy()` 1475c6c1daeSBarry Smith 1485c6c1daeSBarry Smith @*/ 149e5ab1681SLisandro Dalcin PetscErrorCode PetscDrawViewPortsCreate(PetscDraw draw,PetscInt nports,PetscDrawViewPorts **newports) 1505c6c1daeSBarry Smith { 151e5ab1681SLisandro Dalcin PetscDrawViewPorts *ports; 1525c6c1daeSBarry Smith PetscInt i,n; 1535c6c1daeSBarry Smith PetscBool isnull; 154e5ab1681SLisandro Dalcin PetscMPIInt rank; 1555c6c1daeSBarry Smith PetscReal *xl,*xr,*yl,*yr,h; 1565c6c1daeSBarry Smith 1575c6c1daeSBarry Smith PetscFunctionBegin; 1585c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 1592c71b3e2SJacob Faibussowitsch PetscCheck(nports >= 1,PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE, "Number of divisions must be positive: %" PetscInt_FMT, nports); 160e5ab1681SLisandro Dalcin PetscValidPointer(newports,3); 1619566063dSJacob Faibussowitsch PetscCall(PetscDrawIsNull(draw,&isnull)); 162e5ab1681SLisandro Dalcin if (isnull) {*newports = NULL; PetscFunctionReturn(0);} 1639566063dSJacob Faibussowitsch PetscCallMPI(MPI_Comm_rank(PetscObjectComm((PetscObject)draw),&rank)); 1645c6c1daeSBarry Smith 1659566063dSJacob Faibussowitsch PetscCall(PetscNew(&ports)); *newports = ports; 166e5ab1681SLisandro Dalcin ports->draw = draw; 167e5ab1681SLisandro Dalcin ports->nports = nports; 1689566063dSJacob Faibussowitsch PetscCall(PetscObjectReference((PetscObject)draw)); 169e5ab1681SLisandro Dalcin /* save previous drawport of window */ 1709566063dSJacob Faibussowitsch PetscCall(PetscDrawGetViewPort(draw,&ports->port_xl,&ports->port_yl,&ports->port_xr,&ports->port_yr)); 1715c6c1daeSBarry Smith 172369cc0aeSBarry Smith n = (PetscInt)(.1 + PetscSqrtReal((PetscReal)nports)); 173a297a907SKarl Rupp while (n*n < nports) n++; 1745c6c1daeSBarry Smith h = 1.0/n; 1755c6c1daeSBarry Smith 1769566063dSJacob Faibussowitsch PetscCall(PetscMalloc4(n*n,&xl,n*n,&xr,n*n,&yl,n*n,&yr)); 177cf79e978SBarry Smith ports->xl = xl; 178cf79e978SBarry Smith ports->xr = xr; 179cf79e978SBarry Smith ports->yl = yl; 180cf79e978SBarry Smith ports->yr = yr; 181e5ab1681SLisandro Dalcin 1829566063dSJacob Faibussowitsch PetscCall(PetscDrawSetCoordinates(draw,0.0,0.0,1.0,1.0)); 183d0609cedSBarry Smith PetscDrawCollectiveBegin(draw); 1845c6c1daeSBarry Smith for (i=0; i<n*n; i++) { 1855c6c1daeSBarry Smith xl[i] = (i % n)*h; 1865c6c1daeSBarry Smith xr[i] = xl[i] + h; 1875c6c1daeSBarry Smith yl[i] = (i / n)*h; 1885c6c1daeSBarry Smith yr[i] = yl[i] + h; 1895c6c1daeSBarry Smith 190dd400576SPatrick Sanan if (rank == 0) { 1919566063dSJacob Faibussowitsch PetscCall(PetscDrawLine(draw,xl[i],yl[i],xl[i],yr[i],PETSC_DRAW_BLACK)); 1929566063dSJacob Faibussowitsch PetscCall(PetscDrawLine(draw,xl[i],yr[i],xr[i],yr[i],PETSC_DRAW_BLACK)); 1939566063dSJacob Faibussowitsch PetscCall(PetscDrawLine(draw,xr[i],yr[i],xr[i],yl[i],PETSC_DRAW_BLACK)); 1949566063dSJacob Faibussowitsch PetscCall(PetscDrawLine(draw,xr[i],yl[i],xl[i],yl[i],PETSC_DRAW_BLACK)); 1955c6c1daeSBarry Smith } 196e5ab1681SLisandro Dalcin 197e5ab1681SLisandro Dalcin xl[i] += .05*h; 198e5ab1681SLisandro Dalcin xr[i] -= .05*h; 199e5ab1681SLisandro Dalcin yl[i] += .05*h; 200e5ab1681SLisandro Dalcin yr[i] -= .05*h; 201e5ab1681SLisandro Dalcin } 202d0609cedSBarry Smith PetscDrawCollectiveEnd(draw); 2039566063dSJacob Faibussowitsch PetscCall(PetscDrawFlush(draw)); 2045c6c1daeSBarry Smith PetscFunctionReturn(0); 2055c6c1daeSBarry Smith } 2065c6c1daeSBarry Smith 2075c6c1daeSBarry Smith /*@C 2085c6c1daeSBarry Smith PetscDrawViewPortsCreateRect - Splits a window into smaller 2095c6c1daeSBarry Smith view ports. Each processor shares all the viewports. The number 2105c6c1daeSBarry Smith of views in the x- and y-directions is specified. 2115c6c1daeSBarry Smith 2125c6c1daeSBarry Smith Collective on PetscDraw 2135c6c1daeSBarry Smith 2145c6c1daeSBarry Smith Input Parameters: 2155c6c1daeSBarry Smith + draw - the drawing context 2165c6c1daeSBarry Smith . nx - the number of x divisions 2175c6c1daeSBarry Smith - ny - the number of y divisions 2185c6c1daeSBarry Smith 2195c6c1daeSBarry Smith Output Parameter: 2205c6c1daeSBarry Smith . ports - a PetscDrawViewPorts context (C structure) 2215c6c1daeSBarry Smith 2225c6c1daeSBarry Smith Level: advanced 2235c6c1daeSBarry Smith 224db781477SPatrick Sanan .seealso: `PetscDrawSplitViewPort()`, `PetscDrawSetViewPort()`, `PetscDrawViewPortsSet()`, `PetscDrawViewPortsDestroy()` 2255c6c1daeSBarry Smith 2265c6c1daeSBarry Smith @*/ 227e5ab1681SLisandro Dalcin PetscErrorCode PetscDrawViewPortsCreateRect(PetscDraw draw,PetscInt nx,PetscInt ny,PetscDrawViewPorts **newports) 2285c6c1daeSBarry Smith { 229e5ab1681SLisandro Dalcin PetscDrawViewPorts *ports; 2305c6c1daeSBarry Smith PetscReal *xl,*xr,*yl,*yr,hx,hy; 231e5ab1681SLisandro Dalcin PetscInt i,j,k,n; 2325c6c1daeSBarry Smith PetscBool isnull; 233e5ab1681SLisandro Dalcin PetscMPIInt rank; 2345c6c1daeSBarry Smith 2355c6c1daeSBarry Smith PetscFunctionBegin; 2365c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 2372c71b3e2SJacob Faibussowitsch PetscCheck(nx >= 1 && ny >= 1,PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE, "Number of divisions must be positive: %" PetscInt_FMT " x %" PetscInt_FMT, nx, ny); 238064a246eSJacob Faibussowitsch PetscValidPointer(newports,4); 2399566063dSJacob Faibussowitsch PetscCall(PetscDrawIsNull(draw,&isnull)); 240e5ab1681SLisandro Dalcin if (isnull) {*newports = NULL; PetscFunctionReturn(0);} 2419566063dSJacob Faibussowitsch PetscCallMPI(MPI_Comm_rank(PetscObjectComm((PetscObject)draw),&rank)); 242e118a51fSLisandro Dalcin 2435c6c1daeSBarry Smith n = nx*ny; 2445c6c1daeSBarry Smith hx = 1.0/nx; 2455c6c1daeSBarry Smith hy = 1.0/ny; 2469566063dSJacob Faibussowitsch PetscCall(PetscNew(&ports)); *newports = ports; 247e5ab1681SLisandro Dalcin ports->draw = draw; 248e5ab1681SLisandro Dalcin ports->nports = n; 2499566063dSJacob Faibussowitsch PetscCall(PetscObjectReference((PetscObject) draw)); 250e5ab1681SLisandro Dalcin /* save previous drawport of window */ 2519566063dSJacob Faibussowitsch PetscCall(PetscDrawGetViewPort(draw,&ports->port_xl,&ports->port_yl,&ports->port_xr,&ports->port_yr)); 252e5ab1681SLisandro Dalcin 2539566063dSJacob Faibussowitsch PetscCall(PetscMalloc4(n,&xl,n,&xr,n,&yl,n,&yr)); 254cf79e978SBarry Smith ports->xr = xr; 255cf79e978SBarry Smith ports->xl = xl; 256cf79e978SBarry Smith ports->yl = yl; 257cf79e978SBarry Smith ports->yr = yr; 258e5ab1681SLisandro Dalcin 2599566063dSJacob Faibussowitsch PetscCall(PetscDrawSetCoordinates(draw,0.0,0.0,1.0,1.0)); 260d0609cedSBarry Smith PetscDrawCollectiveBegin(draw); 2615c6c1daeSBarry Smith for (i = 0; i < nx; i++) { 2625c6c1daeSBarry Smith for (j = 0; j < ny; j++) { 263e5ab1681SLisandro Dalcin k = j*nx+i; 2645c6c1daeSBarry Smith 2655c6c1daeSBarry Smith xl[k] = i*hx; 2665c6c1daeSBarry Smith xr[k] = xl[k] + hx; 2675c6c1daeSBarry Smith yl[k] = j*hy; 2685c6c1daeSBarry Smith yr[k] = yl[k] + hy; 2695c6c1daeSBarry Smith 270dd400576SPatrick Sanan if (rank == 0) { 2719566063dSJacob Faibussowitsch PetscCall(PetscDrawLine(draw,xl[k],yl[k],xl[k],yr[k],PETSC_DRAW_BLACK)); 2729566063dSJacob Faibussowitsch PetscCall(PetscDrawLine(draw,xl[k],yr[k],xr[k],yr[k],PETSC_DRAW_BLACK)); 2739566063dSJacob Faibussowitsch PetscCall(PetscDrawLine(draw,xr[k],yr[k],xr[k],yl[k],PETSC_DRAW_BLACK)); 2749566063dSJacob Faibussowitsch PetscCall(PetscDrawLine(draw,xr[k],yl[k],xl[k],yl[k],PETSC_DRAW_BLACK)); 275e5ab1681SLisandro Dalcin } 2765c6c1daeSBarry Smith 277e5ab1681SLisandro Dalcin xl[k] += .05*hx; 278e5ab1681SLisandro Dalcin xr[k] -= .05*hx; 279e5ab1681SLisandro Dalcin yl[k] += .05*hy; 280e5ab1681SLisandro Dalcin yr[k] -= .05*hy; 2815c6c1daeSBarry Smith } 2825c6c1daeSBarry Smith } 283d0609cedSBarry Smith PetscDrawCollectiveEnd(draw); 2849566063dSJacob Faibussowitsch PetscCall(PetscDrawFlush(draw)); 2855c6c1daeSBarry Smith PetscFunctionReturn(0); 2865c6c1daeSBarry Smith } 2875c6c1daeSBarry Smith 2885c6c1daeSBarry Smith /*@C 2895c6c1daeSBarry Smith PetscDrawViewPortsDestroy - frees a PetscDrawViewPorts object 2905c6c1daeSBarry Smith 2915c6c1daeSBarry Smith Collective on PetscDraw inside PetscDrawViewPorts 2925c6c1daeSBarry Smith 2935c6c1daeSBarry Smith Input Parameter: 2945c6c1daeSBarry Smith . ports - the PetscDrawViewPorts object 2955c6c1daeSBarry Smith 2965c6c1daeSBarry Smith Level: advanced 2975c6c1daeSBarry Smith 298db781477SPatrick Sanan .seealso: `PetscDrawSplitViewPort()`, `PetscDrawSetViewPort()`, `PetscDrawViewPortsSet()`, `PetscDrawViewPortsCreate()` 2995c6c1daeSBarry Smith 3005c6c1daeSBarry Smith @*/ 3015c6c1daeSBarry Smith PetscErrorCode PetscDrawViewPortsDestroy(PetscDrawViewPorts *ports) 3025c6c1daeSBarry Smith { 3035c6c1daeSBarry Smith PetscFunctionBegin; 3045c6c1daeSBarry Smith if (!ports) PetscFunctionReturn(0); 3058f69470aSLisandro Dalcin PetscValidPointer(ports,1); 3065c6c1daeSBarry Smith /* reset Drawport of Window back to previous value */ 3079566063dSJacob Faibussowitsch PetscCall(PetscDrawSetViewPort(ports->draw,ports->port_xl,ports->port_yl,ports->port_xr,ports->port_yr)); 3089566063dSJacob Faibussowitsch PetscCall(PetscDrawDestroy(&ports->draw)); 3099566063dSJacob Faibussowitsch PetscCall(PetscFree4(ports->xl,ports->xr,ports->yl,ports->yr)); 3109566063dSJacob Faibussowitsch PetscCall(PetscFree(ports)); 3115c6c1daeSBarry Smith PetscFunctionReturn(0); 3125c6c1daeSBarry Smith } 3135c6c1daeSBarry Smith 3145c6c1daeSBarry Smith /*@C 3155c6c1daeSBarry Smith PetscDrawViewPortsSet - sets a draw object to use a particular subport 3165c6c1daeSBarry Smith 3175c6c1daeSBarry Smith Logically Collective on PetscDraw inside PetscDrawViewPorts 3185c6c1daeSBarry Smith 319d8d19677SJose E. Roman Input Parameters: 3205c6c1daeSBarry Smith + ports - the PetscDrawViewPorts object 3215c6c1daeSBarry Smith - port - the port number, from 0 to nports-1 3225c6c1daeSBarry Smith 3235c6c1daeSBarry Smith Level: advanced 3245c6c1daeSBarry Smith 325db781477SPatrick Sanan .seealso: `PetscDrawSplitViewPort()`, `PetscDrawSetViewPort()`, `PetscDrawViewPortsDestroy()`, `PetscDrawViewPortsCreate()` 3265c6c1daeSBarry Smith 3275c6c1daeSBarry Smith @*/ 3285c6c1daeSBarry Smith PetscErrorCode PetscDrawViewPortsSet(PetscDrawViewPorts *ports,PetscInt port) 3295c6c1daeSBarry Smith { 3305c6c1daeSBarry Smith PetscFunctionBegin; 3318f69470aSLisandro Dalcin if (!ports) PetscFunctionReturn(0); 33245f3bb6eSLisandro Dalcin PetscValidPointer(ports,1); 3332c71b3e2SJacob Faibussowitsch PetscCheck(port >= 0 && (port <= ports->nports-1),PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"Port is out of range requested %" PetscInt_FMT " from 0 to %" PetscInt_FMT,port,ports->nports-1); 3349566063dSJacob Faibussowitsch PetscCall(PetscDrawSetViewPort(ports->draw,ports->xl[port],ports->yl[port],ports->xr[port],ports->yr[port])); 3355c6c1daeSBarry Smith PetscFunctionReturn(0); 3365c6c1daeSBarry Smith } 337