trinitycrmod 0.4.7 → 0.5.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: de402b01828cad54befc2cd1b24c844708baad52
4
- data.tar.gz: 62fcd6580cb2ea81fdb18a3ccf15f0f92d6f2e4c
3
+ metadata.gz: 7744e267e114d444760b4f828d2feb7fec8b7834
4
+ data.tar.gz: 4f71662ed8dca1954360babff96474492ca6e514
5
5
  SHA512:
6
- metadata.gz: 33d8abf68a7dfa234bf550e9abb82cb669feae70660932630c062982372bca8adab0b846ec82bd5fd7d9f82a897ab1de4d7e9f13364024459e91cdaad33f67b5
7
- data.tar.gz: 5db951cf9ea54d1e94dedd2a11fc33f40d16b7bab10bca1da7c14eb0fa1b2d508ed66808ca4073030300421507b7b2f629330ff4aa5baf984f82f8f376342dd1
6
+ metadata.gz: 1fd2a34beb1768bb9aa7021e81dee50a9d80a3d09b6e0c90c906bcf7f1a33bfa3af430fe03c2b060cbca5c969fba6c0e7851698bd9c828641199fc3f6bf7f08f
7
+ data.tar.gz: 9d0a10905bcc7c8d5c250f4b04f54009b11bcc1abe1adb26dc16cf895f4290c743eef202bd8c8d1c58c5b159a46fee9124649daa07862567c30f55e60f6edc95
data/Gemfile CHANGED
@@ -1,7 +1,7 @@
1
1
  source "http://rubygems.org"
2
2
  # Add dependencies required to use your gem here.
3
3
  # Example:
4
- gem "coderunner", ">= 0.14.2"
4
+ gem "coderunner", ">= 0.15.5"
5
5
  gem "text-data-tools", ">= 1.1.3"
6
6
  gem "gs2crmod", ">=0.11.33"
7
7
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.7
1
+ 0.5.0
@@ -4,7 +4,7 @@ class CodeRunner::Trinity
4
4
  end
5
5
  def setup_chease
6
6
  ep "Setting up chease files..."
7
- FileUtils.mkdir('chease')
7
+ FileUtils.mkdir('chease') unless FileTest.exist? 'chease'
8
8
  origfile = @runner.root_folder + '/ogyropsi.dat'
9
9
  FileUtils.cp(origfile, 'chease/ogyropsi.dat') if FileTest.exist? origfile
10
10
  end
@@ -14,7 +14,7 @@ class CodeRunner::Trinity
14
14
 
15
15
  def check_parallelisation
16
16
  error("nrad must be explicitly specified") unless @nrad
17
- error("Number of jobs: #{n_flux_tubes} must evenly divide the number of processors: #{actual_number_of_processors} when fork_flag is .true.") if fork_flag_actual.fortran_true? and not actual_number_of_processors%n_flux_tubes == 0
17
+ error("Number of jobs: #{n_flux_tubes_jac} must evenly divide the number of processors: #{actual_number_of_processors} when fork_flag is .true.") if fork_flag_actual.fortran_true? and not actual_number_of_processors%n_flux_tubes_jac == 0
18
18
 
19
19
  end
20
20
 
@@ -854,7 +854,39 @@
854
854
  :explanation=>
855
855
  "This variable must be a floating point number (an integer is also acceptable: it will be converted into a floating point number)."}],
856
856
  :type=>:Float,
857
- :autoscanned_defaults=>[1.0]}}},
857
+ :autoscanned_defaults=>[1.0]},
858
+ :ncc_calibrate=>
859
+ {:should_include=>"true",
860
+ :description=>"Number of calibration jobs.",
861
+ :help=>
862
+ "Number of calibration jobs. Minimum 1, maximum number of cell centers. Only applies when neval_calibrate > 0.",
863
+ :code_name=>:ncc_calibrate,
864
+ :must_pass=>
865
+ [{:test=>"kind_of? Integer",
866
+ :explanation=>"This variable must be an integer."}],
867
+ :type=>:Integer},
868
+ :neval_calibrate=>
869
+ {:should_include=>"true",
870
+ :description=>"Number of flux evaluations between recalibrations.",
871
+ :help=>
872
+ "Number of flux evaluations between recalibrations. Set > 0 to trigger calibration mode.",
873
+ :code_name=>:neval_calibrate,
874
+ :must_pass=>
875
+ [{:test=>"kind_of? Integer",
876
+ :explanation=>"This variable must be an integer."}],
877
+ :type=>:Integer},
878
+ :match_gs2_species=>
879
+ {:should_include=>"true",
880
+ :description=>
881
+ "If true, try to match gs2 species to trinity species by examining species properties.",
882
+ :help=>
883
+ "If true, try to match gs2 species to trinity species by examining species properties. If false, gs2 species must be in the same order as trinity species.",
884
+ :code_name=>:match_gs2_species,
885
+ :must_pass=>
886
+ [{:test=>"kind_of? String and FORTRAN_BOOLS.include? self",
887
+ :explanation=>
888
+ "This variable must be a fortran boolean. (In Ruby this is represented as a string: e.g. '.true.')"}],
889
+ :type=>:Fortran_Bool}}},
858
890
  :init=>
