trinitycrmod 0.6.9 → 0.7.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 +4 -4
- data/Gemfile +5 -6
- data/VERSION +1 -1
- data/lib/trinitycrmod/flux_interpolator.rb +208 -0
- data/lib/trinitycrmod/graphs.rb +126 -124
- data/lib/trinitycrmod/namelists.rb +26 -7
- data/lib/trinitycrmod/read_netcdf.rb +157 -0
- data/lib/trinitycrmod/trinity.rb +2 -0
- data/sync_variables/helper.rb +0 -4
- data/trinitycrmod.gemspec +18 -19
- metadata +15 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3fb8ea31bb4ef23998f583fb453df5ea05eb16ac
|
4
|
+
data.tar.gz: dd0e0d6b0f9bc15b43e61cbb7373bff07780db05
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4cfbe86b9003759c94e641305cb65b2e516600412bdc7731aa60e939a41d80bce2b6b13d110b6f812af76648424dd3a77da1ec8603c8a15ede0adf9cc15b7f69
|
7
|
+
data.tar.gz: c765d21c28840c38c38cfff5c3e2102fe371f77890834f8dfd254f1c55eb9dad72dfa50ee3456eecbed45b9f3d790aebdaff92f5999a050fd8c7a01f25afb444
|
data/Gemfile
CHANGED
@@ -1,20 +1,19 @@
|
|
1
1
|
source "http://rubygems.org"
|
2
2
|
# Add dependencies required to use your gem here.
|
3
3
|
# Example:
|
4
|
-
gem "coderunner", ">= 0.
|
5
|
-
gem "text-data-tools", ">= 1.1.
|
4
|
+
gem "coderunner", ">= 0.16.10"
|
5
|
+
gem "text-data-tools", ">= 1.1.6"
|
6
6
|
gem "gs2crmod", ">=0.11.76"
|
7
7
|
|
8
8
|
# Add dependencies to develop your gem here.
|
9
9
|
# Include everything needed to run rake, tests, features, etc.
|
10
10
|
group :development do
|
11
|
-
|
11
|
+
gem "shoulda", ">= 0"
|
12
12
|
#gem "rdoc", "~> 3.12"
|
13
13
|
#gem "bundler", "> 1.0.0"
|
14
14
|
#gem "jeweler", ">= 2.0.0"
|
15
|
-
gem "shoulda", " 3.0.1"
|
15
|
+
#gem "shoulda", " 3.0.1"
|
16
16
|
gem "rdoc", "~> 3.12"
|
17
17
|
gem "bundler", "> 1.0.0"
|
18
|
-
gem "jeweler", ">=
|
19
|
-
gem "minitest", "~> 4"
|
18
|
+
gem "jeweler", ">= 2.00"
|
20
19
|
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.7.0
|
@@ -0,0 +1,208 @@
|
|
1
|
+
require 'scanf'
|
2
|
+
class CodeRunner
|
3
|
+
class ZeroEval
|
4
|
+
def eval(*args)
|
5
|
+
0.0
|
6
|
+
end
|
7
|
+
end
|
8
|
+
class Trinity
|
9
|
+
class << self
|
10
|
+
# To be used in conjunction with the shell script
|
11
|
+
# option in Trinity. Read the output of old_run_name
|
12
|
+
# (which may be a commma-separated list of multiple runs)
|
13
|
+
# and read the contents of <run_name>_flux_inputs.dat and use them
|
14
|
+
# to interpolate esitmates of the fluxes
|
15
|
+
def interpolate_fluxes(old_run_folder, run_folder, grad_option, ntspec)
|
16
|
+
old_run_name = nil
|
17
|
+
Dir.chdir(old_run_folder) do
|
18
|
+
old_cc = Dir.entries(Dir.pwd).find{|f| f =~ /\.cc$/}
|
19
|
+
raise "Can't find cc file in #{old_run_folder}" unless old_cc
|
20
|
+
old_run_name = File.expand_path(old_cc).sub(/.cc$/,'')
|
21
|
+
end
|
22
|
+
|
23
|
+
run_name = nil
|
24
|
+
Dir.chdir(run_folder) do
|
25
|
+
new_inp = Dir.entries(Dir.pwd).find{|f| f =~ /.flux_inputs$/}
|
26
|
+
raise "Can't find flux_inputs in #{run_folder}" unless new_inp
|
27
|
+
run_name = File.expand_path(new_inp).sub(/.flux_inputs$/,'')
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
ccfile = TextDataTools::Column::DataFile.new(old_run_name + '.cc', true, /\S+/, /(?:\#\s+)?\d+:.*?(?=\d+:|\Z)/)
|
32
|
+
geofile = TextDataTools::Column::DataFile.new(old_run_name + '.geo', true, /\S+/, /(?:\#\s+)?\d+:\D*?(?=\d:|\d\d:|\Z)/)
|
33
|
+
radius_data = ccfile.get_1d_array_float(/radius/)
|
34
|
+
radius_uniq = radius_data.uniq
|
35
|
+
p 'radius_uniq', radius_uniq
|
36
|
+
ncc = radius_uniq.size
|
37
|
+
np = radius_data.size/ncc
|
38
|
+
p 'np is ', np, 'ncc is', ncc
|
39
|
+
#p 'ion_tprim_perturb_data',ion_tprim_perturb_data = ccfile.get_1d_array_float(/11:/).pieces(np)
|
40
|
+
perturb = {
|
41
|
+
fprim: /10:/,
|
42
|
+
ion_tprim: /11:/,
|
43
|
+
eln_tprim: /12:/,
|
44
|
+
dens: /18:/,
|
45
|
+
ion_temp: /19:/,
|
46
|
+
eln_temp: /20:/
|
47
|
+
}
|
48
|
+
perturb_data = perturb.inject({}) do |h,(k,v)|
|
49
|
+
begin
|
50
|
+
h[k] = ccfile.get_1d_array_float(v).pieces(np).transpose
|
51
|
+
rescue=>err
|
52
|
+
p ccfile.get_1d_array(v)
|
53
|
+
puts "Error reading: #{k}, #{v}"
|
54
|
+
raise err
|
55
|
+
end
|
56
|
+
h
|
57
|
+
end
|
58
|
+
fluxes = {
|
59
|
+
ion_hflux: /5: i/,
|
60
|
+
eln_hflux: /6: e/,
|
61
|
+
pflux: /3: i/,
|
62
|
+
lflux: /9: v/,
|
63
|
+
ion_heat: /7: i/,
|
64
|
+
eln_heat: /8: e/
|
65
|
+
}
|
66
|
+
fluxes_data = fluxes.inject({}) do |h,(k,v)|
|
67
|
+
h[k] = ccfile.get_1d_array_float(v).pieces(np).transpose
|
68
|
+
h
|
69
|
+
end
|
70
|
+
area = geofile.get_1d_array_float(/area/)
|
71
|
+
grho = geofile.get_1d_array_float(/grho/)
|
72
|
+
case grad_option
|
73
|
+
when 'tigrad'
|
74
|
+
jacobian_vecs = [:ion_temp,:ion_tprim]
|
75
|
+
jacobian_vecs = [:ion_tprim]
|
76
|
+
interp_vecs = [:ion_hflux]
|
77
|
+
njac = 2
|
78
|
+
when 'ntgrads'
|
79
|
+
jacobian_vecs = [:ion_tprim, :eln_tprim, :fprim]
|
80
|
+
jacobian_vecs = [:ion_tprim, :fprim]
|
81
|
+
interp_vecs = [:ion_hflux, :eln_hflux, :pflux]
|
82
|
+
njac = 4
|
83
|
+
else
|
84
|
+
raise "Unknown grad_option: #{grad_option}"
|
85
|
+
end
|
86
|
+
GraphKit.quick_create([perturb_data[:ion_tprim][0].to_gslv, fluxes_data[:ion_hflux][0].to_gslv])#.gnuplot
|
87
|
+
#p perturb_data[:ion_tprim][0]
|
88
|
+
interp = fluxes_data.inject({}) do |h, (k,v)|
|
89
|
+
h[k] = radius_uniq.size.times.map do |i|
|
90
|
+
if interp_vecs.include?(k)
|
91
|
+
#puts 'i is', i
|
92
|
+
GSL::ScatterInterp.alloc(
|
93
|
+
:linear,
|
94
|
+
jacobian_vecs.map{|name|
|
95
|
+
arr = perturb_data[name]
|
96
|
+
arr[i].to_gslv +
|
97
|
+
GSL::Vector.linspace(0,1e-9,arr[i].size)
|
98
|
+
} + [v[i].to_gslv],
|
99
|
+
false,
|
100
|
+
1.0
|
101
|
+
)
|
102
|
+
else
|
103
|
+
ZeroEval.new
|
104
|
+
end
|
105
|
+
end
|
106
|
+
h
|
107
|
+
end
|
108
|
+
if false and run_name != 'dummy'
|
109
|
+
arr = []
|
110
|
+
File.read(run_name + '.flux_inputs').scanf("%e"){|m| p m; arr+= m}
|
111
|
+
# each of these quantities is a flat array with
|
112
|
+
# radial index varying fastest, then jacobian index
|
113
|
+
# then species index where appropriate
|
114
|
+
i = 0
|
115
|
+
#p arr
|
116
|
+
dens = arr[i...(i+=ncc*njac)]
|
117
|
+
temp = arr[i...(i+=ncc*njac*2)].pieces(2) # This is hardwired to 2
|
118
|
+
fprim = arr[i...(i+=ncc*njac)]
|
119
|
+
tprim = arr[i...(i+=ncc*njac*2)].pieces(2) # This is hardwired to 2
|
120
|
+
inputs = {}
|
121
|
+
inputs[:dens] = dens
|
122
|
+
inputs[:ion_temp] = temp[0]
|
123
|
+
inputs[:eln_temp] = temp[1]
|
124
|
+
inputs[:fprim] = fprim
|
125
|
+
inputs[:ion_tprim] = tprim[0]
|
126
|
+
inputs[:eln_tprim] = tprim[1]
|
127
|
+
|
128
|
+
#p 'inputs', inputs.values.map{|v| v.size}, inputs[:eln_tprim]
|
129
|
+
|
130
|
+
File.open(run_name + '.flux_results', 'w') do |file|
|
131
|
+
njac.times{|ij| (ntspec+1).times{ ncc.times{|ic| file.printf("%e ",interp[:pflux][ic].eval(*jacobian_vecs.map{|v| inputs[v][ic + ij*ncc]}))}}}
|
132
|
+
file.printf("\n")
|
133
|
+
njac.times{|ij|
|
134
|
+
ncc.times{|ic| file.printf("%e ",interp[:ion_hflux][ic].eval(*jacobian_vecs.map{|v| inputs[v][ic + ij*ncc]}))}
|
135
|
+
ntspec.times{
|
136
|
+
ncc.times{|ic| file.printf("%e ",interp[:eln_hflux][ic].eval(*jacobian_vecs.map{|v| inputs[v][ic + ij*ncc]}))}
|
137
|
+
}
|
138
|
+
}
|
139
|
+
file.printf("\n")
|
140
|
+
njac.times{|ij|
|
141
|
+
ncc.times{|ic| file.printf("%e ",interp[:ion_heat][ic].eval(*jacobian_vecs.map{|v| inputs[v][ic + ij*ncc]}))}
|
142
|
+
ntspec.times{
|
143
|
+
ncc.times{|ic| file.printf("%e ",interp[:eln_heat][ic].eval(*jacobian_vecs.map{|v| inputs[v][ic + ij*ncc]}))}
|
144
|
+
}
|
145
|
+
}
|
146
|
+
file.printf("\n")
|
147
|
+
njac.times{|ij| ncc.times{|ic| file.printf("%e ",interp[:lflux][ic].eval(*jacobian_vecs.map{|v| inputs[v][ic + ij*ncc]}))}}
|
148
|
+
file.printf("\n")
|
149
|
+
area.each{|v| file.printf("%e ", v)}
|
150
|
+
file.printf("\n")
|
151
|
+
grho.each{|v| file.printf("%e ", v)}
|
152
|
+
file.printf("\n")
|
153
|
+
end
|
154
|
+
else
|
155
|
+
vec = GSL::Vector.linspace(perturb_data[:ion_tprim][0].min, perturb_data[:ion_tprim][0].max,20)
|
156
|
+
vec2 = GSL::Vector.linspace(perturb_data[:fprim][0].min, perturb_data[:fprim][0].max,20)
|
157
|
+
mat = GSL::Matrix.alloc(20,20)
|
158
|
+
for i in 0...20
|
159
|
+
for j in 0...20
|
160
|
+
mat[i,j] = interp[:ion_hflux][0].eval(vec[i], vec2[j])
|
161
|
+
end
|
162
|
+
end
|
163
|
+
vec3 = GSL::Vector.linspace(perturb_data[:ion_tprim][1].min, perturb_data[:ion_tprim][1].max,20)
|
164
|
+
vec4 = GSL::Vector.linspace(perturb_data[:fprim][1].min, perturb_data[:fprim][1].max,20)
|
165
|
+
mat2 = GSL::Matrix.alloc(20,20)
|
166
|
+
for i in 0...20
|
167
|
+
for j in 0...20
|
168
|
+
mat2[i,j] = interp[:ion_hflux][1].eval(vec3[i], vec4[j])
|
169
|
+
end
|
170
|
+
end
|
171
|
+
#vec.collect{|x| vec2.collect{|y| mat(interp[:ion_hflux][0].eval(x)}
|
172
|
+
#GraphKit.quick_create([vec, vec2, mat], [perturb_data[:ion_tprim][0].to_gslv, perturb_data[:fprim][0], fluxes_data[:ion_hflux][0].to_gslv], [vec3, vec4, mat2], [perturb_data[:ion_tprim][1].to_gslv, perturb_data[:fprim][1], fluxes_data[:ion_hflux][1].to_gslv]).gnuplot live: true
|
173
|
+
vec5 = GSL::Vector.linspace(perturb_data[:ion_tprim][2].min, perturb_data[:ion_tprim][2].max,20)
|
174
|
+
vec6 = GSL::Vector.linspace(perturb_data[:fprim][2].min, perturb_data[:fprim][2].max,20)
|
175
|
+
mat3 = GSL::Matrix.alloc(20,20)
|
176
|
+
for i in 0...20
|
177
|
+
for j in 0...20
|
178
|
+
mat3[i,j] = interp[:ion_hflux][2].eval(vec5[i], vec6[j])
|
179
|
+
end
|
180
|
+
end
|
181
|
+
#vec.collect{|x| vec2.collect{|y| mat(interp[:ion_hflux][0].eval(x)}
|
182
|
+
#GraphKit.quick_create([vec, vec2, mat], [perturb_data[:ion_tprim][0].to_gslv, perturb_data[:fprim][0], fluxes_data[:ion_hflux][0].to_gslv], [vec3, vec4, mat2], [perturb_data[:ion_tprim][1].to_gslv, perturb_data[:fprim][1], fluxes_data[:ion_hflux][1].to_gslv],[vec5, vec6, mat3], [perturb_data[:ion_tprim][2].to_gslv, perturb_data[:fprim][2], fluxes_data[:ion_hflux][2].to_gslv]).gnuplot live: true
|
183
|
+
vec7 = GSL::Vector.linspace(perturb_data[:ion_tprim][3].min, perturb_data[:ion_tprim][3].max,20)
|
184
|
+
vec8 = GSL::Vector.linspace(perturb_data[:fprim][3].min, perturb_data[:fprim][3].max,20)
|
185
|
+
mat4 = GSL::Matrix.alloc(20,20)
|
186
|
+
for i in 0...20
|
187
|
+
for j in 0...20
|
188
|
+
mat4[i,j] = interp[:ion_hflux][3].eval(vec7[i], vec8[j])
|
189
|
+
end
|
190
|
+
end
|
191
|
+
#vec.collect{|x| vec2.collect{|y| mat(interp[:ion_hflux][0].eval(x)}
|
192
|
+
GraphKit.quick_create([vec, vec2, mat], [perturb_data[:ion_tprim][0].to_gslv, perturb_data[:fprim][0], fluxes_data[:ion_hflux][0].to_gslv], [vec3, vec4, mat2], [perturb_data[:ion_tprim][1].to_gslv, perturb_data[:fprim][1], fluxes_data[:ion_hflux][1].to_gslv],[vec5, vec6, mat3], [perturb_data[:ion_tprim][2].to_gslv, perturb_data[:fprim][2], fluxes_data[:ion_hflux][2].to_gslv],[vec7, vec8, mat4], [perturb_data[:ion_tprim][3].to_gslv, perturb_data[:fprim][3], fluxes_data[:ion_hflux][3].to_gslv]).gnuplot live: true
|
193
|
+
end
|
194
|
+
#vec = GSL::Vector.linspace(perturb_data[:ion_tprim][0].min, perturb_data[:ion_tprim][0].max,20)
|
195
|
+
#GraphKit.quick_create([vec, vec.collect{|x| interp[:ion_hflux][0].eval(x)}], [perturb_data[:ion_tprim][0].to_gslv, fluxes_data[:ion_hflux][0].to_gslv]).gnuplot
|
196
|
+
|
197
|
+
#vec = GSL::Vector.linspace(perturb_data[:ion_tprim][1].min, perturb_data[:ion_tprim][1].max,20)
|
198
|
+
#GraphKit.quick_create([vec, vec.collect{|x| interp[:ion_hflux][1].eval(x)}], [perturb_data[:ion_tprim][1].to_gslv, fluxes_data[:ion_hflux][1].to_gslv]).gnuplot
|
199
|
+
#vec = GSL::Vector.linspace(perturb_data[:ion_tprim][2].min, perturb_data[:ion_tprim][2].max,80)
|
200
|
+
#GraphKit.quick_create([vec, vec.collect{|x| interp[:ion_hflux][2].eval(x)}], [perturb_data[:ion_tprim][2].to_gslv, fluxes_data[:ion_hflux][2].to_gslv]).gnuplot
|
201
|
+
#STDIN.gets
|
202
|
+
#GraphKit.quick_create([vec, vec.collect{|x| interp[:ion_hflux][0].eval(perturb_data[:ion_tprim][0].to_gslv.min, x)}]).gnuplot
|
203
|
+
|
204
|
+
#p [tprim_perturb_data, fprim_perturb_data]
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end
|
208
|
+
end
|
data/lib/trinitycrmod/graphs.rb
CHANGED
@@ -1,97 +1,97 @@
|
|
1
1
|
class CodeRunner::Trinity
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
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
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
2
|
+
module TrinityGraphKits
|
3
|
+
# Graphs plotting quantities from the '.nt' file vs rho for a given t_index
|
4
|
+
def nt_prof_graphkit(options)
|
5
|
+
prof_graphkit(options.dup.absorb({outfile: :nt}))
|
6
|
+
end
|
7
|
+
# Graphs plotting quantities from the '.nt' file vs rho for a given t_index
|
8
|
+
def pwr_prof_graphkit(options)
|
9
|
+
prof_graphkit(options.dup.absorb({outfile: :pwr, radius_match: /2.*rad/}))
|
10
|
+
end
|
11
|
+
# Graphs plotting quantities from the '.fluxes' file vs rho for a given t_index
|
12
|
+
def fluxes_prof_graphkit(options)
|
13
|
+
prof_graphkit(options.absorb({outfile: :fluxes, exclude_perturbed_fluxes: true}))
|
14
|
+
end
|
15
|
+
# Graphs plotting quantities from the '.pbalance' file vs rho for a given t_index
|
16
|
+
def pbalance_prof_graphkit(options)
|
17
|
+
prof_graphkit(options.absorb({outfile: :pbalance}))
|
18
|
+
end
|
19
|
+
def prof_graphkit(options)
|
20
|
+
raise "Please specify t_index" unless options[:t_index]
|
21
|
+
it = options[:t_index] - 1
|
22
|
+
if ta = options[:time_average]
|
23
|
+
if ta < 0
|
24
|
+
t_indices = (it+ta..it).to_a
|
25
|
+
else
|
26
|
+
t_indices = (it..it+ta).to_a
|
27
|
+
end
|
28
|
+
else
|
29
|
+
t_indices = [it]
|
30
|
+
end
|
31
|
+
array = t_indices.map{|i| get_2d_array_float(options[:outfile], options[:header], /1.*time/)[i].to_gslv}.mean.to_a
|
32
|
+
rho_array = t_indices.map{|i| get_2d_array_float(options[:outfile], options[:radius_match]||/2.*radius/, /1.*time/)[i].to_gslv}.mean.to_a
|
33
|
+
if options[:exclude_perturbed_fluxes]
|
34
|
+
#s = array.size
|
35
|
+
array = array.slice(0...nrad-1)
|
36
|
+
rho_array = rho_array.slice(0...nrad-1)
|
37
|
+
end
|
38
|
+
#p rho_array, array
|
39
|
+
kit = GraphKit.autocreate(x: {data: rho_array.to_gslv, title: 'rho', units: ''},
|
40
|
+
y: {data: array.to_gslv, title: options[:title]||"", units: options[:units]||""}
|
41
|
+
)
|
42
|
+
kit.data[0].title += " at time = #{list(:t)[it+1]} s for id #{id}"
|
43
|
+
kit.data[0].gp.with = 'lp'
|
44
|
+
kit
|
45
|
+
end
|
46
|
+
# Graph of Qi in gyroBohm units against rho for a given t_index
|
47
|
+
def ion_hflux_gb_prof_graphkit(options)
|
48
|
+
fluxes_prof_graphkit(options.absorb({header: /Qi.*\(GB/, title: 'Ion Heat Flux', units: 'Q_gB'}))
|
49
|
+
end
|
50
|
+
# Graph of Qi in MW against rho for a given t_index
|
51
|
+
def ion_hflux_prof_graphkit(options)
|
52
|
+
fluxes_prof_graphkit(options.absorb({header: /Qi.*\(MW/, title: 'Ion Heat Flux', units: 'MW'}))
|
53
|
+
end
|
54
|
+
# Graph of Qe in gyroBohm units against rho for a given t_index
|
55
|
+
def eln_hflux_gb_prof_graphkit(options)
|
56
|
+
fluxes_prof_graphkit(options.absorb({header: /Qe.*\(GB/, title: 'Electron Heat Flux', units: 'Q_gB'}))
|
57
|
+
end
|
58
|
+
# Graph of Qe in MW against rho for a given t_index
|
59
|
+
def eln_hflux_prof_graphkit(options)
|
60
|
+
fluxes_prof_graphkit(options.absorb({header: /Qe.*\(MW/, title: 'Electron Heat Flux', units: 'MW'}))
|
61
|
+
end
|
62
|
+
# Graph of toroidal angular momentum flux in gyroBohm units against rho for a given t_index
|
63
|
+
def lflux_gb_prof_graphkit(options)
|
64
|
+
fluxes_prof_graphkit(options.absorb({header: /Pi.*\(GB/, title: 'Toroidal Angular Momentum Flux', units: 'Pi_gB'}))
|
65
|
+
end
|
66
|
+
# Graph of toroidal angular momentum against rho for a given t_index
|
67
|
+
def ang_mom_prof_graphkit(options)
|
68
|
+
return nt_prof_graphkit(options.absorb({header: /ang\s+mom/, title: 'Angular Momentum', units: ''}))
|
69
|
+
end
|
70
|
+
# Graph of Ti against rho for a given t_index
|
71
|
+
def ion_temp_prof_graphkit(options)
|
72
|
+
return nt_prof_graphkit(options.absorb({header: /i\+ temp/, title: 'Ti', units: 'keV'}))
|
73
|
+
end
|
74
|
+
# Graph of Te against rho for a given t_index
|
75
|
+
def eln_temp_prof_graphkit(options)
|
76
|
+
return nt_prof_graphkit(options.absorb({header: /e\- temp/, title: 'Te', units: 'keV'}))
|
77
|
+
end
|
78
|
+
# Graph of n against rho for a given t_index
|
79
|
+
def dens_prof_graphkit(options)
|
80
|
+
return nt_prof_graphkit(options.absorb({header: /dens/, title: 'n', units: '10^20 m^-3'}))
|
81
|
+
end
|
82
82
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
83
|
+
# Graph of ion power integrated from the magnetic axis to rho vs rho
|
84
|
+
def ion_pwr_prof_graphkit(options)
|
85
|
+
return pbalance_prof_graphkit(options.absorb({header: /i\+ pwr/, title: 'Integrated ion power', units: 'MW'}))
|
86
|
+
end
|
87
|
+
# Graph of electron power integrated from the magnetic axis to rho vs rho
|
88
|
+
def eln_pwr_prof_graphkit(options)
|
89
|
+
return pbalance_prof_graphkit(options.absorb({header: /e\- pwr/, title: 'Integrated electron power', units: 'MW'}))
|
90
|
+
end
|
91
|
+
# Graph of ion power integrated from the magnetic axis to rho vs rho
|
92
|
+
def torque_prof_graphkit(options)
|
93
|
+
return pbalance_prof_graphkit(options.absorb({header: /torque/, title: 'Integrated torque', units: 'Nm'}))
|
94
|
+
end
|
95
95
|
|
96
96
|
def integrate_profkit(kit, area_vectors, t_indices)
|
97
97
|
datavecs = kit.data.map{|d| d.y.data}
|
@@ -122,7 +122,7 @@ class CodeRunner::Trinity
|
|
122
122
|
end
|
123
123
|
|
124
124
|
end
|
125
|
-
|
125
|
+
end
|
126
126
|
|
127
127
|
# Graph of the ion heat calibration factor
|
128
128
|
def ion_hflux_calibration_graphkit(options)
|
@@ -146,7 +146,7 @@ class CodeRunner::Trinity
|
|
146
146
|
k
|
147
147
|
end
|
148
148
|
|
149
|
-
|
149
|
+
include TrinityGraphKits
|
150
150
|
|
151
151
|
module TrinityMultiKits
|
152
152
|
def profiles_graphkit(options)
|
@@ -187,35 +187,37 @@ class CodeRunner::Trinity
|
|
187
187
|
|
188
188
|
include TrinityMultiKits
|
189
189
|
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
190
|
+
# This is the hook that is called by CodeRunner, providing the
|
191
|
+
# graphkit with the given name and functions to the CodeRunner framework
|
192
|
+
def graphkit(name, options)
|
193
|
+
[:t].each do |var|
|
194
|
+
#ep 'index', var
|
195
|
+
if options[var].class == Symbol and options[var] == :all
|
196
|
+
options[var] = list(var).values
|
197
|
+
elsif options[var+:_index].class == Symbol and options[var+:_index] == :all
|
198
|
+
#ep 'Symbol'
|
199
|
+
options[var+:_index] = list(var).keys
|
200
|
+
end
|
201
|
+
if options[var].class == Array
|
202
|
+
return options[var].map{|value| graphkit(name, options.dup.absorb({var => value}))}.sum
|
203
|
+
elsif options[var+:_index].class == Array
|
204
|
+
#ep 'Array'
|
205
|
+
return options[var+:_index].map{|value| graphkit(name, options.dup.absorb({var+:_index => value}))}.sum
|
206
|
+
end
|
207
|
+
if options[var].class == Symbol and options[var] == :max
|
208
|
+
options[var] = list(var).values.max
|
209
|
+
elsif options[var+:_index].class == Symbol and options[var+:_index] == :max
|
210
|
+
ep 'Symbol'
|
211
|
+
options[var+:_index] = list(var).keys.max
|
212
|
+
end
|
213
|
+
end
|
214
|
+
if (meth = TrinityGraphKits.instance_methods.find{|m| m.to_s == name + '_graphkit'} or
|
215
215
|
meth = TrinityMultiKits.instance_methods.find{|m| m.to_s == name + '_graphkit'})
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
216
|
+
return send(meth, options)
|
217
|
+
elsif name =~ /^nc_/
|
218
|
+
return smart_graphkit(options.absorb({graphkit_name: name}))
|
219
|
+
else
|
220
|
+
raise "GraphKit not found: #{name}"
|
221
|
+
end
|
222
|
+
end
|
221
223
|
end
|
@@ -902,11 +902,30 @@
|
|
902
902
|
:autoscanned_defaults=>[".false."]},
|
903
903
|
:calib_option=>
|
904
904
|
{:should_include=>"true",
|
905
|
-
:description=>
|
906
|
-
|
907
|
-
:help=>
|
908
|
-
"Which interpolation method to use for the calibration factor. 'default', 'piecewise_linear', or 'spline'.",
|
905
|
+
:description=>" Option for interpolating calib factor",
|
906
|
+
:help=>" Option for interpolating calib factor",
|
909
907
|
:code_name=>:calib_option,
|
908
|
+
:must_pass=>
|
909
|
+
[{:test=>"kind_of? String",
|
910
|
+
:explanation=>"This variable must be a string."}],
|
911
|
+
:type=>:String,
|
912
|
+
:autoscanned_defaults=>["default"]},
|
913
|
+
:n_gpus=>
|
914
|
+
{:should_include=>"true",
|
915
|
+
:description=>"Number of gpus avail for gryfx sims",
|
916
|
+
:help=>
|
917
|
+
"If running with gryfx, specify the number of gpus, i.e. the number of simulataneous gryfx simulations.",
|
918
|
+
:code_name=>:n_gpus,
|
919
|
+
:must_pass=>
|
920
|
+
[{:test=>"kind_of? Integer",
|
921
|
+
:explanation=>"This variable must be an integer."}],
|
922
|
+
:type=>:Integer},
|
923
|
+
:flux_shell_script=>
|
924
|
+
{:should_include=>"true",
|
925
|
+
:description=>"A shell script to calculate the fluxes.",
|
926
|
+
:help=>
|
927
|
+
"When running with flux_option = shell, a shell script to calculate the fluxes that is executed during get fluxes.",
|
928
|
+
:code_name=>:flux_shell_script,
|
910
929
|
:must_pass=>
|
911
930
|
[{:test=>"kind_of? String",
|
912
931
|
:explanation=>"This variable must be a string."}],
|
@@ -924,7 +943,7 @@
|
|
924
943
|
[{:test=>"kind_of? String",
|
925
944
|
:explanation=>"This variable must be a string."}],
|
926
945
|
:type=>:String,
|
927
|
-
:autoscanned_defaults=>["default"
|
946
|
+
:autoscanned_defaults=>["default"]},
|
928
947
|
:init_file=>
|
929
948
|
{:should_include=>"true",
|
930
949
|
:description=>" file with input data",
|
@@ -1107,7 +1126,7 @@
|
|
1107
1126
|
:explanation=>
|
1108
1127
|
"This variable must be a fortran boolean. (In Ruby this is represented as a string: e.g. '.true.')"}],
|
1109
1128
|
:type=>:Fortran_Bool,
|
1110
|
-
:autoscanned_defaults=>[".false."
|
1129
|
+
:autoscanned_defaults=>[".false."]},
|
1111
1130
|
:flux_groups=>
|
1112
1131
|
{:should_include=>"true",
|
1113
1132
|
:description=>" The number of processors for each flux calculation",
|
@@ -1129,7 +1148,7 @@
|
|
1129
1148
|
:explanation=>
|
1130
1149
|
"This variable must be a fortran boolean. (In Ruby this is represented as a string: e.g. '.true.')"}],
|
1131
1150
|
:type=>:Fortran_Bool,
|
1132
|
-
:autoscanned_defaults=>[".false."
|
1151
|
+
:autoscanned_defaults=>[".false."]},
|
1133
1152
|
:peaking_factor=>
|
1134
1153
|
{:should_include=>"true",
|
1135
1154
|
:description=>
|
@@ -0,0 +1,157 @@
|
|
1
|
+
# This module reads data from the new diagnostics output file
|
2
|
+
# <run_name>.out.nc.
|
3
|
+
#
|
4
|
+
# It defines a new
|
5
|
+
# generic reader function which can read any variable in the new
|
6
|
+
# netcdf file using a standard set of index constraints
|
7
|
+
#
|
8
|
+
|
9
|
+
class CodeRunner::Trinity
|
10
|
+
module ReadNetcdf
|
11
|
+
|
12
|
+
def new_netcdf_file
|
13
|
+
if (open = @runner.run_list.keys.find_all{|id| @runner.run_list[id].cache[:new_netcdf_file]}).size > 200
|
14
|
+
open = open.sort_by{|id| @runner.run_list[id].cache[:new_netcdf_file_otime]}
|
15
|
+
@runner.run_list[open[0]].new_ncclose
|
16
|
+
end
|
17
|
+
|
18
|
+
if cache[:new_netcdf_file] and not [:Complete, :Failed].include? @status
|
19
|
+
new_ncclose
|
20
|
+
end
|
21
|
+
cache[:new_netcdf_file_otime] = Time.now.to_i
|
22
|
+
cache[:new_netcdf_file] ||= NumRu::NetCDF.open(new_netcdf_filename)
|
23
|
+
cache[:new_netcdf_file].sync
|
24
|
+
cache[:new_netcdf_file]
|
25
|
+
end
|
26
|
+
|
27
|
+
def new_netcdf_filename
|
28
|
+
@directory + '/' + @run_name + '.out.nc'
|
29
|
+
end
|
30
|
+
def new_ncclose
|
31
|
+
cache[:new_netcdf_file].close
|
32
|
+
cache.delete(:new_netcdf_file)
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
end #module ReadNetcdf
|
37
|
+
include ReadNetcdf
|
38
|
+
|
39
|
+
class NetcdfSmartReader
|
40
|
+
def initialize(file)
|
41
|
+
@file = file
|
42
|
+
end
|
43
|
+
def dimensions(varname)
|
44
|
+
#p 'varname', varname
|
45
|
+
raise "Unknown variable #{varname}" unless @file.var(varname)
|
46
|
+
@file.var(varname).dims
|
47
|
+
end
|
48
|
+
def read_variable(varname, options)
|
49
|
+
#start = get_start(dims, options)
|
50
|
+
dims = dimensions(varname)
|
51
|
+
narray = @file.var(varname).get('start'=>starts(dims, options), 'end'=>ends(dims, options))
|
52
|
+
if options[:modify_variable]
|
53
|
+
myhsh = dims.inject({}){|hsh, dim|
|
54
|
+
opts = options.dup
|
55
|
+
opts[:modify_variable] = nil
|
56
|
+
dimval = read_variable(dimension_variable_name(dim.name), opts)
|
57
|
+
hsh[dim.name] = dimval
|
58
|
+
hsh
|
59
|
+
}
|
60
|
+
narray = options[:modify_variable].call(varname, narray, myhsh)
|
61
|
+
end
|
62
|
+
shape = narray.shape
|
63
|
+
shape.delete_if{|i| i==1}
|
64
|
+
#p 'shape', shape; STDIN.gets
|
65
|
+
narray.reshape!(*shape)
|
66
|
+
narray
|
67
|
+
|
68
|
+
end
|
69
|
+
def starts(dims, options)
|
70
|
+
dims.map{|d| dim_start(d.name, options)}
|
71
|
+
end
|
72
|
+
def dim_start(name, options)
|
73
|
+
sym = name.to_sym
|
74
|
+
if i=options[sym + :_index]
|
75
|
+
return i-1
|
76
|
+
elsif i=options[sym + :_element]
|
77
|
+
return i
|
78
|
+
elsif i=options[sym + :min]
|
79
|
+
return i
|
80
|
+
else
|
81
|
+
return 0
|
82
|
+
end
|
83
|
+
end
|
84
|
+
def ends(dims, options)
|
85
|
+
dims.map{|d| dim_end(d.name, options)}
|
86
|
+
end
|
87
|
+
def dim_end(name, options)
|
88
|
+
sym = name.to_sym
|
89
|
+
if i=options[sym + :_index]
|
90
|
+
return i-1
|
91
|
+
elsif i=options[sym + :_element]
|
92
|
+
return i
|
93
|
+
elsif i=options[sym + :max]
|
94
|
+
return i
|
95
|
+
else
|
96
|
+
return -1
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def axiskit(variable, options)
|
101
|
+
case variable
|
102
|
+
when 'nmat', 'tspec', 'iter'
|
103
|
+
return GraphKit::AxisKit.autocreate(data: GSL::Vector.linspace(1, sz=@file.dim(variable).length, sz), title: variable)
|
104
|
+
end
|
105
|
+
GraphKit::AxisKit.autocreate(data: read_variable(variable, options), units: @file.var(variable).att('units').get, title: @file.var(variable).att('description').get.sub(/(,|summed|average).*$/, '').sub(/[vV]alues of (the )?/, '').sub(/ coordinate/, ''))
|
106
|
+
end
|
107
|
+
def dimension_variable_name(n)
|
108
|
+
case n
|
109
|
+
when 't','tspec', 'iter', 'rad', 'cc', 'nmat'
|
110
|
+
n
|
111
|
+
else
|
112
|
+
raise "Unknown dimension #{n}"
|
113
|
+
end
|
114
|
+
end
|
115
|
+
def check_no_r(non_flat_dims)
|
116
|
+
raise "Please specify the r index for real or imaginary" if non_flat_dims.include? @file.dim('r')
|
117
|
+
end
|
118
|
+
def graphkit(variable, options)
|
119
|
+
non_flat_dims=dimensions(variable).find_all{|dim| dim_start(dim.name, options) != dim_end(dim.name, options) and dim.length != 1}
|
120
|
+
check_no_r(non_flat_dims)
|
121
|
+
axiskits = non_flat_dims.map{|dim| dimvar = dimension_variable_name(dim.name); axiskit(dimvar, options)} + [axiskit(variable, options)]
|
122
|
+
hash = {}
|
123
|
+
axes = [:x, :y, :z, :f]
|
124
|
+
axiskits.each_with_index{|ax, i| hash[axes[i]] = ax}
|
125
|
+
kit = GraphKit.autocreate(hash)
|
126
|
+
opts = options.dup
|
127
|
+
opts.delete(:modify_variable)
|
128
|
+
opts.delete(:graphkit_name)
|
129
|
+
#kit.data[0].title += " with options: " + opts.to_s
|
130
|
+
kit.data[0].title += " " + opts.to_s.gsub(/_(index|element)/, '')
|
131
|
+
if kit.zlabel
|
132
|
+
kit.zlabel = "'#{kit.zlabel}' rotate by 90"
|
133
|
+
#kit.zlabel = nil
|
134
|
+
end
|
135
|
+
kit
|
136
|
+
end
|
137
|
+
end # class NetcdfSmartReader
|
138
|
+
|
139
|
+
|
140
|
+
def netcdf_smart_reader
|
141
|
+
NetcdfSmartReader.new(new_netcdf_file)
|
142
|
+
end
|
143
|
+
|
144
|
+
def smart_graphkit(options)
|
145
|
+
case options[:command]
|
146
|
+
when :help
|
147
|
+
"A smart graphkit is a direct plot of a given variable from the new netcdf file. The name of the graphkit is the name of the variable prefixed by 'cdf_'. To plot, for example, the heat flux vs time, you would give the graph name cdf_heat_flux_tot. You can use index specifiers in the the options; for example, to plot the potential as a function of kx and ky for a given time index, you would use the graph name cdf_phi2_by_mode, and the options {t_index: n}. To plot the potential as function of kx for a given ky and time would use the options {t_index, n, Y_index: m}. For each dimension you can specify the index, or a minium and/or maximum."
|
148
|
+
when :options
|
149
|
+
[:nmat_index, :t_index, :tspec_index, :iter_index]
|
150
|
+
else
|
151
|
+
netcdf_smart_reader.graphkit(options[:graphkit_name].sub(/^nc_/, ''), options)
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
|
156
|
+
|
157
|
+
end
|
data/lib/trinitycrmod/trinity.rb
CHANGED
@@ -25,6 +25,8 @@ class CodeRunner
|
|
25
25
|
require 'trinitycrmod/actual_parameter_values'
|
26
26
|
require 'trinitycrmod/chease'
|
27
27
|
require 'trinitycrmod/calib'
|
28
|
+
require 'trinitycrmod/flux_interpolator'
|
29
|
+
require 'trinitycrmod/read_netcdf'
|
28
30
|
|
29
31
|
# Setup gs2 in case people are using it
|
30
32
|
CodeRunner.setup_run_class('gs2')
|
data/sync_variables/helper.rb
CHANGED
@@ -7,12 +7,8 @@ rescue Bundler::BundlerError => e
|
|
7
7
|
$stderr.puts "Run `bundle install` to install missing gems"
|
8
8
|
exit e.status_code
|
9
9
|
end
|
10
|
-
require 'test/unit'
|
11
|
-
require 'shoulda'
|
12
10
|
|
13
11
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
14
12
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
15
13
|
require 'coderunner'
|
16
14
|
|
17
|
-
class Test::Unit::TestCase
|
18
|
-
end
|
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.
|
5
|
+
# stub: trinitycrmod 0.7.0 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "trinitycrmod"
|
9
|
-
s.version = "0.
|
9
|
+
s.version = "0.7.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 = "2015-
|
14
|
+
s.date = "2015-07-11"
|
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 = [
|
@@ -31,9 +31,11 @@ Gem::Specification.new do |s|
|
|
31
31
|
"lib/trinitycrmod/chease.rb",
|
32
32
|
"lib/trinitycrmod/check_parameters.rb",
|
33
33
|
"lib/trinitycrmod/deleted_variables.rb",
|
34
|
+
"lib/trinitycrmod/flux_interpolator.rb",
|
34
35
|
"lib/trinitycrmod/graphs.rb",
|
35
36
|
"lib/trinitycrmod/namelists.rb",
|
36
37
|
"lib/trinitycrmod/output_files.rb",
|
38
|
+
"lib/trinitycrmod/read_netcdf.rb",
|
37
39
|
"lib/trinitycrmod/trinity.rb",
|
38
40
|
"lib/trinitycrmod/trinity_gs2.rb",
|
39
41
|
"sync_variables/helper.rb",
|
@@ -42,40 +44,37 @@ Gem::Specification.new do |s|
|
|
42
44
|
]
|
43
45
|
s.homepage = "http://github.com/edmundhighcock/trinitycrmod"
|
44
46
|
s.licenses = ["GPLv3"]
|
45
|
-
s.rubygems_version = "2.
|
47
|
+
s.rubygems_version = "2.4.8"
|
46
48
|
s.summary = "CodeRunner module for the Trinity simulation software."
|
47
49
|
|
48
50
|
if s.respond_to? :specification_version then
|
49
51
|
s.specification_version = 4
|
50
52
|
|
51
53
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
52
|
-
s.add_runtime_dependency(%q<coderunner>, [">= 0.
|
53
|
-
s.add_runtime_dependency(%q<text-data-tools>, [">= 1.1.
|
54
|
+
s.add_runtime_dependency(%q<coderunner>, [">= 0.16.10"])
|
55
|
+
s.add_runtime_dependency(%q<text-data-tools>, [">= 1.1.6"])
|
54
56
|
s.add_runtime_dependency(%q<gs2crmod>, [">= 0.11.76"])
|
55
|
-
s.add_development_dependency(%q<shoulda>, ["
|
57
|
+
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
56
58
|
s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
|
57
59
|
s.add_development_dependency(%q<bundler>, ["> 1.0.0"])
|
58
|
-
s.add_development_dependency(%q<jeweler>, [">=
|
59
|
-
s.add_development_dependency(%q<minitest>, ["~> 4"])
|
60
|
+
s.add_development_dependency(%q<jeweler>, [">= 2.00"])
|
60
61
|
else
|
61
|
-
s.add_dependency(%q<coderunner>, [">= 0.
|
62
|
-
s.add_dependency(%q<text-data-tools>, [">= 1.1.
|
62
|
+
s.add_dependency(%q<coderunner>, [">= 0.16.10"])
|
63
|
+
s.add_dependency(%q<text-data-tools>, [">= 1.1.6"])
|
63
64
|
s.add_dependency(%q<gs2crmod>, [">= 0.11.76"])
|
64
|
-
s.add_dependency(%q<shoulda>, ["
|
65
|
+
s.add_dependency(%q<shoulda>, [">= 0"])
|
65
66
|
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
66
67
|
s.add_dependency(%q<bundler>, ["> 1.0.0"])
|
67
|
-
s.add_dependency(%q<jeweler>, [">=
|
68
|
-
s.add_dependency(%q<minitest>, ["~> 4"])
|
68
|
+
s.add_dependency(%q<jeweler>, [">= 2.00"])
|
69
69
|
end
|
70
70
|
else
|
71
|
-
s.add_dependency(%q<coderunner>, [">= 0.
|
72
|
-
s.add_dependency(%q<text-data-tools>, [">= 1.1.
|
71
|
+
s.add_dependency(%q<coderunner>, [">= 0.16.10"])
|
72
|
+
s.add_dependency(%q<text-data-tools>, [">= 1.1.6"])
|
73
73
|
s.add_dependency(%q<gs2crmod>, [">= 0.11.76"])
|
74
|
-
s.add_dependency(%q<shoulda>, ["
|
74
|
+
s.add_dependency(%q<shoulda>, [">= 0"])
|
75
75
|
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
76
76
|
s.add_dependency(%q<bundler>, ["> 1.0.0"])
|
77
|
-
s.add_dependency(%q<jeweler>, [">=
|
78
|
-
s.add_dependency(%q<minitest>, ["~> 4"])
|
77
|
+
s.add_dependency(%q<jeweler>, [">= 2.00"])
|
79
78
|
end
|
80
79
|
end
|
81
80
|
|
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
|
+
version: 0.7.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: 2015-
|
11
|
+
date: 2015-07-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: coderunner
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.16.10
|
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.
|
26
|
+
version: 0.16.10
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: text-data-tools
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 1.1.
|
33
|
+
version: 1.1.6
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 1.1.
|
40
|
+
version: 1.1.6
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: gs2crmod
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -56,16 +56,16 @@ dependencies:
|
|
56
56
|
name: shoulda
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
68
|
+
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rdoc
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -100,28 +100,14 @@ dependencies:
|
|
100
100
|
requirements:
|
101
101
|
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
103
|
+
version: '2.00'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: minitest
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - "~>"
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '4'
|
118
|
-
type: :development
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - "~>"
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: '4'
|
110
|
+
version: '2.00'
|
125
111
|
description: This module allows Trinity, the Multiscale Gyrokinetic Turbulent Transport
|
126
112
|
solver for Fusion Reactors, to harness the power of CodeRunner, a framework for
|
127
113
|
the automated running and analysis of simulations.
|
@@ -144,9 +130,11 @@ files:
|
|
144
130
|
- lib/trinitycrmod/chease.rb
|
145
131
|
- lib/trinitycrmod/check_parameters.rb
|
146
132
|
- lib/trinitycrmod/deleted_variables.rb
|
133
|
+
- lib/trinitycrmod/flux_interpolator.rb
|
147
134
|
- lib/trinitycrmod/graphs.rb
|
148
135
|
- lib/trinitycrmod/namelists.rb
|
149
136
|
- lib/trinitycrmod/output_files.rb
|
137
|
+
- lib/trinitycrmod/read_netcdf.rb
|
150
138
|
- lib/trinitycrmod/trinity.rb
|
151
139
|
- lib/trinitycrmod/trinity_gs2.rb
|
152
140
|
- sync_variables/helper.rb
|
@@ -172,7 +160,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
172
160
|
version: '0'
|
173
161
|
requirements: []
|
174
162
|
rubyforge_project:
|
175
|
-
rubygems_version: 2.
|
163
|
+
rubygems_version: 2.4.8
|
176
164
|
signing_key:
|
177
165
|
specification_version: 4
|
178
166
|
summary: CodeRunner module for the Trinity simulation software.
|