Index: /issm/trunk-jpl/src/m/contrib/defleurian/netCDF/export_netCDF.m
===================================================================
--- /issm/trunk-jpl/src/m/contrib/defleurian/netCDF/export_netCDF.m	(revision 26870)
+++ /issm/trunk-jpl/src/m/contrib/defleurian/netCDF/export_netCDF.m	(revision 26871)
@@ -137,4 +137,7 @@
 								end
 								Var = md.(groups{i}).(fields{j}){k}.(subfields{l});
+								if sum(numel(Var) == size(Var)) == 0,  %this is a 2D array or more (and not a vector with dimension 2 = 1)
+									Var = Var';
+								end
 								[DimSize,DimValue,varid]=CreateVar(ncid,Var,subgroupID,subfields{l},DimSize,DimValue);
 								if ~isempty(varid),
@@ -165,5 +168,4 @@
 
 			elseif isa(Var,'struct')  % structures need special treatment
-
 				if strcmp(groups{i}, 'results'),
 					klasstring='results.results';
@@ -182,5 +184,5 @@
 						if ~ismember(subfields{k}, {'errlog', 'outlog'})
 							StackedVar=restable();
-							for l=1:Listsize
+							for l=1:Listsize,
 								Var = md.(groups{i}).(fields{j})(l).(subfields{k});
 								if length(Var) == 0,
@@ -192,5 +194,6 @@
 							end
 							if verbose > 4,
-								disp(sprintf("=@@=creating var for %s.%s.%s",groups{i}, fields{j}, subfields{k}));
+								disp(sprintf("=$$=creating var for %s.%s.%s",groups{i}, fields{j}, subfields{k}));
+								disp(sprintf("last index on the list is %i",lastindex));
 							end
 							StackedVar=StackedVar.finalize(lastindex);
@@ -218,57 +221,4 @@
 					disp(sprintf("WARNING, md.%s.%s is not treated as it does not fall in one of the existing cases with class '%s'.",groups{i}, fields{j}, class(md.(groups{i}).(fields{j}))))
 				end
-			% elseif strcmp(fields{j},'bamg')
-			% 	klass=class(md.(groups{i}));
-			% 	% if strcmp(klass,'struct')
-			% 	% 	klass=groups{i};
-			% 	% end
-			% 	netcdf.putAtt(groupID,netcdf.getConstant('NC_GLOBAL'),'classtype',klass);
-			% 	if length(Var)>1
-			% 		listsize=length(Var);
-			% 		subgroupID=netcdf.defGrp(groupID,fields{j});
-			% 		klass=class(md.(groups{i}).(fields{j}));
-			% 		netcdf.putAtt(subgroupID,netcdf.getConstant('NC_GLOBAL'),'classtype',klass);
-			% 		for k=1:listsize
-			% 			if isfield(Var(k),'step')
-			% 				lname=[int2str(Var(k).step)];
-			% 			else
-			% 				lname=[class(Var(k)) int2str(k)];
-			% 			end
-
-			% 			listgroupID=netcdf.defGrp(subgroupID,lname);
-			% 			klass=class(md.(groups{i}).(fields{j}){k});
-			% 			netcdf.putAtt(listgroupID,netcdf.getConstant('NC_GLOBAL'),'classtype',klass);
-			% 			subfields=fieldnames(Var(k));
-			% 			for l=1:length(subfields)
-			% 				if ~strcmp(subfields{l},'outlog')
-			% 					if verbose > 4,
-			% 						disp(sprintf("=[]=creating var for %s.%s[%i].%s", groups{i}, fields{j}, k, subfields{l}))
-			% 					end
-			% 					Var=md.(groups{i}).(fields{j}){k}.(subfields{l});
-			% 					[DimSize,DimValue,varid]=CreateVar(ncid,Var,listgroupID,subfields{l},DimSize,DimValue);
-			% 					if ~isempty(varid),
-			% 						FillVar(Var,listgroupID,varid);
-			% 					end
-			% 				end
-			% 			end
-			% 		end
-				% else
-				% 	subgroupID=netcdf.defGrp(groupID,fields{j});
-				% 	klass=class(md.(groups{i}));
-				% 	netcdf.putAtt(subgroupID,netcdf.getConstant('NC_GLOBAL'),'classtype',klass);
-				% 	subfields=fieldnames(Var);
-				% 	for k=1:length(subfields)
-				% 		if ~strcmp(subfields{k},'outlog')
-				% 			if verbose > 4,
-				% 				disp(sprintf("====creating var for %s.%s.%s", groups{i}, fields{j}, subfields{k}))
-				% 			end
-				% 			Var=md.(groups{i}).(fields{j}).(subfields{k});
-				% 			[DimSize,DimValue,varid]=CreateVar(ncid,Var,subgroupID,subfields{k},DimSize,DimValue);
-				% 			if ~isempty(varid),
-				% 				FillVar(Var,subgroupID,varid);
-				% 			end
-				% 		end
-				% 	end
-				% end
 			elseif sum(strcmp(class(Var), issmclasses)) == 1,  % that is an issm class
 				if strcmp(class(Var), 'solution'),