859
891
  {:description=>"",
860
892
  :should_include=>"true",
@@ -868,7 +900,7 @@
868
900
  [{:test=>"kind_of? String",
869
901
  :explanation=>"This variable must be a string."}],
870
902
  :type=>:String,
871
- :autoscanned_defaults=>["default"]},
903
+ :autoscanned_defaults=>["default", "iterdb"]},
872
904
  :init_file=>
873
905
  {:should_include=>"true",
874
906
  :description=>" file with input data",
@@ -1051,7 +1083,7 @@
1051
1083
  :explanation=>
1052
1084
  "This variable must be a fortran boolean. (In Ruby this is represented as a string: e.g. '.true.')"}],
1053
1085
  :type=>:Fortran_Bool,
1054
- :autoscanned_defaults=>[".false."]},
1086
+ :autoscanned_defaults=>[".false.", ".true."]},
1055
1087
  :flux_groups=>
1056
1088
  {:should_include=>"true",
1057
1089
  :description=>" The number of processors for each flux calculation",
@@ -1061,7 +1093,30 @@
1061
1093
  [{:test=>"kind_of? Integer",
1062
1094
  :explanation=>"This variable must be an integer."}],
1063
1095
  :type=>:Integer,
1064
- :autoscanned_defaults=>["nproc/njobs"]}}},
1096
+ :autoscanned_defaults=>["nproc/njobs"]},
1097
+ :dyn_load_balance=>
1098
+ {:should_include=>"true",
1099
+ :description=>"Activate dynamic load balancing for gs2.",
1100
+ :help=>
1101
+ "Activate dynamic load balancing for gs2. Jobs which fail to converge are given successively larger proportions of processors.",
1102
+ :code_name=>:dyn_load_balance,
1103
+ :must_pass=>
1104
+ [{:test=>"kind_of? String and FORTRAN_BOOLS.include? self",
1105
+ :explanation=>
1106
+ "This variable must be a fortran boolean. (In Ruby this is represented as a string: e.g. '.true.')"}],
1107
+ :type=>:Fortran_Bool},
1108
+ :peaking_factor=>
1109
+ {:should_include=>"true",
1110
+ :description=>
1111
+ "Experimental. Enhance all gradients. Negative off, 1.0 no change.",
1112
+ :help=>
1113
+ "Experimental. Enhance the peakedness, i.e. the gradient, of all profiles. Negative off, 1.0 no change.",
1114
+ :code_name=>:peaking_factor,
1115
+ :must_pass=>
1116
+ [{:test=>"kind_of? Numeric",
1117
+ :explanation=>
1118
+ "This variable must be a floating point number (an integer is also acceptable: it will be converted into a floating point number)."}],
1119
+ :type=>:Float}}},
1065
1120
  :sources=>
