veritascrmod 0.2.0 → 0.3.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 +1 -0
- data/VERSION +1 -1
- data/lib/veritascrmod/namelists.rb +39 -0
- data/lib/veritascrmod/read_netcdf.rb +155 -0
- data/lib/veritascrmod/veritas.rb +207 -0
- data/test/test.in +3 -0
- data/test/test_veritas.rb +14 -9
- data/veritascrmod.gemspec +7 -3
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dac480522127c512e64cf75f63d0d9669bfb8509
|
4
|
+
data.tar.gz: b27419d05f4f5e4b8dc2daf044cfaf5929d926b0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0b735502b44419114cf2cde1f1ad7d7aac5c538710461847c41392e24439a1b3a8063ba13544e04068ad3dcac6334626408d17d987498cb45eda4a2e7fae45f0
|
7
|
+
data.tar.gz: 10955f370179b550fed7194252f24e223cbc0e4795739c210e5b7e349316f0496046be5dd7de76adf271bc1d55f89437bf9e6ae43981bee468a2568ddc467065
|
data/Gemfile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
@@ -18,6 +18,45 @@
|
|
18
18
|
:description=>nil,
|
19
19
|
:help=>nil,
|
20
20
|
:code_name=>:time,
|
21
|
+
:must_pass=>
|
22
|
+
[{:test=>"kind_of? Numeric",
|
23
|
+
:explanation=>
|
24
|
+
"This variable must be a floating point number (an integer is also acceptable: it will be converted into a floating point number)."}],
|
25
|
+
:type=>:Float},
|
26
|
+
:runtime=>
|
27
|
+
{:should_include=>"true",
|
28
|
+
:description=>nil,
|
29
|
+
:help=>nil,
|
30
|
+
:code_name=>:runtime,
|
31
|
+
:must_pass=>
|
32
|
+
[{:test=>"kind_of? Numeric",
|
33
|
+
:explanation=>
|
34
|
+
"This variable must be a floating point number (an integer is also acceptable: it will be converted into a floating point number)."}],
|
35
|
+
:type=>:Float},
|
36
|
+
:stepfreq=>
|
37
|
+
{:should_include=>"true",
|
38
|
+
:description=>nil,
|
39
|
+
:help=>nil,
|
40
|
+
:code_name=>:stepfreq,
|
41
|
+
:must_pass=>
|
42
|
+
[{:test=>"kind_of? Numeric",
|
43
|
+
:explanation=>
|
44
|
+
"This variable must be a floating point number (an integer is also acceptable: it will be converted into a floating point number)."}],
|
45
|
+
:type=>:Float},
|
46
|
+
:nregrid=>
|
47
|
+
{:should_include=>"true",
|
48
|
+
:description=>nil,
|
49
|
+
:help=>nil,
|
50
|
+
:code_name=>:nregrid,
|
51
|
+
:must_pass=>
|
52
|
+
[{:test=>"kind_of? Integer",
|
53
|
+
:explanation=>"This variable must be an integer."}],
|
54
|
+
:type=>:Integer},
|
55
|
+
:tfieldsonly=>
|
56
|
+
{:should_include=>"true",
|
57
|
+
:description=>nil,
|
58
|
+
:help=>nil,
|
59
|
+
:code_name=>:tfieldsonly,
|
21
60
|
:must_pass=>
|
22
61
|
[{:test=>"kind_of? Numeric",
|
23
62
|
:explanation=>
|
@@ -0,0 +1,155 @@
|
|
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::Veritas
|
10
|
+
|
11
|
+
class NetcdfSmartReader
|
12
|
+
def initialize(file)
|
13
|
+
@file = file
|
14
|
+
end
|
15
|
+
def dimensions(varname)
|
16
|
+
#p 'varname', varname
|
17
|
+
raise "Unknown variable #{varname}" unless @file.var(varname)
|
18
|
+
@file.var(varname).dims
|
19
|
+
end
|
20
|
+
def read_variable(varname, options)
|
21
|
+
#start = get_start(dims, options)
|
22
|
+
dims = dimensions(varname)
|
23
|
+
narray = @file.var(varname).get('start'=>starts(dims, options), 'end'=>ends(dims, options))
|
24
|
+
if options[:modify_variable]
|
25
|
+
myhsh = dims.inject({}){|hsh, dim|
|
26
|
+
opts = options.dup
|
27
|
+
opts[:modify_variable] = nil
|
28
|
+
dimval = read_variable(dimension_variable_name(dim.name), opts)
|
29
|
+
hsh[dim.name] = dimval
|
30
|
+
hsh
|
31
|
+
}
|
32
|
+
narray = options[:modify_variable].call(varname, narray, myhsh)
|
33
|
+
elsif options[:invert_matrix]
|
34
|
+
narray = GSL::Linalg::LU.invert(narray.to_gm_view).to_na_ref
|
35
|
+
end
|
36
|
+
shape = narray.shape
|
37
|
+
shape.delete_if{|i| i==1}
|
38
|
+
#p 'shape', shape; STDIN.gets
|
39
|
+
narray.reshape!(*shape)
|
40
|
+
narray
|
41
|
+
|
42
|
+
end
|
43
|
+
def starts(dims, options)
|
44
|
+
dims.map{|d| dim_start(d.name, options)}
|
45
|
+
end
|
46
|
+
def dim_start(name, options)
|
47
|
+
sym = name.to_sym
|
48
|
+
if i=options[sym + :_index] or i = options[sym]
|
49
|
+
return i-1
|
50
|
+
elsif i=options[sym + :_element]
|
51
|
+
return i
|
52
|
+
elsif i=options[sym + :min]
|
53
|
+
return i
|
54
|
+
else
|
55
|
+
return 0
|
56
|
+
end
|
57
|
+
end
|
58
|
+
def ends(dims, options)
|
59
|
+
dims.map{|d| dim_end(d.name, options)}
|
60
|
+
end
|
61
|
+
def dim_end(name, options)
|
62
|
+
sym = name.to_sym
|
63
|
+
if i=options[sym + :_index] or i=options[sym]
|
64
|
+
return i-1
|
65
|
+
elsif i=options[sym + :_element]
|
66
|
+
return i
|
67
|
+
elsif i=options[sym + :max]
|
68
|
+
return i
|
69
|
+
else
|
70
|
+
return -1
|
71
|
+
end
|
72
|
+
end
|
73
|
+
def file_dimensions
|
74
|
+
@file.dims.map{|d| d.name}
|
75
|
+
end
|
76
|
+
|
77
|
+
def axiskit(variable, options)
|
78
|
+
case variable
|
79
|
+
when *file_dimensions
|
80
|
+
return GraphKit::AxisKit.autocreate(data: GSL::Vector.linspace(1, sz=@file.dim(variable).length, sz), title: variable)
|
81
|
+
end
|
82
|
+
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/, '').sub(/.*rho.*The definition.*/, 'rho'))
|
83
|
+
end
|
84
|
+
def dimension_variable_name(n)
|
85
|
+
case n
|
86
|
+
when *file_dimensions
|
87
|
+
n
|
88
|
+
else
|
89
|
+
raise "Unknown dimension #{n}"
|
90
|
+
end
|
91
|
+
end
|
92
|
+
def check_no_r(non_flat_dims)
|
93
|
+
raise "Please specify the r index for real or imaginary" if non_flat_dims.include? @file.dim('r')
|
94
|
+
end
|
95
|
+
def graphkit(variable, options)
|
96
|
+
non_flat_dims=dimensions(variable).find_all{|dim| dim_start(dim.name, options) != dim_end(dim.name, options) and dim.length != 1}
|
97
|
+
check_no_r(non_flat_dims)
|
98
|
+
axiskits = non_flat_dims.map{|dim| dimvar = dimension_variable_name(dim.name); axiskit(dimvar, options)} + [axiskit(variable, options)]
|
99
|
+
hash = {}
|
100
|
+
axes = [:x, :y, :z, :f]
|
101
|
+
axiskits.each_with_index{|ax, i| hash[axes[i]] = ax}
|
102
|
+
kit = GraphKit.autocreate(hash)
|
103
|
+
opts = options.dup
|
104
|
+
opts.delete(:modify_variable)
|
105
|
+
opts.delete(:graphkit_name)
|
106
|
+
#kit.data[0].title += " with options: " + opts.to_s
|
107
|
+
kit.data[0].title += " " + opts.to_s.gsub(/_(index|element)/, '')
|
108
|
+
kit.data[0].gp.with = "lp"
|
109
|
+
if kit.zlabel
|
110
|
+
kit.zlabel = "'#{kit.zlabel}' rotate by 90"
|
111
|
+
#kit.zlabel = nil
|
112
|
+
end
|
113
|
+
kit
|
114
|
+
end
|
115
|
+
end # class NetcdfSmartReader
|
116
|
+
|
117
|
+
|
118
|
+
def netcdf_smart_reader
|
119
|
+
end
|
120
|
+
|
121
|
+
class SmartGraphKitError < StandardError
|
122
|
+
end
|
123
|
+
|
124
|
+
def smart_graphkit(options)
|
125
|
+
case options[:command]
|
126
|
+
when :help
|
127
|
+
"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."
|
128
|
+
when :options
|
129
|
+
[:nmat_index, :t_index, :tspec_index, :iter_index]
|
130
|
+
else
|
131
|
+
case options[:graphkit_name]
|
132
|
+
when /_vs_/
|
133
|
+
kits = options[:graphkit_name].sub(/^nc_/, '').split(/_vs_/).map{|n| netcdf_smart_reader.graphkit(n, options)}
|
134
|
+
kit = kits[-1]
|
135
|
+
raise SmartGraphKitError.new("Number of axes does not match number of variables") if kits.size != kit.naxes
|
136
|
+
for i in 0...kit.data.size
|
137
|
+
if kit.naxes > 1
|
138
|
+
kit.data[i].x = kits[0].data[i].y
|
139
|
+
end
|
140
|
+
if kit.naxes > 2
|
141
|
+
kit.data[i].x = kits[0].data[i].z
|
142
|
+
kit.data[i].y = kits[1].data[i].z
|
143
|
+
end
|
144
|
+
end
|
145
|
+
kit.autocreate
|
146
|
+
kit
|
147
|
+
else
|
148
|
+
openncfile{|f| NetcdfSmartReader.new(f).graphkit(options[:graphkit_name].sub(/^nc_/, ''), options)}
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
|
154
|
+
|
155
|
+
end
|
data/lib/veritascrmod/veritas.rb
CHANGED
@@ -9,6 +9,8 @@ class CodeRunner
|
|
9
9
|
# Where this file is
|
10
10
|
@code_module_folder = File.dirname(File.expand_path(__FILE__)) # i.e. the directory this file is in
|
11
11
|
|
12
|
+
require 'veritascrmod/read_netcdf.rb'
|
13
|
+
|
12
14
|
# Use the Run::FortranNamelist tools to process the variable database
|
13
15
|
setup_namelists(@code_module_folder)
|
14
16
|
|
@@ -42,6 +44,7 @@ class CodeRunner
|
|
42
44
|
name += " (res: #@restart_id)" if @restart_id
|
43
45
|
name += " real_id: #@real_id" if @real_id
|
44
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.to_f, "%")
|
47
|
+
beginning += " n:#@nlines " if @nlines
|
45
48
|
#if ctd and fusionQ
|
46
49
|
#beginning += sprintf("Q:%f, Pfusion:%f MW, Ti0:%f keV, Te0:%f keV, n0:%f x10^20", fusionQ, pfus, ti0, te0, ne0)
|
47
50
|
#end
|
@@ -112,6 +115,10 @@ class CodeRunner
|
|
112
115
|
#
|
113
116
|
def process_directory_code_specific
|
114
117
|
get_status
|
118
|
+
if FileTest.exist? 'output/time.txt'
|
119
|
+
@nlines = File.read('output/time.txt').split("\n").size
|
120
|
+
end
|
121
|
+
|
115
122
|
end
|
116
123
|
|
117
124
|
def get_status
|
@@ -168,6 +175,206 @@ EOF1
|
|
168
175
|
'.in'
|
169
176
|
end
|
170
177
|
|
178
|
+
def self.modify_job_script(runner, runs_in, script)
|
179
|
+
if CODE_OPTIONS[:veritas] and CODE_OPTIONS[:veritas][:list]
|
180
|
+
if (list_size = CODE_OPTIONS[:veritas][:list]).kind_of? Integer
|
181
|
+
raise "The total number of runs must be a multiple of the list size!" unless runs_in.size % list_size == 0
|
182
|
+
pieces = runs_in.pieces(runs_in.size/list_size)
|
183
|
+
else
|
184
|
+
pieces = [runs_in]
|
185
|
+
end
|
186
|
+
script = ""
|
187
|
+
pieces.each do |runs|
|
188
|
+
#ep 'there is a list'
|
189
|
+
FileUtils.makedirs('job_lists')
|
190
|
+
jid = "#{runs[0].id}-#{runs[-1].id}"
|
191
|
+
list_file = "../job_lists/veritas_list_#{jid}.list"
|
192
|
+
Dir.chdir('job_chain_files') do
|
193
|
+
File.open(list_file,'w') do |file|
|
194
|
+
file.puts runs.size
|
195
|
+
file.puts runs.map{|r| "../#{r.relative_directory}/\n#{r.run_name}"}.join("\n")
|
196
|
+
end
|
197
|
+
end
|
198
|
+
raise "runs must all have the same nprocs" unless runs.map{|r| r.nprocs}.uniq.size == 1
|
199
|
+
runs.each do |r|
|
200
|
+
# Make sure the restart file name includes the relative directory for
|
201
|
+
# list runs
|
202
|
+
#reldir = r.relative_directory
|
203
|
+
#puts rdir[0...reldir.size] == reldir, rdir[0...reldir.size], reldir
|
204
|
+
#raise ""
|
205
|
+
Dir.chdir(r.directory){r.write_input_file}
|
206
|
+
end
|
207
|
+
#np = runs[0].nprocs.split('x').map{|n| n.to_i}
|
208
|
+
#np[0] *= runs.size
|
209
|
+
#nprocs = np.map{|n| n.to_s}.join('x')
|
210
|
+
#@runner.nprocs = nprocs
|
211
|
+
@runner.nprocs = runs[0].nprocs
|
212
|
+
ls = ListSubmitter.new(@runner, @runner.nprocs, list_file, jid)
|
213
|
+
script << 'cd job_chain_files; '
|
214
|
+
script << ls.run_command
|
215
|
+
end
|
216
|
+
end
|
217
|
+
return script
|
218
|
+
end
|
219
|
+
|
220
|
+
class ListSubmitter
|
221
|
+
include CodeRunner::SYSTEM_MODULE
|
222
|
+
@uses_mpi = true
|
223
|
+
attr_reader :executable_location, :executable_name, :parameter_string
|
224
|
+
attr_reader :job_identifier
|
225
|
+
def initialize(runner, nprocs, list_file, jid)
|
226
|
+
@executable_location = runner.executable_location
|
227
|
+
@executable_name = runner.executable_name
|
228
|
+
@parameter_string = list_file
|
229
|
+
@job_identifier = jid
|
230
|
+
@nprocs = nprocs
|
231
|
+
end
|
232
|
+
def rcp
|
233
|
+
self.class.rcp
|
234
|
+
end
|
235
|
+
def self.rcp
|
236
|
+
@rcp ||= CodeRunner::Run::RunClassPropertyFetcher.new(self)
|
237
|
+
end
|
238
|
+
|
239
|
+
end #class ListSubmitter
|
240
|
+
def graphkit(name, options)
|
241
|
+
if name =~ /^nc/
|
242
|
+
smart_graphkit(options.absorb(graphkit_name: name))
|
243
|
+
else
|
244
|
+
send((name + '_graphkit').to_sym, options)
|
245
|
+
end
|
246
|
+
end
|
247
|
+
def potential_graphkit(options)
|
248
|
+
real_space_graphkit(signal: 'phi')
|
249
|
+
end
|
250
|
+
def asquared_graphkit(options)
|
251
|
+
real_space_graphkit(signal: 'asquared')
|
252
|
+
end
|
253
|
+
def asquared2d_graphkit(options)
|
254
|
+
real_space_2d_graphkit(options.dup.absorb(signal: 'asquared'))
|
255
|
+
end
|
256
|
+
def openncfile
|
257
|
+
require 'numru/netcdf'
|
258
|
+
res = nil
|
259
|
+
file = NumRu::NetCDF.open("#@directory/#@run_name.nc")
|
260
|
+
res = yield(file)
|
261
|
+
file.close
|
262
|
+
res
|
263
|
+
end
|
264
|
+
def real_space_graphkit(options)
|
265
|
+
Dir.chdir(@directory) do
|
266
|
+
mat = openncfile{|f| f.var(options[:signal]).get}
|
267
|
+
shape = mat.shape
|
268
|
+
p 'shape', mat.shape
|
269
|
+
x = shape[0].times.to_a
|
270
|
+
t = shape[1].times.to_a
|
271
|
+
kit = GraphKit.quick_create([x, t, mat])
|
272
|
+
kit.gp.view = "map"
|
273
|
+
kit.gp.palette = "rgb 23,28,3"
|
274
|
+
kit.data[0].gp.with = "pm3d"
|
275
|
+
kit
|
276
|
+
end
|
277
|
+
end
|
278
|
+
def real_space_2d_graphkit(options)
|
279
|
+
t = options[:t]
|
280
|
+
raise "Please supply :t" unless t
|
281
|
+
Dir.chdir(@directory) do
|
282
|
+
vec = openncfile{|f| f.var(options[:signal]).get('start'=>[0,t], 'end'=>[-1,t])}
|
283
|
+
mat = GSL::Matrix.alloc(vec.size, 2)
|
284
|
+
for i in 0...vec.size
|
285
|
+
mat[i,0] = mat[i,1] = vec[i]
|
286
|
+
end
|
287
|
+
shape = mat.shape
|
288
|
+
p 'shape', mat.shape
|
289
|
+
x = shape[0].times.to_a
|
290
|
+
t = shape[1].times.to_a
|
291
|
+
kit = GraphKit.quick_create([x, t, mat])
|
292
|
+
kit.gp.view = "map"
|
293
|
+
kit.gp.palette = "rgb 23,28,3"
|
294
|
+
kit.data[0].gp.with = "pm3d"
|
295
|
+
kit
|
296
|
+
end
|
297
|
+
end
|
298
|
+
def waveandparticles_graphkit(options)
|
299
|
+
kit = GraphKit::MultiKit.new([
|
300
|
+
asquared2d_graphkit(options),
|
301
|
+
dist_fn_graphkit(options)
|
302
|
+
])
|
303
|
+
kit[0].gp.size = "1.0,0.3"
|
304
|
+
kit[0].gp.origin = "0.0,0.7"
|
305
|
+
kit[1].gp.size = "1.0,0.9"
|
306
|
+
kit[1].gp.origin = "0.0,-0.1"
|
307
|
+
kit[1].gp.cbrange = "[0:]"
|
308
|
+
kit.each do |k|
|
309
|
+
k.key="off"
|
310
|
+
k.xlabel=nil
|
311
|
+
k.ylabel=nil
|
312
|
+
k.gp.xtics = "unset"
|
313
|
+
k.gp.ytics = "unset"
|
314
|
+
k.title = nil
|
315
|
+
end
|
316
|
+
kit
|
317
|
+
end
|
318
|
+
def vspace_dist_fn_graphkit(options)
|
319
|
+
kit = dist_fn_graphkit(options)
|
320
|
+
mat = kit.data[0].z.data
|
321
|
+
pvec = GSL::Vector.alloc(mat.shape[1])
|
322
|
+
pvec = 0.0
|
323
|
+
for i in 0...mat.shape[0]
|
324
|
+
pvec = pvec + mat.row(i)
|
325
|
+
end
|
326
|
+
kit2 = GraphKit.quick_create([kit.data[0].y.data, pvec])
|
327
|
+
kit2.data[0].gp.with = "lp"
|
328
|
+
kit2.gp.logscale = "y"
|
329
|
+
kit2
|
330
|
+
end
|
331
|
+
def dist_fn_graphkit(options)
|
332
|
+
t = options[:t]
|
333
|
+
p = options[:particle]
|
334
|
+
raise "Please supply :t" unless t
|
335
|
+
raise "Please supply :particle" unless p
|
336
|
+
mat = openncfile do |f|
|
337
|
+
m = GSL::Matrix.alloc(f.dim("x_finest").length, f.dim("p_finest").length)
|
338
|
+
nlevels = f.dim("level").length
|
339
|
+
nlevels.times.to_a.reverse.each do |l|
|
340
|
+
#[2].each do |l|
|
341
|
+
factor = (@r||2)**l
|
342
|
+
# NB the Ruby netCDF interface is (very annoyingly) written in column major (Fortran) style
|
343
|
+
nrectangles = f.var("level_rnum").get('index'=> [l,p,t])[0]
|
344
|
+
nrectangles.times do |r|
|
345
|
+
urid = f.var('urid').get('index'=>[r,l,p,t])[0]
|
346
|
+
md = f.var('rectangle_metadata').get('start'=>[0,0,urid], 'end'=>[-1,-1,urid])[true,true,0]
|
347
|
+
x_indices = f.var("integer_blob_data").get('start'=>[md[0,0]], 'end'=>[md[1,0]])
|
348
|
+
p_indices = f.var("integer_blob_data").get('start'=>[md[0,1]], 'end'=>[md[1,1]])
|
349
|
+
fdata = f.var("double_blob_data").get('start'=>[md[0,2]], 'end'=>[md[1,2]])
|
350
|
+
p_size = md[1,1] - md[0,1] + 1
|
351
|
+
x_indices.to_a.each_with_index do |ixglobal,ixrec|
|
352
|
+
p_indices.to_a.each_with_index do |ipglobal,iprec|
|
353
|
+
index = ixrec*p_size + iprec
|
354
|
+
#ep ["index", index, "fsize", md[1,2]-md[0,2]+1, 'ix', ixrec, 'ip', iprec, 'p_size', p_size, 'level', l, 'ixglobal', ixglobal, 'factor', factor]
|
355
|
+
for i in 0...factor
|
356
|
+
for j in 0...factor
|
357
|
+
m[ixglobal*factor+i,ipglobal*factor+j] = fdata[index]
|
358
|
+
end
|
359
|
+
end
|
360
|
+
end
|
361
|
+
end
|
362
|
+
end
|
363
|
+
end
|
364
|
+
m
|
365
|
+
end
|
366
|
+
#mat = mat.log if (options[:log])
|
367
|
+
shape = mat.shape
|
368
|
+
p 'shape', mat.shape
|
369
|
+
x = shape[0].times.to_a.reverse
|
370
|
+
t = shape[1].times.to_a.reverse
|
371
|
+
kit = GraphKit.quick_create([x, t, mat])
|
372
|
+
#kit.live = true
|
373
|
+
kit.gp.view = "map"
|
374
|
+
kit.gp.palette = "rgb 23,28,3"
|
375
|
+
kit.data[0].gp.with = "pm3d"
|
376
|
+
kit
|
377
|
+
end
|
171
378
|
# Override CodeRunner for 0-based# Override CodeRunner for 0-based# Override CodeRunner for 0-based
|
172
379
|
def input_file_text
|
173
380
|
text = input_file_header
|
data/test/test.in
CHANGED
data/test/test_veritas.rb
CHANGED
@@ -9,7 +9,7 @@ $coderunner_command = "#{$ruby_command} -I lib/ lib/coderunner.rb"
|
|
9
9
|
class TestVeritas < MiniTest::Test
|
10
10
|
def setup
|
11
11
|
#puts "setup"; STDIN.gets
|
12
|
-
cleanup if FileTest.exist?('test/test_results')
|
12
|
+
#cleanup if FileTest.exist?('test/test_results')
|
13
13
|
FileUtils.makedirs('test/test_results/v')
|
14
14
|
@runner = CodeRunner.fetch_runner(Y: 'test/test_results', C: 'veritas', X: '/dev/null')
|
15
15
|
end
|
@@ -23,19 +23,24 @@ class TestVeritas < MiniTest::Test
|
|
23
23
|
end
|
24
24
|
def teardown
|
25
25
|
end
|
26
|
-
def test_basics
|
27
|
-
assert_equal(@runner.run_class, CodeRunner::Veritas)
|
28
|
-
end
|
26
|
+
#def test_basics
|
27
|
+
#assert_equal(@runner.run_class, CodeRunner::Veritas)
|
28
|
+
#end
|
29
29
|
def test_submit
|
30
|
-
|
31
|
-
FileUtils.mv('rake_test_defaults.rb', 'test/test_results')
|
32
|
-
if ENV['VERITAS_EXEC']
|
33
|
-
CodeRunner.submit(Y: 'test/test_results', T: false, D: 'rake_test', n: '1', X: ENV['VERITAS_EXEC'], p: '{np_0: 16, np_1: 16}')
|
34
|
-
end
|
30
|
+
#@runner.run_class.make_new_defaults_file("rake_test", "test/test.in")
|
31
|
+
#FileUtils.mv('rake_test_defaults.rb', 'test/test_results')
|
32
|
+
#if ENV['VERITAS_EXEC']
|
33
|
+
#CodeRunner.submit(Y: 'test/test_results', T: false, D: 'rake_test', n: '1', X: ENV['VERITAS_EXEC'], p: '{np_0: 16, np_1: 16}')
|
34
|
+
#end
|
35
35
|
base_hash = @runner.run_class.parse_input_file('test/test.in')
|
36
36
|
test_hash = @runner.run_class.parse_input_file('test/test_results/v/id_1/v_np_0_16_np_1_16_id_1.in')
|
37
37
|
assert_equal(base_hash, test_hash)
|
38
38
|
CodeRunner.status(Y: 'test/test_results')
|
39
|
+
#CodeRunner.plot_graph(Y: 'test/test_results', g: ['asquared'], G: [])
|
40
|
+
#CodeRunner.plot_graph(Y: 'test/test_results', g: ['waveandparticles;{t:-1, particle: 0, log: true}'], G: [])
|
41
|
+
#CodeRunner.plot_graph(Y: 'test/test_results', g: ['nc_asquared;{time:-1, particle: 1}'], G: [])
|
42
|
+
#CodeRunner.plot_graph(Y: 'test/test_results', g: ['dist_fn;{t: 0, particle: 0}'], G: [], w: "self.live=true")
|
43
|
+
CodeRunner.plot_graph(Y: 'test/test_results', g: ['vspace_dist_fn;{t: 0, particle: 0}'], G: [], w: "self.live=true")
|
39
44
|
#cleanup if FileTest.exist?('test/test_results')
|
40
45
|
end
|
41
46
|
end
|
data/veritascrmod.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: veritascrmod 0.
|
5
|
+
# stub: veritascrmod 0.3.0 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "veritascrmod"
|
9
|
-
s.version = "0.
|
9
|
+
s.version = "0.3.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 = "2016-08-
|
14
|
+
s.date = "2016-08-16"
|
15
15
|
s.description = "A CodeRunner module for the Veritas Vlasov Solver"
|
16
16
|
s.email = "edmundhighcock@users.sourceforge.net"
|
17
17
|
s.extra_rdoc_files = [
|
@@ -27,6 +27,7 @@ Gem::Specification.new do |s|
|
|
27
27
|
"VERSION",
|
28
28
|
"lib/veritascrmod.rb",
|
29
29
|
"lib/veritascrmod/namelists.rb",
|
30
|
+
"lib/veritascrmod/read_netcdf.rb",
|
30
31
|
"lib/veritascrmod/veritas.rb",
|
31
32
|
"sync_variables/helper.rb",
|
32
33
|
"sync_variables/sync_variables.rb",
|
@@ -45,6 +46,7 @@ Gem::Specification.new do |s|
|
|
45
46
|
|
46
47
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
47
48
|
s.add_runtime_dependency(%q<coderunner>, [">= 1.0.0"])
|
49
|
+
s.add_runtime_dependency(%q<ruby-netcdf>, [">= 0.7.1"])
|
48
50
|
s.add_runtime_dependency(%q<narray>, [">= 0"])
|
49
51
|
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
50
52
|
s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
|
@@ -53,6 +55,7 @@ Gem::Specification.new do |s|
|
|
53
55
|
s.add_development_dependency(%q<simplecov>, [">= 0"])
|
54
56
|
else
|
55
57
|
s.add_dependency(%q<coderunner>, [">= 1.0.0"])
|
58
|
+
s.add_dependency(%q<ruby-netcdf>, [">= 0.7.1"])
|
56
59
|
s.add_dependency(%q<narray>, [">= 0"])
|
57
60
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
58
61
|
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
@@ -62,6 +65,7 @@ Gem::Specification.new do |s|
|
|
62
65
|
end
|
63
66
|
else
|
64
67
|
s.add_dependency(%q<coderunner>, [">= 1.0.0"])
|
68
|
+
s.add_dependency(%q<ruby-netcdf>, [">= 0.7.1"])
|
65
69
|
s.add_dependency(%q<narray>, [">= 0"])
|
66
70
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
67
71
|
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: veritascrmod
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.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: 2016-08-
|
11
|
+
date: 2016-08-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: coderunner
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 1.0.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: ruby-netcdf
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.7.1
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.7.1
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: narray
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -124,6 +138,7 @@ files:
|
|
124
138
|
- VERSION
|
125
139
|
- lib/veritascrmod.rb
|
126
140
|
- lib/veritascrmod/namelists.rb
|
141
|
+
- lib/veritascrmod/read_netcdf.rb
|
127
142
|
- lib/veritascrmod/veritas.rb
|
128
143
|
- sync_variables/helper.rb
|
129
144
|
- sync_variables/sync_variables.rb
|