Index: issm/trunk-jpl/src/m/classes/SMBcomponents.m
===================================================================
--- issm/trunk-jpl/src/m/classes/SMBcomponents.m	(revision 23814)
+++ issm/trunk-jpl/src/m/classes/SMBcomponents.m	(revision 24240)
@@ -5,10 +5,11 @@
 
 classdef SMBcomponents
-	properties (SetAccess=public) 
+	properties (SetAccess=public)
 		isclimatology = 0;
 		accumulation = NaN;
 		runoff = NaN;
 		evaporation = NaN;
-		requested_outputs      = {};
+		steps_per_step = 1;
+		requested_outputs     = {};
 	end
 	methods
@@ -36,13 +37,13 @@
 			if isnan(self.accumulation)
 				self.accumulation=zeros(md.mesh.numberofvertices,1);
-				disp('      no smb.accumulation specified: values set as zero');
+				disp('	no smb.accumulation specified: values set as zero');
 			end
 			if isnan(self.evaporation)
 				self.evaporation=zeros(md.mesh.numberofvertices,1);
-				disp('      no smb.evaporation specified: values set as zero');
+				disp('	no smb.evaporation specified: values set as zero');
 			end
 			if isnan(self.runoff)
 				self.runoff=zeros(md.mesh.numberofvertices,1);
-				disp('      no smb.runoff specified: values set as zero');
+				disp('	no smb.runoff specified: values set as zero');
 			end
 
@@ -52,37 +53,31 @@
 			if ismember('MasstransportAnalysis',analyses),
 				md = checkfield(md,'fieldname','smb.accumulation','timeseries',1,'NaN',1,'Inf',1);
+				md = checkfield(md,'fieldname','smb.runoff','timeseries',1,'NaN',1,'Inf',1);
+				md = checkfield(md,'fieldname','smb.evaporation','timeseries',1,'NaN',1,'Inf',1);
 			end
 			if ismember('BalancethicknessAnalysis',analyses),
 				md = checkfield(md,'fieldname','smb.accumulation','size',[md.mesh.numberofvertices 1],'NaN',1,'Inf',1);
-			end
-			if ismember('MasstransportAnalysis',analyses),
-				md = checkfield(md,'fieldname','smb.runoff','timeseries',1,'NaN',1,'Inf',1);
-			end
-			if ismember('BalancethicknessAnalysis',analyses),
 				md = checkfield(md,'fieldname','smb.runoff','size',[md.mesh.numberofvertices 1],'NaN',1,'Inf',1);
-			end
-			if ismember('MasstransportAnalysis',analyses),
-				md = checkfield(md,'fieldname','smb.evaporation','timeseries',1,'NaN',1,'Inf',1);
-			end
-			if ismember('BalancethicknessAnalysis',analyses),
 				md = checkfield(md,'fieldname','smb.evaporation','size',[md.mesh.numberofvertices 1],'NaN',1,'Inf',1);
 			end
+			md = checkfield(md,'fieldname','smb.steps_per_step','>=',1,'numel',[1]);
 			md = checkfield(md,'fieldname','smb.requested_outputs','stringrow',1);
 			md = checkfield(md,'fieldname','smb.isclimatology','values',[0 1]);
 			if (self.isclimatology)
 				md = checkfield(md,'fieldname', 'smb.accumulation', 'size',[md.mesh.numberofvertices+1],...
-					'message',['accumulation must have md.mesh.numberofvertices+1 rows in order to force a climatology']);
+						'message',['accumulation must have md.mesh.numberofvertices+1 rows in order to force a climatology']);
 				md = checkfield(md,'fieldname', 'smb.runoff', 'size',[md.mesh.numberofvertices+1],...
-					'message',['runoff must have md.mesh.numberofvertices+1 rows in order to force a climatology']);
+						'message',['runoff must have md.mesh.numberofvertices+1 rows in order to force a climatology']);
 				md = checkfield(md,'fieldname', 'smb.evaporation', 'size',[md.mesh.numberofvertices+1],...
-					'message',['evaporation must have md.mesh.numberofvertices+1 rows in order to force a climatology']);
+						'message',['evaporation must have md.mesh.numberofvertices+1 rows in order to force a climatology']);
 			end
 		end % }}}
 		function disp(self) % {{{
-			disp(sprintf('   surface forcings parameters (SMB=accumulation-runoff-evaporation) :'));
+			disp(sprintf('	  surface forcings parameters (SMB=accumulation-runoff-evaporation) :'));
 			fielddisplay(self,'accumulation','accumulated snow [m/yr ice eq]');
 			fielddisplay(self,'runoff','amount of ice melt lost from the ice column [m/yr ice eq]');
 			fielddisplay(self,'evaporation','amount of ice lost to evaporative processes [m/yr ice eq]');
 			fielddisplay(self,'isclimatology','repeat all forcings when past last forcing time (default false)');
+			fielddisplay(self, 'steps_per_step', 'number of smb steps per time step');
 			fielddisplay(self,'requested_outputs','additional outputs requested');
 		end % }}}
@@ -95,11 +90,11 @@
 			WriteData(fid,prefix,'object',self,'class','smb','fieldname','runoff','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
 			WriteData(fid,prefix,'object',self,'class','smb','fieldname','evaporation','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
-			
+			WriteData(fid, prefix, 'object', self, 'fieldname', 'steps_per_step', 'format', 'Integer');
 			%process requested outputs
 			outputs = self.requested_outputs;
 			pos  = find(ismember(outputs,'default'));
 			if ~isempty(pos),
-				outputs(pos) = [];                         %remove 'default' from outputs
-				outputs      = [outputs defaultoutputs(self,md)]; %add defaults
+				outputs(pos) = [];			       %remove 'default' from outputs
+				outputs	 = [outputs defaultoutputs(self,md)]; %add defaults
 			end
 			WriteData(fid,prefix,'data',outputs,'name','md.smb.requested_outputs','format','StringArray');
