gs2crmod 0.11.67 → 0.11.68

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/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