gs2crmod 0.11.67 → 0.11.68

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.11.67
1
+ 0.11.68
data/gs2crmod.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "gs2crmod"
8
- s.version = "0.11.67"
8
+ s.version = "0.11.68"
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"]
@@ -10,53 +10,54 @@ DataKit = GraphKit::DataKit
10
10
 
11
11
  def auto_axiskits(name, options)
12
12
  hash = cache[:auto_axiskits] ||= {'t' => ['Time', ''],
13
- 'phi2tot_over_time' => ['Phi^2 Total', ''],
14
- 'apar2_over_time' => ['Apar^2 Total', ''],
15
- 'growth_rate_by_ky_over_time' => ['Growth Rate by ky', ''],
16
- 'growth_rate_by_kx_over_time' => ['Growth Rate by kx', ''],
17
- 'growth_rate_by_mode_over_time' => ["Growth Rate by mode", ''],
18
- # <MJL additions 2013-09-19>
19
- 'frequency_by_ky_over_time' => ['Real frequency by ky', ''],
20
- 'frequency_by_kx_over_time' => ['Real frequency by kx', ''],
21
- # </MJL>
22
- 'phi2_by_ky_over_time' => ['Phi^2 by ky', ''],
23
- 'phi2_by_kx_over_time' => ['Phi^2 by ky', ''],
24
- 'es_heat_by_ky_over_time' => ['Phi^2 by ky', ''],
25
- 'es_heat_by_kx_over_time' => ['Phi^2 by kx', ''],
26
- 'phi2_by_mode_over_time' => ["Phi^2 by mode", ''],
27
- 'tpar2_by_mode_over_time' => ["(delta T_parallel)^2 by mode", '%'],
28
- 'tperp2_by_mode_over_time' => ["(delta T_perp)^2 by mode", '%'],
29
- 'hflux_tot' => ['Total Heat Flux', ''],
30
- 'es_heat_par' => ['Parallel electrostatic heat flux', ''],
31
- 'es_heat_perp' => ['Perpendicular electrostatic heat flux', ''],
32
- 'ky' => ['ky', "1/rho_#{species_letter}"],
33
- 'kx' => ['kx', "1/rho_#{species_letter}"],
34
- 'kpar' => ['kpar', "2 pi/qR"],
35
- 'growth_rate_over_kx' => ['Growth Rate', "v_th#{species_letter}/a", 1],
36
- 'growth_rate_over_ky' => ['Growth Rate', "v_th#{species_letter}/a", 1],
37
- 'growth_rate_over_kx_slice' => ['Growth Rate', "v_th#{species_letter}/a", 1],
38
- 'growth_rate_over_ky_slice' => ['Growth Rate', "v_th#{species_letter}/a", 1],
39
- 'growth_rate_over_ky_over_kx' => ["Growth Rate", "v_th#{species_letter}/a", 2],
40
- 'frequency_over_ky' => ['Frequency', "v_th#{species_letter}/a", 1],
41
- 'transient_es_heat_flux_amplification_over_kx' => ['Transient Electrostatic Heat Amplification', "", 1],
42
- 'transient_es_heat_flux_amplification_over_ky' => ['Transient Electrostatic Heat Amplification', "", 1],
43
- 'transient_amplification_over_kx' => ['Transient Amplification', "", 1],
44
- 'transient_amplification_over_ky' => ['Transient Amplification', "", 1],
45
- 'spectrum_over_kx' => ["Spectrum at t = #{sprintf("%.3f" ,(options[:t] or list(:t)[options[:t_index]] or list(:t).values.max))}", '', 1],
46
- 'zonal_spectrum' => ["Zonal spectrum at t = #{sprintf("%.3f" ,(options[:t] or list(:t)[options[:t_index]] or list(:t).values.max))}", '', 1],
47
- 'spectrum_over_ky' => ["Spectrum at t = #{sprintf("%.3f" ,(options[:t] or list(:t)[options[:t_index]] or list(:t).values.max))}", '', 1],
48
- 'es_heat_over_kx' => ["Heat Flux at t = #{sprintf("%.3f" ,(options[:t] or list(:t)[options[:t_index]] or list(:t).values.max))}", 'Q_gB', 1],
49
- 'es_heat_over_ky' => ["Heat Flux at t = #{sprintf("%.3f" ,(options[:t] or list(:t)[options[:t_index]] or list(:t).values.max))}", 'Q_gB', 1],
50
- 'es_heat_flux_over_ky_over_kx' => ["Heat flux at t = #{sprintf("%.3f" ,(options[:t] or list(:t)[options[:t_index]] or list(:t).values.max))}", '', 2],
51
- 'spectrum_over_kpar' => ["Spectrum at t = #{sprintf("%.3f" ,(options[:t] or list(:t)[options[:t_index]] or list(:t).values.max))}", '', 1],
52
- 'spectrum_over_ky_over_kx' => ["Spectrum at t = #{sprintf("%.3f" ,(options[:t] or list(:t)[options[:t_index]] or list(:t).values.max))}", '', 2],
53
- 'spectrum_over_ky_over_kpar' => ["Spectrum at t = #{sprintf("%.3f" ,(options[:t] or list(:t)[options[:t_index]] or list(:t).values.max))}", '', 2],
54
- #'phi0_over_x_over_y' => ["Phi at t = #{sprintf("%.3f" ,(options[:t] or list(:t)[options[:t_index]] or list(:t).values.max))}", '', 2],
55
- 'phi0_over_x_over_y' => ["Phi at theta = 0", '', 2],
56
- 'es_mom_flux_over_time' => ["#{species_type((options[:species_index] or 1)).capitalize} Momentum Flux", '', 1]
57
-
58
-
59
- }
13
+ 'phi2tot_over_time' => ['Phi^2 Total', ''],
14
+ 'apar2_over_time' => ['Apar^2 Total', ''],
15
+ 'growth_rate_by_ky_over_time' => ['Growth Rate by ky', ''],
16
+ 'growth_rate_by_kx_over_time' => ['Growth Rate by kx', ''],
17
+ 'growth_rate_by_mode_over_time' => ["Growth Rate by mode", ''],
18
+ # <MJL additions 2013-09-19>
19
+ 'frequency_by_ky_over_time' => ['Real frequency by ky', ''],
20
+ 'frequency_by_kx_over_time' => ['Real frequency by kx', ''],
21
+ # </MJL>
22
+ 'phi2_by_ky_over_time' => ['Phi^2 by ky', ''],
23
+ 'phi2_by_kx_over_time' => ['Phi^2 by ky', ''],
24
+ 'es_heat_by_ky_over_time' => ['Phi^2 by ky', ''],
25
+ 'es_heat_by_kx_over_time' => ['Phi^2 by kx', ''],
26
+ 'phi2_by_mode_over_time' => ["Phi^2 by mode", ''],
27
+ 'tpar2_by_mode_over_time' => ["(delta T_parallel)^2 by mode", '%'],
28
+ 'tperp2_by_mode_over_time' => ["(delta T_perp)^2 by mode", '%'],
29
+ 'hflux_tot' => ['Total Heat Flux', ''],
30
+ 'es_heat_par' => ['Parallel electrostatic heat flux', ''],
31
+ 'es_heat_perp' => ['Perpendicular electrostatic heat flux', ''],
32
+ 'ky' => ['ky', "1/rho_#{species_letter}"],
33
+ 'kx' => ['kx', "1/rho_#{species_letter}"],
34
+ 'x' => ['x', "rho_#{species_letter}", 1],
35
+ 'kpar' => ['kpar', "2 pi/qR"],
36
+ 'growth_rate_over_kx' => ['Growth Rate', "v_th#{species_letter}/a", 1],
37
+ 'growth_rate_over_ky' => ['Growth Rate', "v_th#{species_letter}/a", 1],
38
+ 'growth_rate_over_kx_slice' => ['Growth Rate', "v_th#{species_letter}/a", 1],
39
+ 'growth_rate_over_ky_slice' => ['Growth Rate', "v_th#{species_letter}/a", 1],
40
+ 'growth_rate_over_ky_over_kx' => ["Growth Rate", "v_th#{species_letter}/a", 2],
41
+ 'frequency_over_ky' => ['Frequency', "v_th#{species_letter}/a", 1],
42
+ 'transient_es_heat_flux_amplification_over_kx' => ['Transient Electrostatic Heat Amplification', "", 1],
43
+ 'transient_es_heat_flux_amplification_over_ky' => ['Transient Electrostatic Heat Amplification', "", 1],
44
+ 'transient_amplification_over_kx' => ['Transient Amplification', "", 1],
45
+ 'transient_amplification_over_ky' => ['Transient Amplification', "", 1],
46
+ 'spectrum_over_kx' => ["Spectrum at t = #{sprintf("%.3f" ,(options[:t] or list(:t)[options[:t_index]] or list(:t).values.max))}", '', 1],
47
+ 'spectrum_over_ky' => ["Spectrum at t = #{sprintf("%.3f" ,(options[:t] or list(:t)[options[:t_index]] or list(:t).values.max))}", '', 1],
48
+ 'es_heat_over_kx' => ["Heat Flux at t = #{sprintf("%.3f" ,(options[:t] or list(:t)[options[:t_index]] or list(:t).values.max))}", 'Q_gB', 1],
49
+ 'es_heat_over_ky' => ["Heat Flux at t = #{sprintf("%.3f" ,(options[:t] or list(:t)[options[:t_index]] or list(:t).values.max))}", 'Q_gB', 1],
50
+ 'es_heat_flux_over_ky_over_kx' => ["Heat flux at t = #{sprintf("%.3f" ,(options[:t] or list(:t)[options[:t_index]] or list(:t).values.max))}", '', 2],
51
+ 'spectrum_over_kpar' => ["Spectrum at t = #{sprintf("%.3f" ,(options[:t] or list(:t)[options[:t_index]] or list(:t).values.max))}", '', 1],
52
+ 'spectrum_over_ky_over_kx' => ["Spectrum at t = #{sprintf("%.3f" ,(options[:t] or list(:t)[options[:t_index]] or list(:t).values.max))}", '', 2],
53
+ 'spectrum_over_ky_over_kpar' => ["Spectrum at t = #{sprintf("%.3f" ,(options[:t] or list(:t)[options[:t_index]] or list(:t).values.max))}", '', 2],
54
+ #'phi0_over_x_over_y' => ["Phi at t = #{sprintf("%.3f" ,(options[:t] or list(:t)[options[:t_index]] or list(:t).values.max))}", '', 2],
55
+ 'phi0_over_x_over_y' => ["Phi at theta = 0", '', 2],
56
+ 'es_mom_flux_over_time' => ["#{species_type((options[:species_index] or 1)).capitalize} Momentum Flux", '', 1],
57
+ 'zonal_spectrum' => ["Zonal spectrum at t = #{sprintf("%.3f" ,(options[:t] or list(:t)[options[:t_index]] or list(:t).values.max))}", '', 1],
58
+ 'zonal_flow_velocity_over_x' => ['Zonal Flow Velocity', "", 1],
59
+ 'mean_flow_velocity_over_x' => ['Mean Flow Velocity', "", 1]
60
+ }
60
61
  return hash[name]
