From: <and...@us...> - 2013-11-28 12:50:32
|
Revision: 12776 http://sourceforge.net/p/plplot/code/12776 Author: andrewross Date: 2013-11-28 12:50:28 +0000 (Thu, 28 Nov 2013) Log Message: ----------- Update D language version of example 22. Modified Paths: -------------- trunk/examples/d/x22d.d Modified: trunk/examples/d/x22d.d =================================================================== --- trunk/examples/d/x22d.d 2013-11-28 11:57:58 UTC (rev 12775) +++ trunk/examples/d/x22d.d 2013-11-28 12:50:28 UTC (rev 12776) @@ -23,9 +23,26 @@ // import std.math; +import std.string; import plplot; +// +// Global transform function for a constriction using data passed in +// This is the same transformation used in constriction. +// +extern ( C ) { +void +transform( PLFLT x, PLFLT y, PLFLT *xt, PLFLT *yt, PLPointer data ) +{ + PLFLT *xmax = cast(PLFLT *) data; + + *xt = x; + *yt = y / 4.0 * ( 3 - cos( PI * x / *xmax ) ); +} +} + + //-------------------------------------------------------------------------- // main // @@ -92,10 +109,11 @@ // Vector plot of flow through a constricted pipe // void - constriction() + constriction( int astyle ) { const int nx = 20; const int ny = 20; + string title; PLFLT dx = 1.0; PLFLT dy = 1.0; @@ -133,7 +151,7 @@ b = ymax / 4.0 * ( 3 - cos( PI * x / xmax ) ); if ( fabs( y ) < b ) { - dbdx = ymax / 4.0 * sin( PI * x / xmax ) * y / b; + dbdx = ymax / 4.0 * sin( PI * x / xmax ) * PI / xmax * y / b; u[i][j] = Q * ymax / b; v[i][j] = dbdx * u[i][j]; } @@ -146,12 +164,90 @@ } plenv( xmin, xmax, ymin, ymax, 0, 0 ); - pllab( "(x)", "(y)", "#frPLplot Example 22 - constriction" ); + title = format("#frPLplot Example 22 - constriction (arrow style %d)", astyle); + pllab( "(x)", "(y)", title ); plcol0( 2 ); - plvect( u, v, -0.5, cgrid2 ); + plvect( u, v, -1.0, cgrid2 ); plcol0( 1 ); } + + // + // Vector plot of flow through a constricted pipe + // with a coordinate transform + // + void + constriction2() + { + const int nx = 20; + const int ny = 20; + const int nc = 11; + const int nseg = 20; + + PLFLT [] clev = new PLFLT[nc]; + + PLFLT dx = 1.0; + PLFLT dy = 1.0; + + PLFLT xmin = -nx / 2 * dx; + PLFLT xmax = nx / 2 * dx; + PLFLT ymin = -ny / 2 * dy; + PLFLT ymax = ny / 2 * dy; + + plstransform( &transform, cast(PLPointer) &xmax ); + + PLcGrid2 cgrid2; + cgrid2.xg = new PLFLT[][nx]; + for ( int i = 0; i < nx; i++ ) + cgrid2.xg[i] = new PLFLT[ny]; + cgrid2.yg = new PLFLT[][nx]; + for ( int i = 0; i < nx; i++ ) + cgrid2.yg[i] = new PLFLT[ny]; + + PLFLT[][] u = new PLFLT[][nx]; + for ( int i = 0; i < nx; i++ ) + u[i] = new PLFLT[ny]; + PLFLT[][] v = new PLFLT[][nx]; + for ( int i = 0; i < nx; i++ ) + v[i] = new PLFLT[ny]; + + PLFLT Q = 2.0; + PLFLT x, y, b, dbdx; + for ( int i = 0; i < nx; i++ ) + { + x = ( i - nx / 2 + 0.5 ) * dx; + for ( int j = 0; j < ny; j++ ) + { + y = ( j - ny / 2 + 0.5 ) * dy; + cgrid2.xg[i][j] = x; + cgrid2.yg[i][j] = y; + b = ymax / 4.0 * ( 3 - cos( PI * x / xmax ) ); + u[i][j] = Q * ymax / b; + v[i][j] = 0.0; + } + } + + for ( int i = 0; i < nc; i++ ) + { + clev[i] = Q + i * Q / ( nc - 1 ); + } + + plenv( xmin, xmax, ymin, ymax, 0, 0 ); + pllab( "(x)", "(y)", "#frPLplot Example 22 - constriction with plstransform" ); + plcol0( 2 ); + plshades( u, null, xmin + dx / 2, xmax - dx / 2, + ymin + dy / 2, ymax - dy / 2, + clev, 0.0, 1, 1.0, 0 ); + plvect( u, v, -1.0, cgrid2 ); + // Plot edges using plpath (which accounts for coordinate transformation) rather than plline + plpath( nseg, xmin, ymax, xmax, ymax ); + plpath( nseg, xmin, ymin, xmax, ymin ); + plcol0( 1 ); + + plstransform( null, null ); + + } + //-------------------------------------------------------------------------- // f2mnmx // @@ -307,7 +403,7 @@ // Set arrow style using arrow_x and arrow_y then // plot using these arrows. plsvect( arrow_x, arrow_y, fill ); - myPlot.constriction(); + myPlot.constriction( 1 ); // Pairs of points making the line segments used to plot the user defined arrow PLFLT[] arrow2_x = [ -0.5, 0.3, 0.3, 0.5, 0.3, 0.3 ]; @@ -317,8 +413,12 @@ // plot using these filled arrows. fill = 1; plsvect( arrow2_x, arrow2_y, fill ); - myPlot.constriction(); + myPlot.constriction( 2 ); + myPlot.constriction2(); + + plsvect( null, null, 0); + myPlot.potential(); plend(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |