gs2crmod 0.10.21 → 0.10.22
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 +61 -1
- data/lib/gs2crmod/gsl_data.rb +19 -0
- metadata +1 -1
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.10.
|
1
|
+
0.10.22
|
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.10.
|
8
|
+
s.version = "0.10.22"
|
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
@@ -34,6 +34,9 @@ def auto_axiskits(name, options)
|
|
34
34
|
'kpar' => ['kpar', "2 pi/qR"],
|
35
35
|
'growth_rate_over_kx' => ['Growth Rate', "v_th#{species_letter}/a", 1],
|
36
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],
|
37
40
|
'frequency_over_ky' => ['Frequency', "v_th#{species_letter}/a", 1],
|
38
41
|
'transient_es_heat_flux_amplification_over_kx' => ['Transient Electrostatic Heat Amplification', "", 1],
|
39
42
|
'transient_es_heat_flux_amplification_over_ky' => ['Transient Electrostatic Heat Amplification', "", 1],
|
@@ -43,7 +46,6 @@ def auto_axiskits(name, options)
|
|
43
46
|
'zonal_spectrum' => ["Zonal spectrum at t = #{sprintf("%.3f" ,(options[:t] or list(:t)[options[:t_index]] or list(:t).values.max))}", '', 1],
|
44
47
|
'spectrum_over_ky' => ["Spectrum at t = #{sprintf("%.3f" ,(options[:t] or list(:t)[options[:t_index]] or list(:t).values.max))}", '', 1],
|
45
48
|
'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],
|
46
|
-
'growth_rate_over_ky_over_kx' => ["Growth Rate", "v_th#{species_letter}/a", 2],
|
47
49
|
'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],
|
48
50
|
'spectrum_over_kpar' => ["Spectrum at t = #{sprintf("%.3f" ,(options[:t] or list(:t)[options[:t_index]] or list(:t).values.max))}", '', 1],
|
49
51
|
'spectrum_over_ky_over_kx' => ["Spectrum at t = #{sprintf("%.3f" ,(options[:t] or list(:t)[options[:t_index]] or list(:t).values.max))}", '', 2],
|
@@ -553,6 +555,64 @@ module GraphKits
|
|
553
555
|
end
|
554
556
|
end
|
555
557
|
|
558
|
+
def growth_rate_vs_kx_slice_graphkit(options={})
|
559
|
+
case options[:command]
|
560
|
+
when :help
|
561
|
+
return "Growth rates vs kx at a fixed ky, not integrated over ky."
|
562
|
+
when :options
|
563
|
+
return [:ky, :ky_index]
|
564
|
+
else
|
565
|
+
options[:kxy] = :kx
|
566
|
+
if options[:ky_index].nil?
|
567
|
+
raise "You must specify ky or ky_index." if options[:ky].nil?
|
568
|
+
options[:title] = "Growth rate vs kx at ky = "+options[:ky].to_s
|
569
|
+
else
|
570
|
+
options[:ky] = list(:ky)[options[:ky_index]]
|
571
|
+
options[:title] = "Growth rate vs kx at ky_index = "+options[:ky_index].to_s
|
572
|
+
end
|
573
|
+
eputs "For run " + @id.to_s + ", using ky = " + options[:ky].to_s
|
574
|
+
growth_rate_vs_kxy_slice_graphkit(options)
|
575
|
+
end
|
576
|
+
end
|
577
|
+
|
578
|
+
def growth_rate_vs_ky_slice_graphkit(options={})
|
579
|
+
case options[:command]
|
580
|
+
when :help
|
581
|
+
return "Growth rates vs ky at a fixed kx, not integrated over kx."
|
582
|
+
when :options
|
583
|
+
return [:kx, :kx_index]
|
584
|
+
else
|
585
|
+
options[:kxy] = :ky
|
586
|
+
if options[:kx_index].nil?
|
587
|
+
raise "You must specify kx or kx_index." if options[:kx].nil?
|
588
|
+
options[:title] = "Growth rate vs ky at kx = "+options[:kx].to_s
|
589
|
+
else
|
590
|
+
options[:kx] = list(:kx)[options[:kx_index]]
|
591
|
+
options[:title] = "Growth rate vs ky at kx_index = "+options[:kx_index].to_s
|
592
|
+
end
|
593
|
+
eputs "For run " + @id.to_s + ", using kx = " + options[:kx].to_s
|
594
|
+
growth_rate_vs_kxy_slice_graphkit(options)
|
595
|
+
end
|
596
|
+
end
|
597
|
+
|
598
|
+
def growth_rate_vs_kxy_slice_graphkit(options={})
|
599
|
+
case options[:command]
|
600
|
+
when :help
|
601
|
+
when :options
|
602
|
+
return []
|
603
|
+
else
|
604
|
+
raise "Growth Rates are not available in non-linear mode" if @nonlinear_mode == "on"
|
605
|
+
raise "growth_rate_at_ky_at_kx was not calculated for this run, probably because the environment variable GS2_CALCULATE_ALL was not set when the run was analyzed. Try setting this variable and re-analyzing the run." if @growth_rate_at_ky_at_kx.nil?
|
606
|
+
kxy = options[:kxy]
|
607
|
+
kit = GraphKit.autocreate({x: axiskit(kxy.to_s, options), y: axiskit("growth_rate_over_#{kxy}_slice", options)})
|
608
|
+
kit.title = options[:title]
|
609
|
+
kit.data[0].with = "lp"
|
610
|
+
kit.data[0].title = @run_name
|
611
|
+
kit.file_name = options[:graphkit_name]
|
612
|
+
kit
|
613
|
+
end
|
614
|
+
end
|
615
|
+
|
556
616
|
def growth_rate_vs_kx_vs_ky_graphkit(options={})
|
557
617
|
case options[:command]
|
558
618
|
when :help
|
data/lib/gs2crmod/gsl_data.rb
CHANGED
@@ -387,6 +387,25 @@ module GSLVectors
|
|
387
387
|
end
|
388
388
|
private :growth_rate_over_kxy_gsl_vector
|
389
389
|
|
390
|
+
# The growth rate, calculated from the potential, indexed by kx. Only makes sense in linear calculations.
|
391
|
+
def growth_rate_over_kx_slice_gsl_vector(options)
|
392
|
+
Dir.chdir(@directory) do
|
393
|
+
slice_of_growth_rates = send(:growth_rate_at_ky_at_kx)[options[:ky]].values
|
394
|
+
raise "Something went wrong: slice of growth rates seems empty" if slice_of_growth_rates.nil?
|
395
|
+
return GSL::Vector.alloc(slice_of_growth_rates)
|
396
|
+
#return GSL::Vector.alloc(send(:growth_rate_at_ky_at_kx[ky]).values)
|
397
|
+
end
|
398
|
+
end
|
399
|
+
|
400
|
+
# The growth rate, calculated from the potential, indexed by ky. Only makes sense in linear calculations.
|
401
|
+
def growth_rate_over_ky_slice_gsl_vector(options)
|
402
|
+
Dir.chdir(@directory) do
|
403
|
+
slice_of_growth_rates = send(:growth_rate_at_ky_at_kx).values.map{|h| h[options[:kx]]}
|
404
|
+
raise "Something went wrong: slice of growth rates seems empty" if slice_of_growth_rates.nil?
|
405
|
+
return GSL::Vector.alloc(slice_of_growth_rates)
|
406
|
+
end
|
407
|
+
end
|
408
|
+
|
390
409
|
# Frequency, indexed over ky, taken direct from the gs2 output file
|
391
410
|
def frequency_over_ky_gsl_vector(options)
|
392
411
|
options.convert_to_index(self, :kx)
|