Index: /issm/trunk-jpl/src/m/contrib/defleurian/netCDF/export_netCDF.py
===================================================================
--- /issm/trunk-jpl/src/m/contrib/defleurian/netCDF/export_netCDF.py	(revision 26870)
+++ /issm/trunk-jpl/src/m/contrib/defleurian/netCDF/export_netCDF.py	(revision 26871)
@@ -58,5 +58,5 @@
         #as much scalars as stpes (or less) so just one value per step
         else:
-            return np.asarray(self.data)
+            return np.squeeze(np.asarray(self.data))
 
 
@@ -158,5 +158,5 @@
                             subfields = dict.keys(md.__dict__[group].__dict__[field].__getitem__(0))
                         for subfield in subfields:
-                            if subfield not in['errlog', 'outlog']:
+                            if subfield not in ['errlog', 'outlog']:
                                 StackedVar = ResTable()
                                 #first loop over the field (result type) to find the index of the last subfield (variable)
@@ -241,5 +241,5 @@
                         subfields = dict.keys(md.__dict__[group].__dict__[field].__getitem__(0))
                     for subfield in subfields:
-                        if subfield not in['errlog', 'outlog']:
+                        if subfield not in ['errlog', 'outlog']:
                             StackedVar = ResTable()
                             for listindex in range(0, Listsize):
@@ -248,9 +248,10 @@
                                     lastindex = listindex + 1
                                 except AttributeError:
-                                    Var = md.__dict__[group].__dict__[field].__getitem__(listindex)[subfield]
+                                    Var = md.__dict__[group].__dict__[field].__dict__[subfield]
+                                    lastindex = listindex
                                 except KeyError:
                                     #Some fields only exist for the first step
                                     lastindex = listindex
-                                    continue
+                                    break
                                 Var = SqueezeVar(Var)
                                 StackedVar.update(Var)
@@ -308,4 +309,5 @@
         if val_type.startswith('<U'):
             val_type = 'stringarray'
+            print(var)
     except AttributeError:
         val_type = type(var)
@@ -332,5 +334,4 @@
         if field == 'name':  # it looks like netCDF does not like attributes that are called "name"
             field = 'varname'
-        #Group.__setattr__(str(field).swapcase(), str(var))
         Group.__setattr__(str(field), str(var))
         ncvar = None
@@ -338,9 +339,16 @@
     elif val_type == "stringarray":
         #if all strings are the same set it as an attribute
-        if all(var == var[0]):
+        try:
+            samestring = all(var == var[0])
+        except IndexError:
+            #Only one string
+            samestring = True
+        if samestring:
             if field == 'name':
                 field = 'varname'
-            #Group.__setattr__(str(field).swapcase(), str(var[0]))
-            Group.__setattr__(str(field), str(var[0]))
+            try:
+                Group.__setattr__(str(field), str(var[0]))
+            except IndexError:
+                Group.__setattr__(str(field), str(var))
             ncvar = None
         else:
@@ -360,6 +368,6 @@
             dimensions, DimDict = GetDim(NCData, val_shape, val_type, DimDict, val_dim)
             ncvar = Group.createVariable(str(field), nctype, dimensions=dimensions, zlib=True)
-    # treating bool tables and dict as string tables
-    elif val_type in [collections.OrderedDict, dict, 'bool']:
+    # treating  dict as string tables
+    elif val_type in [collections.OrderedDict, dict]:
         if val_shape in [(), (0,), 0]:
             ncvar = Group.createVariable(str(field), str, zlib=True)
