gs2crmod 0.11.45 → 0.11.46
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/VERSION +1 -1
- data/gs2crmod.gemspec +5 -7
- data/lib/gs2crmod/graphs.rb +1 -1
- data/lib/gs2crmod/gs2.rb +138 -0
- data/lib/gs2crmod/gsl_data_3d.rb +1 -1
- data/test/test_gs2crmod.rb +3 -0
- metadata +38 -57
- checksums.yaml +0 -7
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.11.
|
1
|
+
0.11.46
|
data/gs2crmod.gemspec
CHANGED
@@ -2,17 +2,14 @@
|
|
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: gs2crmod 0.11.45 ruby lib
|
6
|
-
# stub: ext/extconf.rb
|
7
5
|
|
8
6
|
Gem::Specification.new do |s|
|
9
7
|
s.name = "gs2crmod"
|
10
|
-
s.version = "0.11.
|
8
|
+
s.version = "0.11.46"
|
11
9
|
|
12
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
13
|
-
s.require_paths = ["lib"]
|
14
11
|
s.authors = ["Edmund Highcock", "Ferdinand van Wyk"]
|
15
|
-
s.date = "2014-
|
12
|
+
s.date = "2014-04-07"
|
16
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."
|
17
14
|
s.email = "edmundhighcock@sourceforge.net"
|
18
15
|
s.extensions = ["ext/extconf.rb"]
|
@@ -85,12 +82,13 @@ Gem::Specification.new do |s|
|
|
85
82
|
]
|
86
83
|
s.homepage = "http://gs2crmod.sourceforge.net"
|
87
84
|
s.licenses = ["GSLv3"]
|
85
|
+
s.require_paths = ["lib"]
|
88
86
|
s.required_ruby_version = Gem::Requirement.new(">= 1.9.1")
|
89
|
-
s.rubygems_version = "
|
87
|
+
s.rubygems_version = "1.8.11"
|
90
88
|
s.summary = "Module to allow CodeRunner to run and analyse the GS2 and AstroGK codes."
|
91
89
|
|
92
90
|
if s.respond_to? :specification_version then
|
93
|
-
s.specification_version =
|
91
|
+
s.specification_version = 3
|
94
92
|
|
95
93
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
96
94
|
s.add_runtime_dependency(%q<coderunner>, [">= 0.14.10"])
|
data/lib/gs2crmod/graphs.rb
CHANGED
@@ -996,7 +996,7 @@ module GraphKits
|
|
996
996
|
when :help
|
997
997
|
return "The potential as a function of cartesian coordinates showing a cut at one toroidal angle, with multiple periodic copies of the flux tube used to fill the whole circle.."
|
998
998
|
when :options
|
999
|
-
return [:Rgeo, :n0, :rho_star, :t_index, :nakx, :naky, :xmax, :xmin, :thetamax, :thetamin, :torphi]
|
999
|
+
return [:Rgeo, :n0, :rho_star, :t_index, :nakx, :naky, :xmax, :xmin, :thetamax, :thetamin, :torphi, :constant_torphi, :no_flux_tube_copies]
|
1000
1000
|
else
|
1001
1001
|
#if options[:ncopies]
|
1002
1002
|
#ops = options.dup
|
data/lib/gs2crmod/gs2.rb
CHANGED
@@ -1250,6 +1250,144 @@ end
|
|
1250
1250
|
'.in'
|
1251
1251
|
end
|
1252
1252
|
|
1253
|
+
#This function will interpolate and output either phi or density at the outboard midplane
|
1254
|
+
#on a 40x40 grid appropriate to analyse as experimental data. It called as a run_command
|
1255
|
+
#e.g. rc 'bes_output(options)', j:<run number>. It will call field_real_space_poloidal_plane_graphkit
|
1256
|
+
#for every time step, interpolate at outboard midplane, and write fields and grids out to NetCDF file.
|
1257
|
+
#
|
1258
|
+
#Options: Same as field_real_space_poloidal_plane, field name must also be specified for generality. New options:
|
1259
|
+
#
|
1260
|
+
# no_flux_tube_copies: ensures only one flux tube is printed out with zeroes everywhere else.
|
1261
|
+
# amin: Minor radius (to which R,Z are normalized) so that grid is in right units
|
1262
|
+
# output_box_size: Array of sizes of output box (in units of amin) either side of middle of fluxtube at outboard midplane
|
1263
|
+
# in R direction and either side of outboard midplane in Z direction.
|
1264
|
+
# output_box_points: Array of number of points in output box (R,Z). Default will be 50x50.
|
1265
|
+
#
|
1266
|
+
#The interpolation routine used will only interpolate correctly inside the fluxtube and produce garbage outside. Regular points are checked
|
1267
|
+
#for being inside or outside the fluxtube and values of the field outside the fluxtube are set to zero.
|
1268
|
+
def bes_output(options={})
|
1269
|
+
#******************
|
1270
|
+
# Read in options *
|
1271
|
+
#******************
|
1272
|
+
#In order to interpolate on constant grids, ensure constant_torphi is set to some value (default 0.0)
|
1273
|
+
if options[:constant_torphi] == nil
|
1274
|
+
p 'constant_torphi not set! Setting it to 0.0.'
|
1275
|
+
options[:constant_torphi] = 0.0
|
1276
|
+
end
|
1277
|
+
#Check whether t_index_window is specified, if not, set to entire t range
|
1278
|
+
if options[:t_index_window] == nil
|
1279
|
+
t_index_beg = 1
|
1280
|
+
t_index_end = gsl_vector(:t).length
|
1281
|
+
else
|
1282
|
+
t_index_beg = options[:t_index_window][0]
|
1283
|
+
t_index_end = options[:t_index_window][1]
|
1284
|
+
end
|
1285
|
+
if options[:amin] == nil
|
1286
|
+
amin = 1.0
|
1287
|
+
else
|
1288
|
+
amin = options[:amin]
|
1289
|
+
end
|
1290
|
+
if options[:output_box_size] and options[:output_box_size].kind_of?Array
|
1291
|
+
r_box_size = options[:output_box_size][0]
|
1292
|
+
z_box_size = options[:output_box_size][1]
|
1293
|
+
else
|
1294
|
+
raise 'Option output_box_size must be specified (in units of amin) and must be an Array.'
|
1295
|
+
end
|
1296
|
+
if options[:output_box_points] and options[:output_box_points].kind_of?Array
|
1297
|
+
r_box_pts = options[:output_box_points][0]
|
1298
|
+
z_box_pts = options[:output_box_points][1]
|
1299
|
+
else
|
1300
|
+
r_box_pts = 50
|
1301
|
+
z_box_pts = 50
|
1302
|
+
end
|
1303
|
+
|
1304
|
+
#Call at first time step to set up arrays and grids
|
1305
|
+
options[:t_index] = t_index_beg
|
1306
|
+
kit = field_real_space_poloidal_plane_graphkit(options)
|
1307
|
+
x = kit.data[0].x.data
|
1308
|
+
y = kit.data[0].y.data
|
1309
|
+
z = kit.data[0].z.data
|
1310
|
+
|
1311
|
+
#Set up NetCDf file
|
1312
|
+
file = NumRu::NetCDF.create(@run_name + "_bes_output.nc")
|
1313
|
+
xdim = file.def_dim('y', x.shape[0])
|
1314
|
+
zdim = file.def_dim('z', z.shape[1])
|
1315
|
+
tdim = file.def_dim('t', 0) #zero means unlimited
|
1316
|
+
x_var = file.def_var("x", 'sfloat', [xdim, zdim])
|
1317
|
+
z_var = file.def_var("z", 'sfloat', [xdim, zdim])
|
1318
|
+
t_var = file.def_var("t", 'sfloat', [tdim])
|
1319
|
+
field_var = file.def_var("field", 'sfloat', [xdim, zdim, tdim])
|
1320
|
+
file.enddef
|
1321
|
+
#Write dimensions to file
|
1322
|
+
x_var.put(NArray.to_na(x.to_a))
|
1323
|
+
z_var.put(NArray.to_na(z.to_a))
|
1324
|
+
|
1325
|
+
#Loop over time, load field as function of space at each time index, write to file
|
1326
|
+
for i in t_index_beg...t_index_end #inclusive of end
|
1327
|
+
Terminal.erewind(1) #go back one line in terminal
|
1328
|
+
eputs sprintf("Writing time index = %d of %d#{Terminal::CLEAR_LINE}", i, t_index_end-t_index_beg+1) #clear line and print time index
|
1329
|
+
options[:t_index] = i
|
1330
|
+
kit = field_real_space_poloidal_plane_graphkit(options)
|
1331
|
+
t_var.put(gsl_vector(:t)[i], 'index'=>[i-t_index_beg]) #Write time to unlimited time NetCDF variable
|
1332
|
+
field_var.put(NArray.to_na((kit.data[0].f.data).to_a), 'start'=>[0,0,i-t_index_beg], 'end'=>[-1,-1,i-t_index_beg])
|
1333
|
+
end
|
1334
|
+
file.close
|
1335
|
+
|
1336
|
+
#Ignore this until interpolation issue is sorted
|
1337
|
+
=begin
|
1338
|
+
#**************************
|
1339
|
+
# Set up new regular grid *
|
1340
|
+
#**************************
|
1341
|
+
th_grid_size = x.shape[1]
|
1342
|
+
flux_tube_midpt = x[0, (th_grid_size-1)/2] + (x[-1, (th_grid_size-1)/2] - x[1, (th_grid_size-1)/2])/2
|
1343
|
+
x_vec_reg = GSL::Vector.linspace(flux_tube_midpt - r_box_size, flux_tube_midpt + r_box_size, r_box_pts)
|
1344
|
+
z_vec_reg = GSL::Vector.linspace(-z_box_size, z_box_size, z_box_pts)
|
1345
|
+
x_reg = GSL::Matrix.alloc(r_box_pts, z_box_pts)
|
1346
|
+
z_reg = GSL::Matrix.alloc(r_box_pts, z_box_pts)
|
1347
|
+
field_reg = GSL::Matrix.alloc(r_box_pts, z_box_pts)
|
1348
|
+
for i in 0...r_box_pts
|
1349
|
+
for j in 0...z_box_pts
|
1350
|
+
x_reg[i,j] = x_vec_reg[i]
|
1351
|
+
z_reg[i,j] = z_vec_reg[j]
|
1352
|
+
end
|
1353
|
+
end
|
1354
|
+
|
1355
|
+
#************************************************
|
1356
|
+
# Find the field at every point on regular grid *
|
1357
|
+
#************************************************
|
1358
|
+
#To evaluate field on a regular grid given the field on an irregular grid, need to interpolate. The rubygem
|
1359
|
+
#gsl_extras contains an interpolation routine called ScatterInterp which does exactly this based on a
|
1360
|
+
#'Radial Basis Function' method.
|
1361
|
+
|
1362
|
+
#Have R, Z, and field on an irregular grid in the form of matrices. ScatterInterp only takes in GSL vectors
|
1363
|
+
#so simply convert these matrices to vectors (of size row*col) since the order of the pts don't matter.
|
1364
|
+
x_vec = GSL::Vector.alloc(x.shape[0]*x.shape[1])
|
1365
|
+
z_vec = GSL::Vector.alloc(x.shape[0]*x.shape[1])
|
1366
|
+
field_vec = GSL::Vector.alloc(x.shape[0]*x.shape[1])
|
1367
|
+
for i in 0...x.shape[0]
|
1368
|
+
for j in 0...x.shape[1]
|
1369
|
+
x_vec[x.shape[1]*i + j] = x[i,j]
|
1370
|
+
z_vec[x.shape[1]*i + j] = z[i,j]
|
1371
|
+
field_vec[x.shape[1]*i + j] = field[i,j]
|
1372
|
+
end
|
1373
|
+
end
|
1374
|
+
|
1375
|
+
#Now pass these vectors to ScatterInterp. This creates an object with instance method 'eval' which can be given an x,z coord
|
1376
|
+
#at which to evaluate the interpolated function.
|
1377
|
+
p 'Interpolating'
|
1378
|
+
interp = GSL::ScatterInterp.alloc(:linear, [x_vec, z_vec, field_vec], false, r0=0.1)
|
1379
|
+
p 'Finished interpolating'
|
1380
|
+
for i in 0...x_vec_reg.size
|
1381
|
+
for j in 0...z_vec_reg.size
|
1382
|
+
field_reg[i,j] = interp.eval(x_vec_reg[i], z_vec_reg[j])
|
1383
|
+
end
|
1384
|
+
end
|
1385
|
+
|
1386
|
+
kit = GraphKit.quick_create([x_vec_reg, z_vec_reg, field_reg])
|
1387
|
+
#kit2 = GraphKit.quick_create([x_vec, z_vec, field_vec])
|
1388
|
+
=end
|
1389
|
+
|
1390
|
+
end
|
1253
1391
|
end # class GS2
|
1254
1392
|
# For backwards compatibility
|
1255
1393
|
|
data/lib/gs2crmod/gsl_data_3d.rb
CHANGED
@@ -396,7 +396,7 @@ class CodeRunner::Gs2
|
|
396
396
|
opts = options.dup
|
397
397
|
opts[:interpolate_theta] = nil
|
398
398
|
theta_vec_short = gsl_vector(:theta, {})
|
399
|
-
p 'sizes', [theta_vec_short.size, values[i+1].to_gslv.size]
|
399
|
+
#p 'sizes', [theta_vec_short.size, values[i+1].to_gslv.size]
|
400
400
|
interp = GSL::ScatterInterp.alloc(:linear, [theta_vec_short, values[i+1].to_gslv], true)
|
401
401
|
for j in 0...theta_vec.size
|
402
402
|
factors[i,j] = interp.eval(theta_vec[j])
|
data/test/test_gs2crmod.rb
CHANGED
@@ -71,6 +71,9 @@ class TestAnalysis < Test::Unit::TestCase
|
|
71
71
|
corr_file = NumRu::NetCDF.open("#{tfolder}/v/id_1/v_write_moments_.true._write_line_.true._id_1_correlation_analysis_full.nc")
|
72
72
|
corr_function = corr_file.var('correlation').get
|
73
73
|
assert_equal([4,4,4,25], corr_function.shape)
|
74
|
+
|
75
|
+
#BES output test
|
76
|
+
CodeRunner.run_command('bes_output(field_name:"density", n0:1, Rgeo:3, species_index:1, no_flux_tube_copies:true, torphi:0.0, constant_torphi:0.0, output_box_size:[0.05, 0.1], output_box_points:[10,10], t_index_window:[1,10])', {j:1, Y:tfolder})
|
74
77
|
end
|
75
78
|
def test_interpolation
|
76
79
|
assert_equal(5, @run.gsl_vector('kx').size)
|
metadata
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gs2crmod
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.11.
|
4
|
+
version: 0.11.46
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Edmund Highcock
|
@@ -9,106 +10,85 @@ authors:
|
|
9
10
|
autorequire:
|
10
11
|
bindir: bin
|
11
12
|
cert_chain: []
|
12
|
-
date: 2014-
|
13
|
+
date: 2014-04-07 00:00:00.000000000 Z
|
13
14
|
dependencies:
|
14
15
|
- !ruby/object:Gem::Dependency
|
15
16
|
name: coderunner
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirement: &17224740 !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
17
19
|
requirements:
|
18
|
-
- -
|
20
|
+
- - ! '>='
|
19
21
|
- !ruby/object:Gem::Version
|
20
22
|
version: 0.14.10
|
21
23
|
type: :runtime
|
22
24
|
prerelease: false
|
23
|
-
version_requirements:
|
24
|
-
requirements:
|
25
|
-
- - ">="
|
26
|
-
- !ruby/object:Gem::Version
|
27
|
-
version: 0.14.10
|
25
|
+
version_requirements: *17224740
|
28
26
|
- !ruby/object:Gem::Dependency
|
29
27
|
name: rubyhacks
|
30
|
-
requirement: !ruby/object:Gem::Requirement
|
28
|
+
requirement: &17224160 !ruby/object:Gem::Requirement
|
29
|
+
none: false
|
31
30
|
requirements:
|
32
|
-
- -
|
31
|
+
- - ! '>='
|
33
32
|
- !ruby/object:Gem::Version
|
34
33
|
version: 0.1.2
|
35
34
|
type: :runtime
|
36
35
|
prerelease: false
|
37
|
-
version_requirements:
|
38
|
-
requirements:
|
39
|
-
- - ">="
|
40
|
-
- !ruby/object:Gem::Version
|
41
|
-
version: 0.1.2
|
36
|
+
version_requirements: *17224160
|
42
37
|
- !ruby/object:Gem::Dependency
|
43
38
|
name: ruby-netcdf-updated
|
44
|
-
requirement: !ruby/object:Gem::Requirement
|
39
|
+
requirement: &17223520 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
45
41
|
requirements:
|
46
|
-
- -
|
42
|
+
- - ! '>='
|
47
43
|
- !ruby/object:Gem::Version
|
48
44
|
version: 0.6.6.1
|
49
45
|
type: :runtime
|
50
46
|
prerelease: false
|
51
|
-
version_requirements:
|
52
|
-
requirements:
|
53
|
-
- - ">="
|
54
|
-
- !ruby/object:Gem::Version
|
55
|
-
version: 0.6.6.1
|
47
|
+
version_requirements: *17223520
|
56
48
|
- !ruby/object:Gem::Dependency
|
57
49
|
name: shoulda
|
58
|
-
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirement: &17222980 !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
59
52
|
requirements:
|
60
|
-
- -
|
53
|
+
- - ! '>='
|
61
54
|
- !ruby/object:Gem::Version
|
62
55
|
version: '0'
|
63
56
|
type: :development
|
64
57
|
prerelease: false
|
65
|
-
version_requirements:
|
66
|
-
requirements:
|
67
|
-
- - ">="
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: '0'
|
58
|
+
version_requirements: *17222980
|
70
59
|
- !ruby/object:Gem::Dependency
|
71
60
|
name: rdoc
|
72
|
-
requirement: !ruby/object:Gem::Requirement
|
61
|
+
requirement: &17222180 !ruby/object:Gem::Requirement
|
62
|
+
none: false
|
73
63
|
requirements:
|
74
|
-
- -
|
64
|
+
- - ~>
|
75
65
|
- !ruby/object:Gem::Version
|
76
66
|
version: '3.12'
|
77
67
|
type: :development
|
78
68
|
prerelease: false
|
79
|
-
version_requirements:
|
80
|
-
requirements:
|
81
|
-
- - "~>"
|
82
|
-
- !ruby/object:Gem::Version
|
83
|
-
version: '3.12'
|
69
|
+
version_requirements: *17222180
|
84
70
|
- !ruby/object:Gem::Dependency
|
85
71
|
name: bundler
|
86
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirement: &17302140 !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
87
74
|
requirements:
|
88
|
-
- -
|
75
|
+
- - ! '>'
|
89
76
|
- !ruby/object:Gem::Version
|
90
77
|
version: 1.0.0
|
91
78
|
type: :development
|
92
79
|
prerelease: false
|
93
|
-
version_requirements:
|
94
|
-
requirements:
|
95
|
-
- - ">"
|
96
|
-
- !ruby/object:Gem::Version
|
97
|
-
version: 1.0.0
|
80
|
+
version_requirements: *17302140
|
98
81
|
- !ruby/object:Gem::Dependency
|
99
82
|
name: jeweler
|
100
|
-
requirement: !ruby/object:Gem::Requirement
|
83
|
+
requirement: &17300100 !ruby/object:Gem::Requirement
|
84
|
+
none: false
|
101
85
|
requirements:
|
102
|
-
- -
|
86
|
+
- - ! '>='
|
103
87
|
- !ruby/object:Gem::Version
|
104
88
|
version: 1.8.4
|
105
89
|
type: :development
|
106
90
|
prerelease: false
|
107
|
-
version_requirements:
|
108
|
-
requirements:
|
109
|
-
- - ">="
|
110
|
-
- !ruby/object:Gem::Version
|
111
|
-
version: 1.8.4
|
91
|
+
version_requirements: *17300100
|
112
92
|
description: GS2 is a gyrokinetic flux tube initial value turbulence code which can
|
113
93
|
be used for fusion or astrophysical plasmas. CodeRunner is a framework for the automated
|
114
94
|
running and analysis of large simulations. This module allows GS2 (and its sister
|
@@ -122,7 +102,7 @@ extra_rdoc_files:
|
|
122
102
|
- README.md
|
123
103
|
- README.rdoc
|
124
104
|
files:
|
125
|
-
-
|
105
|
+
- .document
|
126
106
|
- Gemfile
|
127
107
|
- LICENSE.txt
|
128
108
|
- README.md
|
@@ -185,25 +165,26 @@ files:
|
|
185
165
|
homepage: http://gs2crmod.sourceforge.net
|
186
166
|
licenses:
|
187
167
|
- GSLv3
|
188
|
-
metadata: {}
|
189
168
|
post_install_message:
|
190
169
|
rdoc_options: []
|
191
170
|
require_paths:
|
192
171
|
- lib
|
193
172
|
required_ruby_version: !ruby/object:Gem::Requirement
|
173
|
+
none: false
|
194
174
|
requirements:
|
195
|
-
- -
|
175
|
+
- - ! '>='
|
196
176
|
- !ruby/object:Gem::Version
|
197
177
|
version: 1.9.1
|
198
178
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
179
|
+
none: false
|
199
180
|
requirements:
|
200
|
-
- -
|
181
|
+
- - ! '>='
|
201
182
|
- !ruby/object:Gem::Version
|
202
183
|
version: '0'
|
203
184
|
requirements: []
|
204
185
|
rubyforge_project:
|
205
|
-
rubygems_version:
|
186
|
+
rubygems_version: 1.8.11
|
206
187
|
signing_key:
|
207
|
-
specification_version:
|
188
|
+
specification_version: 3
|
208
189
|
summary: Module to allow CodeRunner to run and analyse the GS2 and AstroGK codes.
|
209
190
|
test_files: []
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 357729508f2ef9c91e16109da5a3de819a86b0dc
|
4
|
-
data.tar.gz: a75eb30afeb7a17ab25b763c044625dea60b3d34
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: e7eb5852bde6e6d394967093abde675dc8cb1ee6399b0c95aee113e6fdc745d6ad7c23d4ec4b9a3a81738d9ba603f4a572d8139bec81c747f64933df0d95664a
|
7
|
-
data.tar.gz: c33b874e7e861392dc8f43fba04977a701776377d721ddec6c6934598b26fcf4c7478107e89a61ea7a510bd2ece43785719e528bce098ef78a2f6ea77cda6ed0
|