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 +1 -1
- data/gs2crmod.gemspec +1 -1
- data/lib/gs2crmod/graphs.rb +98 -73
- data/lib/gs2crmod/gsl_data.rb +82 -9
- metadata +17 -17
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.11.
|
|
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.
|
|
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"]
|
data/lib/gs2crmod/graphs.rb
CHANGED
|
@@ -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
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
# <MJL additions 2013-09-19>
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
# </MJL>
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
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
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
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
|
|
data/lib/gs2crmod/gsl_data.rb
CHANGED
|
@@ -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
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
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.
|
|
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: &
|
|
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: *
|
|
25
|
+
version_requirements: *17929040
|
|
26
26
|
- !ruby/object:Gem::Dependency
|
|
27
27
|
name: rubyhacks
|
|
28
|
-
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: *
|
|
36
|
+
version_requirements: *17926880
|
|
37
37
|
- !ruby/object:Gem::Dependency
|
|
38
38
|
name: ruby-netcdf-updated
|
|
39
|
-
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: *
|
|
47
|
+
version_requirements: *17925740
|
|
48
48
|
- !ruby/object:Gem::Dependency
|
|
49
49
|
name: shoulda
|
|
50
|
-
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: *
|
|
58
|
+
version_requirements: *17940940
|
|
59
59
|
- !ruby/object:Gem::Dependency
|
|
60
60
|
name: rdoc
|
|
61
|
-
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: *
|
|
69
|
+
version_requirements: *17938700
|
|
70
70
|
- !ruby/object:Gem::Dependency
|
|
71
71
|
name: bundler
|
|
72
|
-
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: *
|
|
80
|
+
version_requirements: *17937200
|
|
81
81
|
- !ruby/object:Gem::Dependency
|
|
82
82
|
name: jeweler
|
|
83
|
-
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: *
|
|
91
|
+
version_requirements: *17936160
|
|
92
92
|
- !ruby/object:Gem::Dependency
|
|
93
93
|
name: minitest
|
|
94
|
-
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: *
|
|
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
|