@@ -367,6 +375,29 @@
             dimensions, DimDict = GetDim(NCData, val_shape, val_type, DimDict, val_dim)
             ncvar = Group.createVariable(str(field), str, dimensions=dimensions, zlib=True)
-    # Now dealing with numeric variables
-    elif val_type in [float, 'float64', np.float64, int, 'int64']:
+    # treating bool as integers
+    elif val_type == 'bool':
+        if val_shape in [(), (0,), 0]:
+            ncvar = Group.createVariable(str(field), int, zlib=True)
+        else:
+            dimensions, DimDict = GetDim(NCData, val_shape, val_type, DimDict, val_dim)
+            ncvar = Group.createVariable(str(field), int, dimensions=dimensions, zlib=True)
+    # Now dealing with doubles, we convert them to int if possible
+    elif val_type in [float, 'float64', np.float64]:
+        try:
+            #check if we are integer and under C long overflow also skip empty arrays
+            IsInt = np.sum(np.mod(var, 1)) == 0 and np.all(abs(var) < 2147483647) and len(var) > 0
+        except TypeError:
+            #check if we are integer and under C long overflow
+            IsInt = np.mod(var, 1) == 0 and abs(var) < 2147483647
+        if IsInt:
+            val_type = 'int64'
+        if val_shape in [(), (0,), 0] and not SupDim:
+            ncvar = Group.createVariable(str(field), TypeDict[val_type], zlib=True)
+        else:
+            dimensions, DimDict = GetDim(NCData, val_shape, val_type, DimDict, val_dim)
+            if SupDim:
+                dimensions = SupDim + dimensions
+            ncvar = Group.createVariable(str(field), TypeDict[val_type], dimensions=dimensions, zlib=True)
+    elif val_type in [int, 'int64']:
         if val_shape in [(), (0,), 0] and not SupDim:
             ncvar = Group.createVariable(str(field), TypeDict[val_type], zlib=True)
@@ -415,5 +446,5 @@
     elif val_type == 'bool':
         for elt in range(0, val_shape[0]):
-            ncvar[elt] = str(invar[elt])
+            ncvar[elt] = int(invar[elt])  #str(invar[elt])
     # treating dictionaries as tables of strings
     elif val_type in [collections.OrderedDict, dict]:
Index: /issm/trunk-jpl/src/m/contrib/defleurian/netCDF/restable.m
===================================================================
--- /issm/trunk-jpl/src/m/contrib/defleurian/netCDF/restable.m	(revision 26870)
+++ /issm/trunk-jpl/src/m/contrib/defleurian/netCDF/restable.m	(revision 26871)
@@ -21,27 +21,32 @@
 		function outdat = finalize(self, rows)
 			if length(self.data)>rows,
-				%we have more scalars than steps, so we have an array
-				maxsize=[];
-				for d=1:size(self.sizes,2)
-					maxsize=[maxsize,max(self.sizes(:,d))];
-				end
-				findim=[maxsize, rows];
-				%first check if all steps are the same size
-				SameSize = sum(self.sizes - self.sizes(1))==0;
-				if SameSize,
-					%same size for all steps, just reshape
-					outdat=reshape(self.data, findim);
+				if size(self.sizes, 1)==1,
+					%just one step, data don't need treatment
+					outdat=self.data;
 				else,
-					%different sizes at each steps, first create a table big enough for the biggest step
-					startpoint=1;
-					datadim=ndims(self.data);
-					outdat=NaN*ones(findim);
-					for r=1:rows
-						curlen = prod(self.sizes(r, :));
-						outdat(1:self.sizes(r,1), 1:self.sizes(r,2), r) = reshape(self.data(startpoint:startpoint+curlen-1),self.sizes(r,:));
-						startpoint = startpoint+curlen;
+					%we have more scalars than steps, so we have an array
+					maxsize=[];
+					for d=1:size(self.sizes,2)
+						maxsize=[maxsize,max(self.sizes(:,d))];
 					end
