Index: /issm/trunk-jpl/src/m/classes/model/model.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/model/model.m	(revision 14608)
+++ /issm/trunk-jpl/src/m/classes/model/model.m	(revision 14609)
@@ -1169,34 +1169,67 @@
 		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
+		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
+
+			if step==1, netcdf.endDef(ncid); end
+		end
+		if counter>300,
+			warning('preallocation of var_id need to be updated');
+		end
+
 		netcdf.close(ncid)
-
-		%2. First round: define dimensions
-		fields1=properties('model');
-		for i=1:length(fields1),
-			subfields=fields(obj.(fields1{i}));
-			for j=1:length(subfields)
-				fieldname = [fields1{i} '.' subfields{j}];
-				field = obj.(fields1{i}).(subfields{j});
-				fieldname
-				if isa(field,'double') & numel(field)==1,
-					nccreate(filename,fieldname);
-					ncwrite( filename,fieldname,field);
-				elseif isa(field,'double') & size(field,2)==1,
-					nccreate(filename,fieldname,'Dimensions',{[fieldname '_length'] size(field,1)});
-					ncwrite(filename ,fieldname,field);
-				elseif isa(field,'double') & size(field,2)>1,
-					nccreate(filename,fieldname,'Dimensions',{[fieldname '_size2'] size(field,2) [fieldname '_size1'] size(field,1)});
-					ncwrite(filename ,fieldname,transpose(field));
-				elseif isa(field,'char') & ~isempty(field),
-					nccreate(filename,fieldname,'Dimensions',{[fieldname '_length'] numel(field)},'DataType','char');
-					ncwrite( filename,fieldname,field);
-				elseif isa(field,'logical') & numel(field)==1,
-					nccreate(filename,fieldname,'DataType','int8');
-					ncwrite( filename,fieldname,int8(field));
-				else
-					disp(['skipping ' fieldname '...']);
-				end
-			end
-		end
 		end % }}}
 		function xylim(obj) % {{{
