gryfxcrmod 0.1.0 → 0.1.1
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/Gemfile +1 -1
- data/VERSION +1 -1
- data/gryfxcrmod.gemspec +5 -5
- data/lib/gryfxcrmod/gryfx.rb +59 -3
- data/test/cyclone_miller_ke.tgz +0 -0
- data/test/test_gryfxcrmod.rb +22 -3
- metadata +5 -5
data/Gemfile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.1
|
data/gryfxcrmod.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "gryfxcrmod"
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.1"
|
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"]
|
12
|
-
s.date = "2013-08-
|
12
|
+
s.date = "2013-08-19"
|
13
13
|
s.description = "This is a customised subclass of the CodeRunner::Run class which allows CodeRunner to run and analyse the gyrofluid GPU turbulent transport solver Gryfx."
|
14
14
|
s.email = "edmundhighcock@users.sourceforge.net"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -49,7 +49,7 @@ Gem::Specification.new do |s|
|
|
49
49
|
|
50
50
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
51
51
|
s.add_runtime_dependency(%q<coderunner>, [">= 0.13.0"])
|
52
|
-
s.add_runtime_dependency(%q<gs2crmod>, [">= 0.
|
52
|
+
s.add_runtime_dependency(%q<gs2crmod>, [">= 0.10.1"])
|
53
53
|
s.add_runtime_dependency(%q<ruby-netcdf>, [">= 0.6.6"])
|
54
54
|
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
55
55
|
s.add_development_dependency(%q<shoulda-context>, [">= 1.1.5"])
|
@@ -58,7 +58,7 @@ Gem::Specification.new do |s|
|
|
58
58
|
s.add_development_dependency(%q<jeweler>, [">= 1.8.4"])
|
59
59
|
else
|
60
60
|
s.add_dependency(%q<coderunner>, [">= 0.13.0"])
|
61
|
-
s.add_dependency(%q<gs2crmod>, [">= 0.
|
61
|
+
s.add_dependency(%q<gs2crmod>, [">= 0.10.1"])
|
62
62
|
s.add_dependency(%q<ruby-netcdf>, [">= 0.6.6"])
|
63
63
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
64
64
|
s.add_dependency(%q<shoulda-context>, [">= 1.1.5"])
|
@@ -68,7 +68,7 @@ Gem::Specification.new do |s|
|
|
68
68
|
end
|
69
69
|
else
|
70
70
|
s.add_dependency(%q<coderunner>, [">= 0.13.0"])
|
71
|
-
s.add_dependency(%q<gs2crmod>, [">= 0.
|
71
|
+
s.add_dependency(%q<gs2crmod>, [">= 0.10.1"])
|
72
72
|
s.add_dependency(%q<ruby-netcdf>, [">= 0.6.6"])
|
73
73
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
74
74
|
s.add_dependency(%q<shoulda-context>, [">= 1.1.5"])
|
data/lib/gryfxcrmod/gryfx.rb
CHANGED
@@ -43,9 +43,22 @@ class CodeRunner
|
|
43
43
|
name = @run_name
|
44
44
|
name += " (res: #@restart_id)" if @restart_id
|
45
45
|
name += " real_id: #@real_id" if @real_id
|
46
|
-
beginning = sprintf("%2d:%d %-60s %1s:%2.1f(%s) %3s%1s", @id, @job_no, name, @status.to_s[0,1], @run_time.to_f / 60.0, @nprocs.to_s, percent_complete, "%")
|
46
|
+
beginning = sprintf("%2d:%d %-60s %1s:%2.1f(%s) %3s%1s ", @id, @job_no, name, @status.to_s[0,1], @run_time.to_f / 60.0, @nprocs.to_s, percent_complete, "%")
|
47
47
|
if ctd
|
48
48
|
#beginning += sprintf("Q:%f, Pfusion:%f MW, Ti0:%f keV, Te0:%f keV, n0:%f x10^20", fusionQ, pfus, ti0, te0, ne0)
|
49
|
+
if @nonlinear_mode == "off"
|
50
|
+
beginning += sprintf("%3.2e %3.2e %4s",
|
51
|
+
@fastest_growing_mode, @max_growth_rate,
|
52
|
+
@freq_of_max_growth_rate||0.0) rescue ""
|
53
|
+
elsif @nonlinear_mode == "on"
|
54
|
+
# p @hflux_tot_stav
|
55
|
+
beginning += " sat:#{saturated.to_s[0]}" if not @saturated.nil?
|
56
|
+
beginning += sprintf(" hflux:%1.2e", @hflux_tot_stav) if @hflux_tot_stav
|
57
|
+
beginning += sprintf("+/-%1.2e", @hflux_tot_stav_error) if @hflux_tot_stav_error
|
58
|
+
beginning += sprintf(" momflux:%1.2e", @es_mom_flux_stav.values.sum) if @es_mom_flux_stav and @es_mom_flux_stav.values[0]
|
59
|
+
beginning += ' SC:' + @spectrum_check.map{|c| c.to_s}.join(',') if @spectrum_check
|
60
|
+
beginning += ' VC:' + @vspace_check.map{|c| sprintf("%d", ((c*10.0).to_i rescue -1))}.join(',') if @vspace_check
|
61
|
+
end
|
49
62
|
end
|
50
63
|
beginning += " ---#{@comment}" if @comment
|
51
64
|
beginning
|
@@ -76,6 +89,8 @@ class CodeRunner
|
|
76
89
|
# This method, as its name suggests, is called whenever CodeRunner is asked to analyse a run directory. This happens if the run status is not :Complete, or if the user has specified recalc_all(-A on the command line) or reprocess_all (-a on the command line).
|
77
90
|
#
|
78
91
|
def process_directory_code_specific
|
92
|
+
@grid_option = "box" # For compatibility with the GS2 routines
|
93
|
+
@write_phi_over_time = "true" # For compatibility with the GS2 routines
|
79
94
|
get_status
|
80
95
|
#p ['id is', id, 'ctd is ', ctd]
|
81
96
|
if ctd
|
@@ -89,7 +104,7 @@ class CodeRunner
|
|
89
104
|
@status = :Incomplete
|
90
105
|
else
|
91
106
|
get_completed_timesteps
|
92
|
-
if percent_complete = 100.0*@completed_timesteps.to_f/(nstep/nwrite) > 5.0
|
107
|
+
if (@percent_complete = 100.0*@completed_timesteps.to_f/(nstep/nwrite)) > 5.0
|
93
108
|
@status = :Complete
|
94
109
|
else
|
95
110
|
@status = :Failed
|
@@ -109,8 +124,49 @@ class CodeRunner
|
|
109
124
|
@directory + '/' + @run_name + '.cdf'
|
110
125
|
end
|
111
126
|
|
112
|
-
def calculate_results
|
127
|
+
#def calculate_results
|
128
|
+
#end
|
129
|
+
|
130
|
+
def calculate_frequencies
|
131
|
+
@real_frequencies = FloatHash.new
|
132
|
+
end
|
133
|
+
|
134
|
+
def gryfx?
|
135
|
+
true
|
113
136
|
end
|
114
137
|
|
138
|
+
|
139
|
+
def geometric_factors_gsl_tensor(options)
|
140
|
+
theta_vec = gsl_vector(:theta, options)
|
141
|
+
factors = GSL::Tensor.alloc(6,theta_vec.size)
|
142
|
+
values = [:Rplot, :Zplot, :aplot, :Rprime, :Zprime, :aprime].map do |name|
|
143
|
+
arr = netcdf_file.var(name).get.to_a
|
144
|
+
if options[:periodic]
|
145
|
+
arr += [arr[0]]
|
146
|
+
end
|
147
|
+
arr
|
148
|
+
end
|
149
|
+
#ep values
|
150
|
+
shape = factors.shape
|
151
|
+
for i in 0...shape[0]
|
152
|
+
unless options[:interpolate_theta]
|
153
|
+
for j in 0...shape[1]
|
154
|
+
factors[i,j] = values[i][j]
|
155
|
+
end
|
156
|
+
else
|
157
|
+
opts = options.dup
|
158
|
+
opts[:interpolate_theta] = nil
|
159
|
+
opts[:thetamax] = opts[:thetamin] = nil
|
160
|
+
theta_vec_short = gsl_vector(:theta, opts)
|
161
|
+
#p 'sizes', [theta_vec_short.size, values[i].to_gslv.size]
|
162
|
+
interp = GSL::ScatterInterp.alloc(:cubic, [theta_vec_short, values[i].to_gslv], true, [3.0].to_gslv)
|
163
|
+
for j in 0...theta_vec.size
|
164
|
+
factors[i,j] = interp.eval(theta_vec[j])
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
168
|
+
#ep factors
|
169
|
+
return factors
|
170
|
+
end
|
115
171
|
end
|
116
172
|
end
|
data/test/cyclone_miller_ke.tgz
CHANGED
Binary file
|
data/test/test_gryfxcrmod.rb
CHANGED
@@ -27,11 +27,13 @@ if ENV['GRYFX_EXEC']
|
|
27
27
|
FileUtils.rm(tfolder + '/v/id_1/.code_runner_run_data')
|
28
28
|
FileUtils.rm(tfolder + '/v/id_1/code_runner_results.rb')
|
29
29
|
## Don't uncomment the line below unless you *really* know what you are doing! Replacing the test archive will break many of the tests
|
30
|
-
Dir.chdir('test'){system "tar -czf cyclone_miller_ke.tgz cyclone_miller_ke/" unless FileTest.exist?('cyclone_miller_ke.tgz')}
|
30
|
+
Dir.chdir('test'){system "rm cyclone_miller_ke.tgz; tar -czf cyclone_miller_ke.tgz cyclone_miller_ke/" unless FileTest.exist?('cyclone_miller_ke.tgz')}
|
31
|
+
#Dir.chdir('test'){system "rm cyclone_miller_ke.tgz; tar -czf cyclone_miller_ke.tgz cyclone_miller_ke/"} #unless FileTest.exist?('cyclone_miller_ke.tgz')}
|
31
32
|
FileUtils.rm_r(tfolder)
|
32
33
|
end
|
33
34
|
def test_submission
|
34
35
|
CodeRunner.submit(T: false, C: 'gryfx', X: ENV['GRYFX_EXEC'], D: 'test_gryfxcrmod', n: '1', Y: tfolder, p: '{}')
|
36
|
+
CodeRunner.submit(T: false, C: 'gryfx', X: ENV['GRYFX_EXEC'], D: 'test_gryfxcrmod', n: '1', Y: tfolder, p: '{nstep: 7000, init_amp: 0.5, nonlinear_mode: "on"}')
|
35
37
|
CodeRunner::Gryfx.diff_input_files(tfolder + '/v/id_1/v_id_1.in', 'test/cyclone_miller_ke.in')
|
36
38
|
CodeRunner.status(Y: tfolder)
|
37
39
|
end
|
@@ -44,16 +46,33 @@ end
|
|
44
46
|
class TestAnalysis < Test::Unit::TestCase
|
45
47
|
def setup
|
46
48
|
Dir.chdir('test'){assert(system "tar -xzf cyclone_miller_ke.tgz")}
|
49
|
+
CodeRunner.run_command('ctaf', j: 2, Y: tfolder)
|
47
50
|
@runner = CodeRunner.fetch_runner(Y: tfolder)
|
48
51
|
@run = @runner.run_list[1]
|
49
52
|
end
|
50
53
|
def test_analysis
|
51
54
|
CodeRunner.status(Y: tfolder)
|
52
|
-
assert_equal(
|
53
|
-
|
55
|
+
assert_equal(2, @runner.run_list.size)
|
56
|
+
assert_equal(0.129, @runner.run_list[1].max_growth_rate.round(3))
|
57
|
+
assert_equal(2.0, (@runner.run_list[2].hflux_tot_stav/1.0e4).round(0))
|
54
58
|
#assert_equal(0.13066732664774272, @runner.run_list[1].growth_rate_at_ky[0.5])
|
55
59
|
#assert_equal(:Complete, @runner.run_list[1].status)
|
56
60
|
end
|
61
|
+
def test_graphs
|
62
|
+
kit = @run.graphkit('phi2_by_ky_vs_time', {ky_index: :all})
|
63
|
+
kit.gp.logscale = "y"
|
64
|
+
#kit.gnuplot
|
65
|
+
kit = @run.graphkit('phi_real_space_surface', {n0: 2})
|
66
|
+
assert_equal(6, kit.data.size)
|
67
|
+
#kit.gnuplot
|
68
|
+
kit = @run.graphkit('phi_real_space_poloidal_plane', {n0: 2, interpolate_theta: 16, interpolate_x: 4, torphi: 0.0})
|
69
|
+
kit.gp.view = ["equal xyz", "90,0,3"]
|
70
|
+
assert_equal(2, kit.data[0].y.data.shape.size)
|
71
|
+
assert_equal(177, kit.data[0].y.data.shape[1])
|
72
|
+
|
73
|
+
#kit.gnuplot
|
74
|
+
|
75
|
+
end
|
57
76
|
def tfolder
|
58
77
|
'test/cyclone_miller_ke'
|
59
78
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gryfxcrmod
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-08-
|
12
|
+
date: 2013-08-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: coderunner
|
@@ -34,7 +34,7 @@ dependencies:
|
|
34
34
|
requirements:
|
35
35
|
- - ! '>='
|
36
36
|
- !ruby/object:Gem::Version
|
37
|
-
version: 0.
|
37
|
+
version: 0.10.1
|
38
38
|
type: :runtime
|
39
39
|
prerelease: false
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -42,7 +42,7 @@ dependencies:
|
|
42
42
|
requirements:
|
43
43
|
- - ! '>='
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version: 0.
|
45
|
+
version: 0.10.1
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
47
|
name: ruby-netcdf
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
@@ -183,7 +183,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
183
183
|
version: '0'
|
184
184
|
segments:
|
185
185
|
- 0
|
186
|
-
hash:
|
186
|
+
hash: 1954477338330875732
|
187
187
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
188
188
|
none: false
|
189
189
|
requirements:
|