Index: /issm/trunk-jpl/src/m/contrib/defleurian/netCDF/export_netCDF.m
===================================================================
--- /issm/trunk-jpl/src/m/contrib/defleurian/netCDF/export_netCDF.m	(revision 21646)
+++ /issm/trunk-jpl/src/m/contrib/defleurian/netCDF/export_netCDF.m	(revision 21647)
@@ -52,46 +52,12 @@
 		%In each group gather the fields of the class
 		groupfields=fields(md.(groups{i}));
-		%Special treatment for the results
-		if strcmp(groups(i),'results'),
-			for j=1:length(groupfields)%looping on the differents solutions
-				netcdf.putAtt(groupID,netcdf.getConstant('NC_GLOBAL'),'classtype','results');
-				subgroupID=netcdf.defGrp(groupID,groupfields{j});
-				netcdf.putAtt(subgroupID,netcdf.getConstant('NC_GLOBAL'),'classtype',groupfields{j});
-				%disp(sprintf('=====Field name in tree %s ',groupfields{j}));
-				if length(md.results.(groupfields{j}))>1,
-					%the solution have several timestep get last timesteps and output frequency
-					last_step = length(md.results.(groupfields{j}));
-					%grab first time step
-					subfields=fields(md.results.(groupfields{j})(1));
-					for k=1:length(subfields),
-						if ~strcmp(subfields(k),'errlog') && ~strcmp(subfields(k),'outlog') && ~strcmp(subfields(k),'SolutionType'),
-							%disp(sprintf('==========SubField name in tree %s ',subfields{k}));
-							Var=md.results.(groupfields{j})(1).(subfields{k});
-							[DimSize,DimValue]=DefCreateVar(ncid,Var,subgroupID,subfields{k},DimSize,DimValue,true,last_step,md,groupfields{j});
-			      end
-		      end
-				elseif length(md.results.(groupfields{j}))==1,
-					%only one timestep
-					subfields=fields(md.results.(groupfields{j}));
-					for k=1:length(subfields),
-						%disp(sprintf('==========SubField name in tree %s ',subfields{k}));
-						if ~strcmp(subfields(k),'errlog') && ~strcmp(subfields(k),'outlog') && ~strcmp(subfields(k),'SolutionType'),
-							Var=md.results.(groupfields{1})(1).(subfields{k});
-							[DimSize,DimValue]=DefCreateVar(ncid,Var,groupID,subfields{k},DimSize,DimValue,false);
-			      end
-		      end
-				else
-					print 'Result format not suported'
-		    end
-	    end
-	 else
-		 for j=1:length(groupfields),
-			 Var=md.(groups{i}).(groupfields{j});
-			 if isa(Var,'cell')
-				 Stdlist=false;
-				 if length(Var) == 0
-					 Stdlist=true;
-				 else
-					 for k=1:length(typelist)
+		for j=1:length(groupfields),
+			Var=md.(groups{i}).(groupfields{j});
+			if isa(Var,'cell')
+				Stdlist=false;
+				if length(Var) == 0
+					Stdlist=true;
+				else
+					for k=1:length(typelist)
 						if isa(Var{1},typelist{k})
 							Stdlist=true;
@@ -103,5 +69,5 @@
 				if(Stdlist)
 					disp(sprintf('=====Field name in tree %s ',groupfields{j}));
-					[DimSize,DimValue]=DefCreateVar(ncid,Var,groupID,groupfields{j},DimSize,DimValue,false);
+					[DimSize,DimValue]=DefCreateVar(ncid,Var,groupID,groupfields{j},DimSize,DimValue);
 				else
 					listsize=length(Var);
@@ -121,5 +87,5 @@
 						for m=1:length(subfields)
 							if ~strcmp(subfields{m},'outlog')
-								[DimSize,DimValue]=DefCreateVar(ncid,Var{l}.(subfields{m}),listgroupID,subfields{m},DimSize,DimValue,false);
+								[DimSize,DimValue]=DefCreateVar(ncid,Var{l}.(subfields{m}),listgroupID,subfields{m},DimSize,DimValue);
 							end
 						end
@@ -128,13 +94,12 @@
 			else
 				netcdf.putAtt(groupID,netcdf.getConstant('NC_GLOBAL'),'classtype',class(md.(groups{i})));
-				[DimSize,DimValue]=DefCreateVar(ncid,Var,groupID,groupfields{j},DimSize,DimValue,false);
-			end
-		 end
-	 end	
+				[DimSize,DimValue]=DefCreateVar(ncid,Var,groupID,groupfields{j},DimSize,DimValue);
+			end
+		end
  end
  netcdf.close(ncid);
 end
 
