-
Notifications
You must be signed in to change notification settings - Fork 0
/
nc_def_var.m
59 lines (50 loc) · 1.33 KB
/
nc_def_var.m
1
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
%==========================================================================
% nc_def_var --- nc_toolbox
% Define a variable in an opening NetCDF file
%
% input :
% fin --- input NetCDF file path and name
% dim_name --- dimension name
% xtype --- variable type: int, float, double, char
%
% output :
% varid --- variable ID
% Siqi Li, SMAST
% 2022-04-06
%
% Updates:
%
%==========================================================================
function varid = nc_def_var(fin, var_name, xtype, dim_names)
% Set xtype
switch lower(xtype)
case {'int', 'int32'}
xtype = 'NC_INT';
case {'float', 'single'}
xtype = 'NC_FLOAT';
case 'double'
xtype = 'NC_DOUBLE';
case 'char'
xtype = 'NC_CHAR';
otherwise
error('Unknown type. Choose from: int, float, double, char.')
end
% Set dimids
if ischar(dim_names)
dim_names = convertCharsToStrings(dim_names);
end
n = length(dim_names);
dimids = nan(n, 1);
for i = 1 : n
[dim_lengths(i), dimids(i)] = nc_get_dim(fin, dim_names{i});
end
if prod(dim_lengths)>1e8
disp(dim_names)
disp(dim_lengths)
error('Your variable size is too large. Check it.')
end
ncid =nc_open(fin, 1);
nc_redef(ncid);
varid = netcdf.defVar(ncid, var_name, xtype, dimids);
nc_enddef(ncid);
nc_close(ncid);