source: issm/trunk-jpl/src/m/io/structtonc.m@ 14630

Last change on this file since 14630 was 14630, checked in by Mathieu Morlighem, 12 years ago

CHG: added support for cells

File size: 2.7 KB
RevLine 
[14611]1function [var_id,counter] = structtonc(ncid,fieldname,field,depth,var_id,counter,step);
2%STRUCTTONC- fill nc file with structure fields
3%
4% WARNING: Do not use this function, this function is called
5% by netcdf(model);
6%
7
8%update counter
9counter = counter+1;
10
[14630]11%Check that field is not empty
12if isempty(field),
13 if(step==1), disp(['skipping ' fieldname ' (empty)...']); end
14 return;
15end
16
17%Double scalar
[14611]18if isa(field,'double') & numel(field)==1,
19 if step==1,
20 var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_DOUBLE',[]);
21 else
22 netcdf.putVar(ncid,var_id(counter),field);
23 end
[14630]24
25%Double vector
[14611]26elseif isa(field,'double') & size(field,2)==1,
27 if step==1,
28 dim_id = netcdf.defDim(ncid,[fieldname '_size1'],size(field,1));
29 var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_DOUBLE',dim_id);
30 else
31 netcdf.putVar(ncid,var_id(counter),field);
32 end
[14630]33
34%double matrix
[14611]35elseif isa(field,'double') & size(field,2)>1,
36 if step==1,
37 dim1_id = netcdf.defDim(ncid,[fieldname '_size1'],size(field,1));
38 dim2_id = netcdf.defDim(ncid,[fieldname '_size2'],size(field,2));
39 var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_DOUBLE',[dim2_id dim1_id]);
40 else
41 netcdf.putVar(ncid,var_id(counter),transpose(field));
42 end
[14630]43
44%string
45elseif isa(field,'char')
46 if step==1,
47 dim_id = netcdf.defDim(ncid,[fieldname '_size1'],numel(field));
48 var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_CHAR',dim_id);
49 else
50 netcdf.putVar(ncid,var_id(counter),transpose(field));
51 end
52
53%Boolean of size 1
[14611]54elseif isa(field,'logical') & numel(field)==1,
55 if step==1,
56 var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_BYTE',[]);
57 else
58 netcdf.putVar(ncid,var_id(counter),int8(field));
59 end
[14630]60
61%Structures
[14611]62elseif isa(field,'struct'),
63 subfields = fields(field);
[14613]64 sublength = numel(field);
65 if sublength==1,
66 for i=1:length(subfields),
67 [var_id,counter] = structtonc(ncid,[fieldname '.' subfields{i}],field.(subfields{i}),depth+1,var_id,counter,step);
68 end
69 else
70 for n=1:sublength,
71 for i=1:length(subfields),
72 [var_id,counter] = structtonc(ncid,[fieldname '.' subfields{i} '(' num2str(n) ')'],field(n).(subfields{i}),depth+1,var_id,counter,step);
73 end
74 end
[14611]75 end
[14630]76
77%Cell
78elseif isa(field,'cell'),
79 for i=1:length(field),
80 [var_id,counter] = structtonc(ncid,[fieldname '{' num2str(i) '}'],field{i},depth+1,var_id,counter,step);
81 end
82
83%Objects
[14611]84elseif isobject(field),
[14625]85 %First we need to keep track of the object class name
[14630]86 [var_id,counter] = structtonc(ncid,[fieldname '_class'],class(field),depth,var_id,counter,step);
[14611]87 subfields = fields(field);
88 for i=1:length(subfields),
89 [var_id,counter] = structtonc(ncid,[fieldname '.' subfields{i}],field.(subfields{i}),depth+1,var_id,counter,step);
90 end
91else
[14630]92 disp(['skipping ' fieldname ' (format not supported)...']);
[14611]93end
Note: See TracBrowser for help on using the repository browser.