gphys 1.4.3.2 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.ChangeLog.until201303 +2156 -0
- data/.gitignore +7 -1
- data/Rakefile +36 -1
- data/bin/gpview +75 -58
- data/{dim_op.c → ext/numru/gphys/dim_op.c} +4 -1
- data/{ext_coord.c → ext/numru/gphys/ext_coord.c} +35 -17
- data/{ext_init.c → ext/numru/gphys/ext_init.c} +0 -0
- data/ext/numru/gphys/extconf.rb +43 -0
- data/{interpo.c → ext/numru/gphys/interpo.c} +35 -30
- data/{multibitIO.c → ext/numru/gphys/multibitIO.c} +19 -15
- data/gphys-bigmem.gemspec +44 -0
- data/gphys.gemspec +4 -4
- data/lib/numru/dclext.rb +55 -0
- data/lib/numru/derivative.rb +6 -5
- data/lib/numru/ganalysis/met.rb +27 -10
- data/lib/numru/ganalysis/qg.rb +4 -3
- data/lib/numru/ganalysis/sph_harmonic_iso_g.rb +290 -0
- data/lib/numru/ggraph.rb +81 -2
- data/lib/numru/gphys/derivative.rb +3 -2
- data/lib/numru/gphys/gpcommon.rb +7 -1
- data/lib/numru/gphys/gphys_fft.rb +3 -3
- data/lib/numru/gphys/gphys_hdfeos5_io.rb +14 -13
- data/lib/numru/gphys/grib.rb +18 -7
- data/lib/numru/gphys/gtool3.rb +53 -52
- data/lib/numru/gphys/interpolate.rb +3 -2
- data/lib/numru/gphys/varraycomposite.rb +1 -1
- data/lib/numru/gphys/varraynetcdf.rb +38 -0
- data/lib/numru/gphys/version.rb +2 -1
- data/test/test_axis.rb +1 -5
- data/test/test_fitting.rb +0 -1
- data/test/test_gphys.rb +9 -5
- data/test/test_met_z.rb +1 -2
- data/test/test_sigma_coord.rb +0 -1
- metadata +36 -19
- checksums.yaml +0 -15
- data/.rspec +0 -2
- data/.travis.yml +0 -3
- data/ChangeLog +0 -7007
- data/extconf.rb +0 -51
- data/spec/gphys_spec.rb +0 -11
- data/spec/spec_helper.rb +0 -2
data/.gitignore
CHANGED
data/Rakefile
CHANGED
@@ -1,2 +1,37 @@
|
|
1
|
-
|
1
|
+
# -* coding: utf-8 -*-
|
2
|
+
require 'rake/testtask'
|
3
|
+
require 'rake/extensiontask'
|
4
|
+
require 'rake/packagetask'
|
5
|
+
begin
|
6
|
+
require 'bundler/gem_helper' # instead of 'bundler/gem_tasks' -> need manual
|
7
|
+
# calls of install_tasks (see below)
|
8
|
+
rescue LoadError
|
9
|
+
puts 'If you want to create gem, You must install Bundler'
|
10
|
+
end
|
2
11
|
|
12
|
+
# manual calls of install_tasks to support multiple gemspec files
|
13
|
+
Bundler::GemHelper.install_tasks(name: "gphys")
|
14
|
+
Bundler::GemHelper.install_tasks(name: "gphys-bigmem")
|
15
|
+
|
16
|
+
require './lib/numru/gphys/version.rb'
|
17
|
+
def version
|
18
|
+
NumRu::GPhys::VERSION
|
19
|
+
end
|
20
|
+
|
21
|
+
task :default => :test
|
22
|
+
task :test => :compile
|
23
|
+
Rake::TestTask.new do |t|
|
24
|
+
t.libs << 'lib' << 'test'
|
25
|
+
t.test_files = FileList['test/test_*.rb'].exclude('test/test_assoccoords.rb')
|
26
|
+
end
|
27
|
+
|
28
|
+
Rake::ExtensionTask.new do |ext|
|
29
|
+
ext.name = 'gphys_ext'
|
30
|
+
ext.ext_dir = 'ext/numru/gphys'
|
31
|
+
ext.lib_dir = 'lib/numru'
|
32
|
+
end
|
33
|
+
|
34
|
+
Rake::PackageTask.new('gphys', "#{version}") do |t|
|
35
|
+
t.need_tar_gz = true
|
36
|
+
t.package_files.include `git ls-files`.split("\n")
|
37
|
+
end
|
data/bin/gpview
CHANGED
@@ -45,10 +45,14 @@ if you want to know more description, please read
|
|
45
45
|
|
46
46
|
:--wsn [1-4]:
|
47
47
|
set work staion number. each number represent output device:
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
48
|
+
* for dcl-6,
|
49
|
+
1 : X window
|
50
|
+
2.: PDF file (named dcl.pdf).
|
51
|
+
* for dcl-5-?,
|
52
|
+
1 : X window,
|
53
|
+
2 : PS file. (named dcl.ps)
|
54
|
+
3 : Tektronix terminal
|
55
|
+
4 : GTK Windows
|
52
56
|
|
53
57
|
:--clrmap [1-]:
|
54
58
|
set colormap to draw tone/contour.
|
@@ -94,6 +98,9 @@ if you want to know more description, please read
|
|
94
98
|
:--nowait, --Gw:
|
95
99
|
not wait for any actions if animate
|
96
100
|
|
101
|
+
:--delay <number>:
|
102
|
+
wait <number> seconds for each new page drawing of animation
|
103
|
+
|
97
104
|
:--reverse, --Gr:
|
98
105
|
plot animation reversible if animate
|
99
106
|
|
@@ -225,7 +232,7 @@ if you want to know more description, please read
|
|
225
232
|
:--udsfmt [strings]:
|
226
233
|
change contour label format. see UDCNTR/DCL manual for the format.
|
227
234
|
|
228
|
-
|
235
|
+
= EXAMPLES
|
229
236
|
|
230
237
|
For a single GPhys variable,
|
231
238
|
|
@@ -240,6 +247,7 @@ For a single GPhys variable,
|
|
240
247
|
% gpview --smooth lon data.nc@temp,lon=130:150
|
241
248
|
% gpview --levels 0,10,20,30 --pattern 30999,40999,50999,60999,70999 data.nc@temp
|
242
249
|
% gpview --overplot=3 --anim t data.nc@temp,lon=0
|
250
|
+
% gpview --overplot=3 --Opc --anim t data.nc@temp,lon=0
|
243
251
|
% gpview --mark data.nc@temp,lon=0,lat=0
|
244
252
|
% gpview --operation log10 data.nc@temp,lon=0
|
245
253
|
% gpview --time_ax false data.nc@temp,lon=0,lat=0
|
@@ -254,59 +262,62 @@ For multiple GPhys variables,
|
|
254
262
|
% gpview --var temp,lon=130:150 data?.nc
|
255
263
|
% gpview --anim t --var temp,lon=130:150 data*.nc
|
256
264
|
|
257
|
-
|
258
|
-
== HISTORY
|
259
|
-
|
260
|
-
2004/12/14 D Tsukahara && T Horinouti(parse_gturl)
|
261
|
-
2005/01/08 D Tsukahara (add option --exch and able to invalid value)
|
262
|
-
2005/01/09 D Tsukahara (add option --animate, smooth, alternate, index )
|
263
|
-
2005/01/10 D Tsukahara (transpose axis with attr "positive:down" ,
|
264
|
-
abailable loopsense_flag. )
|
265
|
-
2005/01/10 D Tsukahara (implement GGraph::color_bar, and margin_info,
|
266
|
-
which file name, date, and toolname. )
|
267
|
-
2005/01/11 D Tsukahara ( 1. write document about OPTIONS.
|
268
|
-
2. add many options. more info please see document. )
|
269
|
-
2005/01/23 S Takehiro (add option --similar, map_axis)
|
270
|
-
2005/02/09 D Tsukahara && M Nakano (add option --reverse, --Gr, --map)
|
271
|
-
2005/02/10 D Tsukahara (change option parser (getopts => getoptlong))
|
272
|
-
2005/02/24 D Tsukahara (apply --range for line plot)
|
273
|
-
2005/06/15 S Takehiro (add option --levels, --clevels, --slevels, --patterns)
|
274
|
-
2005/06/17 S Takehiro (missing_value attribute setting removed)
|
275
|
-
2005/06/22 S Takehiro (debug, clipping control added to GGraph::annotate)
|
276
|
-
2005/06/23 S Takehiro (debug, option --title implemented)
|
277
|
-
2005/07/15 S Takehiro (option --noannotate implemented)
|
278
|
-
2005/08/07 S Takehiro (option --overplot implemented)
|
279
|
-
2005/08/09 S Takehiro && T Horinouchi (add option --help and help function.
|
280
|
-
URL information corrected. )
|
281
|
-
2005/08/23 S Takehiro (multiple Gphys variables plotting
|
282
|
-
and option --var implemented)
|
283
|
-
2005/08/23 S Takehiro (common methods to gp* command moved to gpcommon.rb)
|
284
|
-
2005/10/30 S Takehiro (option --animate recoverd)
|
285
|
-
2005/10/31 S Takehiro (option --smooth bug fixed)
|
286
|
-
2006/03/07 M Nakano (option --int bug fixed)
|
287
|
-
2007/10/03 S Takehiro (option --nocolorbar implemented)
|
288
|
-
2008/04/03 S Takehiro (option --nozero implemented)
|
289
|
-
2008/12/14 S Takehiro (option --mark implemented)
|
290
|
-
2010/03/10 Y SASAKI (change help block into RD format)
|
291
|
-
2011/01/14 T Tanigawa && S Takehiro (option --operation implemented)
|
292
|
-
2011/11/04 S Takehiro (option --time_ax implemented)
|
293
|
-
2011/11/20 S Takehiro (option --eddy implemented)
|
294
|
-
2012/02/19 S Takehiro (description for gturl format updated)
|
295
|
-
2013/01/29 T Tanigawa && S Takehiro (calculation of aspect ratio
|
296
|
-
of viewport improved)
|
297
|
-
2013/01/29 S Nishizawa && S Takehiro (sequential operation implemented)
|
298
|
-
2014/02/21 Y Naito && S Takehiro (implement DCL internal variable setting,
|
299
|
-
add option --udsfmt)
|
300
|
-
2014/02/21 S Noda && S Takehiro (add option --stddev)
|
301
|
-
2014/02/23 S Takehiro (option --tonf is changed to --tone)
|
302
|
-
2014/03/05 S Takehiro (add option --map_radius)
|
303
|
-
2014/03/10 Y Kawai && S Takehiro (setting labels for contours)
|
304
|
-
2014/04/06 S Takehiro (option --map_radius bug fix)
|
305
|
-
2014/06/27 S Nishizawa && S Takehiro (add options --xcoord, --ycoord)
|
306
|
-
2014/11/28 H Kashimura && S Takehiro (add option --diff, --tone bug fix)
|
307
|
-
2014/11/28 Y O Takahashi && S Takehiro (add option --overplot_color, --Opc)
|
308
|
-
|
309
265
|
=end
|
266
|
+
#
|
267
|
+
# = HISTORY
|
268
|
+
#
|
269
|
+
# 2004/12/14 D Tsukahara && T Horinouti(parse_gturl)
|
270
|
+
# 2005/01/08 D Tsukahara (add option --exch and able to invalid value)
|
271
|
+
# 2005/01/09 D Tsukahara (add option --animate, smooth, alternate, index )
|
272
|
+
# 2005/01/10 D Tsukahara (transpose axis with attr "positive:down" ,
|
273
|
+
# abailable loopsense_flag. )
|
274
|
+
# 2005/01/10 D Tsukahara (implement GGraph::color_bar, and margin_info,
|
275
|
+
# which file name, date, and toolname. )
|
276
|
+
# 2005/01/11 D Tsukahara ( 1. write document about OPTIONS.
|
277
|
+
# 2. add many options. more info please see document. )
|
278
|
+
# 2005/01/23 S Takehiro (add option --similar, map_axis)
|
279
|
+
# 2005/02/09 D Tsukahara && M Nakano (add option --reverse, --Gr, --map)
|
280
|
+
# 2005/02/10 D Tsukahara (change option parser (getopts => getoptlong))
|
281
|
+
# 2005/02/24 D Tsukahara (apply --range for line plot)
|
282
|
+
# 2005/06/15 S Takehiro (add option --levels, --clevels, --slevels, --patterns)
|
283
|
+
# 2005/06/17 S Takehiro (missing_value attribute setting removed)
|
284
|
+
# 2005/06/22 S Takehiro (debug, clipping control added to GGraph::annotate)
|
285
|
+
# 2005/06/23 S Takehiro (debug, option --title implemented)
|
286
|
+
# 2005/07/15 S Takehiro (option --noannotate implemented)
|
287
|
+
# 2005/08/07 S Takehiro (option --overplot implemented)
|
288
|
+
# 2005/08/09 S Takehiro && T Horinouchi (add option --help and help function.
|
289
|
+
# URL information corrected. )
|
290
|
+
# 2005/08/23 S Takehiro (multiple Gphys variables plotting
|
291
|
+
# and option --var implemented)
|
292
|
+
# 2005/08/23 S Takehiro (common methods to gp* command moved to gpcommon.rb)
|
293
|
+
# 2005/10/30 S Takehiro (option --animate recoverd)
|
294
|
+
# 2005/10/31 S Takehiro (option --smooth bug fixed)
|
295
|
+
# 2006/03/07 M Nakano (option --int bug fixed)
|
296
|
+
# 2007/10/03 S Takehiro (option --nocolorbar implemented)
|
297
|
+
# 2008/04/03 S Takehiro (option --nozero implemented)
|
298
|
+
# 2008/12/14 S Takehiro (option --mark implemented)
|
299
|
+
# 2010/03/10 Y SASAKI (change help block into RD format)
|
300
|
+
# 2011/01/14 T Tanigawa && S Takehiro (option --operation implemented)
|
301
|
+
# 2011/11/04 S Takehiro (option --time_ax implemented)
|
302
|
+
# 2011/11/20 S Takehiro (option --eddy implemented)
|
303
|
+
# 2012/02/19 S Takehiro (description for gturl format updated)
|
304
|
+
# 2013/01/29 T Tanigawa && S Takehiro (calculation of aspect ratio
|
305
|
+
# of viewport improved)
|
306
|
+
# 2013/01/29 S Nishizawa && S Takehiro (sequential operation implemented)
|
307
|
+
# 2014/02/21 Y Naito && S Takehiro (implement DCL internal variable setting,
|
308
|
+
# add option --udsfmt)
|
309
|
+
# 2014/02/21 S Noda && S Takehiro (add option --stddev)
|
310
|
+
# 2014/02/23 S Takehiro (option --tonf is changed to --tone)
|
311
|
+
# 2014/03/05 S Takehiro (add option --map_radius)
|
312
|
+
# 2014/03/10 Y Kawai && S Takehiro (setting labels for contours)
|
313
|
+
# 2014/04/06 S Takehiro (option --map_radius bug fix)
|
314
|
+
# 2014/06/27 S Nishizawa && S Takehiro (add options --xcoord, --ycoord)
|
315
|
+
# 2014/11/28 H Kashimura && S Takehiro (add option --diff, --tone bug fix)
|
316
|
+
# 2014/11/28 Y O Takahashi && S Takehiro (add option --overplot_color, --Opc)
|
317
|
+
# 2015/03/10 S Takehiro (History removes from the output of --help option)
|
318
|
+
# 2015/09/05 Y O Takahashi && S Takehiro (add option --delay)
|
319
|
+
# 2015/09/06 Y O Takahashi && S Takehiro (defalt wsn number changed)
|
320
|
+
#
|
310
321
|
#################################################
|
311
322
|
require "getoptlong" # for option_parse
|
312
323
|
require "numru/ggraph" # ggraph library
|
@@ -726,6 +737,7 @@ parser.set_options(
|
|
726
737
|
['--Gw', GetoptLong::NO_ARGUMENT],
|
727
738
|
['--smooth', GetoptLong::NO_ARGUMENT],
|
728
739
|
['--Gaw', GetoptLong::NO_ARGUMENT],
|
740
|
+
['--delay', GetoptLong::REQUIRED_ARGUMENT],
|
729
741
|
['--exch', GetoptLong::NO_ARGUMENT],
|
730
742
|
['--reverse', GetoptLong::NO_ARGUMENT],
|
731
743
|
['--Gr', GetoptLong::NO_ARGUMENT],
|
@@ -838,7 +850,11 @@ loopdim = loopdim.to_i if loopdim.to_i.to_s == loopdim
|
|
838
850
|
### set colormap
|
839
851
|
DCL.sgscmn($OPT_clrmap||1)
|
840
852
|
## open work station
|
841
|
-
DCL.
|
853
|
+
if NumRu::DCL::DCLVERSION.to_f >= 6
|
854
|
+
DCL.gropn($OPT_wsn||1)
|
855
|
+
else
|
856
|
+
DCL.gropn($OPT_wsn||4)
|
857
|
+
end
|
842
858
|
|
843
859
|
## open netcdf variables
|
844
860
|
|
@@ -935,6 +951,7 @@ while ARGV[0] do
|
|
935
951
|
if loopdim # animation
|
936
952
|
each_along_dims(gp, loopdim){|gp_subset|
|
937
953
|
proc.call(gp_subset)
|
954
|
+
sleep($OPT_delay.to_f) if ($OPT_delay && !DCL::swlget('lwait'))
|
938
955
|
}
|
939
956
|
else
|
940
957
|
proc.call(gp)
|
@@ -14,7 +14,8 @@
|
|
14
14
|
# define RARRAY_LEN(ary) (RARRAY(ary)->len)
|
15
15
|
#endif
|
16
16
|
|
17
|
-
|
17
|
+
/* for compatibility for NArray and NArray with big memory patch */
|
18
|
+
#ifndef NARRAY_BIGMEM
|
18
19
|
typedef int na_shape_t;
|
19
20
|
#endif
|
20
21
|
|
@@ -904,7 +905,9 @@ cell_integ_irreg(obj, f, z, zdim, nzbound, ccell, w)
|
|
904
905
|
}
|
905
906
|
|
906
907
|
// main loop
|
908
|
+
#pragma omp parallel for private(nzw,m,k,wa,wb,fa,fb,dz,wac,wbc,a,b,fi)
|
907
909
|
for (l=0; l<n2; l++){
|
910
|
+
#pragma omp parallel for private(nzw,m,k,wa,wb,fa,fb,dz,wac,wbc,a,b,fi)
|
908
911
|
for (j=0; j<n0; j++){
|
909
912
|
if (nzbound == Qnil) {
|
910
913
|
nzw = nz;
|
@@ -13,6 +13,16 @@
|
|
13
13
|
# define RARRAY_LEN(ary) (RARRAY(ary)->len)
|
14
14
|
#endif
|
15
15
|
|
16
|
+
/* for compatibility for NArray and NArray with big memory patch */
|
17
|
+
#ifndef NARRAY_BIGMEM
|
18
|
+
typedef int na_shape_t;
|
19
|
+
typedef int32_t na_shape_na_t; /* Usually same as na_shape_t,
|
20
|
+
but to ensure the use of NA_LINT */
|
21
|
+
#define NA_SIZE NA_LINT
|
22
|
+
#else
|
23
|
+
typedef na_shape_t na_shape_na_t;
|
24
|
+
#endif
|
25
|
+
|
16
26
|
/* cut_range : a private method for AssocCoord (used in AssocCoord#cut)
|
17
27
|
*/
|
18
28
|
static VALUE
|
@@ -21,13 +31,16 @@ assoc_coord_cut_range(self, vmins, vmaxs, crds, masks, crdaxexist, orgaxlens)
|
|
21
31
|
// All input variables are supposed to be Arrays
|
22
32
|
{
|
23
33
|
VALUE wheres, whna; // return value (Array)
|
24
|
-
int nc, ic
|
25
|
-
|
26
|
-
|
27
|
-
|
34
|
+
int nc, ic;
|
35
|
+
na_shape_t na, ia, jlen, j, klen, k, ndimk, dimk;
|
36
|
+
na_shape_t *lens, lentot, lenmax, *mod, *sub, **mlt, *jmlt, *dimk2a;
|
37
|
+
na_shape_t last_non0, l, cidx, included, whcount;
|
38
|
+
int *natype, *nomask;
|
39
|
+
int32_t **axexist;
|
40
|
+
na_shape_na_t *whptr, *whbuf;
|
28
41
|
double *vmax, *vmin, val, **dval;
|
29
42
|
float **fval;
|
30
|
-
|
43
|
+
u_int8_t **mask;
|
31
44
|
|
32
45
|
nc = RARRAY_LEN(crds); // lengths of vmins,vmaxs,crds,masks,crdaxexist
|
33
46
|
na = RARRAY_LEN(orgaxlens);
|
@@ -47,23 +60,28 @@ assoc_coord_cut_range(self, vmins, vmaxs, crds, masks, crdaxexist, orgaxlens)
|
|
47
60
|
|
48
61
|
lentot = 1;
|
49
62
|
lenmax = -1;
|
50
|
-
lens = ALLOCA_N(
|
63
|
+
lens = ALLOCA_N(na_shape_t,na);
|
51
64
|
for(ia=0; ia<na; ia++){
|
52
65
|
lens[ia] = NUM2INT( RARRAY_PTR(orgaxlens)[ia] );
|
53
66
|
lentot *= lens[ia];
|
54
67
|
if (lens[ia] > lenmax) { lenmax = lens[ia]; }
|
55
68
|
}
|
56
69
|
ndimk = ( (na==1) ? 1 : (na-1) ) ;
|
57
|
-
mod = ALLOCA_N(
|
58
|
-
sub = ALLOCA_N(
|
59
|
-
mlt = ALLOCA_N(
|
70
|
+
mod = ALLOCA_N(na_shape_t,ndimk);
|
71
|
+
sub = ALLOCA_N(na_shape_t,ndimk);
|
72
|
+
mlt = ALLOCA_N(na_shape_t*,nc);
|
60
73
|
axexist = ALLOCA_N(int32_t*,nc);
|
61
74
|
for(ic=0; ic<nc; ic++){
|
62
|
-
mlt[ic] = ALLOCA_N(
|
63
|
-
|
75
|
+
mlt[ic] = ALLOCA_N(na_shape_t,ndimk);
|
76
|
+
if ( NA_TYPE( RARRAY_PTR(crdaxexist)[ic] ) == NA_LINT ) {
|
77
|
+
axexist[ic] = NA_PTR_TYPE( RARRAY_PTR(crdaxexist)[ic], int32_t* );
|
78
|
+
} else {
|
79
|
+
rb_raise(rb_eArgError,"crdaxexist[%d] is not NArray::LINT [%s:%d]",
|
80
|
+
ic,__FILE__,__LINE__);
|
81
|
+
}
|
64
82
|
}
|
65
|
-
jmlt = ALLOCA_N(
|
66
|
-
dimk2a = ALLOCA_N(
|
83
|
+
jmlt = ALLOCA_N(na_shape_t,nc);
|
84
|
+
dimk2a = ALLOCA_N(na_shape_t,ndimk);
|
67
85
|
|
68
86
|
/* ruby objs to C for coordinates and cut params */
|
69
87
|
|
@@ -71,7 +89,7 @@ assoc_coord_cut_range(self, vmins, vmaxs, crds, masks, crdaxexist, orgaxlens)
|
|
71
89
|
vmax = ALLOCA_N(double,nc);
|
72
90
|
dval = ALLOCA_N(double*,nc);
|
73
91
|
fval = ALLOCA_N(float*,nc);
|
74
|
-
mask = ALLOCA_N(
|
92
|
+
mask = ALLOCA_N(u_int8_t*,nc);
|
75
93
|
nomask = ALLOCA_N(int,nc);
|
76
94
|
natype = ALLOCA_N(int,nc);
|
77
95
|
for(ic=0; ic<nc; ic++){
|
@@ -95,7 +113,7 @@ assoc_coord_cut_range(self, vmins, vmaxs, crds, masks, crdaxexist, orgaxlens)
|
|
95
113
|
}
|
96
114
|
|
97
115
|
/* prepare output objs */
|
98
|
-
whbuf = ALLOCA_N(
|
116
|
+
whbuf = ALLOCA_N(na_shape_na_t,lenmax);
|
99
117
|
|
100
118
|
/* main loop */
|
101
119
|
for(ia=0; ia<na; ia++){
|
@@ -185,9 +203,9 @@ assoc_coord_cut_range(self, vmins, vmaxs, crds, masks, crdaxexist, orgaxlens)
|
|
185
203
|
}
|
186
204
|
}
|
187
205
|
}
|
188
|
-
whna = na_make_object(
|
206
|
+
whna = na_make_object(NA_SIZE, 1, &whcount, cNArray);
|
189
207
|
rb_ary_push( wheres, whna );
|
190
|
-
whptr = NA_PTR_TYPE( whna,
|
208
|
+
whptr = NA_PTR_TYPE( whna, na_shape_na_t* );
|
191
209
|
for(j=0; j<whcount; j++){
|
192
210
|
whptr[j] = whbuf[j];
|
193
211
|
}
|
File without changes
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'mkmf'
|
2
|
+
gem_path = nil
|
3
|
+
|
4
|
+
if Gem.respond_to?(:find_files) and Gem.find_files("narray.h").length > 0
|
5
|
+
require "rbconfig"
|
6
|
+
so = RbConfig::CONFIG["DLEXT"]
|
7
|
+
narray_include = File.expand_path(File.dirname(Gem.find_files("narray.h")[0]))
|
8
|
+
narray_lib = File.expand_path(File.dirname(Gem.find_files("narray." + so)[0]))
|
9
|
+
else
|
10
|
+
gem_home=(`gem environment GEM_HOME`).chomp
|
11
|
+
narray_dir = Dir.glob("#{gem_home}/gems/narray-*/ext/narray").sort[-1]
|
12
|
+
if narray_dir
|
13
|
+
narray_include = narray_lib = narray_dir
|
14
|
+
else
|
15
|
+
narray_include = narray_lib = [ $sitearchdir, $vendorarchdir]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
dir_config('narray', narray_include, narray_lib)
|
19
|
+
|
20
|
+
require "narray"
|
21
|
+
if NArray.const_defined?(:SUPPORT_BIGMEM) && NArray::SUPPORT_BIGMEM
|
22
|
+
|
23
|
+
case RbConfig::CONFIG["CC"]
|
24
|
+
when "gcc"
|
25
|
+
omp_opt = "-fopenmp"
|
26
|
+
else
|
27
|
+
omp_opt = nil
|
28
|
+
end
|
29
|
+
omp_opt = arg_config("--openmp", omp_opt)
|
30
|
+
|
31
|
+
omp_opt = nil if omp_opt.to_s.empty?
|
32
|
+
|
33
|
+
if omp_opt
|
34
|
+
$CFLAGS << " " << omp_opt
|
35
|
+
$DLDFLAGS << " " << omp_opt
|
36
|
+
warn "OpenMP support: ON"
|
37
|
+
else
|
38
|
+
warn "OpenMP support: OFF"
|
39
|
+
warn "if you want to enable openmp, set --openmp=compile_option"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
create_makefile('numru/gphys_ext')
|
@@ -13,6 +13,11 @@
|
|
13
13
|
# define RARRAY_LEN(ary) (RARRAY(ary)->len)
|
14
14
|
#endif
|
15
15
|
|
16
|
+
/* for compatibility for NArray and NArray with big memory patch */
|
17
|
+
#ifndef NARRAY_BIGMEM
|
18
|
+
typedef int na_shape_t;
|
19
|
+
#endif
|
20
|
+
|
16
21
|
static VALUE
|
17
22
|
interpo_do(obj, shape_to, idxmap, val_from, missval, extrapo)
|
18
23
|
VALUE obj;
|
@@ -27,17 +32,17 @@ interpo_do(obj, shape_to, idxmap, val_from, missval, extrapo)
|
|
27
32
|
struct NARRAY *naf;
|
28
33
|
VALUE vm;
|
29
34
|
int natype;
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
35
|
+
na_shape_t *sht; // shape to
|
36
|
+
na_shape_t *shf; // shape from
|
37
|
+
na_shape_t cshf;
|
38
|
+
na_shape_t rankf, rankt, lent;
|
34
39
|
double *pt, *pf;
|
35
40
|
int nomiss;
|
36
41
|
double vmiss;
|
37
42
|
int extr;
|
38
|
-
|
43
|
+
na_shape_t i, it, kf, j, k, l;
|
39
44
|
int *mtyp;
|
40
|
-
|
45
|
+
na_shape_t *dm, *dm2, *dm2f, *dm3, *dm3f, *dm4, *dm4f;
|
41
46
|
int **di, nid, nic;
|
42
47
|
double **df, *f, a;
|
43
48
|
int *idf, idfc, *idt;
|
@@ -59,7 +64,7 @@ interpo_do(obj, shape_to, idxmap, val_from, missval, extrapo)
|
|
59
64
|
// read argument (shape_to)
|
60
65
|
|
61
66
|
rankt = RARRAY_LEN(shape_to);
|
62
|
-
sht = ALLOCA_N(
|
67
|
+
sht = ALLOCA_N(na_shape_t, rankt);
|
63
68
|
for(i=0; i<rankt; i++){
|
64
69
|
sht[i] = NUM2INT( RARRAY_PTR(shape_to)[i] );
|
65
70
|
}
|
@@ -90,13 +95,13 @@ interpo_do(obj, shape_to, idxmap, val_from, missval, extrapo)
|
|
90
95
|
}
|
91
96
|
|
92
97
|
mtyp = ALLOCA_N(int, rankf);
|
93
|
-
dm = ALLOCA_N(
|
94
|
-
dm2 = ALLOCA_N(
|
95
|
-
dm2f = ALLOCA_N(
|
96
|
-
dm3 = ALLOCA_N(
|
97
|
-
dm3f = ALLOCA_N(
|
98
|
-
dm4 = ALLOCA_N(
|
99
|
-
dm4f = ALLOCA_N(
|
98
|
+
dm = ALLOCA_N(na_shape_t, rankf);
|
99
|
+
dm2 = ALLOCA_N(na_shape_t, rankf);
|
100
|
+
dm2f = ALLOCA_N(na_shape_t, rankf);
|
101
|
+
dm3 = ALLOCA_N(na_shape_t, rankf);
|
102
|
+
dm3f = ALLOCA_N(na_shape_t, rankf);
|
103
|
+
dm4 = ALLOCA_N(na_shape_t, rankf);
|
104
|
+
dm4f = ALLOCA_N(na_shape_t, rankf);
|
100
105
|
di = ALLOCA_N(int *, rankf);
|
101
106
|
df = ALLOCA_N(double *, rankf);
|
102
107
|
nid = 0;
|
@@ -231,13 +236,13 @@ interpo_do(obj, shape_to, idxmap, val_from, missval, extrapo)
|
|
231
236
|
static void
|
232
237
|
__interpo_find_loc_1D(N, P, n, p, vmiss, extr, ids, f)
|
233
238
|
double *P, *p; // INPUT
|
234
|
-
|
239
|
+
na_shape_t N, n; // INPUT
|
235
240
|
double vmiss; // INPUT
|
236
241
|
int extr; // INPUT
|
237
242
|
int *ids; // OUTPUT
|
238
243
|
double *f; // OUTPUT
|
239
244
|
{
|
240
|
-
|
245
|
+
na_shape_t j;
|
241
246
|
int i, il, ir;
|
242
247
|
int down;
|
243
248
|
|
@@ -313,13 +318,13 @@ interpo_find_loc_1D(obj, X, x, missval, extrapo)
|
|
313
318
|
{
|
314
319
|
VALUE na_ids, na_f;
|
315
320
|
VALUE chk;
|
316
|
-
|
321
|
+
na_shape_t N, n;
|
317
322
|
struct NARRAY *na;
|
318
323
|
double *P, *p, vmiss;
|
319
324
|
int extr;
|
320
325
|
int *ids;
|
321
326
|
double *f;
|
322
|
-
|
327
|
+
na_shape_t shape[1];
|
323
328
|
|
324
329
|
// check and unwrap the input arguments
|
325
330
|
|
@@ -375,20 +380,20 @@ interpo_find_loc_1D_MD(obj, X, x, dimc, missval, extrapo)
|
|
375
380
|
{
|
376
381
|
VALUE na_ids, na_f;
|
377
382
|
VALUE chk;
|
378
|
-
|
383
|
+
na_shape_t N, n1;
|
379
384
|
struct NARRAY *na;
|
380
385
|
double *P, *p, *p1, vmiss;
|
381
386
|
int extr;
|
382
387
|
int *ids, *ids1;
|
383
388
|
double *f, *f1;
|
384
|
-
|
385
|
-
|
386
|
-
|
389
|
+
na_shape_t *shr; // shape of the result
|
390
|
+
na_shape_t *shl; // shape of multi-D loop
|
391
|
+
na_shape_t *shx; // shape of x
|
387
392
|
int dmc; // dimc
|
388
393
|
int rank, dl, dc;
|
389
|
-
|
390
|
-
|
391
|
-
|
394
|
+
na_shape_t *cshxl, *cshrl, *cshl; // cumulative shapes for looping
|
395
|
+
na_shape_t fxl; // same but only for the dimension treated here
|
396
|
+
na_shape_t il, i, j, ix, ir, totl;
|
392
397
|
|
393
398
|
// check and unwrap the input arguments
|
394
399
|
|
@@ -423,8 +428,8 @@ interpo_find_loc_1D_MD(obj, X, x, dimc, missval, extrapo)
|
|
423
428
|
|
424
429
|
// prepare output NArrays
|
425
430
|
|
426
|
-
shl = ALLOCA_N(
|
427
|
-
shr = ALLOCA_N(
|
431
|
+
shl = ALLOCA_N(na_shape_t, rank-1);
|
432
|
+
shr = ALLOCA_N(na_shape_t, rank);
|
428
433
|
shr[0] = N;
|
429
434
|
totl = 1;
|
430
435
|
for(dl=0,dc=0; dl<rank-1; dl++,dc++){
|
@@ -433,13 +438,13 @@ interpo_find_loc_1D_MD(obj, X, x, dimc, missval, extrapo)
|
|
433
438
|
totl *= shl[dl];
|
434
439
|
}
|
435
440
|
|
436
|
-
cshl = ALLOCA_N(
|
441
|
+
cshl = ALLOCA_N(na_shape_t, rank-1);
|
437
442
|
cshl[0] = 1;
|
438
443
|
for(dl=1; dl<rank-1; dl++){
|
439
444
|
cshl[dl] = cshl[dl-1]*shl[dl-1];
|
440
445
|
}
|
441
446
|
|
442
|
-
cshxl = ALLOCA_N(
|
447
|
+
cshxl = ALLOCA_N(na_shape_t, rank-1);
|
443
448
|
if(dmc==0) {
|
444
449
|
fxl = 1;
|
445
450
|
cshxl[0] = shx[0];
|
@@ -461,7 +466,7 @@ interpo_find_loc_1D_MD(obj, X, x, dimc, missval, extrapo)
|
|
461
466
|
fxl = cshxl[rank-2]*shx[rank-2];
|
462
467
|
}
|
463
468
|
|
464
|
-
cshrl = ALLOCA_N(
|
469
|
+
cshrl = ALLOCA_N(na_shape_t, rank-1);
|
465
470
|
cshrl[0] = shr[0];
|
466
471
|
for(dl=1; dl<rank-1; dl++){
|
467
472
|
cshrl[dl] = cshrl[dl-1]*shr[dl];
|