gs2crmod 0.10.31 → 0.11.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.
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.