source: issm/oecreview/Archive/14312-15392/ISSM-14610-14611.diff@ 15393

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

NEW: adding Archive/14312-15392 for oecreview

File size: 5.7 KB
RevLine 
[15393]1Index: ../trunk-jpl/src/m/classes/model/model.m
2===================================================================
3--- ../trunk-jpl/src/m/classes/model/model.m (revision 14610)
4+++ ../trunk-jpl/src/m/classes/model/model.m (revision 14611)
5@@ -1138,7 +1138,7 @@
6 end % }}}
7 function memory(obj) % {{{
8
9- disp(sprintf('\nMemory imprint: '));
10+ disp(sprintf('\nMemory imprint:\n'));
11
12 fields=properties('model');
13 mem=0;
14@@ -1147,7 +1147,7 @@
15 field=obj.(fields{i});
16 s=whos('field');
17 mem=mem+s.bytes/1e6;
18- disp(sprintf('%19s: %g Mb',fields{i},s.bytes/1e6));
19+ disp(sprintf('%19s: %6.2f Mb',fields{i},s.bytes/1e6));
20 end
21 disp(sprintf('%19s--%10s','--------------','--------------'));
22 disp(sprintf('%19s: %g Mb','Total',mem));
23@@ -1165,67 +1165,19 @@
24 %1. Create NetCDF file
25 ncid=netcdf.create(filename,'CLOBBER');
26 netcdf.putAtt(ncid,netcdf.getConstant('NC_GLOBAL'),'Conventions','CF-1.4');
27- netcdf.putAtt(ncid,netcdf.getConstant('NC_GLOBAL'),'Title',['ISSM model' obj.miscellaneous.name]);
28+ netcdf.putAtt(ncid,netcdf.getConstant('NC_GLOBAL'),'Title',['ISSM model (' obj.miscellaneous.name ')']);
29 netcdf.putAtt(ncid,netcdf.getConstant('NC_GLOBAL'),'Author',getenv('USER'));
30 netcdf.putAtt(ncid,netcdf.getConstant('NC_GLOBAL'),'Date',datestr(now));
31
32- %2. prepare some simple dimensions
33+ %Preallocate variable id, needed to write variables in netcdf file
34 var_id=zeros(300,1);%preallocate
35
36- %2. First round: define variables (step=1), put variable (step=2)
37- fields1=properties('model');
38-
39 for step=1:2,
40 counter=0;
41- for i=1:length(fields1),
42- fields2=fields(obj.(fields1{i}));
43- for j=1:length(fields2)
44- counter = counter+1;
45- fieldname = [fields1{i} '.' fields2{j}];
46- field = obj.(fields1{i}).(fields2{j});
47- if isa(field,'double') & numel(field)==1,
48- if step==1,
49- var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_DOUBLE',[]);
50- else
51- netcdf.putVar(ncid,var_id(counter),field);
52- end
53- elseif isa(field,'double') & size(field,2)==1,
54- if step==1,
55- dim_id = netcdf.defDim(ncid,[fieldname '_size1'],size(field,1));
56- var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_DOUBLE',dim_id);
57- else
58- netcdf.putVar(ncid,var_id(counter),field);
59- end
60- elseif isa(field,'double') & size(field,2)>1,
61- if step==1,
62- dim1_id = netcdf.defDim(ncid,[fieldname '_size1'],size(field,1));
63- dim2_id = netcdf.defDim(ncid,[fieldname '_size2'],size(field,2));
64- var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_DOUBLE',[dim2_id dim1_id]);
65- else
66- netcdf.putVar(ncid,var_id(counter),transpose(field));
67- end
68- elseif isa(field,'char') & ~isempty(field),
69- if step==1,
70- dim_id = netcdf.defDim(ncid,[fieldname '_size1'],numel(field));
71- var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_CHAR',dim_id);
72- else
73- netcdf.putVar(ncid,var_id(counter),transpose(field));
74- end
75- elseif isa(field,'logical') & numel(field)==1,
76- if step==1,
77- var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_BYTE',[]);
78- else
79- netcdf.putVar(ncid,var_id(counter),int8(field));
80- end
81- else
82- disp(['skipping ' fieldname '...']);
83- end
84- end
85-
86- end
87-
88+ var_id=structtonc(ncid,'md',obj,0,var_id,counter,step);
89 if step==1, netcdf.endDef(ncid); end
90 end
91+
92 if counter>300,
93 warning('preallocation of var_id need to be updated');
94 end
95Index: ../trunk-jpl/src/m/io/structtonc.m
96===================================================================
97--- ../trunk-jpl/src/m/io/structtonc.m (revision 0)
98+++ ../trunk-jpl/src/m/io/structtonc.m (revision 14611)
99@@ -0,0 +1,58 @@
100+function [var_id,counter] = structtonc(ncid,fieldname,field,depth,var_id,counter,step);
101+%STRUCTTONC- fill nc file with structure fields
102+%
103+% WARNING: Do not use this function, this function is called
104+% by netcdf(model);
105+%
106+
107+%update counter
108+counter = counter+1;
109+
110+%Datatype dependent switch
111+if isa(field,'double') & numel(field)==1,
112+ if step==1,
113+ var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_DOUBLE',[]);
114+ else
115+ netcdf.putVar(ncid,var_id(counter),field);
116+ end
117+elseif isa(field,'double') & size(field,2)==1,
118+ if step==1,
119+ dim_id = netcdf.defDim(ncid,[fieldname '_size1'],size(field,1));
120+ var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_DOUBLE',dim_id);
121+ else
122+ netcdf.putVar(ncid,var_id(counter),field);
123+ end
124+elseif isa(field,'double') & size(field,2)>1,
125+ if step==1,
126+ dim1_id = netcdf.defDim(ncid,[fieldname '_size1'],size(field,1));
127+ dim2_id = netcdf.defDim(ncid,[fieldname '_size2'],size(field,2));
128+ var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_DOUBLE',[dim2_id dim1_id]);
129+ else
130+ netcdf.putVar(ncid,var_id(counter),transpose(field));
131+ end
132+elseif isa(field,'char') & ~isempty(field),
133+ if step==1,
134+ dim_id = netcdf.defDim(ncid,[fieldname '_size1'],numel(field));
135+ var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_CHAR',dim_id);
136+ else
137+ netcdf.putVar(ncid,var_id(counter),transpose(field));
138+ end
139+elseif isa(field,'logical') & numel(field)==1,
140+ if step==1,
141+ var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_BYTE',[]);
142+ else
143+ netcdf.putVar(ncid,var_id(counter),int8(field));
144+ end
145+elseif isa(field,'struct'),
146+ subfields = fields(field);
147+ for i=1:length(subfields),
148+ [var_id,counter] = structtonc(ncid,[fieldname '.' subfields{i}],field.(subfields{i}),depth+1,var_id,counter,step);
149+ end
150+elseif isobject(field),
151+ subfields = fields(field);
152+ for i=1:length(subfields),
153+ [var_id,counter] = structtonc(ncid,[fieldname '.' subfields{i}],field.(subfields{i}),depth+1,var_id,counter,step);
154+ end
155+else
156+ disp(['skipping ' fieldname '...']);
157+end
Note: See TracBrowser for help on using the repository browser.