11992
|
1 %% Copyright (C) 2013 Alexander Barth |
|
2 %% |
|
3 %% This program is free software; you can redistribute it and/or modify |
|
4 %% it under the terms of the GNU General Public License as published by |
|
5 %% the Free Software Foundation; either version 2 of the License, or |
|
6 %% (at your option) any later version. |
|
7 %% |
|
8 %% This program is distributed in the hope that it will be useful, |
|
9 %% but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
10 %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
11 %% GNU General Public License for more details. |
|
12 %% |
|
13 %% You should have received a copy of the GNU General Public License |
|
14 %% along with this program; If not, see <http://www.gnu.org/licenses/>. |
|
15 |
11988
|
16 function test_netcdf_low_level_interface |
|
17 |
|
18 import_netcdf |
|
19 |
|
20 fname = [tempname '-octave-netcdf.nc']; |
|
21 |
|
22 ncid = netcdf.create(fname,'NC_CLOBBER'); |
|
23 assert(strcmp(netcdf.inqFormat(ncid),'FORMAT_CLASSIC')); |
|
24 |
|
25 n = 10; |
|
26 m = 5; |
|
27 |
|
28 dimid_lon = netcdf.defDim(ncid,'lon',m); |
|
29 dimid = netcdf.defDim(ncid,'time',n); |
|
30 |
|
31 varidd = netcdf.defVar(ncid,'double_var','double',[dimid_lon,dimid]); |
|
32 |
|
33 varid = netcdf.defVar(ncid,'byte_var','byte',[dimid]); |
|
34 |
|
35 varidf = netcdf.defVar(ncid,'float_var','float',[dimid]); |
|
36 |
|
37 varidi = netcdf.defVar(ncid,'int_var','int',[dimid]); |
|
38 |
|
39 varids = netcdf.defVar(ncid,'short_var','short',[dimid]); |
|
40 assert(varidd == netcdf.inqVarID(ncid,'double_var')) |
|
41 |
|
42 [numdims, numvars, numglobalatts, unlimdimID] = netcdf.inq(ncid); |
|
43 assert(numvars == 5) |
|
44 |
|
45 [varname,xtype,dimids,natts] = netcdf.inqVar(ncid,varidd); |
|
46 assert(strcmp(varname,'double_var')); |
|
47 |
|
48 [dimname,len] = netcdf.inqDim(ncid,dimid); |
|
49 assert(len == n); |
|
50 assert(strcmp(dimname,'time')); |
|
51 |
|
52 |
|
53 types = {'double','float','byte','short','int'}; |
|
54 |
|
55 |
|
56 for i=1:length(types) |
|
57 vid{i} = netcdf.defVar(ncid,[types{i} '_variable'],types{i},[dimid_lon,dimid]); |
|
58 end |
|
59 |
|
60 |
|
61 netcdf.endDef(ncid) |
|
62 |
|
63 |
|
64 z = randn(m,n); |
|
65 netcdf.putVar(ncid,varidd,z); |
|
66 |
|
67 varf = randn(n,1); |
|
68 netcdf.putVar(ncid,varidf,varf); |
|
69 |
|
70 vari = floor(randn(n,1)); |
|
71 netcdf.putVar(ncid,varidi,vari); |
|
72 |
|
73 netcdf.putVar(ncid,varids,[1:n]) |
|
74 |
|
75 z2 = netcdf.getVar(ncid,varidd); |
|
76 assert(all(all(abs(z2 - z) < 1e-5))) |
|
77 |
|
78 z2 = netcdf.getVar(ncid,varidd,[0 0]); |
|
79 assert(z2 == z(1,1)) |
|
80 |
|
81 z2 = netcdf.getVar(ncid,varidd,[2 2],[3 5]); |
|
82 assert(isequal(z2,z(3:5,3:7))) |
|
83 |
|
84 z2 = netcdf.getVar(ncid,varidd,[2 2],[3 4],[1 2]); |
|
85 assert(isequal(z2,z(3:5,3:2:9))) |
|
86 |
|
87 |
|
88 netcdf.putVar(ncid,varidd,[0 0],123.); |
|
89 z(1,1) = 123; |
|
90 z2 = netcdf.getVar(ncid,varidd); |
|
91 assert(isequal(z,z2)) |
|
92 |
|
93 netcdf.putVar(ncid,varidd,[2 2],[3 3],ones(3,3)); |
|
94 z(3:5,3:5) = 1; |
|
95 z2 = netcdf.getVar(ncid,varidd); |
|
96 assert(isequal(z,z2)) |
|
97 |
|
98 |
|
99 netcdf.putVar(ncid,varidd,[0 0],[3 5],[2 2],zeros(3,5)); |
|
100 z(1:2:5,1:2:9) = 0; |
|
101 z2 = netcdf.getVar(ncid,varidd); |
|
102 assert(isequal(z,z2)) |
|
103 |
|
104 |
|
105 z2 = netcdf.getVar(ncid,varidf); |
|
106 assert(all(z2 - varf < 1e-5)) |
|
107 |
|
108 |
|
109 vari2 = netcdf.getVar(ncid,varidi); |
|
110 assert(all(vari2 == vari)) |
|
111 |
|
112 |
|
113 netcdf.close(ncid); |
|
114 delete(fname); |