61
62
  end
62
63
 
@@ -165,34 +166,25 @@ GRAPHKIT_OPTIONS_HELP = {
165
166
  no_kpar0: "Don't plot the kpar=0 part (boolean, e.g. no_kpar0: true)",
166
167
  log: "Plot the log of a given quantity (exact meaning varies). boolean",
167
168
  Rmaj: "The major radius in metres. This has no effect on the shape of the graph: it merely multiplies every length",
168
- n0: " The toroidal mode number of the longest y mode. In effect it is the number of periodic copies of the flux tube that will fit in the torus. Periodicity requires that n0 q is also an integer. If you specify :n0 where this is not the case, q will automatically be adjusted until it is",
169
- rho_star: " The ratio of the reference Lamour radius to the GS2 normalising length a. Cannot be specified at the same time as n0. If specified, both n0 and q will be adjusted to ensure periodicity",
170
- t_index: "The (1-based) time index",
171
- nakx: "The number of radial wave numbers to include in the plot. In effect, it is a low pass filter which reduces the resolution in the radial direction without changing the shape of the final surface. Minimum value is 4",
172
- naky: "The number of kys to include in the plot. In effect, it is a low pass filter which reduces the resolution in the y direction without changing the shape of the final surface. Minimum value is 4",
173
- gs2_coordinate_factor: "When set to 1, plot the graph in GS2 coordinates. When set to 0 plot the graph in real space. Can be set at any value between 0 and 1: the graph will smoothly distort between the two limits",
174
- xmax: "The (0-based) index of the maximum value of x to include in the plot",
175
- xmin: "The (0-based) index of the minimum value of x to include in the plot",
176
- ymax: "The (0-based) index of the maximum value of y to include in the plot",
177
- ymin: "The (0-based) index of the minimum value of y to include in the plot",
178
- thetamax: "The (0-based) index of the maximum value of theta to include in the plot",
179
- thetamin: "The (0-based) index of the minimum value of theta to include in the plot",
180
- ncopies: " The number of periodic copies of the flux tube to include",
181
- torphi_values: "An array of two values of the toroidal angle. The graph will be plotted in between those two values with poloidal cross sections at either end",
182
- magnify: " The magnification factor of the small section. It can take any value greater than or equal to 1",
183
-
169
+ n0: " The toroidal mode number of the longest y mode. In effect it is the number of periodic copies of the flux tube that will fit in the torus. Periodicity requires that n0 q is also an integer. If you specify :n0 where this is not the case, q will automatically be adjusted until it is",
170
+ rho_star: " The ratio of the reference Lamour radius to the GS2 normalising length a. Cannot be specified at the same time as n0. If specified, both n0 and q will be adjusted to ensure periodicity",
171
+ t_index: "The (1-based) time index",
172
+ nakx: "The number of radial wave numbers to include in the plot. In effect, it is a low pass filter which reduces the resolution in the radial direction without changing the shape of the final surface. Minimum value is 4",
173
+ naky: "The number of kys to include in the plot. In effect, it is a low pass filter which reduces the resolution in the y direction without changing the shape of the final surface. Minimum value is 4",
174
+ gs2_coordinate_factor: "When set to 1, plot the graph in GS2 coordinates. When set to 0 plot the graph in real space. Can be set at any value between 0 and 1: the graph will smoothly distort between the two limits",
175
+ xmax: "The (0-based) index of the maximum value of x to include in the plot",
176
+ xmin: "The (0-based) index of the minimum value of x to include in the plot",
177
+ ymax: "The (0-based) index of the maximum value of y to include in the plot",
178
+ ymin: "The (0-based) index of the minimum value of y to include in the plot",
179
+ thetamax: "The (0-based) index of the maximum value of theta to include in the plot",
180
+ thetamin: "The (0-based) index of the minimum value of theta to include in the plot",
181
+ theta_index: "integer, index of theta at which to plot (e.g. theta_index: 20)",
182
+ kxfac: "float, overrides calculation of kxfac in zonal flow velocity function",
183
+ ncopies: " The number of periodic copies of the flux tube to include",
184
+ torphi_values: "An array of two values of the toroidal angle. The graph will be plotted in between those two values with poloidal cross sections at either end",
185
+ magnify: " The magnification factor of the small section. It can take any value greater than or equal to 1",
184
186
  }
