gphys 1.4.3.2 → 1.5.0
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/.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];
|