genecrmod 0.1.6 → 0.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6a516114aa7662aef0013b3bec05180d9b80affb
4
- data.tar.gz: 9ab1ac6f44e2a2d2d050cf1ba0be1aaca50fe84e
3
+ metadata.gz: 5fdad6ba5f5786ffe8c504ccf813636d9860c611
4
+ data.tar.gz: a56f41d321bc965adc3505062e380750675ea475
5
5
  SHA512:
6
- metadata.gz: 86f52dcd50ce8d72ad37a9462c249a9f7d692f268f322d20ce2c0395826520fa2e381b77b89e0ea331f6340db7d8dd8023a0bfdfc41f9048fcffe3cf5b6a1342
7
- data.tar.gz: 1c8113f33aae3fa1f16467661a76ca4d99f73c34d0443fe70ca573b293b9d1ad2d9214e81ffbd07a0d72a20dfaa4241acdf0cb27a0f4774a58b1b99556609f93
6
+ metadata.gz: ce08f04cf24ab01379e81e9aca7c50555d54faf85202793216b72127816ef15ebf1e0c96b5da6eaa5e9ef20506a8592a1efcddcd263f2672c54299ac980ec467
7
+ data.tar.gz: def19cf656f3291b7ee2ce5f7b3de4425e3a9217e5698baf4fdc7d527228de77e25c8ea088198a8b04c3dcf9a451cdd8bd6a2c40935192317c93c78fc775d642
data/Gemfile CHANGED
@@ -3,6 +3,7 @@ source "http://rubygems.org"
3
3
  # Example:
4
4
  # gem "activesupport", ">= 2.3.5"
5
5
  gem "coderunner", ">= 0.14.2"
6
+ gem "hdf5"
6
7
 
7
8
  # Add dependencies to develop your gem here.
8
9
  # Include everything needed to run rake, tests, features, etc.
data/Rakefile CHANGED
@@ -20,6 +20,7 @@ Jeweler::Tasks.new do |gem|
20
20
  gem.summary = %Q{A module which allows the GENE gyrokinetic code to be run using the CodeRunner framework. }
21
21
  gem.description = %Q{A module which allows the GENE gyrokinetic code to be run using the CodeRunner framework. }
22
22
  gem.email = "edmundhighcock@users.sourceforge.net"
23
+ gem.files.exclude 'test/**/*'
23
24
  gem.authors = ["Edmund Highcock"]
24
25
  # dependencies defined in Gemfile
25
26
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.6
1
+ 0.2.0
data/genecrmod.gemspec CHANGED
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: genecrmod 0.1.6 ruby lib
5
+ # stub: genecrmod 0.2.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "genecrmod"
9
- s.version = "0.1.6"
9
+ s.version = "0.2.0"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["Edmund Highcock"]
14
- s.date = "2014-07-22"
14
+ s.date = "2014-07-23"
15
15
  s.description = "A module which allows the GENE gyrokinetic code to be run using the CodeRunner framework. "
16
16
  s.email = "edmundhighcock@users.sourceforge.net"
17
17
  s.extra_rdoc_files = [
@@ -27,12 +27,13 @@ Gem::Specification.new do |s|
27
27
  "VERSION",
28
28
  "genecrmod.gemspec",
29
29
  "lib/genecrmod.rb",
30
+ "lib/genecrmod/check_parameters.rb",
30
31
  "lib/genecrmod/gene.rb",
32
+ "lib/genecrmod/hdf5.rb",
31
33
  "lib/genecrmod/namelists.rb",
32
34
  "sync_variables/helper.rb",
33
35
  "sync_variables/sync_variables.rb",
34
- "test/helper.rb",
35
- "test/test_genecrmod.rb"
36
+ "test/linear_run/.CODE_RUNNER_TEMP_RUN_LIST_CACHE"
36
37
  ]
37
38
  s.homepage = "http://github.com/edmundhighcock/genecrmod"
38
39
  s.licenses = ["GPLv3"]
@@ -44,6 +45,7 @@ Gem::Specification.new do |s|
44
45
 
45
46
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
46
47
  s.add_runtime_dependency(%q<coderunner>, [">= 0.14.2"])
48
+ s.add_runtime_dependency(%q<hdf5>, [">= 0"])
47
49
  s.add_development_dependency(%q<shoulda>, ["= 3.0.1"])
48
50
  s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