185
187
 
186
-
187
- # def graphkit(name, options={})
188
- # unless [:Failed, :Complete].include? status
189
- # return get_graphkit(name, options)
190
- # else
191
- # return cache[[:graphkit, name, options]] ||= get_graphkit(name, options)
192
- # end
193
- # end
194
-
195
-
196
188
  def graphkit(name, options={})
197
189
  logf :graphkit
198
190
  # If an array of t, kx or ky values is provided, plot one graph for each value and then sum the graphs together
@@ -2375,6 +2367,39 @@ module GraphKits
2375
2367
  end
2376
2368
  end
2377
2369
 
2370
+ def zonal_flow_velocity_vs_x_graphkit(options={})
2371
+ case options[:command]
2372
+ when :help
2373
+ return "zonal_flow_velocity_vs_x: Graph of the zonal flow velocity kxfac*IFT(i k_x phi). kxfac = (qinp/rhoc)*grho(rhoc)."
2374
+ when :options
2375
+ return [:t, :t_index, :theta_index, :kxfac]
2376
+ else
2377
+ options[:ky_index]=0
2378
+ kit = GraphKit.autocreate({x: axiskit('x', options), y: axiskit("zonal_flow_velocity_over_x", options)})
2379
+ kit.title = "Zonal Flow Velocity versus x"
2380
+ kit.file_name = options[:graphkit_name] + options[:t_index].to_s
2381
+ kit.data[0].with = 'lp'
2382
+ kit.pointsize = 2.0
2383
+ kit
2384
+ end
2385
+ end
2386
+
2387
+ def mean_flow_velocity_vs_x_graphkit(options={})
2388
+ case options[:command]
2389
+ when :help
2390
+ return "mean_flow_velocity_vs_x: Graph of the mean flow velocity (x - x(centre))*g_exb"
2391
+ when :options
2392
+ return [:t, :t_index, :theta_index]
2393
+ else
2394
+ options[:ky_index]=0
2395
+ kit = GraphKit.autocreate({x: axiskit('x', options), y: axiskit("mean_flow_velocity_over_x", options)})
2396
+ kit.title = "Mean Flow Velocity versus x"
2397
+ kit.file_name = options[:graphkit_name] + options[:t_index].to_s
2398
+ kit.data[0].with = 'lp'
2399
+ kit.pointsize = 2.0
2400
+ kit
2401
+ end
2402
+ end
2378
2403
 