+					findim=[maxsize, rows];
+					%first check if all steps are the same size
+					SameSize = sum(self.sizes - self.sizes(1))==0;
+					if SameSize,
+						%same size for all steps, just reshape
+						outdat=reshape(self.data, findim);
+					else,
+						%different sizes at each steps, first create a table big enough for the biggest step
+						startpoint=1;
+						datadim=ndims(self.data);
+						outdat=NaN*ones(findim);
+						for r=1:rows
+							curlen = prod(self.sizes(r, :));
+							outdat(1:self.sizes(r,1), 1:self.sizes(r,2), r) = reshape(self.data(startpoint:startpoint+curlen-1),self.sizes(r,:));
+							startpoint = startpoint+curlen;
+						end
 
-				end
+					end
+				end,
 			else,
 				%as much scalars as steps (or less) so just one value per step
Index: /issm/trunk-jpl/src/m/io/loadvars.py
===================================================================
--- /issm/trunk-jpl/src/m/io/loadvars.py	(revision 26870)
+++ /issm/trunk-jpl/src/m/io/loadvars.py	(revision 26871)
@@ -132,6 +132,4 @@
                             Tree = nvdict['md'].__dict__[classtree[mod][0]].__dict__[classtree[mod][1]]
                         else:
-                            #nvdict['md'].__dict__[classtree[mod][0]].__dict__[classtree[mod][1]] = [getattr(classtype[mod][1], listtype)() for i in range(max(1, len(NCFile.dimensions['Time'])))]
-                            #Tree = nvdict['md'].__dict__[classtree[mod][0]].__dict__[classtree[mod][1]][:]
                             setattr(nvdict['md'].__dict__[classtree[mod][0]], classtree[mod][1], getattr(classtype[mod][1], 'solution')([]))
                             for i in range(max(1, stepnum)):
@@ -139,8 +137,10 @@
                             Tree = nvdict['md'].__dict__[classtree[mod][0]].__dict__[classtree[mod][1]][:]
                     #}}}
-                elif classtype[mod][0] == 'massfluxatgate.massfluxatgate':  #this is for output definitions {{{
+                #elif classtype[mod][0] == 'massfluxatgate.massfluxatgate':  #this is for output definitions {{{
+                elif mod.startswith('outputdefinition'):  #this is for output definitions {{{
                     defname = split('Output|[0-9]+', classtree[mod][1])[1] + 's'
                     defindex = int(findall('[0-9]+', classtree[mod][1])[0])
-                    nvdict['md'].__dict__[classtree[mod][0]].__dict__[defname].append(getattr(classtype[mod][1], 'massfluxatgate')())
+                    outdeftype = split(r'\.', classtype[mod][0])[0]
+                    nvdict['md'].__dict__[classtree[mod][0]].__dict__[defname].append(getattr(classtype[mod][1], outdeftype)())
                     Tree = nvdict['md'].__dict__[classtree[mod][0]].__dict__[defname][defindex - 1]
                 #}}}
@@ -212,10 +212,13 @@
                             else:
                                 if NewFormat:
-                                    print(varval.dimensions)
                                     incomplete = 'Time' not in varval.dimensions
                                     if incomplete:
-                                        chosendim = varval.dimensions[0]
-                                        timelist = np.arange(0, len(NCFile.dimensions[chosendim]))
-                                        print('WARNING, {} is not present on every times, we chose {}({}) as the dimension to write it with'.format(var, chosendim, len(NCFile.dimensions[chosendim])))
+                                        try:
+                                            chosendim = varval.dimensions[0]
+                                            timelist = np.arange(0, len(NCFile.dimensions[chosendim]))
+                                            print('WARNING, {} is not present on every times, we chose {}({}) as the dimension to write it with'.format(var, chosendim, len(NCFile.dimensions[chosendim])))
+                                        except IndexError:
+                                            #just one step, so no dimension, we just put it on the first solutionstep
+                                            timelist = [0]
                                     else:
                                         timelist = np.arange(0, len(NCFile.dimensions['Time']))
@@ -239,5 +242,5 @@
                         else:
                             if vardim == 0:  #that is a scalar
-                                if str(varval[0]) in['', '--', 'emptycell']:  #no value
+                                if str(varval[0]) in ['', '--', 'emptycell']:  #no value
                                     Tree.__dict__[str(var)] = []
                                 elif varval[0] == 'True':  #treatin bool