-function [DimSize,DimValue]=DefCreateVar(ncid,Var,groupID,field,DimSize,DimValue,istime,last,md,midfield)
+function [DimSize,DimValue]=DefCreateVar(ncid,Var,groupID,field,DimSize,DimValue,last,md,midfield)
 	varclass=class(Var);
 	varsize=size(Var);
@@ -150,22 +115,13 @@
 		netcdf.putAtt(groupID,netcdf.getConstant('NC_GLOBAL'),field,Var);
 	elseif isa(Var,'double'), %dealing with arrays
-		[dims,DimSize,DimValue]=GetDims(ncid,Var,groupID,field,DimSize,DimValue,istime);
+		[dims,DimSize,DimValue]=GetDims(ncid,Var,DimSize,DimValue);
  		varid = netcdf.defVar(groupID,field,'NC_DOUBLE',dims);
-		if istime,
-			VarTab=Var;
-			for i=2:last,
-				TimeVar=md.results.(midfield)(i).(field);
-				VarTab=[VarTab TimeVar];
-	    end
-			netcdf.putVar(groupID,varid,VarTab);
-		else
-			if length(Var)==0,
-				netcdf.putVar(groupID,varid,NaN);
-			else
-				netcdf.putVar(groupID,varid,Var);
-	    end
-	  end
+		if length(Var)==0,
+			netcdf.putVar(groupID,varid,NaN);
+		else
+			netcdf.putVar(groupID,varid,Var);
+		end
 	elseif isa(Var,'cell'),
-		[dims,DimSize,DimValue]=GetDims(ncid,Var,groupID,field,DimSize,DimValue,istime);
+		[dims,DimSize,DimValue]=GetDims(ncid,Var,DimSize,DimValue);
 		%dirty hack to be able to pass strings
 		varid = netcdf.defVar(groupID,field,'NC_CHAR',dims);
@@ -175,6 +131,6 @@
 			for i=1:length(Var),
 				if length(Var)>1,
-					endpoint=[min(length(Var{i}),40) 1];
-					startpoint=[0 1];
+					endpoint=[1,min(length(Var{i}),40)];
+					startpoint=[1 0];
 				else
 					endpoint=min(length(Var{i}),40);
@@ -182,5 +138,5 @@
 				end
 				if length(Var{i})>40,
-					netcdf.putVar(groupID,varid,startpoint,endpoint,Var{i}(1:40))
+					netcdf.putVar(groupID,varid,startpoint,extent,Var{i}(1:40))
 					disp(sprintf('some variable have been truncated'));
 				else
@@ -192,31 +148,38 @@
 		%Start by getting the structure fields and size
 		locfields=fields(Var);
-		[dims,DimSize,DimValue]=GetDims(ncid,Var,groupID,locfields,DimSize,DimValue,istime);
+		[dims,DimSize,DimValue]=GetDims(ncid,Var,DimSize,DimValue);
 		varid = netcdf.defVar(groupID,field,'NC_CHAR',dims);
 		if length(locfields)==0,
-			netcdf.putVar(groupID,varid,[0,0],[11,1],'emptystruct')
+			netcdf.putVar(groupID,varid,[0,0],[1,11],'emptystruct')
 		else
 			for i=1:length(locfields),
 				for j=1:2,
 					if j==1,
-						startpoint=[0,0,i-1];
 						CharVar=locfields{i};
+						if length(CharVar)==0
+							CharVar='emptystruct';
+						end
+						startpoint=[i-1,0,0];
 					else
-						startpoint=[0,1,i-1];
 						if isa(Var.(locfields{i}),'char'),
 							CharVar=Var.(locfields{i});
 						else
 							CharVar=num2str(Var.(locfields{i}));
-			      end
-		      end
-					endpoint=[min(length(CharVar),40),1,1];
+						end
+						if length(CharVar)==0
+							CharVar='emptystruct';
+						end
+						startpoint=[i-1,1,0];
+					end
+
+					extent=[1,1,min(length(CharVar),40)];
 					if length(CharVar)>40,
-						netcdf.putVar(groupID,varid,startpoint,endpoint,CharVar(1:40))
+						netcdf.putVar(groupID,varid,startpoint,extent,CharVar(1:40))
 						disp(sprintf('some variable have been truncated'));
 					else
-						netcdf.putVar(groupID,varid,startpoint,endpoint,CharVar)
-		      end
-		    end
-	    end
+						netcdf.putVar(groupID,varid,startpoint,extent,CharVar)
+					end
+				end
+			end
 		end
 	else