1066
1121
  {:description=>"",
1067
1122
  :should_include=>"true",
@@ -54,7 +54,7 @@ class CodeRunner
54
54
 
55
55
  @code_long="Trinity Turbulent Transport Solver"
56
56
 
57
- @run_info=[:time, :is_a_restart, :restart_id, :restart_run_name, :completed_timesteps, :percent_complete]
57
+ @run_info=[:time, :is_a_restart, :restart_id, :restart_run_name, :completed_timesteps, :percent_complete, :no_restart_gs2]
58
58
 
59
59
  @uses_mpi = true
60
60
 
@@ -97,7 +97,10 @@ class CodeRunner
97
97
  (rcp.variables).each{|v| new_run.set(v, send(v)) if send(v)}
98
98
  if @flux_option == "gs2"
99
99
  gs2_runs.each_with_index do |run, i|
100
- CodeRunner::Gs2.rcp.variables.each{|v| new_run.gs2_runs[i].set(v, run.send(v)) if run.send(v)}
100
+ CodeRunner::Gs2.rcp.variables.each{|v|
101
+ next if [:ginit_option, :delt_option].include? v and new_run.no_restart_gs2
102
+ new_run.gs2_runs[i].set(v, run.send(v)) if run.send(v)
103
+ }
101
104
  end
102
105
  end
103
106
  @naming_pars.delete(:preamble)
@@ -112,6 +115,7 @@ class CodeRunner
112
115
  new_run.init_file = @run_name + ".tmp"
113
116
  @runner.nprocs = @nprocs if @runner.nprocs == "1" # 1 is the default so this means the user probably didn't specify nprocs
114
117
  raise "Restart must be on the same number of processors as the previous run: new is #{new_run.nprocs.inspect} and old is #{@nprocs.inspect}" if !new_run.nprocs or new_run.nprocs != @nprocs
118
+ raise "Restart cannot have a different sized jacobian: new is #{new_run.n_flux_tubes_jac} and old is #{n_flux_tubes_jac}" unless new_run.n_flux_tubes_jac == n_flux_tubes_jac
115
119
  # @runner.parameters.each{|var, value| new_run.set(var,value)} if @runner.parameters
116
120
  # ep @runner.parameters
117
121
  new_run.run_name = nil
@@ -125,9 +129,20 @@ class CodeRunner
125
129
  ['iternt', 'iterflx', 'tmp'].each do |ext|
126
130
  FileUtils.cp("#@directory/#@run_name.#{ext}", "#{new_run.directory}/.")
127
131
  end
128
- if new_run.flux_option == "gs2" and @flux_option == "gs2"
132
+ if new_run.flux_option == "gs2" and @flux_option == "gs2" and not new_run.no_restart_gs2
129
133
  for i in 0...n_flux_tubes
130
- new_run.gs2_runs[i].directory = new_run.directory + "/flux_tube_#{i+1}"
134
+ break if i >= new_run.n_flux_tubes
135
+ if i >= n_flux_tubes_jac
136
+ jn = i - n_flux_tubes_jac + 1
137
+ #run_name = "calibrate_" + @run_name + (jn).to_s
138
+ folder = "calibrate_#{jn}"
139
+ else
140
+ jn = i + 1
141
+ #run_name = @run_name + (jn).to_s
142
+ folder = "flux_tube_#{jn}"
143
+ end
144
+
145
+ new_run.gs2_runs[i].directory = new_run.directory + "/#{folder}"
131
146
  FileUtils.makedirs(new_run.gs2_runs[i].directory)
132
147
  #ep ['gs2_runs[i] before', gs2_runs[i].nwrite, new_run.gs2_runs[i].nwrite, new_run.gs2_runs[i].parameter_hash]
133
148
  gs2_runs[i].restart(new_run.gs2_runs[i])
@@ -202,7 +217,7 @@ class CodeRunner
202
217
  end
203
218
 
204
219
  # The number of separate flux tube results needed for the jacobian
205
- def n_flux_tubes
220
+ def n_flux_tubes_jac
206
221
  d1 = dflx_stencil_actual - 1
207
222
  ngrads =d1 * case @grad_option
208
223
  when "tigrad", "ngrad", "lgrad"
@@ -224,6 +239,15 @@ class CodeRunner
224
239
  #p 'nraaad', @nrad
225
240
  (@nrad-1) * njac
226
241
  end
242
+ def n_flux_tubes
243
+ if @neval_calibrate and @neval_calibrate > 0
244
+ raise "neval_calibrate set but ncc_calibrate not set" unless @ncc_calibrate
245
+ n_flux_tubes_jac + @ncc_calibrate
246
+ else
247
+ n_flux_tubes_jac
248
+ end
249
+ end
250
+
227
251
  # Writes the gs2 input files, creating separate subfolders
228
252
  # for them if @subfolders is .true.
229
253
  def generate_gs2_input_files
@@ -236,16 +260,26 @@ class CodeRunner
236
260
  gs2run = gs2_runs[i]
237
261
  #ep ['gs2_runs[i] in generate', gs2_runs[i].nwrite]
238
262
  #p ['i',i]
263
+ if i >= n_flux_tubes_jac
264
+ jn = i - n_flux_tubes_jac + 1
265
+ run_name = "calibrate_" + @run_name + (jn).to_s
266
+ folder = "calibrate_#{jn}"
267
+ else
268
+ jn = i + 1
269
+ run_name = @run_name + (jn).to_s
270
+ folder = "flux_tube_#{jn}"
271
+ end
272
+
239
273
  if @subfolders and @subfolders.fortran_true?
240
- gs2run.directory = @directory + "/flux_tube_#{i+1}"
274
+ gs2run.directory = @directory + "/" + folder
241
275
  FileUtils.makedirs(gs2run.directory)
242
- gs2run.relative_directory = @relative_directory + "/flux_tube_#{i+1}"
276
+ gs2run.relative_directory = @relative_directory + "/" + folder
243
277
  gs2run.restart_dir = gs2run.directory + "/nc"
244
278
  else
245
279
  gs2run.directory = @directory
246
280
  gs2run.relative_directory = @relative_directory
247
281
  end
248
- gs2run.run_name = @run_name + (i+1).to_s
282
+ gs2run.run_name = run_name
249
283
  gs2run.nprocs = @nprocs
250
284
  if i==0
251
285
  block = Proc.new{ingen}
@@ -264,7 +298,7 @@ class CodeRunner
264
298
  if @subfolders and @subfolders.fortran_true?
265
299
  infile = gs2run.directory + "/" + gs2run.run_name + ".in"
266
300
  text = File.read(infile)
267
- File.open(infile, 'w'){|f| f.puts text.sub(/restart_dir\s*=\s*"nc"/, "restart_dir = \"flux_tube_#{i+1}/nc\"")}
301
+ File.open(infile, 'w'){|f| f.puts text.sub(/restart_dir\s*=\s*"nc"/, "restart_dir = \"#{folder}/nc\"")}
268
302
  end
269
303
  end
270
304
  end
@@ -292,6 +326,9 @@ class CodeRunner
292
326
  @component_runs ||= []
293
327
  if @flux_option == "gs2"
294
328
  #puts "HERE"
329
+ #puts "generate_component_runs", @component_runs.size, @runner.run_list.size, caller.to_a.slice(0..9)
330
+ #puts @component_runs[1].ginit_option if @component_runs.size > 0
331
+ #STDIN.gets
295
332
 
296
333
  for i in 0...n_flux_tubes
297
334
  component = @component_runs[i]
data/trinitycrmod.gemspec CHANGED
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: trinitycrmod 0.4.7 ruby lib
5
+ # stub: trinitycrmod 0.5.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "trinitycrmod"
9
- s.version = "0.4.7"
9
+ s.version = "0.5.0"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["Edmund Highcock"]
14
- s.date = "2014-06-20"
14
+ s.date = "2015-01-25"
15
15
  s.description = "This module allows Trinity, the Multiscale Gyrokinetic Turbulent Transport solver for Fusion Reactors, to harness the power of CodeRunner, a framework for the automated running and analysis of simulations."
16
16
  s.email = "edmundhighcock@sourceforge.net"
17
17
  s.extra_rdoc_files = [
@@ -48,7 +48,7 @@ Gem::Specification.new do |s|
48
48
  s.specification_version = 4
49
49
 
50
50
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
51
- s.add_runtime_dependency(%q<coderunner>, [">= 0.14.2"])
51
+ s.add_runtime_dependency(%q<coderunner>, [">= 0.15.5"])
52
52
  s.add_runtime_dependency(%q<text-data-tools>, [">= 1.1.3"])
53
53
  s.add_runtime_dependency(%q<gs2crmod>, [">= 0.11.33"])
54
54
  s.add_development_dependency(%q<shoulda>, [">= 0"])
@@ -56,7 +56,7 @@ Gem::Specification.new do |s|
56
56
  s.add_development_dependency(%q<bundler>, ["> 1.0.0"])
57
57
  s.add_development_dependency(%q<jeweler>, [">= 2.0.0"])
58
58
  else
59
- s.add_dependency(%q<coderunner>, [">= 0.14.2"])
59
+ s.add_dependency(%q<coderunner>, [">= 0.15.5"])
60
60
  s.add_dependency(%q<text-data-tools>, [">= 1.1.3"])
61
61
  s.add_dependency(%q<gs2crmod>, [">= 0.11.33"])
62
62
  s.add_dependency(%q<shoulda>, [">= 0"])
@@ -65,7 +65,7 @@ Gem::Specification.new do |s|
65
65
  s.add_dependency(%q<jeweler>, [">= 2.0.0"])
66
66
  end
67
67
  else
68
- s.add_dependency(%q<coderunner>, [">= 0.14.2"])
68
+ s.add_dependency(%q<coderunner>, [">= 0.15.5"])
69
69
  s.add_dependency(%q<text-data-tools>, [">= 1.1.3"])
70
70
  s.add_dependency(%q<gs2crmod>, [">= 0.11.33"])
71
71
  s.add_dependency(%q<shoulda>, [">= 0"])
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trinitycrmod
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.7
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Edmund Highcock
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-20 00:00:00.000000000 Z
11
+ date: 2015-01-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: coderunner
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.14.2
19
+ version: 0.15.5
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 0.14.2
26
+ version: 0.15.5
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: text-data-tools
29
29
  requirement: !ruby/object:Gem::Requirement