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