@@ -226,67 +189,46 @@
 end
 
-function [dims,DimSize,DimValue]=GetDims(ncid,Var,groupID,field,DimSize,DimValue,istime)
+function [dims,DimSize,DimValue]=GetDims(ncid,Var,DimSize,DimValue)
 	dims=[];
-	%specific treatment for structures
-	if isa(Var,'struct')
-		varsize=size(field); %we pass here the fields of the current structure
-		MatOrVec=varsize>1; %checking if we have a matrix (1 1) or vector (1 0)
-		for i=1:sum(MatOrVec), %loop on the number of (non 1) dimensions
-			currentdim=varsize(i);
-			dimexist=DimValue==currentdim;
-			if sum(dimexist)==0, %dimension is new to us, need to create it
-				dimname=strcat('Dimension',int2str(length(DimValue)+1));
-				dimindex=length(DimSize)+1;
-				DimSize(dimindex).index=netcdf.defDim(ncid,dimname,currentdim);
-				[DimSize(dimindex).name,DimSize(dimindex).value]=netcdf.inqDim(ncid,DimSize(dimindex).index);
-				dims(i)=DimSize(dimindex).index;
-				DimValue(dimindex)=currentdim;
+	if isa(Var,'cell'),
+		varsize=size(Var');
+	elseif isa(Var,'struct')
+		varsize=length(fields(Var));
+	else
+		varsize=size(Var);
+	end
+	dim=sum(varsize>1);
+	if dim>0
+		for i=1:dim
+			indsize=find(varsize(i)==DimValue);
+			if length(indsize)>0
+				dims=[dims DimSize(indsize).index];
 			else
-				dimindex=find(dimexist);
-				if DimSize(dimindex).value~=currentdim,
-					error('Indexation problem with the dimension structure')
-		    end
-	    end
-			dims(i)=DimSize(dimindex).index;
-	  end
-		dims=[DimSize(6).index dims];
-	else
-		%with a cell array need to grab the transposed size to work
-		if isa(Var,'cell'),
-			varsize=size(Var');
-		else
-			varsize=size(Var);
-    end
-		MatOrVec=varsize>1; %checking if we have a matrix (1 1) or vector (1 0)
-		for i=1:sum(MatOrVec), %loop on the number of (non 1) dimensions
-			currentdim=varsize(i);
-			dimexist=DimValue==currentdim;
-			if sum(dimexist)==0, %dimension is new to us, need to create it
-				dimname=strcat('Dimension',int2str(length(DimValue)+1));
-				dimindex=length(DimSize)+1;
-				DimSize(dimindex).index=netcdf.defDim(ncid,dimname,currentdim);
-				[DimSize(dimindex).name,DimSize(dimindex).value]=netcdf.inqDim(ncid,DimSize(dimindex).index);
-				dims(i)=DimSize(dimindex).index;
-				DimValue(dimindex)=currentdim;
+				indsize=length(DimSize)+1;
+				DimSize(indsize).index=netcdf.defDim(ncid,['Dimension' num2str(indsize)],varsize(i));
+				[DimSize(indsize).name,DimSize(indsize).value]=netcdf.inqDim(ncid,DimSize(indsize).index);
+				DimValue(indsize)=DimSize(indsize).value;
+				dims=[dims DimSize(indsize).index];
+			end
+		end
+	end
+	%if we have a cell variable we need to add a stringlength dimension 
+	if isa(Var,'struct'),
+		if DimValue(3)~=2
+			if DimValue(2)~=2
+				dims=[dims DimSize(1).index];
 			else
-				dimindex=find(dimexist);
-				DimValue
-				if DimSize(dimindex).value~=currentdim,
-					error('Indexation problem with the dimension structure')
-		    end
-	    end
-			dims(i)=DimSize(dimindex).index;
-    end
-  end
-	if istime,
-		dims=[dims DimSize(1).index];%adding the time dimension if necessary
-  end
-	%if we have a cell variable we need to add a stringlength dimension 
+				dims=[dims DimSize(2).index];
+			end
+		else
+			dims=[dims DimSize(3).index];
+		end
+	end
 	if isa(Var,'cell') || isa(Var,'struct'),
 		if DimValue(2)~=40
-			dims=[DimSize(1).index dims];
-		else
-			dims=[DimSize(2).index dims];
-		end
-  end
+			dims=[dims DimSize(1).index];
+		else
+			dims=[dims DimSize(2).index];
+		end
+	end
 end
