coderunner 0.11.0 → 0.11.1

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -2,6 +2,10 @@ source "http://rubygems.org"
2
2
  # Add dependencies required to use your gem here.
3
3
  # Example:
4
4
  # gem "activesupport", ">= 2.3.5"
5
+ gem "graphkit", ">= 0.2.0"
6
+ gem "rubyhacks", ">= 0.1.0"
7
+ gem "gsl", ">= 1.12.0"
8
+ gem "ruby-netcdf", ">= 0.6.6"
5
9
 
6
10
  # Add dependencies to develop your gem here.
7
11
  # Include everything needed to run rake, tests, features, etc.
data/Rakefile CHANGED
@@ -22,6 +22,8 @@ Jeweler::Tasks.new do |gem|
22
22
  gem.description = %Q{CodeRunner is a framework for the automated running and analysis of simulations. It automatically generates any necessary input files, organises the output data and analyses it. Because it is a modular system, it can easily be customised to work with any system and any simulation code. One of its greatest strengths is that it is independent of any one simulation code; thus it can easily plot and compare the data from different codes.}
23
23
  gem.email = "edmundhighcock@sourceforge.net"
24
24
  gem.authors = ["Edmund Highcock"]
25
+ gem.extensions = "ext/extconf.rb"
26
+ gem.files.include('ext/*.c', 'include/*.h', 'ext/*.rb')
25
27
  # dependencies defined in Gemfile
26
28
  end
27
29
  Jeweler::RubygemsDotOrgTasks.new
@@ -33,6 +35,7 @@ Rake::TestTask.new(:test) do |test|
33
35
  test.verbose = true
34
36
  end
35
37
 
38
+
36
39
  #require 'rcov/rcovtask'
37
40
  #Rcov::RcovTask.new do |test|
38
41
  #test.libs << 'test'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.11.0