2379
2404
  end
2380
2405
 
@@ -990,18 +990,65 @@ module GSLVectors
990
990
  ysize = ny*2-2+ny%2
991
991
  GSL::Vector.indgen(ysize, 0, ly/ysize)
992
992
  end
993
+
994
+ #This function reads in the 'grho' variable from the netcdf file.
995
+ def grho_gsl_vector(options)
996
+ grho = GSL::Vector.alloc(netcdf_file.var('grho').get('start' => [0], 'end' => [-1]).to_a)
997
+ return grho
998
+ end
999
+
1000
+ #This function returns the zonal flow velocity as a function of x (the radial coordinate).
1001
+ #This is v_ZF = kxfac*IFT(i k_x phi_imag), where kxfac = (qinp/rhoc)*grho(rhoc).
1002
+ def zonal_flow_velocity_over_x_gsl_vector(options)
1003
+ Dir.chdir(@directory) do
1004
+ raise CRFatal.new("Need to specify a theta_index.") unless options[:theta_index]
1005
+ raise CRFatal.new("Need either qinp or pk and epsl specified in order to calculate kxfac.
1006
+ If using numerical equil use the option :kxfac to override calculation.") unless @qinp or (@pk and @epsl or options[:kxfac])
1007
+ phi = gsl_vector_complex('phi_zonal', options)
1008
+
1009
+ kx = gsl_vector(:kx).to_box_order
1010
+ x = gsl_vector(:x)
1011
+ grho = gsl_vector('grho')[options[:theta_index]]
1012
+ if @qinp
1013
+ kxfac = (@qinp/@rhoc)*grho
1014
+ elsif @pk and @epsl
1015
+ kxfac = (@epsl/@pk)*grho
1016
+ elsif options[:kxfac]
1017
+ kxfac = options[:kxfac]
1018
+ else
1019
+ raise 'Error: Need qinp or pk and epsl to calculate kxfac'
1020
+ end
1021
+
1022
+ vec_zf_vel = GSL::Vector.alloc(kx.size)
1023
+ #Take imaginary part since i k_x will lead to imaginary part being real
1024
+ vec_zf_vel = kxfac*(phi*kx).backward.imag*kx.size
1025
+ return vec_zf_vel
1026
+ end
1027
+ end
1028
+
1029
+ #This function returns the mean flow velocity as a function of x (the radial coordinate).
1030
+ #This is v_g_exb = (x - x(centre))*g_exb. The x-x(centre) ensures that the flow is zero
1031
+ #at the middle of the box.
1032
+ def mean_flow_velocity_over_x_gsl_vector(options)
1033
+ Dir.chdir(@directory) do
1034
+ raise CRFatal.new("Need to have g_exb > 0 to have a mean flow.") unless @g_exb > 0
1035
+ raise CRFatal.new("Need to specify a theta_index.") unless options[:theta_index]
1036
+ x = gsl_vector(:x)
1037
+
1038
+ vec_exb_vel = GSL::Vector.alloc(x.size)
1039
+ #Take imaginary part since i k_x will lead to imaginary part being real
1040
+ vec_exb_vel = (x - x[x.size/2])*@g_exb
1041
+ return vec_exb_vel
1042
+ end
1043
+ end
1044
+
993
1045
  def zonal_spectrum_gsl_vector(options)
994
1046
  Dir.chdir(@directory) do
995
- gmzf = gsl_matrix('spectrum_over_ky_over_kx',options)
996
- veczf = GSL::Vector.alloc(gmzf.shape[1])
997
- # p gmzf.get_row(0).size
998
- # p gmzf.get_row(0)
999
- gmzf.shape[1].times{|i| veczf[i] = gmzf[0,i]}
1000
- return veczf
1001
- #else
1002
- #raise CRError.new("Unknown gsl_vector requested: #{name}")
1047
+ gmzf = gsl_matrix('spectrum_over_ky_over_kx',options)
1048
+ veczf = GSL::Vector.alloc(gmzf.shape[1])
1049
+ gmzf.shape[1].times{|i| veczf[i] = gmzf[0,i]}
1050
+ return veczf
1003
1051
  end
1004
- # eputs data; gets
1005
1052
  end
1006
1053
 
1007
1054
  end # module GSLVectors
@@ -1076,6 +1123,32 @@ module GSLVectorComplexes
1076
1123
  # eputs data; gets
1077
1124
  end
1078
1125
 
1126
+ #This function returns a complex GSL vector of the zonal (ky=0) component of phi/phi_t at a given theta index
1127
+ #and time index if write_phi_over_time was enabled during the simulation
1128
+ def phi_zonal_gsl_vector_complex(options)
1129
+ Dir.chdir(@directory) do
1130
+ if options[:t_index] or options[:t]
1131
+ #extra option required is t_index
1132
+ raise CRFatal.new("write_phi_over_time is not enabled so this function won't work") unless @write_phi_over_time
1133
+
1134
+ options.convert_to_index(self, :t)
1135
+ a = netcdf_file.var('phi_t').get({
1136
+ 'start' => [0,options[:theta_index],0,0, options[:t_index] - 1],
1137
+ 'end' => [-1,options[:theta_index],-1,0, options[:t_index] - 1]
1138
+ })
1139
+ vector = GSL::Vector::Complex.alloc(GSL::Vector.alloc(a[0,0,0..-1,0,0]), GSL::Vector.alloc(a[1,0,0..-1,0,0]))
1140
+ return vector
1141
+ else
1142
+ a = netcdf_file.var('phi').get({
1143
+ 'start' => [0, options[:theta_index], 0, 0],
1144
+ 'end' => [-1, options[:theta_index], -1, 0]
1145
+ })
1146
+ vector = GSL::Vector::Complex.alloc(GSL::Vector.alloc(a[0,0,0..-1,0]), GSL::Vector.alloc(a[1,0,0..-1,0]))
1147
+ return vector
1148
+ end
1149
+ end
1150
+ end
1151
+
1079
1152
  end
1080
1153
  include GSLVectorComplexes
1081
1154
 
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.11.67
4
+ version: 0.11.68
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -14,7 +14,7 @@ date: 2014-09-03 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: coderunner
17
- requirement: &13799260 !ruby/object:Gem::Requirement
17
+ requirement: &17929040 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: 0.14.15
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *13799260
25
+ version_requirements: *17929040
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: rubyhacks
28
- requirement: &13797960 !ruby/object:Gem::Requirement
28
+ requirement: &17926880 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: 0.1.2
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *13797960
36
+ version_requirements: *17926880
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: ruby-netcdf-updated
39
- requirement: &13812880 !ruby/object:Gem::Requirement
39
+ requirement: &17925740 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: 0.6.6.1
45
45
  type: :runtime
46
46
  prerelease: false
47
- version_requirements: *13812880
47
+ version_requirements: *17925740
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: shoulda
50
- requirement: &13811080 !ruby/object:Gem::Requirement
50
+ requirement: &17940940 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - =
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: 3.0.1
56
56
  type: :development
57
57
  prerelease: false
58
- version_requirements: *13811080
58
+ version_requirements: *17940940
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: rdoc
61
- requirement: &13810040 !ruby/object:Gem::Requirement
61
+ requirement: &17938700 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ~>
@@ -66,10 +66,10 @@ dependencies:
66
66
  version: '3.12'
67
67
  type: :development
68
68
  prerelease: false
69
- version_requirements: *13810040
69
+ version_requirements: *17938700
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: bundler
72
- requirement: &13809160 !ruby/object:Gem::Requirement
72
+ requirement: &17937200 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ! '>'
@@ -77,10 +77,10 @@ dependencies:
77
77
  version: 1.0.0
78
78
  type: :development
79
79
  prerelease: false
80
- version_requirements: *13809160
80
+ version_requirements: *17937200
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: jeweler
83
- requirement: &13808120 !ruby/object:Gem::Requirement
83
+ requirement: &17936160 !ruby/object:Gem::Requirement
84
84
  none: false
85
85
  requirements:
86
86
  - - ! '>='
@@ -88,10 +88,10 @@ dependencies:
88
88
  version: 1.8.4
89
89
  type: :development
90
90
  prerelease: false
91
- version_requirements: *13808120
91
+ version_requirements: *17936160
92
92
  - !ruby/object:Gem::Dependency
93
93
  name: minitest
94
- requirement: &13807320 !ruby/object:Gem::Requirement
94
+ requirement: &17935100 !ruby/object:Gem::Requirement
95
95
  none: false
96
96
  requirements:
97
97
  - - ~>
@@ -99,7 +99,7 @@ dependencies:
99
99
  version: '4'
100
100
  type: :development
101
101
  prerelease: false
102
- version_requirements: *13807320
102
+ version_requirements: *17935100
103
103
  description: GS2 is a gyrokinetic flux tube initial value turbulence code which can
104
104
  be used for fusion or astrophysical plasmas. CodeRunner is a framework for the automated
105
105
  running and analysis of large simulations. This module allows GS2 (and its sister