gs2crmod 0.9.6 → 0.9.7

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.9.6
1
+ 0.9.7
data/gs2crmod.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "gs2crmod"
8
- s.version = "0.9.6"
8
+ s.version = "0.9.7"
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"]
12
- s.date = "2013-08-13"
12
+ s.date = "2013-08-15"
13
13
  s.description = "GS2 is a gyrokinetic flux tube initial value turbulence code which can be used for fusion or astrophysical plasmas. CodeRunner is a framework for the automated running and analysis of large simulations. This module allows GS2 (and its sister code AstroGK) to harness the power of the CodeRunner framework."
14
14
  s.email = "edmundhighcock@sourceforge.net"
15
15
  s.extensions = ["ext/extconf.rb"]
@@ -265,19 +265,30 @@ def calculate_growth_rates_and_frequencies
265
265
  # eputs final_timestep_list
266
266
  f = LongRegexen::FLOAT.verbatim
267
267
  logi(f)
268
- regex = Regexp.new( "^.*aky=\\s*(?<aky>#{f}).*omav=\\s*(?<re>#{f})\\s*(?<gr>#{f})")
269
- logi(regex)
270
- final_timestep_list.gsub(regex) do
271
- data = $~
272
- # eputs data.inspect; gets
273
- #raise CRFatal.new("Unknown value of ky read from output file: #{data[:aky].to_f}. Not in list:\n#{list(:ky).values.inspect}")
268
+ #regex = Regexp.new( "^.*aky=\\s*(?<aky>#{f}).*omav=\\s*(?<re>#{f})\\s*(?<gr>#{f})")
269
+ #logi(regex)
270
+ #final_timestep_list.gsub(regex) do
271
+ #data = $~
272
+ ## eputs data.inspect; gets
273
+ ##raise CRFatal.new("Unknown value of ky read from output file: #{data[:aky].to_f}. Not in list:\n#{list(:ky).values.inspect}")
274
274
 
275
- next unless (list(:ky).values).include? data[:aky].to_f
276
- #@growth_rates[data[:aky].to_f] = data[:gr].to_f
277
- aky = data[:aky].to_f
278
- next if aky==0.0
279
- @real_frequencies[data[:aky].to_f] = data[:re].to_f
275
+ #next unless (list(:ky).values).include? data[:aky].to_f
276
+ ##@growth_rates[data[:aky].to_f] = data[:gr].to_f
277
+ #aky = data[:aky].to_f
278
+ #next if aky==0.0
279
+ #@real_frequencies[data[:aky].to_f] = data[:re].to_f
280
+ #end
281
+ @frequency_at_ky_at_kx||= FloatHash.new
282
+ ky_values = []
283
+ regex = Regexp.new( "^.*aky=\\s*(?<aky>#{f})\s*akx=\\s*(?<akx>#{f}).*omav=\\s*(?<re>#{f})\\s*(?<gr>#{f})")
284
+ final_timestep_list.scan(regex) do
285
+ aky = eval($~[:aky])
286
+ akx = eval($~[:akx])
287
+ @frequency_at_ky_at_kx[aky] = FloatHash.new unless ky_values.include? aky
288
+ ky_values.push aky
289
+ @frequency_at_ky_at_kx[aky][akx] = eval($~[:re])
280
290
  end
291
+ #raise CRFatal.new("Unknown value of ky read from output file: #{data[:aky].to_f}. Not in list:\n#{list(:ky).values.inspect}")
281
292
  # pp @ky_list
282
293
 
283
294
  # With zero magnetic shear, calculate growth rates for both kx and ky
@@ -28,6 +28,7 @@ def auto_axiskits(name, options)
28
28
  'kpar' => ['kpar', "2 pi/qR"],
29
29
  'growth_rate_over_kx' => ['Growth Rate', "v_th#{species_letter}/a", 1],
30
30
  'growth_rate_over_ky' => ['Growth Rate', "v_th#{species_letter}/a", 1],
31
+ 'frequency_over_ky' => ['Frequency', "v_th#{species_letter}/a", 1],
31
32
  'transient_es_heat_flux_amplification_over_kx' => ['Transient Electrostatic Heat Amplification', "", 1],
32
33
  'transient_es_heat_flux_amplification_over_ky' => ['Transient Electrostatic Heat Amplification', "", 1],
33
34
  'transient_amplification_over_kx' => ['Transient Amplification', "", 1],
@@ -521,6 +522,23 @@ module GraphKits
521
522
  end
522
523
  end
523
524
 
525
+ def frequency_vs_ky_graphkit(options={})
526
+ case options[:command]
527
+ when :help
528
+ return "Frequencies vs ky. "
529
+ when :options
530
+ return []
531
+ else
532
+ raise "Frequencies are not available in non-linear mode" if @nonlinear_mode == "on"
533
+ kxy = options[:kxy]
534
+ kit = GraphKit.autocreate({x: axiskit('ky', options), y: axiskit("frequency_over_ky", options)})
535
+ kit.title = "Frequencies vs ky"
536
+ kit.data[0].gp.with = "lp"
537
+ kit.data[0].gp.title = @run_name
538
+ kit.file_name = options[:graphkit_name]
539
+ kit
540
+ end
541
+ end
524
542
  def hflux_tot_vs_time_graphkit(options={})