1
+ 0.11.1
@@ -0,0 +1,89 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "coderunner"
8
+ s.version = "0.11.1"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Edmund Highcock"]
12
+ s.date = "2012-10-08"
13
+ s.description = "CodeRunner is a framework for the automated running and analysis of simulations. It automatically generates any necessary input files, organises the output data and analyses it. Because it is a modular system, it can easily be customised to work with any system and any simulation code. One of its greatest strengths is that it is independent of any one simulation code; thus it can easily plot and compare the data from different codes."
14
+ s.email = "edmundhighcock@sourceforge.net"
15
+ s.extensions = ["ext/extconf.rb"]
16
+ s.extra_rdoc_files = [
17
+ "LICENSE.txt",
18
+ "README.md",
19
+ "README.rdoc"
20
+ ]
21
+ s.files = [
22
+ ".document",
23
+ "Gemfile",
24
+ "LICENSE.txt",
25
+ "README.md",
26
+ "README.rdoc",
27
+ "Rakefile",
28
+ "VERSION",
29
+ "coderunner.gemspec",
30
+ "ext/code_runner_ext.c",
31
+ "ext/extconf.rb",
32
+ "ext/graph_kit.c",
33
+ "include/code_runner_ext.h",
34
+ "include/graph_kit.h",
35
+ "lib/code_runner_extension.rb",
36
+ "lib/coderunner.rb",
37
+ "lib/coderunner/class_methods.rb",
38
+ "lib/coderunner/fortran_namelist.rb",
39
+ "lib/coderunner/graphs_and_films.rb",
40
+ "lib/coderunner/heuristic_run_methods.rb",
41
+ "lib/coderunner/instance_methods.rb",
42
+ "lib/coderunner/interactive_methods.rb",
43
+ "lib/coderunner/long_regexen.rb",
44
+ "lib/coderunner/merged_code_runner.rb",
45
+ "lib/coderunner/run.rb",
46
+ "test/helper.rb",
47
+ "test/test_coderunner.rb"
48
+ ]
49
+ s.homepage = "http://coderunner.sourceforge.net"
50
+ s.licenses = ["GPLv3"]
51
+ s.require_paths = ["lib"]
52
+ s.rubyforge_project = "coderunner"
53
+ s.rubygems_version = "1.8.24"
54
+ s.summary = "A framework for the automated running and analysis of simulations."
55
+
56
+ if s.respond_to? :specification_version then
57
+ s.specification_version = 3
58
+
59
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
60
+ s.add_runtime_dependency(%q<graphkit>, [">= 0.2.0"])
61
+ s.add_runtime_dependency(%q<rubyhacks>, [">= 0.1.0"])
62
+ s.add_runtime_dependency(%q<gsl>, [">= 1.12.0"])
63
+ s.add_runtime_dependency(%q<ruby-netcdf>, [">= 0.6.6"])
64
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
65
+ s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
66
+ s.add_development_dependency(%q<bundler>, ["> 1.0.0"])
67
+ s.add_development_dependency(%q<jeweler>, ["~> 1.8.4"])
68
+ else
69
+ s.add_dependency(%q<graphkit>, [">= 0.2.0"])
70
+ s.add_dependency(%q<rubyhacks>, [">= 0.1.0"])
71
+ s.add_dependency(%q<gsl>, [">= 1.12.0"])
72
+ s.add_dependency(%q<ruby-netcdf>, [">= 0.6.6"])
73
+ s.add_dependency(%q<shoulda>, [">= 0"])
74
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
75
+ s.add_dependency(%q<bundler>, ["> 1.0.0"])
76
+ s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
77
+ end
78
+ else
79
+ s.add_dependency(%q<graphkit>, [">= 0.2.0"])
80
+ s.add_dependency(%q<rubyhacks>, [">= 0.1.0"])
81
+ s.add_dependency(%q<gsl>, [">= 1.12.0"])
82
+ s.add_dependency(%q<ruby-netcdf>, [">= 0.6.6"])
83
+ s.add_dependency(%q<shoulda>, [">= 0"])
84
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
85
+ s.add_dependency(%q<bundler>, ["> 1.0.0"])
86
+ s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
87
+ end
88
+ end
89
+
@@ -0,0 +1,17 @@
1
+ #include "code_runner_ext.h"
2
+
3
+
4
+ static VALUE code_runner_ext_hello_world()
5
+ {
6
+ printf("Hello world");
7
+ return Qnil;
8
+ }
9
+ void Init_code_runner_ext()
10
+ {
11
+ /*printf("HERE!!!");*/
12
+ ccode_runner_ext = rb_define_class("CodeRunnerExt", rb_cObject);
13
+ rb_define_method(ccode_runner_ext, "hello_world", code_runner_ext_hello_world, 0);
14
+ Init_graph_kit();
15
+ }
16
+
17
+ /*printf("HERE!!!");*/
data/ext/extconf.rb ADDED
@@ -0,0 +1,9 @@
1
+ require 'mkmf'
2
+
3
+ $CFLAGS = " -Wall -I../include "
4
+
5
+ srcs = Dir.glob("*.c")
6
+
7
+ $objs = srcs.collect { |f| f.sub(".c", ".o") }
8
+
9
+ create_makefile("code_runner_ext")
data/ext/graph_kit.c ADDED
@@ -0,0 +1,647 @@
1
+ #include "code_runner_ext.h"
2
+
3
+ /* RANKS:*/
4
+ /*0 --> [1]*/
5
+ /*1 --> [1, 1]*/
6
+ /*2 --> [1, 1, 1]*/
7
+ /*3 --> [1, 1, 2]*/
8
+ /*4 --> [2, 2, 2]*/
9
+ /*5 --> [2, 2, 2, 2]*/
10
+ /*6 --> [1, 1, 1, 1]*/
11
+ /*7 --> [1, 1, 2, 2]*/
12
+ /*8 --> [1, 1, 1, 3]*/
13
+ /*9 --> [3, 3, 3, 3]*/
14
+
15
+ inline int rank_switch(VALUE data_kit){
16
+ return FIX2INT(RFCALL_10_ON(
17
+ data_kit, "rank_c_switch"));
18
+ }
19
+
20
+ void get_data_pointer(VALUE data_kit, VALUE * dp){
21
+ /*VALUE * dp;*/
22
+ VALUE * axes;
23
+ int i, nranks;
24
+
25
+ nranks = FIX2INT(RFCALL_10_ON(
26
+ RFCALL_10_ON(data_kit,"ranks"),
27
+ "size"));
28
+ /*dp = ALLOC_N(VALUE, nranks);*/
29
+ axes = RARRAY_PTR(RFCALL_10_ON(data_kit, "axes_array"));
30
+ for (i=0;i<nranks;i++)
31
+ dp[i] = RFCALL_10_ON(axes[i], "data");
32
+ return;
33
+ }
34
+
35
+ enum tasks {
36
+ PRINT_POINTS,
37
+ COUNT_CELLS,
38
+ PRINT_CELLS,
39
+ COUNT_CELL_TYPES,
40
+ PRINT_CELL_TYPES,
41
+ PRINT_POINT_DATA,
42
+ PRINT_DIMENSIONS
43
+ };
44
+
45
+
46
+ void vtk_legacy_data_kit_loop(enum tasks task, FILE * file, VALUE data_kit, int *cell_count, int *number_count){
47
+ VALUE * data_ptr, *shape_last, *axes, *ranks;
48
+ int * c_shape_last;
49
+ int i, j, k, data_size;
50
+ int ni, nj, nk, nc;
51
+ int nranks, rank_last;
52
+ int cell_size;
53
+ int cell_type;
54
+ /*int cell_points[8];*/
55
+
56
+ axes = RARRAY_PTR(RFCALL_10_ON(data_kit, "axes_array"));
57
+ ranks = RARRAY_PTR(RFCALL_10_ON(data_kit, "ranks"));
58
+ /*nranks = FIX2INT(RFCALL_10_ON(ranks,"size"));*/
59
+ /*nranks = sizeof(ranks)/sizeof(VALUE);*/
60
+ nranks = FIX2INT(RFCALL_10_ON(
61
+ RFCALL_10_ON(data_kit,"ranks"),
62
+ "size"));
63
+ data_ptr = ALLOCA_N(VALUE, nranks);
64
+ get_data_pointer(data_kit, data_ptr);
65
+ /*nranks = sizeof(data_ptr)/sizeof(VALUE);*/
66
+ /*CR_PINT2("nranks", nranks);*/
67
+ shape_last = RARRAY_PTR(
68
+ RFCALL_10_ON(axes[nranks-1], "shape"));
69
+ CR_INT_ARY_R2C_STACK(
70
+ RFCALL_10_ON(axes[nranks-1], "shape"),
71
+ c_shape_last);
72
+ ni = c_shape_last[0];
73
+ nj = c_shape_last[1];
74
+ nk = c_shape_last[2];
75
+ rank_last = FIX2INT(ranks[nranks-1]);
76
+ /*CR_PINT2("rank_last", rank_last);*/
77
+
78
+ data_size = 1;
79
+ for(i=0;i<nranks;i++)
80
+ data_size *= c_shape_last[i];
81
+
82
+
83
+ /*CR_PINT2("data_size", data_size);*/
84
+ switch(task){
85
+ case PRINT_POINTS:
86
+ switch(rank_switch(data_kit)){
87
+ case 0:
88
+ for(i=0;i<data_size;i++)
89
+ fprintf(file, "0 %d %e\n", i,
90
+ NUM2DBL( RFCALL_11_ON( data_ptr[0], "[]", INT2FIX(i))));
91
+ break;
92
+ case 1:
93
+ for(i=0;i<data_size;i++)
94
+ fprintf(file, "0 %e %e\n",
95
+ NUM2DBL( RFCALL_11_ON( data_ptr[0], "[]", INT2FIX(i))),
96
+ NUM2DBL( RFCALL_11_ON( data_ptr[1], "[]", INT2FIX(i)))
97
+ );
98
+ break;
99
+ case 2: /*[1,1,1]*/
100
+ case 6: /*[1,1,1,1]*/
101
+ for(i=0;i<data_size;i++)
102
+ fprintf(file, "%e %e %e\n",
103
+ NUM2DBL( RFCALL_11_ON( data_ptr[0], "[]", INT2FIX(i))),
104
+ NUM2DBL( RFCALL_11_ON( data_ptr[1], "[]", INT2FIX(i))),
105
+ NUM2DBL( RFCALL_11_ON( data_ptr[2], "[]", INT2FIX(i)))
106
+ );
107
+ break;
108
+ case 3: /*[1,1,2]*/
109
+ case 7: /*[1,1,2,2]*/
110
+ for(i=0;i<c_shape_last[0];i++)
111
+ for(j=0;j<c_shape_last[1];j++)
112
+ fprintf(file, "%e %e %e\n",
113
+ NUM2DBL(CR_TELMT_R1(data_ptr[0], i)),
114
+ NUM2DBL(CR_TELMT_R1(data_ptr[1], j)),
115
+ NUM2DBL(CR_TELMT_R2(data_ptr[2], i, j))
116
+ );
117
+ break;
118
+ case 4: /*[2,2,2]*/
119
+ case 5: /*[2,2,2,2]*/
120
+ for(i=0;i<c_shape_last[0];i++)
121
+ for(j=0;j<c_shape_last[1];j++)
122
+ fprintf(file, "%e %e %e\n",
123
+ NUM2DBL(CR_TELMT_R2(data_ptr[0],i,j)),
124
+ NUM2DBL(CR_TELMT_R2(data_ptr[1],i,j)),
125
+ NUM2DBL(CR_TELMT_R2(data_ptr[2],i,j))
126
+ );
127
+ break;
128
+ case 8: /*[1,1,1,3]*/
129
+ for(i=0;i<c_shape_last[0];i++)
130
+ for(j=0;j<c_shape_last[1];j++)
131
+ for(k=0;k<c_shape_last[2];k++)
132
+ fprintf(file, "%e %e %e\n",
133
+ NUM2DBL(CR_TELMT_R1(data_ptr[0], i)),
134
+ NUM2DBL(CR_TELMT_R1(data_ptr[1], j)),
135
+ NUM2DBL(CR_TELMT_R1(data_ptr[2], k))
136
+ );
137
+ break;
138
+ case 9: /*[3,3,3,3]*/
139
+ for(i=0;i<c_shape_last[0];i++)
140
+ for(j=0;j<c_shape_last[1];j++)
141
+ for(k=0;k<c_shape_last[2];k++)
142
+ fprintf(file, "%e %e %e\n",
143
+ NUM2DBL(CR_TELMT_R3(data_ptr[0],i,j,k)),
144
+ NUM2DBL(CR_TELMT_R3(data_ptr[1],i,j,k)),
145
+ NUM2DBL(CR_TELMT_R3(data_ptr[2],i,j,k))
146
+ );
147
+ break;
148
+
149
+
150
+
151
+ }
152
+ break; /*switch(task)*/
153
+ case COUNT_CELLS:
154
+ switch (rank_switch(data_kit)){
155
+ case 0: /*[1]*/
156
+ case 1: /*[1,1]*/
157
+ case 2: /*[1,1,1]*/
158
+ case 6: /*[1,1,1,1]*/
159
+ *cell_count += c_shape_last[0]-1;
160
+ *number_count += 3*(c_shape_last[0]-1);
161
+ break;
162
+ case 3: /*[1,1,2]*/
163
+ case 4: /*[2,2,2]*/
164
+ case 7: /*[1,1,2,2]*/
165
+ case 5: /*[2,2,2,2]*/
166
+ cell_size=1;
167
+ if (ni>1) cell_size*=2;
168
+ if (nj>1) cell_size*=2;
169
+ for(i=0;i<c_shape_last[0];i++)
170
+ for(j=0;j<c_shape_last[1];j++){
171
+ if (
172
+ !(
173
+ (ni == 1 || (i+1) < ni)
174
+ &&
175
+ (nj == 1 || (j+1) < nj)
176
+ )
177
+ ) continue;
178
+ *cell_count+=1;
179
+ *number_count+= cell_size;
180
+ *number_count+=1;
181
+
182
+ }
183
+ break;
184
+ case 8: /*[1,1,1,3]*/
185
+ case 9: /*[3,3,3,3]*/
186
+ cell_size=1;
187
+ if (ni>1) cell_size*=2;
188
+ if (nj>1) cell_size*=2;
189
+ if (nk>1) cell_size*=2;
190
+ for(i=0;i<c_shape_last[0];i++)
191
+ for(j=0;j<c_shape_last[1];j++)
192
+ for(k=0;k<c_shape_last[2];k++){
193
+ if (
194
+ !(
195
+ (ni == 1 || (i+1) < ni)
196
+ &&
197
+ (nj == 1 || (j+1) < nj)
198
+ &&
199
+ (nk == 1 || (k+1) < nk)
200
+ )
201
+ ) continue;
202
+ *cell_count+=1;
203
+ *number_count+= cell_size;
204
+ *number_count+=1;
205
+
206
+ }
207
+ break;
208
+
209
+
210
+ }
211
+ break;
212
+ case PRINT_CELLS:
213
+ /*CR_PSTR("HERE!");*/
214
+ switch (rank_switch(data_kit)){
215
+ case 0: /*[1]*/
216
+ case 1: /*[1,1]*/
217
+ case 2: /*[1,1,1]*/
218
+ case 6: /*[1,1,1,1]*/
219
+ for (i=0;i<c_shape_last[0]-1;i++){
220
+ fprintf(file, "2 %d %d\n", *number_count, ++*number_count);
221
+ *number_count+=1;
222
+ }
223
+ /**cell_count += c_shape_last[0]-1;*/
224
+ /**number_count += 3*(c_shape_last[0]-1);*/
225
+ break;
226
+ case 3: /*[1,1,2]*/
227
+ case 4: /*[2,2,2]*/
228
+ case 7: /*[1,1,2,2]*/
229
+ case 5: /*[2,2,2,2]*/
230
+ /*cell_size = (ni>1?(nj>1?4:2):1);*/
231
+ cell_size=1;
232
+ if (ni>1) cell_size*=2;
233
+ if (nj>1) cell_size*=2;
234
+ nc = *number_count;
235
+ for(i=0;i<c_shape_last[0];i++)
236
+ for(j=0;j<c_shape_last[1];j++){
237
+ *number_count+=1;
238
+ if (
239
+ !(
240
+ (ni == 1 || (i+1) < ni)
241
+ &&
242
+ (nj == 1 || (j+1) < nj)
243
+ )
244
+ ) continue;
245
+ /**cell_count+=1;*/
246
+ /**number_count+= cell_size; */
247
+ if (ni>1){
248
+ if (nj>1)
249
+ fprintf(file,
250
+ "4 %d %d %d %d\n",
251
+ i*nj+j+nc,
252
+ i*(nj)+j+1+nc,
253
+ (i+1)*nj+j+1+nc,
254
+ (i+1)*nj+j+nc);
255
+ else
256
+ fprintf(file,
257
+ "2 %d %d\n",
258
+ i*nj+j+nc,
259
+ (i+1)*nj+j+nc);
260
+ }
261
+ else{
262
+ if (nj>1)
263
+ fprintf(file,
264
+ "2 %d %d\n",
265
+ i*nj+j+nc,
266
+ i*(nj)+j+1+nc);
267
+ else
268
+ fprintf(file, "1 %d\n", i*nj+j+nc);
269
+ }
270
+
271
+ }
272
+ break;
273
+ case 8: /*[1,1,1,3]*/
274
+ case 9: /*[3,3,3,3]*/
275
+ /*CR_PSTR("HERE!2");*/
276
+ cell_size=1;
277
+ if (ni>1) cell_size*=2;
278
+ if (nj>1) cell_size*=2;
279
+ if (nk>1) cell_size*=2;
280
+ nc = *number_count;
281
+ /*CR_PINT2("nc", nc);*/
282
+ /*nc = 0;*/
283
+ for(i=0;i<c_shape_last[0];i++)
284
+ for(j=0;j<c_shape_last[1];j++)
285
+ for(k=0;k<c_shape_last[2];k++){
286
+ *number_count+=1;
287
+ if (
288
+ !(
289
+ (ni == 1 || (i+1) < ni)
290
+ &&
291
+ (nj == 1 || (j+1) < nj)
292
+ &&
293
+ (nk == 1 || (k+1) < nk)
294
+ )
295
+ ) continue;
296
+ /**cell_count+=1;*/
297
+ /**number_count+=1;*/
298
+ if(ni>1){
299
+ if(nj>1){
300
+ if(nk>1)
301
+ fprintf(file,
302
+ "8 %d %d %d %d %d %d %d %d\n",
303
+ i*(nj*nk)+j*nk+k+nc,
304
+ i*(nj*nk)+j*nk+k+1+nc,
305
+ i*(nj*nk)+(j+1)*nk+k+nc,
306
+ i*(nj*nk)+(j+1)*nk+k+1+nc,
307
+ (i+1)*(nj*nk)+j*nk+k+nc,
308
+ (i+1)*(nj*nk)+j*nk+k+1+nc,
309
+ (i+1)*(nj*nk)+(j+1)*nk+k+nc,
310
+ (i+1)*(nj*nk)+(j+1)*nk+k+1+nc
311
+ );
312
+ else
313
+ fprintf(file,
314
+ "4 %d %d %d %d\n",
315
+ i*(nj*nk)+j*nk+k+nc,
316
+ i*(nj*nk)+(j+1)*nk+k+nc,
317
+
318
+ (i+1)*(nj*nk)+(j+1)*nk+k+nc,
319
+ (i+1)*(nj*nk)+j*nk+k+nc
320
+ );
321
+ }
322
+ else{
323
+ if(nk>1)
324
+ fprintf(file,
325
+ "4 %d %d %d %d\n",
326
+ i*(nj*nk)+j*nk+k+nc,
327
+ i*(nj*nk)+j*nk+k+1+nc,
328
+
329
+ (i+1)*(nj*nk)+j*nk+k+1+nc,
330
+ (i+1)*(nj*nk)+j*nk+k+nc
331
+ );
332
+ else
333
+ fprintf(file,
334
+ "2 %d %d\n",
335
+ i*(nj*nk)+j*nk+k+nc,
336
+ (i+1)*(nj*nk)+j*nk+k+nc
337
+ );
338
+ }
339
+ }
340
+ else{
341
+ if(nj>1){
342
+ if(nk>1)
343
+ fprintf(file,
344
+ "4 %d %d %d %d\n",
345
+ i*(nj*nk)+j*nk+k+nc,
346
+ i*(nj*nk)+j*nk+k+1+nc,
347
+
348
+ i*(nj*nk)+(j+1)*nk+k+1+nc,
349
+ i*(nj*nk)+(j+1)*nk+k+nc
350
+ );
351
+ else
352
+ fprintf(file,
353
+ "2 %d %d\n",
354
+ i*(nj*nk)+j*nk+k+nc,
355
+ i*(nj*nk)+(j+1)*nk+k+nc
356
+ );
357
+ }
358
+ else{
359
+ if(nk>1)
360
+ fprintf(file,
361
+ "2 %d %d\n",
362
+ i*(nj*nk)+j*nk+k+nc,
363
+ i*(nj*nk)+j*nk+k+1+nc
364
+ );
365
+ else
366
+ fprintf(file,
367
+ "1 %d\n",
368
+ i*(nj*nk)+j*nk+k+nc
369
+ );
370
+ }
371
+ }
372
+
373
+ }
374
+ break;
375
+
376
+
377
+ } /* end switch(rank_switch))*/
378
+ break;
379
+ case PRINT_CELL_TYPES:
380
+ switch (rank_switch(data_kit)){
381
+ case 0: /*[1]*/
382
+ case 1: /*[1,1]*/
383
+ case 2: /*[1,1,1]*/
384
+ case 6: /*[1,1,1,1]*/
385
+ for (i=0;i<c_shape_last[0]-1;i++)
386
+ fprintf(file, "3\n");
387
+ /**cell_count += c_shape_last[0]-1;*/
388
+ /**number_count += 3*(c_shape_last[0]-1);*/
389
+ break;
390
+ case 3: /*[1,1,2]*/
391
+ case 4: /*[2,2,2]*/
392
+ case 7: /*[1,1,2,2]*/
393
+ case 5: /*[2,2,2,2]*/
394
+ /*cell_size = (ni>1?(nj>1?4:2):1);*/
395
+ cell_size=1;
396
+ if (ni>1) cell_size*=2;
397
+ if (nj>1) cell_size*=2;
398
+ switch(cell_size){
399
+ case 4:
400
+ cell_type = 7; break;
401
+ case 2:
402
+ cell_type = 3; break;
403
+ case 1:
404
+ cell_type = 1; break;
405
+ }
406
+
407
+
408
+ for(i=0;i<c_shape_last[0];i++)
409
+ for(j=0;j<c_shape_last[1];j++){
410
+ if (
411
+ !(
412
+ (ni == 1 || (i+1) < ni)
413
+ &&
414
+ (nj == 1 || (j+1) < nj)
415
+ )
416
+ ) continue;
417
+ /**cell_count+=1;*/
418
+ /**number_count+= cell_size; */
419
+ /**number_count+=1;*/
420
+ fprintf(file, "%d\n", cell_type);
421
+
422
+ }
423
+ break;
424
+ case 8: /*[1,1,1,3]*/
425
+ case 9: /*[3,3,3,3]*/
426
+ cell_size=1;
427
+ if (ni>1) cell_size*=2;
428
+ if (nj>1) cell_size*=2;
429
+ if (nk>1) cell_size*=2;
430
+ switch(cell_size){
431
+ case 8:
432
+ cell_type = 11; break; /*3D cells, see www.vtk.org/VTK/img/file-formats.pdf*/
433
+ case 4:
434
+ cell_type = 7; break; /*Polygons*/
435
+ case 2:
436
+ cell_type = 3; break; /*Lines*/
437
+ case 1:
438
+ cell_type = 1; break; /*Points*/
439
+ }
440
+ for(i=0;i<c_shape_last[0];i++)
441
+ for(j=0;j<c_shape_last[1];j++)
442
+ for(k=0;k<c_shape_last[2];k++){
443
+ if (
444
+ !(
445
+ (ni == 1 || (i+1) < ni)
446
+ &&
447
+ (nj == 1 || (j+1) < nj)
448
+ &&
449
+ (nk == 1 || (k+1) < nk)
450
+ )
451
+ ) continue;
452
+ fprintf(file, "%d\n", cell_type);
453
+
454
+ }
455
+ break;
456
+
457
+
458
+ } /*end switch rank_switch*/
459
+ break;
460
+ case PRINT_POINT_DATA:
461
+ switch (rank_switch(data_kit)){
462
+ case 0: /*[1]*/
463
+ case 1: /*[1,1]*/
464
+ case 2: /*[1,1,1]*/
465
+ for (i=0;i<c_shape_last[0]-1;i++)
466
+ fprintf(file, "%d\n", 0);
467
+ break;
468
+ case 6: /*[1,1,1,1]*/
469
+ for (i=0;i<c_shape_last[0]-1;i++)
470
+ fprintf(file, "%e\n",
471
+ NUM2DBL(CR_TELMT_R1(data_ptr[3], i)));
472
+ break;
473
+ case 3: /*[1,1,2]*/
474
+ case 4: /*[2,2,2]*/
475
+ for(i=0;i<c_shape_last[0];i++)
476
+ for(j=0;j<c_shape_last[1];j++)
477
+ fprintf(file, "%d\n", 0);
478
+ break;
479
+ case 7: /*[1,1,2,2]*/
480
+ case 5: /*[2,2,2,2]*/
481
+
482
+ for(i=0;i<c_shape_last[0];i++)
483
+ for(j=0;j<c_shape_last[1];j++)
484
+ fprintf(file, "%e\n",
485
+ NUM2DBL(CR_TELMT_R2(data_ptr[3],i,j)));
486
+
487
+
488
+ break;
489
+ case 8: /*[1,1,1,3]*/
490
+ case 9: /*[3,3,3,3]*/
491
+ for(i=0;i<c_shape_last[0];i++)
492
+ for(j=0;j<c_shape_last[1];j++)
493
+ for(k=0;k<c_shape_last[2];k++)
494
+ fprintf(file, "%e\n",
495
+ NUM2DBL(CR_TELMT_R3(data_ptr[3],i,j,k))
496
+ );
497
+
498
+ break;
499
+
500
+
501
+ } /*end switch rank_switch*/
502
+ break;
503
+ case PRINT_DIMENSIONS:
504
+ switch (rank_switch(data_kit)){
505
+ case 8: /*[1,1,1,3]*/
506
+ case 9: /*[3,3,3,3]*/
507
+ fprintf(file, "DIMENSIONS %d %d %d\n", ni, nj, nj);
508
+ } /*end switch rank_switch*/
509
+
510
+ } /* end switch(task)*/
511
+
512
+ return;
513
+ }
514
+
515
+ static VALUE graph_kit_to_vtk_legacy_2(VALUE graph_kit, VALUE options_hash)
516
+ {
517
+ VALUE file_name;
518
+ VALUE data;
519
+ char * c_file_name;
520
+ int npoints, data_size;
521
+ int i, j, k;
522
+ int cell_count, number_count, dummy;
523
+ FILE *file;
524
+ VALUE dirname;
525
+ VALUE data_kit0;
526
+
527
+ /*CR_PSTR("Calling graph_kit_to_vtk_legacy_2");*/
528
+ Check_Type(options_hash, T_HASH);
529
+ file_name = CR_HKS(options_hash, "file_name");
530
+ Check_Type(file_name, T_STRING);
531
+
532
+ data = RFCALL_10_ON(graph_kit, "data");
533
+ data_size = FIX2INT(RFCALL_10_ON(data, "size"));
534
+ npoints = 0;
535
+
536
+ for (i=0;i<data_size;i++){
537
+ /*rb_p(RARRAY_PTR(data)[i]);*/
538
+ npoints = npoints +
539
+ FIX2INT(
540
+ RFCALL_10_ON(
541
+ RARRAY_PTR(data)[i], "vtk_legacy_size"
542
+ )
543
+ );
544
+ }
545
+
546
+ /*CR_PINT2("npoints", npoints);*/
547
+
548
+ /*dirname = rb_funcall(*/
549
+ /*RGET_CLASS_TOP("File"),*/
550
+ /*rb_intern("dirname"),*/
551
+ /*file_name);*/
552
+
553
+ /*if (!RTEST(*/
554
+ /*(rb_funcall(*/
555
+ /*RGET_CLASS_TOP("FileTest"),*/
556
+ /*rb_intern("exist?"),*/
557
+ /*dirname*/
558
+ /*))*/
559
+ /*))*/
560
+ /*rb_raise(RGET_CLASS_TOP("StandardError"), "Directory does not exist");*/
561
+
562
+
563
+ c_file_name = RSTRING_PTR(file_name);
564
+ file = fopen(c_file_name, "w");
565
+ fprintf(file, "# vtk DataFile Version 3.0\n");
566
+ fprintf(file, "vtk output\n");
567
+ fprintf(file, "ASCII\n");
568
+
569
+ if (0 && data_size==1)
570
+ /* Can write smaller, more efficient files,
571
+ * but not possible to volume render them
572
+ * -- work in progress!
573
+ * Would also need to make x vary fastest
574
+ * in output*/
575
+ {
576
+ data_kit0 = RARRAY_PTR(data)[0];
577
+ switch(rank_switch(data_kit0)){
578
+ case 9: /* [3,3,3,3]*/
579
+ fprintf(file, "DATASET STRUCTURED_GRID\n");
580
+ vtk_legacy_data_kit_loop(
581
+ PRINT_DIMENSIONS,
582
+ file, data_kit0, &dummy, &dummy);
583
+ cell_count = 0;
584
+ number_count = 0;
585
+ vtk_legacy_data_kit_loop(
586
+ COUNT_CELLS,
587
+ file, data_kit0, &cell_count, &dummy);
588
+ fprintf(file, "POINTS %d float\n", npoints);
589
+ vtk_legacy_data_kit_loop(
590
+ PRINT_POINTS,
591
+ file, data_kit0, &dummy, &dummy);
592
+ fprintf(file, "\nCELL_DATA %d\n", cell_count);
593
+ }
594
+ }
595
+ else /*Have to treat the most general case*/
596
+ {
597
+ fprintf(file, "DATASET UNSTRUCTURED_GRID\n");
598
+ fprintf(file, "POINTS %d float\n", npoints);
599
+ for (i=0;i<data_size;i++)
600
+ vtk_legacy_data_kit_loop(
601
+ PRINT_POINTS,
602
+ file, RARRAY_PTR(data)[i],
603
+ &dummy, &dummy);
604
+ cell_count = 0;
605
+ number_count = 0;
606
+ for (i=0;i<data_size;i++)
607
+ vtk_legacy_data_kit_loop(
608
+ COUNT_CELLS,
609
+ file, RARRAY_PTR(data)[i],
610
+ &cell_count, &number_count);
611
+ fprintf(file, "\nCELLS %d %d\n", cell_count, number_count);
612
+ number_count = 0;
613
+ for (i=0;i<data_size;i++)
614
+ vtk_legacy_data_kit_loop(
615
+ PRINT_CELLS,
616
+ file, RARRAY_PTR(data)[i],
617
+ &dummy, &number_count);
618
+ fprintf(file, "\nCELL_TYPES %d\n", cell_count);
619
+ for (i=0;i<data_size;i++)
620
+ vtk_legacy_data_kit_loop(
621
+ PRINT_CELL_TYPES,
622
+ file, RARRAY_PTR(data)[i],
623
+ &dummy, &dummy);
624
+ }
625
+ fprintf(file, "\nPOINT_DATA %d\n", npoints);
626
+ fprintf(file, "SCALARS myvals float\n");
627
+ fprintf(file, "LOOKUP_TABLE default\n");
628
+ for (i=0;i<data_size;i++)
629
+ vtk_legacy_data_kit_loop(
630
+ PRINT_POINT_DATA,
631
+ file, RARRAY_PTR(data)[i],
632
+ &dummy, &dummy);
633
+ fclose(file);
634
+ return Qnil;
635
+ }
636
+
637
+
638
+ void Init_graph_kit()
639
+ {
640
+ ID graph_kit_class_id;
641
+ graph_kit_class_id = rb_intern("GraphKit");
642
+ cgraph_kit = rb_const_get(rb_cObject, graph_kit_class_id);
643
+ /*cgraph_kit = rb_define_class("GraphKit", rb_cObject);*/
644
+ /*("GraphKit", rb_cObject);*/
645
+ rb_define_method(cgraph_kit, "to_vtk_legacy_fast", graph_kit_to_vtk_legacy_2, 1);
646
+
647
+ }
@@ -0,0 +1,76 @@
1
+ #include "ruby/ruby.h"
2
+ #include "graph_kit.h"
3
+
4
+ #define RGET_CLASS(class_over, x) (rb_const_get(class_over, rb_intern(x)))
5
+ #define RGET_CLASS_TOP(x) (RGET_CLASS(rb_cObject, x))
6
+
7
+ /* Call ruby functions with 0, 1, 2 etc arguments*/
8
+ #define RFCALL_10(name) (rb_funcall(self, rb_intern(name), 0))
9
+ #define RFCALL_10_ON(obj, name) (rb_funcall(obj, rb_intern(name), 0))
10
+ #define RFCALL_11(name, arg1) (rb_funcall(self, rb_intern(name), 1, arg1))
11
+ #define RFCALL_11_ON(obj, name, arg1) (rb_funcall(obj, rb_intern(name), 1, arg1))
12
+ #define RFCALL_12(name, arg1, arg2) (rb_funcall(self, rb_intern(name), 1, arg1, arg2))
13
+ #define RFCALL_12_ON(obj, name, arg1, arg2) (rb_funcall(obj, rb_intern(name), 1, arg1, arg2))
14
+
15
+ /* Access an element of an array or hash*/
16
+ #define CR_ELEMENT_ACCESS(recvr, key) ( \
17
+ RFCALL_11_ON(recvr, "[]", key) \
18
+ )
19
+
20
+ /* Get element of hash corresponding to a key which is a symbol made from cstr*/
21
+ #define CR_HKS(hash, cstr) (CR_ELEMENT_ACCESS(hash, ID2SYM(rb_intern(cstr))))
22
+
23
+ /* Get element of a rank 1,2 or 3 tensor respectively */
24
+ #define CR_TELMT_R1(tensor, i)(rb_funcall(tensor, rb_intern("[]"), 1, INT2FIX(i)))
25
+ #define CR_TELMT_R2(tensor, i, j)(rb_funcall(tensor, rb_intern("[]"), 2, INT2FIX(i), INT2FIX(j)))
26
+ #define CR_TELMT_R3(tensor, i, j, k)(rb_funcall(tensor, rb_intern("[]"), 3, INT2FIX(i), INT2FIX(j), INT2FIX(k)))
27
+
28
+ /*Constructors for ruby ranges*/
29
+ #define CR_RANGE_INC(start, end) (rb_funcall(RGET_CLASS_TOP("Range"), rb_intern("new"), 2, INT2FIX(start), INT2FIX(end)))
30
+ #define CR_RANGE_EXC(start, end) (rb_funcall(RGET_CLASS_TOP("Range"), rb_intern("new"), 3, INT2FIX(start), INT2FIX(end), Qtrue))
31
+
32
+ /*Allocates an integer array on the heap
33
+ with values of array. int_ptr should be
34
+ an unallocated int*. array should not
35
+ contain anything except ints. */
36
+ #define CR_INT_ARY_R2C_STACK( array,int_ptr)\
37
+ { int cr_internal_xaa12; \
38
+ cr_internal_xaa12 = RARRAY_LEN(array); \
39
+ int_ptr = ALLOCA_N(int, cr_internal_xaa12);\
40
+ int cr_internal_xaa11;\
41
+ for (cr_internal_xaa11=0;\
42
+ cr_internal_xaa11< cr_internal_xaa12;\
43
+ cr_internal_xaa11++)\
44
+ int_ptr[cr_internal_xaa11] = \
45
+ FIX2INT(RARRAY_PTR(array)[cr_internal_xaa11]);\
46
+ }
47
+
48
+
49
+ /*Allocates an integer array on the heap
50
+ with values of array. int_ptr should be
51
+ an unallocated int*. array should not
52
+ contain anything except ints; this is
53
+ checked in this macro. */
54
+ #define CR_INT_ARY_R2C_STACK_TCHECK( array,int_ptr)\
55
+ { int cr_internal_xaa12; \
56
+ cr_internal_xaa12 = RARRAY_LEN(array); \
57
+ int_ptr = ALLOCA_N(int, cr_internal_xaa12);\
58
+ int cr_internal_xaa11;\
59
+ for (cr_internal_xaa11=0;\
60
+ cr_internal_xaa11< cr_internal_xaa12;\
61
+ cr_internal_xaa11++)\
62
+ int_ptr[cr_internal_xaa11] = \
63
+ NUM2INT(RARRAY_PTR(array)[cr_internal_xaa11]);\
64
+ }
65
+
66
+ #define CR_STR(c_str)(rb_str_new2(c_str))
67
+ #define CR_PSTR(c_str)(rb_p(CR_STR(c_str)))
68
+ #define CR_PINT(integer)(rb_p(INT2FIX(integer)));
69
+ #define CR_PINT2(name, integer){CR_PSTR(name);rb_p(INT2FIX(integer));};
70
+
71
+
72
+
73
+ static VALUE ccode_runner;
74
+ static VALUE ccode_runner_gs2;
75
+ static VALUE ccode_runner_ext;
76
+ /*void Init_code_runner_ext();*/
@@ -0,0 +1,3 @@
1
+
2
+ static VALUE cgraph_kit;
3
+ void Init_graph_kit();
@@ -0,0 +1 @@
1
+ require('code_runner_ext')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: coderunner
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.0
4
+ version: 0.11.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,8 +9,72 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-05 00:00:00.000000000 Z
12
+ date: 2012-10-08 00:00:00.000000000 Z
13
13
  dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: graphkit
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 0.2.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 0.2.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: rubyhacks
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: 0.1.0
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 0.1.0
46
+ - !ruby/object:Gem::Dependency
47
+ name: gsl
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: 1.12.0
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: 1.12.0
62
+ - !ruby/object:Gem::Dependency
63
+ name: ruby-netcdf
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: 0.6.6
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: 0.6.6
14
78
  - !ruby/object:Gem::Dependency
