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

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

NEW: Added object name

File size: 2.4 KB
Line 
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
11%Datatype dependent switch
12if isa(field,'double') & numel(field)==1,
13 if step==1,
14 var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_DOUBLE',[]);
15 else
16 netcdf.putVar(ncid,var_id(counter),field);
17 end
18elseif isa(field,'double') & size(field,2)==1,
19 if step==1,
20 dim_id = netcdf.defDim(ncid,[fieldname '_size1'],size(field,1));
21 var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_DOUBLE',dim_id);
22 else
23 netcdf.putVar(ncid,var_id(counter),field);
24 end
25elseif isa(field,'double') & size(field,2)>1,
26 if step==1,
27 dim1_id = netcdf.defDim(ncid,[fieldname '_size1'],size(field,1));
28 dim2_id = netcdf.defDim(ncid,[fieldname '_size2'],size(field,2));
29 var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_DOUBLE',[dim2_id dim1_id]);
30 else
31 netcdf.putVar(ncid,var_id(counter),transpose(field));
32 end
33elseif isa(field,'char') & ~isempty(field),
34 if step==1,
35 dim_id = netcdf.defDim(ncid,[fieldname '_size1'],numel(field));
36 var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_CHAR',dim_id);
37 else
38 netcdf.putVar(ncid,var_id(counter),transpose(field));
39 end
40elseif isa(field,'logical') & numel(field)==1,
41 if step==1,
42 var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_BYTE',[]);
43 else
44 netcdf.putVar(ncid,var_id(counter),int8(field));
45 end
46elseif isa(field,'struct'),
47 subfields = fields(field);
48 sublength = numel(field);
49 if sublength==1,
50 for i=1:length(subfields),
51 [var_id,counter] = structtonc(ncid,[fieldname '.' subfields{i}],field.(subfields{i}),depth+1,var_id,counter,step);
52 end
53 else
54 for n=1:sublength,
55 for i=1:length(subfields),
56 [var_id,counter] = structtonc(ncid,[fieldname '.' subfields{i} '(' num2str(n) ')'],field(n).(subfields{i}),depth+1,var_id,counter,step);
57 end
58 end
59 end
60elseif isobject(field),
61 %First we need to keep track of the object class name
62 [var_id,counter] = structtonc(ncid,[fieldname '.' subfields{i} '_class'],class(field(n).(subfields{i})),depth,var_id,counter,step);
63 subfields = fields(field);
64 for i=1:length(subfields),
65 [var_id,counter] = structtonc(ncid,[fieldname '.' subfields{i}],field.(subfields{i}),depth+1,var_id,counter,step);
66 end
67else
68 disp(['skipping ' fieldname '...']);
69end
Note: See TracBrowser for help on using the repository browser.