Index: /issm/trunk-jpl/src/m/classes/model/model.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/model/model.m	(revision 14610)
+++ /issm/trunk-jpl/src/m/classes/model/model.m	(revision 14611)
@@ -1139,5 +1139,5 @@
 		function memory(obj) % {{{
 			
-		disp(sprintf('\nMemory imprint: '));
+		disp(sprintf('\nMemory imprint:\n'));
 
 		fields=properties('model');
@@ -1148,5 +1148,5 @@
 			s=whos('field'); 
 			mem=mem+s.bytes/1e6;
-			disp(sprintf('%19s: %g Mb',fields{i},s.bytes/1e6));
+			disp(sprintf('%19s: %6.2f Mb',fields{i},s.bytes/1e6));
 		end
 		disp(sprintf('%19s--%10s','--------------','--------------'));
@@ -1166,65 +1166,17 @@
 		ncid=netcdf.create(filename,'CLOBBER');
 		netcdf.putAtt(ncid,netcdf.getConstant('NC_GLOBAL'),'Conventions','CF-1.4');
-		netcdf.putAtt(ncid,netcdf.getConstant('NC_GLOBAL'),'Title',['ISSM model' obj.miscellaneous.name]);
+		netcdf.putAtt(ncid,netcdf.getConstant('NC_GLOBAL'),'Title',['ISSM model (' obj.miscellaneous.name ')']);
 		netcdf.putAtt(ncid,netcdf.getConstant('NC_GLOBAL'),'Author',getenv('USER'));
 		netcdf.putAtt(ncid,netcdf.getConstant('NC_GLOBAL'),'Date',datestr(now));
 
-		%2. prepare some simple dimensions
+		%Preallocate variable id, needed to write variables in netcdf file
 		var_id=zeros(300,1);%preallocate
-
-		%2. First round: define variables (step=1), put variable (step=2)
-		fields1=properties('model');
 
 		for step=1:2,
 			counter=0;
-			for i=1:length(fields1),
-				fields2=fields(obj.(fields1{i}));
-				for j=1:length(fields2)
-					counter   = counter+1;
-					fieldname = [fields1{i} '.' fields2{j}];
-					field     = obj.(fields1{i}).(fields2{j});
-					if isa(field,'double') & numel(field)==1,
-						if step==1,
-							var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_DOUBLE',[]);
-						else
-							netcdf.putVar(ncid,var_id(counter),field);
-						end
-					elseif isa(field,'double') & size(field,2)==1,
-						if step==1,
-							dim_id          = netcdf.defDim(ncid,[fieldname '_size1'],size(field,1));
-							var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_DOUBLE',dim_id);
-						else
-							netcdf.putVar(ncid,var_id(counter),field);
-						end
-					elseif isa(field,'double') & size(field,2)>1,
-						if step==1,
-							dim1_id         = netcdf.defDim(ncid,[fieldname '_size1'],size(field,1));
-							dim2_id         = netcdf.defDim(ncid,[fieldname '_size2'],size(field,2));
-							var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_DOUBLE',[dim2_id dim1_id]);
-						else
-							netcdf.putVar(ncid,var_id(counter),transpose(field));
-						end
-					elseif isa(field,'char') & ~isempty(field),
-						if step==1,
-							dim_id          = netcdf.defDim(ncid,[fieldname '_size1'],numel(field));
-							var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_CHAR',dim_id);
-						else
-							netcdf.putVar(ncid,var_id(counter),transpose(field));
-						end
-					elseif isa(field,'logical') & numel(field)==1,
-						if step==1,
-							var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_BYTE',[]);
-						else
-							netcdf.putVar(ncid,var_id(counter),int8(field));
-						end
-					else
-						disp(['skipping ' fieldname '...']);
-					end
-				end
-
-			end
-
+			var_id=structtonc(ncid,'md',obj,0,var_id,counter,step);
 			if step==1, netcdf.endDef(ncid); end
 		end
+
 		if counter>300,
 			warning('preallocation of var_id need to be updated');
Index: /issm/trunk-jpl/src/m/io/structtonc.m
===================================================================
--- /issm/trunk-jpl/src/m/io/structtonc.m	(revision 14611)
+++ /issm/trunk-jpl/src/m/io/structtonc.m	(revision 14611)
@@ -0,0 +1,58 @@
+function [var_id,counter] = structtonc(ncid,fieldname,field,depth,var_id,counter,step);
+%STRUCTTONC- fill nc file with structure fields
+%
+%   WARNING: Do not use this function, this function is called
+%            by netcdf(model);
+%
+
+%update counter
+counter   = counter+1;
+
+%Datatype dependent switch
+if isa(field,'double') & numel(field)==1,
+	if step==1,
+		var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_DOUBLE',[]);
+	else
+		netcdf.putVar(ncid,var_id(counter),field);
+	end
+elseif isa(field,'double') & size(field,2)==1,
+	if step==1,
+		dim_id          = netcdf.defDim(ncid,[fieldname '_size1'],size(field,1));
+		var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_DOUBLE',dim_id);
+	else
+		netcdf.putVar(ncid,var_id(counter),field);
+	end
+elseif isa(field,'double') & size(field,2)>1,
+	if step==1,
+		dim1_id         = netcdf.defDim(ncid,[fieldname '_size1'],size(field,1));
+		dim2_id         = netcdf.defDim(ncid,[fieldname '_size2'],size(field,2));
+		var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_DOUBLE',[dim2_id dim1_id]);
+	else
+		netcdf.putVar(ncid,var_id(counter),transpose(field));
+	end
+elseif isa(field,'char') & ~isempty(field),
+	if step==1,
+		dim_id          = netcdf.defDim(ncid,[fieldname '_size1'],numel(field));
+		var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_CHAR',dim_id);
+	else
+		netcdf.putVar(ncid,var_id(counter),transpose(field));
+	end
+elseif isa(field,'logical') & numel(field)==1,
+	if step==1,
+		var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_BYTE',[]);
+	else
+		netcdf.putVar(ncid,var_id(counter),int8(field));
+	end
+elseif isa(field,'struct'),
+	subfields = fields(field);
+	for i=1:length(subfields),
+		[var_id,counter] = structtonc(ncid,[fieldname '.' subfields{i}],field.(subfields{i}),depth+1,var_id,counter,step);
+	end
+elseif isobject(field),
+	subfields = fields(field);
+	for i=1:length(subfields),
+		[var_id,counter] = structtonc(ncid,[fieldname '.' subfields{i}],field.(subfields{i}),depth+1,var_id,counter,step);
+	end
+else
+	disp(['skipping ' fieldname '...']);
+end