15
79
  name: shoulda
16
80
  requirement: !ruby/object:Gem::Requirement
@@ -83,7 +147,8 @@ description: CodeRunner is a framework for the automated running and analysis of
83
147
  the data from different codes.
84
148
  email: edmundhighcock@sourceforge.net
85
149
  executables: []
86
- extensions: []
150
+ extensions:
151
+ - ext/extconf.rb
87
152
  extra_rdoc_files:
88
153
  - LICENSE.txt
89
154
  - README.md
@@ -96,6 +161,13 @@ files:
96
161
  - README.rdoc
97
162
  - Rakefile
98
163
  - VERSION
164
+ - coderunner.gemspec
165
+ - ext/code_runner_ext.c
166
+ - ext/extconf.rb
167
+ - ext/graph_kit.c
168
+ - include/code_runner_ext.h
169
+ - include/graph_kit.h
170
+ - lib/code_runner_extension.rb
99
171
  - lib/coderunner.rb
100
172
  - lib/coderunner/class_methods.rb
101
173
  - lib/coderunner/fortran_namelist.rb
@@ -123,7 +195,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
123
195
  version: '0'
124
196
  segments:
125
197
  - 0
126
- hash: -4056941694401379814
198
+ hash: -4053468436435077135
127
199
  required_rubygems_version: !ruby/object:Gem::Requirement
128
200
  none: false
129
201
  requirements: