gs2crmod 0.10.31 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -4,7 +4,7 @@ source "http://rubygems.org"
4
4
  gem "coderunner", ">= 0.13.13"
5
5
  gem "rubyhacks", ">= 0.1.2"
6
6
  # It seems necessary to have the following line un-commented on some systems but commented out on other systems:
7
- #gem "ruby-netcdf", ">= 0.6.6.1"
7
+ gem "ruby-netcdf", ">= 0.6.6.1"
8
8
 
9
9
  # Add dependencies to develop your gem here.
10
10
  # Include everything needed to run rake, tests, features, etc.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.10.31
1
+ 0.11.0
data/gs2crmod.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "gs2crmod"
8
- s.version = "0.10.31"
8
+ s.version = "0.11.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Edmund Highcock", "Ferdinand van Wyk"]
12
- s.date = "2014-01-13"
12
+ s.date = "2014-01-17"
13
13
  s.description = "GS2 is a gyrokinetic flux tube initial value turbulence code which can be used for fusion or astrophysical plasmas. CodeRunner is a framework for the automated running and analysis of large simulations. This module allows GS2 (and its sister code AstroGK) to harness the power of the CodeRunner framework."
14
14
  s.email = "edmundhighcock@sourceforge.net"
15
15
  s.extensions = ["ext/extconf.rb"]
@@ -59,6 +59,7 @@ Gem::Specification.new do |s|
59
59
  "lib/gs2crmod/ingen.rb",
60
60
  "lib/gs2crmod/namelists.rb",
61
61
  "lib/gs2crmod/properties.rb",
62
+ "lib/gs2crmod/read_netcdf.rb",
62
63
  "lib/gs2crmod/species_dependent_namelists.rb",
63
64
  "lib/gs2crmod/spectrogk.rb",
64
65
  "lib/gs2crmod/spectrogk/namelists.rb",
@@ -78,7 +79,7 @@ Gem::Specification.new do |s|
78
79
  s.licenses = ["GSLv3"]
79
80
  s.require_paths = ["lib"]
80
81
  s.required_ruby_version = Gem::Requirement.new(">= 1.9.1")
81
- s.rubygems_version = "1.8.11"
82
+ s.rubygems_version = "1.8.23"
82
83
  s.summary = "Module to allow CodeRunner to run and analyse the GS2 and AstroGK codes."
83
84
 
84
85
  if s.respond_to? :specification_version then
@@ -87,6 +88,7 @@ Gem::Specification.new do |s|
87
88
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
88
89
  s.add_runtime_dependency(%q<coderunner>, [">= 0.13.13"])
89
90
  s.add_runtime_dependency(%q<rubyhacks>, [">= 0.1.2"])
91
+ s.add_runtime_dependency(%q<ruby-netcdf>, [">= 0.6.6.1"])
90
92
  s.add_development_dependency(%q<shoulda>, [">= 0"])
91
93
  s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
92
94
  s.add_development_dependency(%q<bundler>, ["> 1.0.0"])
@@ -94,6 +96,7 @@ Gem::Specification.new do |s|
94
96
  else
95
97
  s.add_dependency(%q<coderunner>, [">= 0.13.13"])
96
98
  s.add_dependency(%q<rubyhacks>, [">= 0.1.2"])
99
+ s.add_dependency(%q<ruby-netcdf>, [">= 0.6.6.1"])
97
100
  s.add_dependency(%q<shoulda>, [">= 0"])
98
101
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
99
102
  s.add_dependency(%q<bundler>, ["> 1.0.0"])
@@ -102,6 +105,7 @@ Gem::Specification.new do |s|
102
105
  else
103
106
  s.add_dependency(%q<coderunner>, [">= 0.13.13"])
104
107
  s.add_dependency(%q<rubyhacks>, [">= 0.1.2"])
108
+ s.add_dependency(%q<ruby-netcdf>, [">= 0.6.6.1"])
105
109
  s.add_dependency(%q<shoulda>, [">= 0"])
106
110
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
107
111
  s.add_dependency(%q<bundler>, ["> 1.0.0"])
@@ -122,21 +122,23 @@ def self.generate_graphs_rdoc_file
122
122
  end
123
123
  def self.help_graphs
124
124
  # @@runner ||= CodeRunner.fetch_runner(U: true,
125
+ string = ""
125
126
  graphs = self.instance_methods.find_all{|m| m.to_s =~ /_graphkit$/}.sort_by{|m| m.to_s}
126
127
  run = new(nil)
127
- puts "-------------------------------------------\n Available Graphs For #{self.to_s}\n-------------------------------------------\n"
128
+ string << "-------------------------------------------\n Available Graphs For #{self.to_s}\n-------------------------------------------\n\n"
128
129
  graphs.each do |graph|
129
130
  help = run.send(graph, command: :help)
130
131
  options = run.send(graph, command: :options)
131
- puts "\n------------------------------------\n#{graph.to_s.sub(/_graphkit/, '')}\n------------------------------------\n\n#{help}"
132
+ string << "\n------------------------------------\n#{graph.to_s.sub(/_graphkit/, '')}\n------------------------------------\n\n#{help}\n"
132
133
  if options and options.size > 0
133
- puts "\n\tOptions:"
134
+ string << "\n\tOptions:\n"
134
135
  options.each do |op|
135
- puts "\t\t#{op}: #{GRAPHKIT_OPTIONS_HELP[op]}"
136
+ string << "\t\t#{op}: #{GRAPHKIT_OPTIONS_HELP[op]}\n"
136
137
  end
137
138
  end
138
139
 
139
140
  end
141
+ string.paginate
140
142
  end
141
143
 
142
144
  GRAPHKIT_OPTIONS_HELP = {
@@ -192,7 +194,7 @@ GRAPHKIT_OPTIONS_HELP = {
192
194
  def graphkit(name, options={})
193
195
  logf :graphkit
194
196
  # If an array of t, kx or ky values is provided, plot one graph for each value and then sum the graphs together
195
- [:t, :kx, :ky].each do |var|
197
+ [:t, :kx, :ky, :X, :Y, :e, :l, :theta].each do |var|
196
198
  #ep 'index', var
197
199
  if options[var].class == Symbol and options[var] == :all
198
200
  options[var] = list(var).values
@@ -218,10 +220,15 @@ def graphkit(name, options={})
218
220
 
219
221
 
220
222
 
221
- # If a method from the new GraphKits module can generate this graphkit use it
222
- #ep name + '_graphkit'
223
- #ep self.class.instance_methods.find{|meth| (name + '_graphkit').to_sym == meth}
224
223
 
224
+ # Smart graphkits are defined in the file read_netcdf
225
+ if name =~ /^cdf_/
226
+ return smart_graphkit(options + {graphkit_name: name})
227
+ elsif name =~ /^nc_/
228
+ return old_smart_graphkit(options + {graphkit_name: name})
229
+ end
230
+
231
+ # If a method from the new GraphKits module can generate this graphkit use it
225
232
  if method = self.class.instance_methods.find{|meth| (name + '_graphkit').to_sym == meth}
226
233
  options[:graphkit_name] = name
227
234
  return send(method, options)
data/lib/gs2crmod/gs2.rb CHANGED
@@ -81,6 +81,7 @@ require folder + '/calculations.rb'
81
81
  require folder + '/ingen.rb'
82
82
  require folder + '/properties.rb'
83
83
  require folder + '/test_gs2.rb'
84
+ require folder + '/read_netcdf.rb'
84
85
 
85
86
  NaN = GSL::NAN
86
87
  # GSL::Neg
@@ -0,0 +1,174 @@
1
+ # This module reads data from the new diagnostics output file
2
+ # <run_name>.cdf.
3
+ #
4
+ # It is intended to replace a lot of the function of gsl_data.rb
5
+ # which reads the old netcdf file. In particular, it defines a new
6
+ # generic reader function which can read any variable in the new
7
+ # netcdf file using a standard set of index constraints
8
+ #
9
+
10
+ class CodeRunner::Gs2
11
+ module ReadNetcdf
12
+
13
+ def new_netcdf_file
14
+ if (open = @runner.run_list.keys.find_all{|id| @runner.run_list[id].cache[:new_netcdf_file]}).size > 200
15
+ open = open.sort_by{|id| @runner.run_list[id].cache[:new_netcdf_file_otime]}
16
+ @runner.run_list[open[0]].new_ncclose
17
+ end
18
+
19
+ if cache[:new_netcdf_file] and not [:Complete, :Failed].include? @status
20
+ new_ncclose
21
+ end
22
+ cache[:new_netcdf_file_otime] = Time.now.to_i
23
+ cache[:new_netcdf_file] ||= NumRu::NetCDF.open(new_netcdf_filename)
24
+ cache[:new_netcdf_file].sync
25
+ cache[:new_netcdf_file]
26
+ end
27
+
28
+ def new_netcdf_filename
29
+ @directory + '/' + @run_name + '.cdf'
30
+ end
31
+ def new_ncclose
32
+ cache[:new_netcdf_file].close
33
+ cache.delete(:new_netcdf_file)
34
+ end
35
+
36
+
37
+ end #module ReadNetcdf
38
+ include ReadNetcdf
39
+
40
+ class NetcdfSmartReader
41
+ def initialize(file)
42
+ @file = file
43
+ end
44
+ def dimensions(varname)
45
+ #p 'varname', varname
46
+ @file.var(varname).dims
47
+ end
48
+ def read_variable(varname, options)
49
+ #start = get_start(dims, options)
50
+ dims = dimensions(varname)
51
+ narray = @file.var(varname).get('start'=>starts(dims, options), 'end'=>ends(dims, options))
52
+ shape = narray.shape
53
+ shape.delete_if{|i| i==1}
54
+ #p 'shape', shape; STDIN.gets
55
+ narray.reshape!(*shape)
56
+ narray
57
+
58
+ end
59
+ def starts(dims, options)
60
+ dims.map{|d| dim_start(d.name, options)}
61
+ end
62
+ def dim_start(name, options)
63
+ sym = name.to_sym
64
+ if i=options[sym + :_index]
65
+ return i-1
66
+ elsif i=options[sym + :_element]
67
+ return i
68
+ elsif i=options[sym + :min]
69
+ return i
70
+ else
71
+ return 0
72
+ end
73
+ end
74
+ def ends(dims, options)
75
+ dims.map{|d| dim_end(d.name, options)}
76
+ end
77
+ def dim_end(name, options)
78
+ sym = name.to_sym
79
+ if i=options[sym + :_index]
80
+ return i-1
81
+ elsif i=options[sym + :_element]
82
+ return i
83
+ elsif i=options[sym + :max]
84
+ return i
85
+ else
86
+ return -1
87
+ end
88
+ end
89
+
90
+ def axiskit(variable, options)
91
+ GraphKit::AxisKit.autocreate(data: read_variable(variable, options), units: @file.var(variable).att('Units').get, title: @file.var(variable).att('Description').get.sub(/(,|summed|average).*$/, '').sub(/[vV]alues of (the )?/, '').sub(/ coordinate/, ''))
92
+ end
93
+ def dimension_variable_name(n)
94
+ case n
95
+ when 'X'
96
+ 'kx'
97
+ when 'Y'
98
+ 'ky'
99
+ when 'e'
100
+ 'energy'
101
+ when 'l'
102
+ 'lambda'
103
+ when 't'
104
+ n
105
+ else
106
+ raise "Unknown dimension #{n}"
107
+ end
108
+ end
109
+ def check_no_r(non_flat_dims)
110
+ raise "Please specify the r index for real or imaginary" if non_flat_dims.include? @file.dim('r')
111
+ end
112
+ def graphkit(variable, options)
113
+ non_flat_dims=dimensions(variable).find_all{|dim| dim_start(dim.name, options) != dim_end(dim.name, options) and dim.length != 1}
114
+ check_no_r(non_flat_dims)
115
+ axiskits = non_flat_dims.map{|dim| dimvar = dimension_variable_name(dim.name); axiskit(dimvar, options)} + [axiskit(variable, options)]
116
+ hash = {}
117
+ axes = [:x, :y, :z, :f]
118
+ axiskits.each_with_index{|ax, i| hash[axes[i]] = ax}
119
+ kit = GraphKit.autocreate(hash)
120
+ opts = options.dup
121
+ opts.delete(:graphkit_name)
122
+ #kit.data[0].title += " with options: " + opts.to_s
123
+ kit.data[0].title += " " + opts.to_s.gsub(/_(index|element)/, '')
124
+ if kit.zlabel
125
+ kit.zlabel = "'#{kit.zlabel}' rotate by 90"
126
+ #kit.zlabel = nil
127
+ end
128
+ kit
129
+ end
130
+ end # class NetcdfSmartReader
131
+
132
+ class OldNetcdfSmartReader < NetcdfSmartReader
133
+ def dimension_variable_name(n)
134
+ if (dimnames = @file.dims.map{|dim| dim.name}).include? n
135
+ #p ['dimnames', dimnames, n]
136
+ n
137
+ else
138
+ raise "Unknown dimension #{r}: dimensions are: #{dimnames}"
139
+ end
140
+ end
141
+ def check_no_r(non_flat_dims)
142
+ raise "Please specify the ri index for real or imaginary" if non_flat_dims.include? @file.dim('ri')
143
+ end
144
+ def axiskit(variable, options)
145
+ GraphKit::AxisKit.autocreate(data: read_variable(variable, options), title: variable)
146
+ end
147
+ end
148
+
149
+ def netcdf_smart_reader
150
+ NetcdfSmartReader.new(new_netcdf_file)
151
+ end
152
+
153
+ def smart_graphkit(options)
154
+ case options[:command]
155
+ when :help
156
+ "A smart graphkit is a direct plot of a given variable from the new netcdf file. The name of the graphkit is the name of the variable prefixed by 'cdf_'. To plot, for example, the heat flux vs time, you would give the graph name cdf_heat_flux_tot. You can use index specifiers in the the options; for example, to plot the potential as a function of kx and ky for a given time index, you would use the graph name cdf_phi2_by_mode, and the options {t_index: n}. To plot the potential as function of kx for a given ky and time would use the options {t_index, n, Y_index: m}. For each dimension you can specify the index, or a minium and/or maximum."
157
+ when :options
158
+ [:X_index, :Y_index, :t_index, :e_index, :l_index, :s_index, :Xmax, :Xmin, :X_element]
159
+ else
160
+ netcdf_smart_reader.graphkit(options[:graphkit_name].sub(/^cdf_/, ''), options)
161
+ end
162
+ end
163
+ def old_smart_graphkit(options)
164
+ case options[:command]
165
+ when :help
166
+ "An old smart graphkit is a direct plot of a given variable from the old netcdf file. The name of the graphkit is the name of the variable prefixed by 'nc_'. To plot, for example, the heat flux vs time, you would give the graph name nc_hflux_tot. You can use index specifiers in the the options; for example, to plot the potential as a function of kx and ky for a given time index, you would use the graph name nc_phi2_by_mode, and the options {t_index: n}. To plot the potential as function of kx for a given ky and time would use the options {t_index, n, ky_index: m}. For each dimension you can specify the index, or a minium and/or maximum."
167
+ when :options
168
+ [:kx_index, :ky_index, :t_index, :e_index, :l_index, :s_index, :kxmax, :kxmin, :kx_element]
169
+ else
170
+ vars = OldNetcdfSmartReader.new(netcdf_file).graphkit(options[:graphkit_name].sub(/^nc_/, ''), options)
171
+ end
172
+ end
173
+
174
+ end
Binary file
@@ -112,21 +112,21 @@ class TestAnalysis < Test::Unit::TestCase
112
112
  def test_3d_graphs
113
113
  kit = @runner.run_list[1].graphkit('phi_real_space', {n0: 3, Rgeo: 3})
114
114
  assert_equal([5,5,9], kit.data[0].f.data.shape)
115
- assert_equal(-0.00402, kit.data[0].f.data[2,3,6].round(5))
115
+ assert_equal(-0.00492, kit.data[0].f.data[2,3,6].round(5))
116
116
  kit = @runner.run_list[1].graphkit('density_real_space', {n0: 3, Rgeo: 3, species_index: 1, gs2_coordinate_factor: 0.9})
117
117
  #kit.gnuplot
118
118
  assert_equal([5,5,9], kit.data[0].f.data.shape)
119
119
  assert_equal(-0.00985, kit.data[0].f.data[2,3,6].round(5))
120
120
  kit = @runner.run_list[1].graphkit('phi_real_space', {n0: 3, Rgeo: 3, t_index: 2})
121
121
  assert_equal([5,5,9], kit.data[0].f.data.shape)
122
- assert_equal(0.00031, kit.data[0].f.data[2,3,6].round(5))
122
+ assert_equal(0.00015, kit.data[0].f.data[2,3,6].round(5))
123
123
  kit = @runner.run_list[1].graphkit('phi_real_space_surface', {n0: 3, Rgeo: 3, interpolate_theta: 2})
124
124
  assert_equal([5,5,1], kit.data[0].f.data.shape)
125
125
  assert_equal([5,1,17], kit.data[2].f.data.shape)
126
- assert_equal(-0.00153, kit.data[0].f.data[1,4,0].round(5))
126
+ assert_equal(-0.0024, kit.data[0].f.data[1,4,0].round(5))
127
127
  #kit.gnuplot
128
128
  kit = @runner.run_list[1].graphkit('phi_real_space_poloidal_plane', {n0: 1, Rgeo: 3, interpolate_theta: 8, torphi: Math::PI/4.0})
129
- assert_equal(-0.00208, kit.data[0].f.data[-1,1].round(5))
129
+ assert_equal(-0.00176, kit.data[0].f.data[-1,1].round(5))
130
130
  assert_equal(1.707, kit.data[0].x.data[-1,1].round(3))
131
131
  kit.gp.view = ["equal xyz", ",,4.0"]
132
132
  #kit.gnuplot
@@ -144,11 +144,29 @@ class TestAnalysis < Test::Unit::TestCase
144
144
  assert_equal([5,17], kit.data[0].f.data.shape)
145
145
  assert_equal([3,1,17], kit.data[2].f.data.shape)
146
146
  assert_equal([3,1,17], kit.data[2].y.data.shape)
147
- assert_equal(-0.00038, kit.data[0].f.data[-1,1].round(5))
147
+ assert_equal(0.00012, kit.data[0].f.data[-1,1].round(5))
148
148
  assert_equal(2.12132, kit.data[2].y.data[2,0,12].round(5))
149
149
  #kit.gnuplot
150
150
  end
151
151
 
152
+ def test_new_netcdf_module
153
+ assert_equal(NumRu::NetCDF, @run.new_netcdf_file.class)
154
+ assert_equal(NumRu::NetCDFVar, @run.new_netcdf_file.var('phi2').class)
155
+ assert_equal(@run.netcdf_file.var('phi2').get.to_a[-1], @run.new_netcdf_file.var('phi2').get.to_a[-1])
156
+ assert_equal("r", @run.netcdf_smart_reader.dimensions('phi')[0].name)
157
+ assert_equal("X", @run.netcdf_smart_reader.dimensions('phi')[2].name)
158
+ assert_equal(2, @run.netcdf_smart_reader.dim_start("Y", Y_index: 3))
159
+ assert_equal(@run.new_netcdf_file.var('phi2').get.to_a, @run.netcdf_smart_reader.read_variable('phi2', {}).to_a)
160
+ assert_equal(@run.new_netcdf_file.var('phi2').get.to_a[3], @run.netcdf_smart_reader.read_variable('phi2', {t_index: 4})[0])
161
+ assert_equal(@run.new_netcdf_file.var('phi2').get.to_a[3], @run.netcdf_smart_reader.read_variable('phi2', {tmax: 3})[-1])
162
+ assert_equal(@run.new_netcdf_file.var('phi').get[0,4,3,1], @run.netcdf_smart_reader.read_variable('phi', {zmax: 5, X_index: 4, Y_element: 1})[0,-2])
163
+ assert_equal("time (a/v_thr)", @run.smart_graphkit(graphkit_name: 'cdf_heat_flux_tot').xlabel)
164
+ @run.smart_graphkit(graphkit_name: 'cdf_phi', r_index: 1, z_index: 5)
165
+ @run.old_smart_graphkit(graphkit_name: 'nc_phi', ri_index: 1, theta_index: 5)
166
+ @run.graphkit('nc_phi', ri_index: 1, theta_index: [5,6])
167
+ #@runner.run_class.help_graphs
168
+ end
169
+
152
170
  def tfolder
153
171
  CYCLONE_LOW_RES_FOLDER
154
172
  end
@@ -187,7 +205,7 @@ class TestAgkAnalysis < Test::Unit::TestCase
187
205
  end
188
206
  def test_3d_graphs
189
207
  kit = @runner.run_list[2].graphkit('phi_real_space_surface', {rho_star: 0.1})
190
- kit.gnuplot
208
+ #kit.gnuplot
191
209
  assert_equal([5,5,1], kit.data[0].f.data.shape)
192
210
  #assert_equal(-0.00402, kit.data[0].f.data[2,3,6].round(5))
193
211
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gs2crmod
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.31
4
+ version: 0.11.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2014-01-13 00:00:00.000000000 Z
13
+ date: 2014-01-17 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: coderunner
17
- requirement: &12578820 !ruby/object:Gem::Requirement
17
+ requirement: !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,15 @@ dependencies:
22
22
  version: 0.13.13
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *12578820
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ! '>='
29
+ - !ruby/object:Gem::Version
30
+ version: 0.13.13
26
31
  - !ruby/object:Gem::Dependency
27
32
  name: rubyhacks
28
- requirement: &12575480 !ruby/object:Gem::Requirement
33
+ requirement: !ruby/object:Gem::Requirement
29
34
  none: false
30
35
  requirements:
31
36
  - - ! '>='
@@ -33,10 +38,31 @@ dependencies:
33
38
  version: 0.1.2
34
39
  type: :runtime
35
40
  prerelease: false
36
- version_requirements: *12575480
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: 0.1.2
47
+ - !ruby/object:Gem::Dependency
48
+ name: ruby-netcdf
49
+ requirement: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: 0.6.6.1
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: 0.6.6.1
37
63
  - !ruby/object:Gem::Dependency
38
64
  name: shoulda
39
- requirement: &12582920 !ruby/object:Gem::Requirement
65
+ requirement: !ruby/object:Gem::Requirement
40
66
  none: false
41
67
  requirements:
42
68
  - - ! '>='
@@ -44,10 +70,15 @@ dependencies:
44
70
  version: '0'
45
71
  type: :development
46
72
  prerelease: false
47
- version_requirements: *12582920
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
48
79
  - !ruby/object:Gem::Dependency
49
80
  name: rdoc
50
- requirement: &12607320 !ruby/object:Gem::Requirement
81
+ requirement: !ruby/object:Gem::Requirement
51
82
  none: false
52
83
  requirements:
53
84
  - - ~>
@@ -55,10 +86,15 @@ dependencies:
55
86
  version: '3.12'
56
87
  type: :development
57
88
  prerelease: false
58
- version_requirements: *12607320
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ~>
93
+ - !ruby/object:Gem::Version
94
+ version: '3.12'
59
95
  - !ruby/object:Gem::Dependency
60
96
  name: bundler
61
- requirement: &12605960 !ruby/object:Gem::Requirement
97
+ requirement: !ruby/object:Gem::Requirement
62
98
  none: false
63
99
  requirements:
64
100
  - - ! '>'
@@ -66,10 +102,15 @@ dependencies:
66
102
  version: 1.0.0
67
103
  type: :development
68
104
  prerelease: false
69
- version_requirements: *12605960
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ! '>'
109
+ - !ruby/object:Gem::Version
110
+ version: 1.0.0
70
111
  - !ruby/object:Gem::Dependency
71
112
  name: jeweler
72
- requirement: &12600560 !ruby/object:Gem::Requirement
113
+ requirement: !ruby/object:Gem::Requirement
73
114
  none: false
74
115
  requirements:
75
116
  - - ! '>='
@@ -77,7 +118,12 @@ dependencies:
77
118
  version: 1.8.4
78
119
  type: :development
79
120
  prerelease: false
80
- version_requirements: *12600560
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ none: false
123
+ requirements:
124
+ - - ! '>='
125
+ - !ruby/object:Gem::Version
126
+ version: 1.8.4
81
127
  description: GS2 is a gyrokinetic flux tube initial value turbulence code which can
82
128
  be used for fusion or astrophysical plasmas. CodeRunner is a framework for the automated
83
129
  running and analysis of large simulations. This module allows GS2 (and its sister
@@ -131,6 +177,7 @@ files:
131
177
  - lib/gs2crmod/ingen.rb
132
178
  - lib/gs2crmod/namelists.rb
133
179
  - lib/gs2crmod/properties.rb
180
+ - lib/gs2crmod/read_netcdf.rb
134
181
  - lib/gs2crmod/species_dependent_namelists.rb
135
182
  - lib/gs2crmod/spectrogk.rb
136
183
  - lib/gs2crmod/spectrogk/namelists.rb
@@ -166,7 +213,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
166
213
  version: '0'
167
214
  requirements: []
168
215
  rubyforge_project:
169
- rubygems_version: 1.8.11
216
+ rubygems_version: 1.8.23
170
217
  signing_key:
171
218
  specification_version: 3
172
219
  summary: Module to allow CodeRunner to run and analyse the GS2 and AstroGK codes.