49
51
  s.add_development_dependency(%q<bundler>, ["~> 1.0"])
@@ -52,6 +54,7 @@ Gem::Specification.new do |s|
52
54
  s.add_development_dependency(%q<minitest>, ["~> 4"])
53
55
  else
54
56
  s.add_dependency(%q<coderunner>, [">= 0.14.2"])
57
+ s.add_dependency(%q<hdf5>, [">= 0"])
55
58
  s.add_dependency(%q<shoulda>, ["= 3.0.1"])
56
59
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
57
60
  s.add_dependency(%q<bundler>, ["~> 1.0"])
@@ -61,6 +64,7 @@ Gem::Specification.new do |s|
61
64
  end
62
65
  else
63
66
  s.add_dependency(%q<coderunner>, [">= 0.14.2"])
67
+ s.add_dependency(%q<hdf5>, [">= 0"])
64
68
  s.add_dependency(%q<shoulda>, ["= 3.0.1"])
65
69
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
66
70
  s.add_dependency(%q<bundler>, ["~> 1.0"])
@@ -0,0 +1,89 @@
1
+
2
+ class CodeRunner::Gene
3
+ def run_namelist_tests(namelist, hash, enum = nil)
4
+ ext = enum ? "_#{enum}" : ""
5
+ hash[:must_pass].each do |tst|
6
+ error(namelist_test_failed(namelist, tst)) unless instance_eval(tst[:test])
7
+ end if hash[:must_pass]
8
+ hash[:should_pass].each do |tst|
9
+ warning(namelist_test_failed(namelist, tst)) unless instance_eval(tst[:test])
10
+ end if hash[:should_pass]
11
+ hash[:variables].each do |var, var_hash|
12
+ #gs2_var = (var_hash[:gs2_name] or var)
13
+ cr_var = var+ext.to_sym
14
+ value = send(cr_var)
15
+ if value.kind_of? Array
16
+ value.each{|v| test_variable(namelist, var, var_hash, ext, v)}
17
+ else
18
+ test_variable(namelist, var, var_hash, ext, value)
19
+ end
20
+ end
21
+ end
22
+ def check_parameters
23
+ rcp.namelists.each do |namelist, hash|
24
+ next if hash[:should_include].kind_of? String and not eval(hash[:should_include])
25
+ if en = hash[:enumerator]
26
+ #ep 'en', en, namelist
27
+ next unless send(en[:name])
28
+ send(en[:name]).times do |i|
29
+ run_namelist_tests(namelist, hash, i+1)
30
+ end
31
+ else
32
+ run_namelist_tests(namelist, hash)
33
+ end
34
+ end
35
+ warning("Very little analysis will be possible without write_h5 = '.true.'") if not (@write_h5 and @write_h5.fortran_true?)
36
+ end
37
+ def test_failed(namelist, var, gs2_var, tst)
38
+ return <<EOF
39
+
40
+ ---------------------------
41
+ Test Failed
42
+ ---------------------------
43
+
44
+ Namelist: #{namelist}
45
+ Variable: #{var}
46
+ GS2 Name: #{gs2_var}
47
+ Value: #{send(var)}
48
+ Test: #{tst[:test]}
49
+ Explanation: #{tst[:explanation]}
50
+
51
+ ---------------------------
52
+ EOF
53
+
54
+ end
55
+
56
+
57
+ def namelist_test_failed(namelist, tst)
58
+ return <<EOF
59
+
60
+ ---------------------------
61
+ Test Failed
62
+ ---------------------------
63
+
64
+ Namelist: #{namelist}
65
+ Test: #{tst[:test]}
66
+ Explanation: #{tst[:explanation]}
67
+
68
+ ---------------------------
69
+ EOF
70
+
71
+ end
72
+ def test_variable(namelist, var, var_hash, ext, value)
73
+ gs2_var = (var_hash[:gs2_name] or var)
74
+ cr_var = var+ext.to_sym
75
+ if value and (not var_hash[:should_include] or eval(var_hash[:should_include]))
76
+ var_hash[:must_pass].each do |tst|
77
+ error(test_failed(namelist, cr_var, gs2_var, tst)) unless value.instance_eval(tst[:test])
78
+ end if var_hash[:must_pass]
79
+ var_hash[:should_pass].each do |tst|
80
+ warning(test_failed(namelist, cr_var, gs2_var, tst)) unless value.instance_eval(tst[:test])
81
+ end if var_hash[:should_pass]
82
+ if (var_hash[:allowed_values] or var_hash[:text_options])
83
+ tst = {test: "#{(var_hash[:allowed_values] or var_hash[:text_options]).inspect}.include? self", explanation: "The variable must have one of these values"}
84
+ error(test_failed(namelist, cr_var, gs2_var, tst)) unless value.instance_eval(tst[:test])
85
+ end
86
+
87
+ end
88
+ end
89
+ end
@@ -13,6 +13,9 @@ class CodeRunner
13
13
  # Where this file is
