ruby-pgplot 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/demo/pgdemo15.rb ADDED
@@ -0,0 +1,78 @@
1
+ require 'narray'
2
+ require 'pgplot'
3
+ include NMath
4
+ include Pgplot
5
+ #-----------------------------------------------------------------------
6
+ # Demonstration program for PGPLOT vector field plot.
7
+ #
8
+ # Program to demonstrate the use of PGVECT along with
9
+ # PGCONB by illustrating the flow around a cylinder with circulation.
10
+ #-----------------------------------------------------------------------
11
+ twopi = 2*Math::PI
12
+ blank = -1.0e10
13
+ # number of points in the x and y directions
14
+ nx = 31
15
+ ny = 31
16
+ # cylinder radius
17
+ a = 1.0
18
+ # circulation strength
19
+ gamma = 2.0
20
+ # freestream velocity
21
+ vinf = 1.0
22
+ # max and min x and y
23
+ xmax = 3.0*a
24
+ xmin = -3.0*a
25
+ ymax = 3.0*a
26
+ ymin = -3.0*a
27
+ # point spacing
28
+ dx = (xmax-xmin)/(nx-1)
29
+ dy = (ymax-ymin)/(ny-1)
30
+ # compute the stream function, Cp, and u and v velocities
31
+ a2 = a**2
32
+ x = NArray.sfloat(nx,1).indgen!*dx + xmin
33
+ y = NArray.sfloat(1,ny).indgen!*dy + ymin
34
+ r2 = x**2 + y**2
35
+ r2[(r2.eq 0).where] = 1e-10
36
+ psi = vinf * y * (1-a2/r2) + gamma/twopi*0.5*log(r2/a)
37
+ u = vinf * (1 + a2/r2 - 2*a2*(x/r2)**2) + gamma/twopi * y/r2
38
+ v = vinf * x * (-2*a2*y/r2**2) + gamma/twopi * x/r2
39
+ cp = 1 - (u**2+v**2)/vinf**2
40
+ idx = (r2 < a2).where
41
+ u[idx] =
42
+ v[idx] = blank
43
+ #
44
+ # start drawing
45
+ #
46
+ pgbeg
47
+ pgenv( x[0], x[-1], y[0], y[-1], 1 )
48
+ pgiden
49
+ pglab('X','Y','Flow About a Cylinder with Circulation')
50
+ #
51
+ # contour plot of the stream function (streamlines)
52
+ #
53
+ tr = [ x[0]-dx, dx, 0.0, y[0]-dy, 0.0, dy ]
54
+ level = [ 1.0, 0.5, 0.0, -0.5, -1.0 ]
55
+ pgcont( psi, level, tr )
56
+ #
57
+ # draw cylinder
58
+ #
59
+ pgbbuf
60
+ pgsci(0)
61
+ pgsfs(1)
62
+ pgcirc(0.0, 0.0, a*1.1)
63
+ pgsfs(2)
64
+ pgsci(14)
65
+ pgcirc(0.0, 0.0, a)
66
+ pgsci(1)
67
+ pgebuf
68
+ #
69
+ # vector plot
70
+ #
71
+ pgsah(2, 45.0, 0.7)
72
+ pgsch(0.3)
73
+ tr = [ x[0], dx, 0.0, y[0], 0.0, dy ]
74
+ pgvect( u[1..-2,1..-2], v[1..-2,1..-2], 0.0, 0, tr, -1.0e10 )
75
+ pgsch(1.0)
76
+ #
77
+ # finish
78
+ #
data/demo/pgdemo3.rb ADDED
@@ -0,0 +1,188 @@
1
+ require 'narray'
2
+ require 'pgplot'
3
+ include Pgplot
4
+ include NMath
5
+
6
+ def main
7
+ exit unless pgbeg('?',1,1)
8
+ print " Routine PGCONT\n"
9
+ pgex31
10
+ print " Routine PGCONS\n"
11
+ pgex32
12
+ print " Routine PGCONB\n"
13
+ pgex33
14
+ print " Routine PGCONT with PGCONL labels\n"
15
+ pgex36
16
+ #print " Routine PGCONX with arrow labels\n"
17
+ #pgex37
18
+ #print " Routine PGCONX\n"
19
+ #pgex34
20
+ print " Routine PGCONF\n"
21
+ pgexx1
22
+ pgend
23
+ end
24
+
25
+ # ====== Utility ======
26
+
27
+ class PgLinestyle
28
+ attr_accessor :width
29
+ attr_accessor :color
30
+ attr_accessor :style
31
+
32
+ def initialize(opt=nil)
33
+ @width = 1
34
+ @color = 1
35
+ @style = 1
36
+ if opt.is_a?(Hash)
37
+ @width = opt[:width] || @width
38
+ @width = opt['width'] || @width
39
+ @color = opt[:color] || @color
40
+ @color = opt['color'] || @color
41
+ @style = opt[:style] || @style
42
+ @style = opt['style'] || @style
43
+ end
44
+ end
45
+
46
+ def set
47
+ pgslw @width
48
+ pgsci @color
49
+ pgsls @style
50
+ end
51
+ end # class PgLinestyle
52
+
53
+ NC=21
54
+ Pgline_default = PgLinestyle.new
55
+ $sty = (1..NC).collect{|i|
56
+ if i<10
57
+ x = PgLinestyle.new(:width =>1, :color =>2, :style =>2)
58
+ else
59
+ x = PgLinestyle.new(:width =>1, :color =>3, :style =>1)
60
+ end
61
+ if i%5==0
62
+ x.width = 5
63
+ end
64
+ x
65
+ }
66
+ i = NArray.sfloat(40,1).indgen!(1)
67
+ j = NArray.sfloat(1,40).indgen!(1)
68
+ $f = cos( 0.3*sqrt(i*2)-0.4*j/3 ) * cos( 0.4*i/3 ) + (i-j)/40.0
69
+ $lv = NArray.sfloat(NC).indgen!*($f.max-$f.min)/NC+$f.min
70
+ #NArray.span($f.minmax,NC)
71
+
72
+ # ====== Exsample routine ======
73
+
74
+ def pgex31
75
+ pgpage
76
+ pgsvp(0.05,0.95,0.05,0.95)
77
+ pgswin(1.0,40.0,1.0,40.0)
78
+ pgbox('bcts',0.0,0,'bcts',0.0,0)
79
+ pgmtxt('t',1.0,0.0,0.0,'Contouring using PGCONT')
80
+ pgbbuf
81
+ for i in 0...NC
82
+ $sty[i].set
83
+ pgcont $f, $lv[i]
84
+ end
85
+ Pgline_default.set
86
+ pgebuf
87
+ end
88
+
89
+ def pgex32
90
+ pgpage
91
+ pgsvp(0.05,0.95,0.05,0.95)
92
+ pgswin(1.0,40.0,1.0,40.0)
93
+ pgbox('bcts',0.0,0,'bcts',0.0,0)
94
+ pgmtxt('t',1.0,0.0,0.0,'Contouring using PGCONS')
95
+ pgbbuf
96
+ for i in 0...NC
97
+ $sty[i].set
98
+ pgcons $f, $lv[i]
99
+ end
100
+ Pgline_default.set
101
+ pgebuf
102
+ end
103
+
104
+ def pgex33
105
+ pgpage
106
+ pgsvp(0.05,0.95,0.05,0.95)
107
+ pgswin(1.0,40.0,1.0,40.0)
108
+ pgbox('bcts',0.0,0,'bcts',0.0,0)
109
+ pgmtxt('t',1.0,0.0,0.0,'Contouring using PGCONB')
110
+ pgbbuf
111
+
112
+ blank = -65536.0
113
+
114
+ f = $f.dup
115
+ i = NArray.sfloat(40,1).indgen!(1)
116
+ j = NArray.sfloat(1,40).indgen!(1)
117
+ r = sqrt((i-20.5)**2 + (j-20.5)**2)
118
+ idx = ((r>20).or(r<3.0)).where
119
+ f[idx] = blank
120
+ pgsci 1
121
+ pgpt( (i+NArray.int(1,40))[idx], (j+NArray.int(40,1))[idx], 1 )
122
+
123
+ for i in 0...NC
124
+ $sty[i].set
125
+ pgconb f, $lv[i], blank
126
+ end
127
+ Pgline_default.set
128
+ pgebuf
129
+ end
130
+
131
+ def pgex36
132
+ pgpage
133
+ pgsvp(0.05,0.95,0.05,0.95)
134
+ pgswin(1.0,40.0,1.0,40.0)
135
+ pgbox('bcts',0.0,0,'bcts',0.0,0)
136
+ pgmtxt('t',1.0,0.0,0.0,'Contouring using PGCONT and PGCONL labels')
137
+ pgbbuf
138
+
139
+ for i in 0...NC
140
+ $sty[i].set
141
+ pgcons $f, $lv[i]
142
+ end
143
+ pgslw 1
144
+ pgsls 1
145
+ 1.step(20,2) {|i|
146
+ pgsci $sty[i].color
147
+ pgconl $f,$lv[i],"%2i"%(i+1),16,8
148
+ }
149
+ Pgline_default.set
150
+ pgebuf
151
+ end
152
+
153
+ def pgexx1
154
+ nx=ny=51
155
+ c = [3.0, 3.2, 3.5, 3.6, 3.766413, 4.0 ,5.0, 10.0, 100.0]
156
+ xmin =-2.0
157
+ xmax = 2.0
158
+ ymin =-2.0
159
+ ymax = 2.0
160
+ mu = 0.3
161
+ dx = (xmax-xmin)/(nx-1)
162
+ dy = (ymax-ymin)/(ny-1)
163
+ tr = [xmin-dx, dx, 0.0, ymin-dy, 0.0, dy]
164
+ x = tr[0] + NArray.sfloat(nx,1).indgen!(1)*tr[1]
165
+ y = tr[3] + NArray.sfloat(1,ny).indgen!(1)*tr[5]
166
+ z = (1.0-mu)*(2.0/sqrt((x-mu)**2+y**2)+(x-mu)**2+y**2) +
167
+ mu*(2.0/sqrt((x+1.0-mu)**2+y**2)+(x+1.0-mu)**2+y**2)
168
+
169
+ pgpage
170
+ pgvstd
171
+ pgwnad(xmin, xmax, ymin, ymax)
172
+ pgsfs(1)
173
+ for i in 0..c.size-2
174
+ r = 0.5+0.5*(i-1)/(c.size-1)
175
+ pgscr(i+10, r, r, r)
176
+ pgsci(i+10)
177
+ pgconf(z,c[i]..c[i+1],tr)
178
+ end
179
+ pgsci(3)
180
+ pgcont(z,c,tr)
181
+ pgsci(1)
182
+ pgsch(0.6)
183
+ pgbox('bctsin',1.0,10,'bctsinv',1.0,10)
184
+ pgsch(1.0)
185
+ pgmtxt('t',1.0,0.0,0.0,'Contour filling using PGCONF')
186
+ end
187
+
188
+ main
data/demo/pgdemo4.rb ADDED
@@ -0,0 +1,80 @@
1
+ require 'narray'
2
+ require 'pgplot'
3
+ include Pgplot
4
+ include NMath
5
+
6
+ def setvp
7
+ pgsvp(0.0, 1.0, 0.0, 1.0)
8
+ vpx1, vpx2, vpy1, vpy2 = pgqvp(1)
9
+ d = [vpx2-vpx1, vpy2-vpy1].min/40.0
10
+ vpx1 = vpx1 + 5.0*d
11
+ vpx2 = vpx2 - 2.0*d
12
+ vpy1 = vpy1 + 8.0*d
13
+ vpy2 = vpy2 - 2.0*d
14
+ pgvsiz(vpx1, vpx2, vpy1, vpy2)
15
+ end
16
+
17
+ def palett contra,bright
18
+ rl =[-0.5, 0.0, 0.17, 0.33, 0.50, 0.67, 0.83, 1.0, 1.7]
19
+ rr =[ 0.0, 0.0, 0.0, 0.0, 0.6, 1.0, 1.0, 1.0, 1.0]
20
+ rg =[ 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.6, 0.0, 1.0]
21
+ rb =[ 0.0, 0.3, 0.8, 1.0, 0.3, 0.0, 0.0, 0.0, 1.0]
22
+ pgctab(rl, rr, rg, rb)
23
+ end
24
+
25
+ exit if pgopen('?') < 1
26
+ printf "PGPLOT device type: %s\n", pgqinf('TYPE')
27
+ c1,c2 = pgqcir()
28
+ printf "Number of color indices used for image: %d\n", nc=[0,c2-c1+1].max
29
+ exit if nc<8
30
+
31
+ nx = 64
32
+ ny = 64
33
+ x = NArray.sfloat(nx,1).indgen!(1)
34
+ y = NArray.sfloat(1,ny).indgen!(1)
35
+ f = cos( sqrt(x*(80.0/nx))*0.6 - y*16.0/(3.0*ny) ) *
36
+ cos( x*16.0/(3.0*nx) ) +
37
+ (x/nx - y/ny) + sin(sqrt(x**2+y**2))*0.05
38
+
39
+ pgpage
40
+ setvp
41
+ pgwnad(0.0, 1.0+nx, 0.0, 1.0+ny)
42
+ bright = 0.5
43
+ contra = 1.0
44
+ palett(contra, bright)
45
+ pgimag(f)
46
+ pgmtxt('t',1.0,0.0,0.0,'PGIMAG, PGWEDG, and PGCTAB')
47
+ pgsch(0.6)
48
+ pgbox('bcntsi',0.0,0,'bcntsiv',0.0,0)
49
+ pgmtxt('b',3.0,1.0,1.0,'pixel number')
50
+ pgwedg('BI', 4.0, 5.0, f.min,f.max, 'pixel value')
51
+ pgsch(1.0)
52
+
53
+ angle = 120.0/57.29578
54
+ c = cos(angle)
55
+ s = sin(angle)
56
+ tr = NArray[ -c-s, 2.0*c/nx, 2.0*s/ny,
57
+ -c+s, -2.0*s/nx, 2.0*c/ny ]
58
+
59
+ pgpage
60
+ setvp
61
+ pgwnad(-1.0, 1.0, -1.0, 1.0)
62
+ pgsci(1)
63
+ bright = 0.5
64
+ contra = 1.0
65
+ palett(contra, bright)
66
+ pgimag(f,nil,tr)
67
+ pgsci(1)
68
+
69
+ pgcont(f,NArray.sfloat(21).indgen!*(f.max-f.min)/21+f.min, tr)
70
+ pgsls(1)
71
+ pgslw(1)
72
+ pgsci(1)
73
+ #outlin(1,mxi,1,mxj,tr)
74
+ pgmtxt('t',1.0,0.0,0.0,'PGIMAG, PGCONT and PGWEDG')
75
+ pgsch(0.6)
76
+ pgbox('bctsn',0.0,0,'bctsn',0.0,0)
77
+ pgwedg('BI', 4.0, 5.0, f.min, f.max, 'pixel value')
78
+ pgsch(1.0)
79
+
80
+ pgclos
data/demo/pgdemo9.rb ADDED
@@ -0,0 +1,44 @@
1
+ require 'narray'
2
+ require 'pgplot'
3
+ include Pgplot
4
+ include NMath
5
+
6
+ n=64
7
+ ncol=32
8
+ nlev=9
9
+
10
+ pgbeg
11
+
12
+ i = NArray.sfloat(n,1).indgen!(1)
13
+ j = NArray.sfloat(1,n).indgen!(1)
14
+ f = cos(0.6*sqrt(i*2)-(0.4/3)*j) * cos((0.4/3)*i) + (i-j)/n
15
+ fmin = f.min
16
+ fmax = f.max
17
+
18
+ ia = (f-fmin)/(fmax-fmin)*(ncol-1)+16
19
+
20
+ ci1,ci2 = pgqcol
21
+ if ci2 < 15+ncol
22
+ raise 'This program requires a device with at least %d colors'%(15+ncol)
23
+ end
24
+
25
+ pgpage
26
+ pgscr(0, 0.0, 0.3, 0.2)
27
+ pgsvp(0.05,0.95,0.05,0.95)
28
+ pgwnad(0.0, 1.0, 0.0, 1.0)
29
+
30
+ for i in 1..ncol
31
+ r = 0.8*(i-1)/(ncol-1) + 0.2
32
+ g = 2.0*(i-1-ncol/2)/(ncol-1)
33
+ g = 0 if g<0
34
+ b = 0.2 + 0.4*(ncol-i)/ncol
35
+ pgscr(i+15, r, g, b)
36
+ end
37
+
38
+ pgpixl(ia,0,1,0,1)
39
+ pgsci(1)
40
+ pgmtxt('t',1.0,0.0,0.0,'Test of PGPIXL')
41
+ pgbox('bcnts',0.0,0,'bcnts',0.0,0)
42
+
43
+ clev = NArray.sfloat(nlev).indgen!(1) * ((fmax-fmin)/nlev) + fmin
44
+ pgcont(f, clev, NArray[-1.0, 1, 0, -1, 0, 1]/(n-1))
data/depend ADDED
@@ -0,0 +1,4 @@
1
+ rb_pgplot.c: rb_pgplot.c.in cogen.rb
2
+ $(RUBY) cogen.rb
3
+
4
+ rb_pgplot.o: rb_pgplot.c $(hdrdir)/ruby.h
data/extconf.rb ADDED
@@ -0,0 +1,97 @@
1
+ # extconf.rb : Configure script for Ruby/PGPLOT
2
+ #
3
+ # Copyright (c) 2000,2001 Masahiro TANAKA <masa@ir.isas.ac.jp>
4
+ #
5
+ # This program is free software.
6
+ # You can distribute/modify this program
7
+ # under the same terms as Ruby itself.
8
+ # NO WARRANTY.
9
+ #
10
+ # usage: ruby extconf.rb [configure options]
11
+
12
+ require "mkmf"
13
+
14
+ #$DEBUG = true
15
+
16
+ # configure options:
17
+ # --with-x11-dir=path
18
+ # --with-x11-include=path
19
+ # --with-x11-lib=path
20
+ dir_config("x11")
21
+
22
+ # configure options:
23
+ # --with-pgplot-dir=path
24
+ # --with-pgplot-include=path
25
+ # --with-pgplot-lib=path
26
+ dir_config("pgplot")
27
+
28
+ # Otherwise you can also specify:
29
+ # --with-opt-dir=path
30
+ # --with-opt-include=path
31
+ # --with-opt-lib=path
32
+
33
+ # Check PGPLOT Header
34
+ exit unless have_header("cpgplot.h")
35
+
36
+ # Check NArray
37
+ $CPPFLAGS = " -I#{CONFIG['sitearchdir']} " + $CPPFLAGS
38
+ gem_narray_dir = File.dirname(Dir.glob("../narray-0.[56].*/narray.h").last)
39
+ $CPPFLAGS = " -I#{gem_narray_dir} " + $CPPFLAGS if gem_narray_dir
40
+ exit unless have_header("narray.h")
41
+ if RUBY_PLATFORM =~ /cygwin|mingw/
42
+ $LDFLAGS = " -L#{CONFIG['sitearchdir']} "+$LDFLAGS
43
+ exit unless have_library("narray","na_make_object")
44
+ end
45
+
46
+ # Check FORTRAN Libraries
47
+ #
48
+ # SUN WorkShop FORTRAN 77 compiler ver5.0
49
+ # configure options: --with-sunws
50
+ if with_config("sunws")
51
+ $libs = "-lM77 -lsunmath "+$libs
52
+ exit unless find_library("F77", "f77_init", "/opt/SUNWspro/lib")
53
+ $defs.push "-DSPARC_FORTRAN"
54
+ #
55
+ # GNU FORTRAN v4
56
+ elsif have_library("gfortran")
57
+ $CFLAGS = "-Wall "+$CFLAGS
58
+ $defs.push "-DGNU_FORTRAN"
59
+ #
60
+ # GNU FORTRAN v3
61
+ elsif have_library("g77")
62
+ $CFLAGS = "-Wall "+$CFLAGS
63
+ $defs.push "-DGNU_FORTRAN"
64
+ else
65
+ puts "failed"
66
+ exit
67
+ end
68
+
69
+ # Check GrWin Library (for cygwin (and mingw32?))
70
+ # configure options: --with-grwin
71
+ if with_config("grwin")
72
+ #$LDFLAGS = "-Wl,--subsystem,console "+$LDFLAGS
73
+ if RUBY_PLATFORM =~ /cygwin|mingw/
74
+ $libs += " -mwindows"
75
+ end
76
+ exit unless have_library("GrWin", "GWinit")
77
+ end
78
+ #
79
+ # Check X11 Library
80
+ have_library("X11", "XOpenDisplay")
81
+
82
+ # Check PNG Library
83
+ libs_save = $libs
84
+ $libs = append_library($libs, "z")
85
+ if !have_library("png","png_create_write_struct")
86
+ $libs = libs_save
87
+ end
88
+
89
+ # Check PGPLOT Library
90
+ $libs = append_library($libs, "pgplot")
91
+ exit unless find_library( "cpgplot", "cpgbeg", "/usr/lib",
92
+ "/usr/local/lib", "/usr/local/pgplot" )
93
+
94
+ $objs = %w(rb_pgplot.o kwarg.o)
95
+
96
+ # Generate Makefile
97
+ create_makefile("pgplot")