rb-grib 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|