14
14
  @code_module_folder = File.dirname(File.expand_path(__FILE__)) # i.e. the directory this file is in
15
15
 
16
+ require @code_module_folder + '/hdf5.rb'
17
+ require @code_module_folder + '/check_parameters.rb'
18
+
16
19
  # Use the Run::FortranNamelist tools to process the variable database
17
20
  setup_namelists(@code_module_folder)
18
21
 
@@ -156,8 +159,6 @@ class CodeRunner
156
159
  text
157
160
  end
158
161
 
159
- def check_parameters
160
- end
161
162
 
162
163
 
163
164
 
@@ -204,7 +205,7 @@ class CodeRunner
204
205
  end
205
206
 
206
207
  def get_status
207
- if @running
208
+ if @running
208
209
  if @status != :Queueing
209
210
  get_completed_timesteps
210
211
  if completed_timesteps == 0
@@ -228,7 +229,11 @@ class CodeRunner
228
229
  end
229
230
  def get_completed_timesteps
230
231
  Dir.chdir(@directory) do
231
- @completed_timesteps = %x[grep '^\\s\\+\\S\\+\\s*$' nrg.dat 2>/dev/null].split("\n").size
232
+ if FileTest.exist?('nrg.dat.h5')
233
+ @completed_timesteps = get_h5_narray_all('nrg.dat.h5', '/nrgIons/time').shape[0]
234
+ else
235
+ @completed_timesteps = %x[grep '^\\s\\+\\S\\+\\s*$' nrg.dat 2>/dev/null].split("\n").size
236
+ end
232
237
  end
233
238
  end
234
239
 
@@ -282,7 +287,11 @@ EOF1
282
287
 
283
288
  def get_growth_rates
284
289
  Dir.chdir(@directory) do
285
- if FileTest.exist?('omega.dat')
290
+ if FileTest.exist?(ofile = 'omega.dat.h5')
291
+ @kyvals = get_h5_narray_all(ofile, '/ky').to_gslv
292
+ @growth_rates = get_h5_narray_all(ofile, '/gamma').to_gslv
293
+ @frequencies = get_h5_narray_all(ofile, '/omega').to_gslv
294
+ elsif FileTest.exist?('omega.dat')
286
295
  @kyvals, @growth_rates, @frequencies = GSL::Vector.filescan('omega.dat')
287
296
  else
288
297
  @kyvals, @growth_rates, @frequencies = [[]] * 3
@@ -0,0 +1,9 @@
1
+ require 'hdf5'
2
+ class CodeRunner::Gene
3
+ def get_h5_narray_all(file, dataset)
4
+ Dir.chdir(@directory) do
5
+ file = Hdf5::H5File.new(file)
6
+ return file.dataset(dataset).narray_all
7
+ end
8
+ end
9
+ end
@@ -461,18 +461,20 @@
461
461
  :help=>nil,
462
462
  :code_name=>:kymin,
463
463
  :must_pass=>
464
- [{:test=>"kind_of? String",
465
- :explanation=>"This variable must be a string."}],
466
- :type=>:String},
464
+ [{:test=>"kind_of? Numeric",
465
+ :explanation=>
466
+ "This variable must be a floating point number (an integer is also acceptable: it will be converted into a floating point number)."}],
467
+ :type=>:Float},
467
468
  :lv=>
468
469
  {:should_include=>"true",
469
470
  :description=>nil,
470
471
  :help=>nil,
471
472
  :code_name=>:lv,
472
473
  :must_pass=>
473
- [{:test=>"kind_of? Integer",
474
- :explanation=>"This variable must be an integer."}],
475
- :type=>:Integer},
474
+ [{:test=>"kind_of? Numeric",
475
+ :explanation=>
476
+ "This variable must be a floating point number (an integer is also acceptable: it will be converted into a floating point number)."}],
477
+ :type=>:Float},
476
478
  :lw=>