525
543
  case options[:command]
526
544
  when :help
data/lib/gs2crmod/gs2.rb CHANGED
@@ -120,6 +120,7 @@ eval(%[
120
120
  :growth_rate_at_ky,
121
121
  :growth_rate_at_kx,
122
122
  :growth_rate_at_ky_at_kx,
123
+ :frequency_at_ky_at_kx,
123
124
  :real_frequencies_by_ky,
124
125
  :max_growth_rate,
125
126
  :fastest_growing_mode,
@@ -322,6 +322,12 @@ module GSLVectors
322
322
  end
323
323
  private :growth_rate_over_kxy_gsl_vector
324
324
 
325
+ # Frequency, indexed over ky, taken direct from the gs2 output file
326
+ def frequency_over_ky_gsl_vector(options)
327
+ options.convert_to_index(self, :kx)
328
+ return GSL::Vector.alloc(gsl_vector('ky').to_a.map{|ky| frequency_at_ky_at_kx[ky].values[options[:kx_index]-1]})
329
+ end
330
+
325
331
  def es_heat_by_kx_over_time_gsl_vector(options)
326
332
  options[:direction] = :kx
327
333
  es_heat_by_kxy_over_time_gsl_vector(options)
Binary file
@@ -36,7 +36,7 @@ if ENV['GS2_EXEC']
36
36
  FileUtils.rm_r(tfolder)
37
37
  end
38
38
  def test_submission
39
- CodeRunner.submit(C: 'gs2', X: ENV['GS2_EXEC'], D: 'test_gs2crmod', n: '1', Y: tfolder, p: '{write_moments: ".true."}')
39
+ CodeRunner.submit(C: 'gs2', X: ENV['GS2_EXEC'], D: 'test_gs2crmod', n: '1', Y: tfolder, p: '{write_moments: ".true.", write_line: ".true."}')
40
40
  CodeRunner.status(Y: tfolder)
41
41
  end
42
42
  end
@@ -55,6 +55,10 @@ class TestAnalysis < Test::Unit::TestCase
55
55
  assert_equal(0.13066732664774272, @runner.run_list[1].max_growth_rate)
56
56
  assert_equal(0.13066732664774272, @runner.run_list[1].growth_rate_at_ky[0.5])
57
57
  assert_equal(:Complete, @runner.run_list[1].status)
58
+ p @run.frequency_at_ky_at_kx, @run.gsl_vector('kx')[1]
59
+ assert_equal(6.6036e-01, @run.frequency_at_ky_at_kx[0.5][2.5133])
60
+ #p @run.gsl_vector('kx'); STDIN.gets
61
+ assert_equal(6.6036e-01, @run.frequency_at_ky_at_kx[0.5][@run.gsl_vector('kx')[3]])
58
62
  end
59
63
  def test_interpolation
60
64
  assert_equal(5, @run.gsl_vector('kx').size)
@@ -94,13 +98,16 @@ class TestAnalysis < Test::Unit::TestCase
94
98
  assert_equal(51, kit.data[0].y.data.size)
95
99
  assert_equal(@runner.run_list[1].netcdf_file.var('phi2_by_ky').get('start' => [1,4], 'end' => [1,4]).to_a[0][0], kit.data[0].y.data[4])
96
100
 
97
- kit = @run.graphkit('tpar2_by_mode_vs_time', {ky_index:2, kx_index:1, species_index:1})
101
+ kit = @run.graphkit('tpar2_by_mode_vs_time', {ky_index:2, kx_index:1, species_index:1})
98
102
  #kit.gnuplot
99
103
  assert_equal(@runner.run_list[1].netcdf_file.var('tpar2_by_mode').get('start' => [0,1,0,4], 'end' => [0,1,0,4]).to_a[0][0][0][0], kit.data[0].y.data[4])
100
104
 
101
- kit = @run.graphkit('tperp2_by_mode_vs_time', {ky_index:2, kx_index:1, species_index:1})
105
+ kit = @run.graphkit('tperp2_by_mode_vs_time', {ky_index:2, kx_index:1, species_index:1})
102
106
  #kit.gnuplot
103
107
  assert_equal(@runner.run_list[1].netcdf_file.var('tperp2_by_mode').get('start' => [0,1,0,4], 'end' => [0,1,0,4]).to_a[0][0][0][0], kit.data[0].y.data[4])
108
+ kit = @run.graphkit('frequency_vs_ky', {kx_index:1})
109
+ assert_equal(@run.frequency_at_ky_at_kx[0.5][0.0], kit.data[0].y.data[1])
110
+ #kit.gnuplot
104
111
  end
105
112
  def test_3d_graphs
106
113
  kit = @runner.run_list[1].graphkit('phi_real_space', {n0: 3, Rgeo: 3})
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.9.6
4
+ version: 0.9.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-08-13 00:00:00.000000000 Z
13
+ date: 2013-08-15 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: coderunner