mdarray 0.5.3-java → 0.5.4-java
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +325 -70
- data/doc/20130625 MDArray Internals.docx +0 -0
- data/lib/colt/colt.rb +2 -0
- data/lib/colt/matrix/colt_matrix.rb +365 -0
- data/lib/colt/matrix/matrix2D_floating_algebra.rb +325 -0
- data/lib/colt/matrix/matrix_hierarchy.rb +258 -0
- data/lib/mdarray.rb +54 -3
- data/lib/mdarray/access.rb +16 -0
- data/lib/mdarray/counter.rb +16 -0
- data/lib/mdarray/creation.rb +13 -1
- data/lib/mdarray/lazy_mdarray.rb +6 -2
- data/lib/mdarray/lazy_operators.rb +8 -0
- data/lib/mdarray/printing.rb +18 -3
- data/lib/mdarray/section.rb +101 -0
- data/lib/netcdf/attribute.rb +154 -0
- data/lib/netcdf/cdm_node.rb +71 -0
- data/lib/netcdf/dimension.rb +146 -0
- data/lib/netcdf/file.rb +253 -0
- data/lib/netcdf/file_writer.rb +474 -0
- data/lib/netcdf/group.rb +205 -0
- data/lib/netcdf/netcdf.rb +151 -0
- data/lib/netcdf/variable.rb +520 -0
- data/test/colt/test_complete.rb +1 -2
- data/test/colt/test_double_matrix2d.rb +186 -0
- data/test/colt/test_float_matrix2d.rb +171 -0
- data/test/colt/test_math.rb +21 -0
- data/test/colt/test_matrix.rb +172 -0
- data/test/complete.rb +9 -1
- data/test/env.rb +11 -1
- data/test/mdarray/test_complete.rb +2 -0
- data/test/mdarray/test_creation.rb +19 -28
- data/test/mdarray/test_non_numeric.rb +97 -0
- data/test/mdarray/test_sections.rb +94 -0
- data/test/mdarray/test_views.rb +23 -1
- data/test/netcdf/netcdfwriter.rb +197 -0
- data/test/netcdf/test_complete.rb +27 -0
- data/test/netcdf/test_netcdf.rb +331 -0
- data/test/netcdf/test_redefine.rb +120 -0
- data/vendor/incanter.jar +0 -0
- data/vendor/{netcdfAll-4.3.16.jar → netcdfAll-4.3.18.jar} +0 -0
- data/version.rb +1 -1
- metadata +44 -26
- data/vendor/parallelcolt-0.10.0.jar +0 -0
@@ -0,0 +1,71 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
##########################################################################################
|
4
|
+
# Copyright © 2013 Rodrigo Botafogo. All Rights Reserved. Permission to use, copy, modify,
|
5
|
+
# and distribute this software and its documentation, without fee and without a signed
|
6
|
+
# licensing agreement, is hereby granted, provided that the above copyright notice, this
|
7
|
+
# paragraph and the following two paragraphs appear in all copies, modifications, and
|
8
|
+
# distributions.
|
9
|
+
#
|
10
|
+
# IN NO EVENT SHALL RODRIGO BOTAFOGO BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL,
|
11
|
+
# INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF
|
12
|
+
# THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF RODRIGO BOTAFOGO HAS BEEN ADVISED OF THE
|
13
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
14
|
+
#
|
15
|
+
# RODRIGO BOTAFOGO SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
16
|
+
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
|
17
|
+
# SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED HEREUNDER IS PROVIDED "AS IS".
|
18
|
+
# RODRIGO BOTAFOGO HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS,
|
19
|
+
# OR MODIFICATIONS.
|
20
|
+
##########################################################################################
|
21
|
+
|
22
|
+
class NetCDF
|
23
|
+
|
24
|
+
#=======================================================================================
|
25
|
+
# Define a superclass for all the CDM node classes: Group, Dimension, etc. Define the
|
26
|
+
# sort of the node CDMSort so that we can 1. do true switching on node type 2. avoid use
|
27
|
+
# of instanceof 3. Use container classes that have more than one kind of node
|
28
|
+
#
|
29
|
+
# Also move various common fields and methods to here.
|
30
|
+
#=======================================================================================
|
31
|
+
|
32
|
+
class CDMNode
|
33
|
+
|
34
|
+
attr_reader :netcdf_elmt
|
35
|
+
|
36
|
+
#------------------------------------------------------------------------------------
|
37
|
+
# Initializes a CDMNode with a java CDMNode
|
38
|
+
#------------------------------------------------------------------------------------
|
39
|
+
|
40
|
+
def initialize(netcdf_cdmnode)
|
41
|
+
@netcdf_elmt = netcdf_cdmnode
|
42
|
+
end
|
43
|
+
|
44
|
+
#------------------------------------------------------------------------------------
|
45
|
+
#
|
46
|
+
#------------------------------------------------------------------------------------
|
47
|
+
|
48
|
+
def get_full_name
|
49
|
+
@netcdf_elmt.getFullName()
|
50
|
+
end
|
51
|
+
|
52
|
+
alias :get_full_name_escaped :get_full_name
|
53
|
+
|
54
|
+
#------------------------------------------------------------------------------------
|
55
|
+
#
|
56
|
+
#------------------------------------------------------------------------------------
|
57
|
+
|
58
|
+
def get_short_name
|
59
|
+
@netcdf_elmt.getShortName()
|
60
|
+
end
|
61
|
+
|
62
|
+
alias :name :get_short_name
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
require_relative 'group'
|
69
|
+
require_relative 'dimension'
|
70
|
+
require_relative 'variable'
|
71
|
+
require_relative 'attribute'
|
@@ -0,0 +1,146 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
##########################################################################################
|
4
|
+
# Copyright © 2013 Rodrigo Botafogo. All Rights Reserved. Permission to use, copy, modify,
|
5
|
+
# and distribute this software and its documentation, without fee and without a signed
|
6
|
+
# licensing agreement, is hereby granted, provided that the above copyright notice, this
|
7
|
+
# paragraph and the following two paragraphs appear in all copies, modifications, and
|
8
|
+
# distributions.
|
9
|
+
#
|
10
|
+
# IN NO EVENT SHALL RODRIGO BOTAFOGO BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL,
|
11
|
+
# INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF
|
12
|
+
# THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF RODRIGO BOTAFOGO HAS BEEN ADVISED OF THE
|
13
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
14
|
+
#
|
15
|
+
# RODRIGO BOTAFOGO SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
16
|
+
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
|
17
|
+
# SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED HEREUNDER IS PROVIDED "AS IS".
|
18
|
+
# RODRIGO BOTAFOGO HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS,
|
19
|
+
# OR MODIFICATIONS.
|
20
|
+
##########################################################################################
|
21
|
+
|
22
|
+
class NetCDF
|
23
|
+
|
24
|
+
#=======================================================================================
|
25
|
+
# A Dimension is used to define the array shape of a Variable. It may be shared among
|
26
|
+
# Variables, which provides a simple yet powerful way of associating Variables. When a
|
27
|
+
# Dimension is shared, it has a unique name within its Group. It may have a coordinate
|
28
|
+
# Variable, which gives each index a coordinate value. A private Dimension cannot have a
|
29
|
+
# coordinate Variable, so use shared dimensions with coordinates when possible. The
|
30
|
+
# Dimension length must be > 0, except for an unlimited dimension which may have
|
31
|
+
# length = 0, and a vlen Dimension has length = -1.
|
32
|
+
# Immutable if setImmutable() was called, except for an Unlimited Dimension, whose size
|
33
|
+
# can change.
|
34
|
+
#=======================================================================================
|
35
|
+
|
36
|
+
class Dimension < CDMNode
|
37
|
+
|
38
|
+
#------------------------------------------------------------------------------------
|
39
|
+
#
|
40
|
+
#------------------------------------------------------------------------------------
|
41
|
+
|
42
|
+
def get_length
|
43
|
+
@netcdf_elmt.getLength()
|
44
|
+
end
|
45
|
+
|
46
|
+
alias :length :get_length
|
47
|
+
|
48
|
+
#------------------------------------------------------------------------------------
|
49
|
+
#
|
50
|
+
#------------------------------------------------------------------------------------
|
51
|
+
|
52
|
+
def shared?
|
53
|
+
@netcdf_elmt.isShared()
|
54
|
+
end
|
55
|
+
|
56
|
+
#------------------------------------------------------------------------------------
|
57
|
+
#
|
58
|
+
#------------------------------------------------------------------------------------
|
59
|
+
|
60
|
+
def unlimited?
|
61
|
+
@netcdf_elmt.isUnlimited()
|
62
|
+
end
|
63
|
+
|
64
|
+
#------------------------------------------------------------------------------------
|
65
|
+
#
|
66
|
+
#------------------------------------------------------------------------------------
|
67
|
+
|
68
|
+
def variable_length?
|
69
|
+
@netcdf_elmt.isVariableLength()
|
70
|
+
end
|
71
|
+
|
72
|
+
#------------------------------------------------------------------------------------
|
73
|
+
#
|
74
|
+
#------------------------------------------------------------------------------------
|
75
|
+
|
76
|
+
def group
|
77
|
+
NetCDF::Group.new(@netcdf_elmt.getGroup())
|
78
|
+
end
|
79
|
+
|
80
|
+
end # Dimension
|
81
|
+
|
82
|
+
#=======================================================================================
|
83
|
+
#
|
84
|
+
#=======================================================================================
|
85
|
+
|
86
|
+
class DimensionWriter < Dimension
|
87
|
+
|
88
|
+
#------------------------------------------------------------------------------------
|
89
|
+
#
|
90
|
+
#------------------------------------------------------------------------------------
|
91
|
+
|
92
|
+
def set_immutable
|
93
|
+
@netcdf_elmt.setImmutable()
|
94
|
+
end
|
95
|
+
|
96
|
+
#------------------------------------------------------------------------------------
|
97
|
+
#
|
98
|
+
#------------------------------------------------------------------------------------
|
99
|
+
|
100
|
+
def length=(val)
|
101
|
+
@netcdf_elmt.setLength(val)
|
102
|
+
end
|
103
|
+
|
104
|
+
#------------------------------------------------------------------------------------
|
105
|
+
#
|
106
|
+
#------------------------------------------------------------------------------------
|
107
|
+
|
108
|
+
def name=(name)
|
109
|
+
@netcdf_elmt.setName(name)
|
110
|
+
end
|
111
|
+
|
112
|
+
#------------------------------------------------------------------------------------
|
113
|
+
#
|
114
|
+
#------------------------------------------------------------------------------------
|
115
|
+
|
116
|
+
def shared=(bool)
|
117
|
+
@netcdf_elmt.setShared(bool)
|
118
|
+
end
|
119
|
+
|
120
|
+
#------------------------------------------------------------------------------------
|
121
|
+
#
|
122
|
+
#------------------------------------------------------------------------------------
|
123
|
+
|
124
|
+
def unlimited=(bool)
|
125
|
+
@netcdf_elmt.setUnlimited(bool)
|
126
|
+
end
|
127
|
+
|
128
|
+
#------------------------------------------------------------------------------------
|
129
|
+
#
|
130
|
+
#------------------------------------------------------------------------------------
|
131
|
+
|
132
|
+
def variable_length=(bool)
|
133
|
+
@netcdf_elmt.setVariableLength(bool)
|
134
|
+
end
|
135
|
+
|
136
|
+
#------------------------------------------------------------------------------------
|
137
|
+
#
|
138
|
+
#------------------------------------------------------------------------------------
|
139
|
+
|
140
|
+
def group=(group)
|
141
|
+
@netcdf_elmt.setGroup(group.netcdf_elmt)
|
142
|
+
end
|
143
|
+
|
144
|
+
end # DimensionWriter
|
145
|
+
|
146
|
+
end # NetCDF
|
data/lib/netcdf/file.rb
ADDED
@@ -0,0 +1,253 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
##########################################################################################
|
4
|
+
# Copyright © 2013 Rodrigo Botafogo. All Rights Reserved. Permission to use, copy, modify,
|
5
|
+
# and distribute this software and its documentation, without fee and without a signed
|
6
|
+
# licensing agreement, is hereby granted, provided that the above copyright notice, this
|
7
|
+
# paragraph and the following two paragraphs appear in all copies, modifications, and
|
8
|
+
# distributions.
|
9
|
+
#
|
10
|
+
# IN NO EVENT SHALL RODRIGO BOTAFOGO BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL,
|
11
|
+
# INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF
|
12
|
+
# THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF RODRIGO BOTAFOGO HAS BEEN ADVISED OF THE
|
13
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
14
|
+
#
|
15
|
+
# RODRIGO BOTAFOGO SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
16
|
+
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
|
17
|
+
# SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED HEREUNDER IS PROVIDED "AS IS".
|
18
|
+
# RODRIGO BOTAFOGO HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS,
|
19
|
+
# OR MODIFICATIONS.
|
20
|
+
##########################################################################################
|
21
|
+
|
22
|
+
require 'java'
|
23
|
+
|
24
|
+
#======================================================================================
|
25
|
+
#
|
26
|
+
#======================================================================================
|
27
|
+
|
28
|
+
class NetCDF
|
29
|
+
|
30
|
+
#=======================================================================================
|
31
|
+
# Parent File for the file hierarchy that includes File and FileWriter.
|
32
|
+
#=======================================================================================
|
33
|
+
|
34
|
+
class FileParent
|
35
|
+
|
36
|
+
attr_reader :home_dir
|
37
|
+
attr_reader :file_name
|
38
|
+
attr_reader :netcdf_elmt
|
39
|
+
attr_reader :outside_scope
|
40
|
+
attr_reader :root_group
|
41
|
+
|
42
|
+
#------------------------------------------------------------------------------------
|
43
|
+
# NetCDF File
|
44
|
+
#------------------------------------------------------------------------------------
|
45
|
+
|
46
|
+
def initialize(home_dir, name, outside_scope = nil)
|
47
|
+
@home_dir = home_dir
|
48
|
+
@file_name = "#{home_dir}/#{name}.nc"
|
49
|
+
@outside_scope = outside_scope
|
50
|
+
end
|
51
|
+
|
52
|
+
#------------------------------------------------------------------------------------
|
53
|
+
# Gets a list of all global attributes, i.e, all attributes in the root group
|
54
|
+
#------------------------------------------------------------------------------------
|
55
|
+
|
56
|
+
def global_attributes
|
57
|
+
@root_group.attributes
|
58
|
+
end
|
59
|
+
|
60
|
+
end # FileParent
|
61
|
+
|
62
|
+
#=======================================================================================
|
63
|
+
# Read-only scientific datasets that are accessible through the netCDF API. Immutable
|
64
|
+
# after setImmutable() is called. However, reading data is not thread-safe.
|
65
|
+
#=======================================================================================
|
66
|
+
|
67
|
+
class File < FileParent
|
68
|
+
include_package "ucar.nc2"
|
69
|
+
|
70
|
+
#------------------------------------------------------------------------------------
|
71
|
+
# Opens a file for reading
|
72
|
+
#------------------------------------------------------------------------------------
|
73
|
+
|
74
|
+
def open
|
75
|
+
@netcdf_elmt = NetcdfFile.open(@file_name)
|
76
|
+
@root_group = @netcdf_elmt.findGroup(nil)
|
77
|
+
end
|
78
|
+
|
79
|
+
#------------------------------------------------------------------------------------
|
80
|
+
# Find out if the file can be opened, but dont actually open it.
|
81
|
+
#------------------------------------------------------------------------------------
|
82
|
+
|
83
|
+
def can_open?
|
84
|
+
@netcdf_elmt.canOpen(@file_name)
|
85
|
+
end
|
86
|
+
|
87
|
+
#------------------------------------------------------------------------------------
|
88
|
+
# closes the file
|
89
|
+
#------------------------------------------------------------------------------------
|
90
|
+
|
91
|
+
def close
|
92
|
+
@netcdf_elmt.close()
|
93
|
+
end
|
94
|
+
|
95
|
+
#------------------------------------------------------------------------------------
|
96
|
+
# Completely empty the objects in the netcdf file.
|
97
|
+
#------------------------------------------------------------------------------------
|
98
|
+
|
99
|
+
def empty
|
100
|
+
@netcdf_elmt.empty()
|
101
|
+
end
|
102
|
+
|
103
|
+
#------------------------------------------------------------------------------------
|
104
|
+
# Find a Group, with the specified (full) name.
|
105
|
+
#------------------------------------------------------------------------------------
|
106
|
+
|
107
|
+
def find_group(name)
|
108
|
+
NetCDF::Group.new(@netcdf_elmt.findGroup(name))
|
109
|
+
end
|
110
|
+
|
111
|
+
#------------------------------------------------------------------------------------
|
112
|
+
# Find an attribute, with the specified (escaped full) name.
|
113
|
+
#------------------------------------------------------------------------------------
|
114
|
+
|
115
|
+
def find_attribute(name)
|
116
|
+
NetCDF::Attribute.new(@netcdf_elmt.findAttribute(name))
|
117
|
+
end
|
118
|
+
|
119
|
+
#------------------------------------------------------------------------------------
|
120
|
+
# Find an global attribute, with the specified (full) name.
|
121
|
+
#------------------------------------------------------------------------------------
|
122
|
+
|
123
|
+
def find_global_attribute(name, ignore_case = false)
|
124
|
+
if (ignore_case)
|
125
|
+
NetCDF::Attribute.new(@netcdf_elmt.findGlobalAttributeIgnoreCase(name))
|
126
|
+
else
|
127
|
+
NetCDF::Attribute.new(@netcdf_elmt.findGlobalAttribute(name))
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
#------------------------------------------------------------------------------------
|
132
|
+
# Finds a dimension by full name
|
133
|
+
#------------------------------------------------------------------------------------
|
134
|
+
|
135
|
+
def find_dimension(name)
|
136
|
+
NetCDF::Dimension.new(@netcdf_elmt.findDimension(name))
|
137
|
+
end
|
138
|
+
|
139
|
+
#------------------------------------------------------------------------------------
|
140
|
+
# Return the unlimited (record) dimension, or null if not exist. If there are
|
141
|
+
# multiple unlimited dimensions, it will return the first one.
|
142
|
+
# <tt>Returns:</tt> the unlimited Dimension, or null if none.
|
143
|
+
#------------------------------------------------------------------------------------
|
144
|
+
|
145
|
+
def find_unlimited_dimension
|
146
|
+
NetCDF::Dimension.new(@netcdf_elmt.getUnlimitedDimension())
|
147
|
+
end
|
148
|
+
|
149
|
+
# Don't know the difference between find and get methods on the original NetCDF API
|
150
|
+
alias :get_unlimited_dimension :find_unlimited_dimension
|
151
|
+
|
152
|
+
|
153
|
+
#------------------------------------------------------------------------------------
|
154
|
+
# Finds a variable by name
|
155
|
+
#------------------------------------------------------------------------------------
|
156
|
+
|
157
|
+
def find_variable(name)
|
158
|
+
NetCDF::Variable.new(@netcdf_elmt.findVariable(name))
|
159
|
+
end
|
160
|
+
|
161
|
+
|
162
|
+
|
163
|
+
|
164
|
+
#------------------------------------------------------------------------------------
|
165
|
+
# Outputs the data CDL to an output stream
|
166
|
+
# * TODO: allow writing to other output streams. Need to interface with java streams
|
167
|
+
# * <tt>strict</tt> if true, make it stricly CDL, otherwise, add a little extra info
|
168
|
+
#------------------------------------------------------------------------------------
|
169
|
+
|
170
|
+
def write_cdl(out = $stdout, strict = false)
|
171
|
+
@netcdf_elmt.writeCDL(out.to_outputstream, strict)
|
172
|
+
end
|
173
|
+
|
174
|
+
#------------------------------------------------------------------------------------
|
175
|
+
# Find all dimensions in the file
|
176
|
+
#------------------------------------------------------------------------------------
|
177
|
+
|
178
|
+
def detail_info
|
179
|
+
@netcdf_elmt.getDetailInfo()
|
180
|
+
end
|
181
|
+
|
182
|
+
#------------------------------------------------------------------------------------
|
183
|
+
# Get a human-readable description for this file type.
|
184
|
+
#------------------------------------------------------------------------------------
|
185
|
+
|
186
|
+
def file_type_description
|
187
|
+
@netcdf_elmt.getFileTypeDescription()
|
188
|
+
end
|
189
|
+
|
190
|
+
#------------------------------------------------------------------------------------
|
191
|
+
# Get the file type id for the underlying data source.
|
192
|
+
#------------------------------------------------------------------------------------
|
193
|
+
|
194
|
+
def file_type_id
|
195
|
+
@netcdf_elmt.getFileTypeId()
|
196
|
+
end
|
197
|
+
|
198
|
+
#------------------------------------------------------------------------------------
|
199
|
+
# Get the globally unique dataset identifier, if it exists.
|
200
|
+
#------------------------------------------------------------------------------------
|
201
|
+
|
202
|
+
def id
|
203
|
+
@netcdf_elmt.getId()
|
204
|
+
end
|
205
|
+
|
206
|
+
#------------------------------------------------------------------------------------
|
207
|
+
#
|
208
|
+
#------------------------------------------------------------------------------------
|
209
|
+
|
210
|
+
def last_modified
|
211
|
+
@netcdf_elmt.getLastModified()
|
212
|
+
end
|
213
|
+
|
214
|
+
#------------------------------------------------------------------------------------
|
215
|
+
# Get the NetcdfFile location.
|
216
|
+
#------------------------------------------------------------------------------------
|
217
|
+
|
218
|
+
def location
|
219
|
+
@netcdf_elmt.getLocation()
|
220
|
+
end
|
221
|
+
|
222
|
+
#------------------------------------------------------------------------------------
|
223
|
+
# Get the human-readable title, if it exists.
|
224
|
+
#------------------------------------------------------------------------------------
|
225
|
+
|
226
|
+
def title
|
227
|
+
@netcdf_elmt.getTitle()
|
228
|
+
end
|
229
|
+
|
230
|
+
#------------------------------------------------------------------------------------
|
231
|
+
# Get the human-readable title, if it exists.
|
232
|
+
#------------------------------------------------------------------------------------
|
233
|
+
|
234
|
+
def unlimited_dimension?
|
235
|
+
@netcdf_elmt.hasUnlimitedDimension()
|
236
|
+
end
|
237
|
+
|
238
|
+
|
239
|
+
|
240
|
+
|
241
|
+
#------------------------------------------------------------------------------------
|
242
|
+
# Find all dimensions in the file
|
243
|
+
#------------------------------------------------------------------------------------
|
244
|
+
|
245
|
+
def get_dimensions
|
246
|
+
@netcdf_elmt.getDimensions()
|
247
|
+
end
|
248
|
+
|
249
|
+
end # File
|
250
|
+
|
251
|
+
end # NetCDF
|
252
|
+
|
253
|
+
require_relative 'file_writer'
|