477
479
  {:should_include=>"true",
478
480
  :description=>nil,
@@ -537,9 +539,10 @@
537
539
  :help=>nil,
538
540
  :code_name=>:x0,
539
541
  :must_pass=>
540
- [{:test=>"kind_of? Integer",
541
- :explanation=>"This variable must be an integer."}],
542
- :type=>:Integer},
542
+ [{:test=>"kind_of? Numeric",
543
+ :explanation=>
544
+ "This variable must be a floating point number (an integer is also acceptable: it will be converted into a floating point number)."}],
545
+ :type=>:Float},
543
546
  :mu_grid_type=>
544
547
  {:should_include=>"true",
545
548
  :description=>nil,
@@ -618,10 +621,9 @@
618
621
  :help=>nil,
619
622
  :code_name=>:comp_type,
620
623
  :must_pass=>
621
- [{:test=>"kind_of? String and FORTRAN_BOOLS.include? self",
622
- :explanation=>
623
- "This variable must be a fortran boolean. (In Ruby this is represented as a string: e.g. '.true.')"}],
624
- :type=>:Fortran_Bool},
624
+ [{:test=>"kind_of? String",
625
+ :explanation=>"This variable must be a string."}],
626
+ :type=>:String},
625
627
  :perf_vec=>
626
628
  {:should_include=>"true",
627
629
  :description=>nil,
@@ -3157,9 +3159,10 @@
3157
3159
  :help=>nil,
3158
3160
  :code_name=>:bref,
3159
3161
  :must_pass=>
3160
- [{:test=>"kind_of? Integer",
3161
- :explanation=>"This variable must be an integer."}],
3162
- :type=>:Integer},
3162
+ [{:test=>"kind_of? Numeric",
3163
+ :explanation=>
3164
+ "This variable must be a floating point number (an integer is also acceptable: it will be converted into a floating point number)."}],
3165
+ :type=>:Float},
3163
3166
  :mref=>
3164
3167
  {:should_include=>"true",
3165
3168
  :description=>nil,
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: genecrmod
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Edmund Highcock
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-22 00:00:00.000000000 Z
11
+ date: 2014-07-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: coderunner
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.14.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: hdf5
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: shoulda
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -125,12 +139,13 @@ files:
125
139
  - VERSION
126
140
  - genecrmod.gemspec
127
141
  - lib/genecrmod.rb
142
+ - lib/genecrmod/check_parameters.rb
128
143
  - lib/genecrmod/gene.rb
144
+ - lib/genecrmod/hdf5.rb
129
145
  - lib/genecrmod/namelists.rb
130
146
  - sync_variables/helper.rb
131
147
  - sync_variables/sync_variables.rb
132
- - test/helper.rb
133
- - test/test_genecrmod.rb
148
+ - test/linear_run/.CODE_RUNNER_TEMP_RUN_LIST_CACHE
134
149
  homepage: http://github.com/edmundhighcock/genecrmod
135
150
  licenses:
136
151
  - GPLv3
data/test/helper.rb DELETED
@@ -1,34 +0,0 @@
1
- require 'simplecov'
2
-
3
- module SimpleCov::Configuration
4
- def clean_filters
5
- @filters = []
6
- end
7
- end
8
-
9
- SimpleCov.configure do
10
- clean_filters
11
- load_adapter 'test_frameworks'
12
- end
13
-
14
- ENV["COVERAGE"] && SimpleCov.start do
15
- add_filter "/.rvm/"
16
- end
17
- require 'rubygems'
18
- require 'bundler'
19
- begin
20
- Bundler.setup(:default, :development)
21
- rescue Bundler::BundlerError => e
22
- $stderr.puts e.message
23
- $stderr.puts "Run `bundle install` to install missing gems"
24
- exit e.status_code
25
- end
26
- require 'test/unit'
27
- require 'shoulda'
28
-
29
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
30
- $LOAD_PATH.unshift(File.dirname(__FILE__))
31
- require 'genecrmod'
32
-
33
- class Test::Unit::TestCase
34
- end
@@ -1,7 +0,0 @@
1
- require 'helper'
2
-
3
- class TestGenecrmod < Test::Unit::TestCase
4
- should "probably rename this file and start testing for real" do
5
- flunk "hey buddy, you should probably rename this file and start testing for real"
6
- end
7
- end