rb-grib 0.2.0 → 0.2.1
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/ext/grib.c +74 -9
- data/lib/numru/grib/grib.rb +7 -4
- data/lib/numru/grib/setenv.rb +2 -2
- data/lib/numru/grib/version.rb +1 -1
- metadata +6 -8
data/ext/grib.c
CHANGED
@@ -102,6 +102,12 @@ struct var_list {
|
|
102
102
|
msg_array *ary;
|
103
103
|
var_list *next;
|
104
104
|
VALUE file;
|
105
|
+
long disc;
|
106
|
+
long mtabl;
|
107
|
+
long cent;
|
108
|
+
long ltabl;
|
109
|
+
long categ;
|
110
|
+
long pnum;
|
105
111
|
};
|
106
112
|
static var_list*
|
107
113
|
var_list_alloc(VALUE file)
|
@@ -150,7 +156,7 @@ push_msg_var(var_list **pvar, grib_handle *handle, VALUE file)
|
|
150
156
|
{
|
151
157
|
size_t len = MAX_VALUE_LENGTH;
|
152
158
|
char vname[MAX_VALUE_LENGTH];
|
153
|
-
|
159
|
+
/*
|
154
160
|
if (grib_get_string(handle, "shortName", vname, &len) != GRIB_SUCCESS ||
|
155
161
|
strcmp("unknown", vname) == 0) {
|
156
162
|
long id;
|
@@ -162,21 +168,48 @@ push_msg_var(var_list **pvar, grib_handle *handle, VALUE file)
|
|
162
168
|
rb_raise(rb_eRuntimeError, "cannot get variable name");
|
163
169
|
}
|
164
170
|
}
|
171
|
+
*/
|
172
|
+
long edition;
|
173
|
+
long cent, mtabl, pnum;
|
174
|
+
long disc, ltabl, categ;
|
165
175
|
long ni, nj, ltype_id;
|
166
176
|
char gtype[MAX_VALUE_LENGTH];
|
167
177
|
len = MAX_VALUE_LENGTH;
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
178
|
+
|
179
|
+
grib_get_long(handle, "editionNumber", &edition);
|
180
|
+
grib_get_long(handle, "centre", ¢);
|
181
|
+
if(grib_get_long(handle, "Ni", &ni) != GRIB_SUCCESS ||
|
182
|
+
grib_get_long(handle, "Nj", &nj) != GRIB_SUCCESS ||
|
183
|
+
grib_get_string(handle, "typeOfGrid", gtype, &len) != GRIB_SUCCESS ||
|
184
|
+
(grib_get_long(handle, "indicatorOfTypeOfLevel", <ype_id) != GRIB_SUCCESS && grib_get_long(handle, "typeOfFirstFixedSurface", <ype_id) != GRIB_SUCCESS))
|
172
185
|
rb_raise(rb_eRuntimeError, "connot identify grid type");
|
186
|
+
switch (edition) {
|
187
|
+
case 1:
|
188
|
+
if(grib_get_long(handle, "table2Version", &mtabl) != GRIB_SUCCESS ||
|
189
|
+
grib_get_long(handle, "indicatorOfParameter", &pnum) != GRIB_SUCCESS)
|
190
|
+
rb_raise(rb_eRuntimeError, "connot identify variable");
|
191
|
+
break;
|
192
|
+
case 2:
|
193
|
+
if (grib_get_long(handle, "tablesVersion", &mtabl) != GRIB_SUCCESS ||
|
194
|
+
grib_get_long(handle, "parameterNumber", &pnum) != GRIB_SUCCESS ||
|
195
|
+
grib_get_long(handle, "discipline", &disc) != GRIB_SUCCESS ||
|
196
|
+
grib_get_long(handle, "localTablesVersion", <abl) != GRIB_SUCCESS ||
|
197
|
+
grib_get_long(handle, "parameterCategory", &categ) != GRIB_SUCCESS)
|
198
|
+
rb_raise(rb_eRuntimeError, "connot identify variable");
|
173
199
|
}
|
174
200
|
var_list *last = NULL;
|
175
201
|
var_list *var = pvar[0];
|
176
202
|
if (var) {
|
177
203
|
while (var) {
|
178
|
-
if (
|
179
|
-
|
204
|
+
if (var->cent == cent && var->mtabl == mtabl && var->pnum == pnum &&
|
205
|
+
var->ni == ni && var->nj == nj &&
|
206
|
+
strcmp(var->gtype,gtype)==0 &&
|
207
|
+
var->ltype_id==ltype_id) {
|
208
|
+
if (edition == 1)
|
209
|
+
push_msg(var->ary, handle);
|
210
|
+
else if (edition == 2 &&
|
211
|
+
var->disc == disc && var->ltabl == ltabl && var->categ == categ)
|
212
|
+
push_msg(var->ary, handle);
|
180
213
|
return;
|
181
214
|
}
|
182
215
|
last = var;
|
@@ -186,14 +219,46 @@ push_msg_var(var_list **pvar, grib_handle *handle, VALUE file)
|
|
186
219
|
var_list *var_new = var_list_alloc(file);
|
187
220
|
if (var_new == NULL)
|
188
221
|
rb_raise(rb_eRuntimeError, "cannot allocate memory");
|
222
|
+
var_new->cent = cent;
|
223
|
+
var_new->mtabl = mtabl;
|
224
|
+
var_new->pnum = pnum;
|
225
|
+
if (edition == 2) {
|
226
|
+
var_new->disc = disc;
|
227
|
+
var_new->ltabl = ltabl;
|
228
|
+
var_new->categ = categ;
|
229
|
+
}
|
189
230
|
var_new->ni = ni;
|
190
231
|
var_new->nj = nj;
|
191
232
|
var_new->ltype_id = ltype_id;
|
192
|
-
strcpy(var_new->vname, vname);
|
193
233
|
strcpy(var_new->gtype, gtype);
|
234
|
+
|
194
235
|
len = MAX_VALUE_LENGTH;
|
236
|
+
bzero(vname, len);
|
237
|
+
if (grib_get_string(handle, "shortName", vname, &len) != GRIB_SUCCESS ||
|
238
|
+
strcmp("unknown", vname) == 0) {
|
239
|
+
sprintf(vname, "id%ld", pnum);
|
240
|
+
}
|
241
|
+
strcpy(var_new->vname, vname);
|
242
|
+
|
243
|
+
len = MAX_VALUE_LENGTH;
|
244
|
+
bzero(vname, len);
|
195
245
|
check_error(grib_get_string(handle, "typeOfLevel", vname, &len));
|
196
|
-
|
246
|
+
if (strcmp(vname, "unknown")==0 || strcmp(vname,"isobaricInhPa")== 0 || strcmp(vname,"pl")==0)
|
247
|
+
strcpy(var_new->ltype, vname);
|
248
|
+
else {
|
249
|
+
int i, j;
|
250
|
+
var_new->ltype[0] = vname[0];
|
251
|
+
for (i=1,j=1; i<strlen(vname); i++) {
|
252
|
+
if (vname[i]>=65 && vname[i]<=90) {
|
253
|
+
var_new->ltype[j] = vname[i]+32;
|
254
|
+
j++;
|
255
|
+
}
|
256
|
+
}
|
257
|
+
if (j==1)
|
258
|
+
strcpy(var_new->ltype, vname);
|
259
|
+
else
|
260
|
+
var_new->ltype[j] = 0;
|
261
|
+
}
|
197
262
|
push_msg(var_new->ary, handle);
|
198
263
|
if (last)
|
199
264
|
last->next = var_new;
|
data/lib/numru/grib/grib.rb
CHANGED
@@ -75,9 +75,12 @@ module NumRu
|
|
75
75
|
get_value("pressureUnits")
|
76
76
|
end
|
77
77
|
def date
|
78
|
+
return DateTime.parse(date_raw)
|
79
|
+
end
|
80
|
+
def date_raw
|
78
81
|
d = get_value("dataDate").to_s.rjust(8,"0")
|
79
82
|
h = get_value("dataTime").to_s.rjust(4,"0")
|
80
|
-
|
83
|
+
d << h
|
81
84
|
end
|
82
85
|
def step
|
83
86
|
get_value("step")
|
@@ -277,7 +280,7 @@ module NumRu
|
|
277
280
|
end
|
278
281
|
private
|
279
282
|
def get_time(date)
|
280
|
-
(date - Day0).to_f*24
|
283
|
+
(DateTime.parse(date) - Day0).to_f*24
|
281
284
|
end
|
282
285
|
def init
|
283
286
|
@attr = Hash.new
|
@@ -312,7 +315,7 @@ module NumRu
|
|
312
315
|
hash = Hash.new
|
313
316
|
msgs.each_with_index do |msg,i|
|
314
317
|
zv = msg.z_value
|
315
|
-
tv =
|
318
|
+
tv = msg.date_raw
|
316
319
|
stv = msg.step
|
317
320
|
tiv = msg.time_interval
|
318
321
|
env = msg.ensemble_member
|
@@ -363,7 +366,7 @@ module NumRu
|
|
363
366
|
d = def_dim("time", -1)
|
364
367
|
d.put_att("long_name","time")
|
365
368
|
d.put_att("units","hours since #{Day0.strftime('%Y-%m-%d %H:%M:%S')}")
|
366
|
-
d.put(NArray.to_na(t))
|
369
|
+
d.put(NArray.to_na(t.map{|tv|get_time(tv)}))
|
367
370
|
end
|
368
371
|
if st.length == 1
|
369
372
|
put_att("step", [msg.step]) if msg.step
|
data/lib/numru/grib/setenv.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
def_path = File.join(File.expand_path(File.dirname(__FILE__)),"
|
1
|
+
def_path = File.join(File.expand_path(File.dirname(__FILE__)),"definitions")
|
2
2
|
if File.exist?(def_path)
|
3
3
|
env_name = 'GRIB_DEFINITION_PATH'
|
4
4
|
if gdp = ENV[env_name]
|
5
5
|
ENV[env_name] = "#{gdp}:#{def_path}"
|
6
6
|
else
|
7
|
-
path = `grib_info -d
|
7
|
+
path = `grib_info -d`.strip
|
8
8
|
if File.exist?(path)
|
9
9
|
ENV[env_name] = "#{path}:#{def_path}"
|
10
10
|
end
|
data/lib/numru/grib/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rb-grib
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 21
|
5
|
+
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 1
|
10
|
+
version: 0.2.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Seiya Nishizawa
|
@@ -15,8 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
19
|
-
default_executable:
|
18
|
+
date: 2012-02-21 00:00:00 Z
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
22
21
|
name: rspec
|
@@ -107,7 +106,6 @@ files:
|
|
107
106
|
- rb-grib.gemspec
|
108
107
|
- spec/grib_read_spec.rb
|
109
108
|
- spec/spec_helper.rb
|
110
|
-
has_rdoc: true
|
111
109
|
homepage: http://ruby.gfd-dennou.org/products/rb-grib/
|
112
110
|
licenses: []
|
113
111
|
|
@@ -137,7 +135,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
137
135
|
requirements: []
|
138
136
|
|
139
137
|
rubyforge_project: rb-grib
|
140
|
-
rubygems_version: 1.
|
138
|
+
rubygems_version: 1.8.11
|
141
139
|
signing_key:
|
142
140
|
specification_version: 3
|
143
141
|
summary: Ruby class library to hanlde GRIB file
|