Index: /issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp	(revision 22474)
+++ /issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp	(revision 22475)
@@ -178,4 +178,5 @@
 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.isturbulentflux",SmbIsturbulentfluxEnum));
 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.InitDensityScaling",SmbInitDensityScalingEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.smb.ThermoDeltaTScaling",SmbThermoDeltaTScalingEnum));
 			break;
 		case SMBpddEnum:
Index: /issm/trunk-jpl/src/c/classes/Elements/Element.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22474)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22475)
@@ -2605,4 +2605,5 @@
 	bool isgraingrowth,isalbedo,isshortwave,isthermal,isaccumulation,ismelt,isdensification,isturbulentflux;
 	IssmDouble init_scaling=0.0;
+	IssmDouble thermo_scaling=1.0;
 
 	/*}}}*/
@@ -2666,4 +2667,5 @@
 	parameters->FindParam(&isturbulentflux,SmbIsturbulentfluxEnum);
 	parameters->FindParam(&init_scaling,SmbInitDensityScalingEnum);
+	parameters->FindParam(&thermo_scaling,SmbThermoDeltaTScalingEnum);
 
 	/*}}}*/
@@ -2849,5 +2851,5 @@
 
 		/*Thermal profile computation:*/
-		if(isthermal)thermo(&EC, &T, dz, d, swf, dlw, Ta, V, eAir, pAir, teValue, W[0], smb_dt, m, Vz, Tz,rho_ice,this->Sid());
+		if(isthermal)thermo(&EC, &T, dz, d, swf, dlw, Ta, V, eAir, pAir, teValue, W[0], smb_dt, m, Vz, Tz, thermo_scaling,rho_ice,this->Sid());
 
 		/*Change in thickness of top cell due to evaporation/condensation  assuming same density as top cell. 
Index: /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp	(revision 22474)
+++ /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp	(revision 22475)
@@ -345,9 +345,10 @@
 	//   3 : density and cloud amount (Greuell & Konzelmann, 1994)
 	//   4 : exponential time decay & wetness (Bougamont & Bamber, 2005)
+	//   5 : ingest MODIS mode, direct input from aValue parameter applied to surface ice only
 
 	//// Inputs
 	// aIdx      = albedo method to use
 
-	// Method 0
+	// Method 0 & 5
 	//  aValue   = direct input value for albedo
 
@@ -495,5 +496,8 @@
 
 	}
-	else _error_("albedo method switch should range from 0 to 4!");
+	else if(aIdx==5){
+		for(int i=0;i<m;i++)if(dIce - d[i]<Dtol) a[i] = aValue;
+	}
+	else _error_("albedo method switch should range from 0 to 5!");
 	
 	// Check for erroneous values
@@ -506,5 +510,5 @@
 
 }  /*}}}*/
-void thermo(IssmDouble* pEC, IssmDouble** pT, IssmDouble* dz, IssmDouble* d, IssmDouble* swf, IssmDouble dlwrf, IssmDouble Ta, IssmDouble V, IssmDouble eAir, IssmDouble pAir, IssmDouble teValue, IssmDouble Ws, IssmDouble dt0, int m, IssmDouble Vz, IssmDouble Tz, IssmDouble dIce, int sid) { /*{{{*/
+void thermo(IssmDouble* pEC, IssmDouble** pT, IssmDouble* dz, IssmDouble* d, IssmDouble* swf, IssmDouble dlwrf, IssmDouble Ta, IssmDouble V, IssmDouble eAir, IssmDouble pAir, IssmDouble teValue, IssmDouble Ws, IssmDouble dt0, int m, IssmDouble Vz, IssmDouble Tz, IssmDouble thermo_scaling, IssmDouble dIce, int sid) { /*{{{*/
 
 	/* ENGLACIAL THERMODYNAMICS*/
@@ -528,4 +532,5 @@
 	//  Vz: air temperature height above surface [m]
 	//  Tz: wind height above surface [m]
+	//  thermo_scaling: scaling factor to multiply the thermal diffusion timestep (delta t) 
 
 	// OUTPUTS
@@ -664,7 +669,7 @@
 
 	// determine minimum acceptable delta t (diffusion number > 1/2) [s]
-	// NS: 2.16.18 divided dt by 11 for stability (changed 3 to 33)
+	// NS: 2.16.18 divided dt by scaling factor, default set to 1/11 for stability
 	dt=1e12; 
-	for(int i=0;i<m;i++)dt = fmin(dt,CI * pow(dz[i],2) * d[i]  / (33 * K[i]));
+	for(int i=0;i<m;i++)dt = fmin(dt,CI * pow(dz[i],2) * d[i]  / (3 * K[i]) * thermo_scaling);
 
 	// smallest possible even integer of 60 min where diffusion number > 1/2
@@ -1171,5 +1176,5 @@
 
 				// adjust a, re, gdn & gsp
-				if(aIdx>0)a[0] = (aSnow * P + a[0] * mInit[0])/mass;
+				if(aIdx>0 | aIdx!=5 | (aIdx==5 & !(dIce - d[0]<Dtol)))a[0] = (aSnow * P + a[0] * mInit[0])/mass;
 				re[0] = (reNew * P + re[0] * mInit[0])/mass;
 				gdn[0] = (gdnNew * P + gdn[0] * mInit[0])/mass;
Index: /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.h
===================================================================
--- /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.h	(revision 22474)
+++ /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.h	(revision 22475)
@@ -27,5 +27,5 @@
 void albedo(IssmDouble** a,int aIdx, IssmDouble* re, IssmDouble* d, IssmDouble cldFrac, IssmDouble aIce, IssmDouble aSnow, IssmDouble aValue, IssmDouble* T, IssmDouble* W, IssmDouble P, IssmDouble EC, IssmDouble t0wet, IssmDouble t0dry, IssmDouble K, IssmDouble dt, IssmDouble dIce, int m, int sid);
 void shortwave(IssmDouble** pswf, int swIdx, int aIdx, IssmDouble dsw, IssmDouble as, IssmDouble* d, IssmDouble* dz, IssmDouble* re, IssmDouble dIce, int m, int sid);
-void thermo(IssmDouble* pEC, IssmDouble** T, IssmDouble* dz, IssmDouble* d, IssmDouble* swf, IssmDouble dlw, IssmDouble Ta, IssmDouble V, IssmDouble eAir, IssmDouble pAir, IssmDouble teValue, IssmDouble Ws, IssmDouble dt0, int m, IssmDouble Vz, IssmDouble Tz, IssmDouble dIce, int sid);
+void thermo(IssmDouble* pEC, IssmDouble** T, IssmDouble* dz, IssmDouble* d, IssmDouble* swf, IssmDouble dlw, IssmDouble Ta, IssmDouble V, IssmDouble eAir, IssmDouble pAir, IssmDouble teValue, IssmDouble Ws, IssmDouble dt0, int m, IssmDouble Vz, IssmDouble Tz, IssmDouble thermo_scaling, IssmDouble dIce, int sid);
 void accumulation(IssmDouble** pT, IssmDouble** pdz, IssmDouble** pd, IssmDouble** pW, IssmDouble** pa, IssmDouble** pre, IssmDouble** pgdn, IssmDouble** pgsp, int* pm, int aIdx,IssmDouble Ta, IssmDouble P, IssmDouble dzMin, IssmDouble aSnow, IssmDouble dIce, int sid); 
 void melt(IssmDouble* pM, IssmDouble* pR, IssmDouble* pmAdd, IssmDouble* pdz_add, IssmDouble** pT, IssmDouble** pd, IssmDouble** pdz, IssmDouble** pW, IssmDouble** pa, IssmDouble** pre, IssmDouble** pgdn, IssmDouble** pgsp, int* pn, IssmDouble dzMin, IssmDouble zMax, IssmDouble zMin, IssmDouble zTop, IssmDouble dIce, int sid);
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22474)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22475)
@@ -435,4 +435,5 @@
 	SMBgembEnum,
 	SmbInitDensityScalingEnum,
+	SmbThermoDeltaTScalingEnum,
 	SmbTaEnum,
 	SmbVEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22474)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22475)
@@ -437,4 +437,5 @@
 		case SMBgembEnum : return "SMBgemb";
 		case SmbInitDensityScalingEnum : return "SmbInitDensityScaling";
+		case SmbThermoDeltaTScalingEnum : return "SmbThermoDeltaTScaling";
 		case SmbTaEnum : return "SmbTa";
 		case SmbVEnum : return "SmbV";
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22474)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22475)
@@ -446,4 +446,5 @@
 	      else if (strcmp(name,"SMBgemb")==0) return SMBgembEnum;
 	      else if (strcmp(name,"SmbInitDensityScaling")==0) return SmbInitDensityScalingEnum;
+	      else if (strcmp(name,"SmbThermoDeltaTScaling")==0) return SmbThermoDeltaTScalingEnum;
 	      else if (strcmp(name,"SmbTa")==0) return SmbTaEnum;
 	      else if (strcmp(name,"SmbV")==0) return SmbVEnum;
@@ -505,9 +506,9 @@
 	      else if (strcmp(name,"SmbPrecipitationsLgm")==0) return SmbPrecipitationsLgmEnum;
 	      else if (strcmp(name,"SmbTemperaturesPresentday")==0) return SmbTemperaturesPresentdayEnum;
-	      else if (strcmp(name,"SmbTemperaturesLgm")==0) return SmbTemperaturesLgmEnum;
          else stage=5;
    }
    if(stage==5){
-	      if (strcmp(name,"SmbPrecipitation")==0) return SmbPrecipitationEnum;
+	      if (strcmp(name,"SmbTemperaturesLgm")==0) return SmbTemperaturesLgmEnum;
+	      else if (strcmp(name,"SmbPrecipitation")==0) return SmbPrecipitationEnum;
 	      else if (strcmp(name,"SmbPddfacSnow")==0) return SmbPddfacSnowEnum;
 	      else if (strcmp(name,"SmbPddfacIce")==0) return SmbPddfacIceEnum;
@@ -628,9 +629,9 @@
 	      else if (strcmp(name,"DeviatoricStresszz")==0) return DeviatoricStresszzEnum;
 	      else if (strcmp(name,"DeviatoricStresseffective")==0) return DeviatoricStresseffectiveEnum;
-	      else if (strcmp(name,"LambdaS")==0) return LambdaSEnum;
          else stage=6;
    }
    if(stage==6){
-	      if (strcmp(name,"StrainRate")==0) return StrainRateEnum;
+	      if (strcmp(name,"LambdaS")==0) return LambdaSEnum;
+	      else if (strcmp(name,"StrainRate")==0) return StrainRateEnum;
 	      else if (strcmp(name,"StrainRatexx")==0) return StrainRatexxEnum;
 	      else if (strcmp(name,"StrainRatexy")==0) return StrainRatexyEnum;
@@ -751,9 +752,9 @@
 	      else if (strcmp(name,"Outputdefinition92")==0) return Outputdefinition92Enum;
 	      else if (strcmp(name,"Outputdefinition93")==0) return Outputdefinition93Enum;
-	      else if (strcmp(name,"Outputdefinition94")==0) return Outputdefinition94Enum;
          else stage=7;
    }
    if(stage==7){
-	      if (strcmp(name,"Outputdefinition95")==0) return Outputdefinition95Enum;
+	      if (strcmp(name,"Outputdefinition94")==0) return Outputdefinition94Enum;
+	      else if (strcmp(name,"Outputdefinition95")==0) return Outputdefinition95Enum;
 	      else if (strcmp(name,"Outputdefinition96")==0) return Outputdefinition96Enum;
 	      else if (strcmp(name,"Outputdefinition97")==0) return Outputdefinition97Enum;
@@ -874,9 +875,9 @@
 	      else if (strcmp(name,"LoveShNmin")==0) return LoveShNminEnum;
 	      else if (strcmp(name,"LoveG0")==0) return LoveG0Enum;
-	      else if (strcmp(name,"LoveR0")==0) return LoveR0Enum;
          else stage=8;
    }
    if(stage==8){
-	      if (strcmp(name,"LoveMu0")==0) return LoveMu0Enum;
+	      if (strcmp(name,"LoveR0")==0) return LoveR0Enum;
+	      else if (strcmp(name,"LoveMu0")==0) return LoveMu0Enum;
 	      else if (strcmp(name,"LoveAllowLayerDeletion")==0) return LoveAllowLayerDeletionEnum;
 	      else if (strcmp(name,"LoveForcingType")==0) return LoveForcingTypeEnum;
@@ -997,9 +998,9 @@
 	      else if (strcmp(name,"PentaInput")==0) return PentaInputEnum;
 	      else if (strcmp(name,"Vertex")==0) return VertexEnum;
-	      else if (strcmp(name,"VertexPId")==0) return VertexPIdEnum;
          else stage=9;
    }
    if(stage==9){
-	      if (strcmp(name,"VertexSId")==0) return VertexSIdEnum;
+	      if (strcmp(name,"VertexPId")==0) return VertexPIdEnum;
+	      else if (strcmp(name,"VertexSId")==0) return VertexSIdEnum;
 	      else if (strcmp(name,"Option")==0) return OptionEnum;
 	      else if (strcmp(name,"GenericOption")==0) return GenericOptionEnum;
@@ -1120,9 +1121,9 @@
 	      else if (strcmp(name,"MINI")==0) return MINIEnum;
 	      else if (strcmp(name,"MINIcondensed")==0) return MINIcondensedEnum;
-	      else if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum;
          else stage=10;
    }
    if(stage==10){
-	      if (strcmp(name,"LATaylorHood")==0) return LATaylorHoodEnum;
+	      if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum;
+	      else if (strcmp(name,"LATaylorHood")==0) return LATaylorHoodEnum;
 	      else if (strcmp(name,"XTaylorHood")==0) return XTaylorHoodEnum;
 	      else if (strcmp(name,"OneLayerP4z")==0) return OneLayerP4zEnum;
Index: /issm/trunk-jpl/src/m/classes/SMBgemb.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/SMBgemb.m	(revision 22474)
+++ /issm/trunk-jpl/src/m/classes/SMBgemb.m	(revision 22475)
@@ -60,4 +60,6 @@
 					  % 3: density and cloud amount [Greuell & Konzelmann, 1994]
 					  % 4: exponential time decay & wetness [Bougamont & Bamber, 2005]
+					  % 5: ingest MODIS mode, direct input from aValue parameter applied to surface ice only
+
 		swIdx  = NaN; % apply all SW to top grid cell (0) or allow SW to penetrate surface (1) (default 1)
 
@@ -90,4 +92,7 @@
 		%densities:
 		InitDensityScaling= NaN; %initial scaling factor multiplying the density of ice, which describes the density of the snowpack.
+
+		%thermal:
+		ThermoDeltaTScaling= NaN; %scaling factor to multiply the thermal diffusion timestep (delta t)
 		
 		requested_outputs      = {};
@@ -120,5 +125,5 @@
 			self.pAir=project3d(md,'vector',self.pAir,'type','node');
 
-			if aIdx == 0 & ~isnan(self.aValue)
+			if (aIdx == 0 | aIdx == 5) & ~isnan(self.aValue)
 				self.aValue=project3d(md,'vector',self.aValue,'type','node');
 			end
@@ -150,4 +155,5 @@
 		self.dzMin = self.dzTop/2;
 		self.InitDensityScaling = 1.0;
+		self.ThermoDeltaTScaling = 1/11;
 		
 		self.zMax=250*ones(mesh.numberofelements,1);
@@ -206,5 +212,5 @@
 			md = checkfield(md,'fieldname','smb.teValue','timeseries',1,'NaN',1,'Inf',1,'>=',0,'<=',1);
 
-			md = checkfield(md,'fieldname','smb.aIdx','NaN',1,'Inf',1,'values',[0,1,2,3,4]);
+			md = checkfield(md,'fieldname','smb.aIdx','NaN',1,'Inf',1,'values',[0,1,2,3,4,5]);
 			md = checkfield(md,'fieldname','smb.swIdx','NaN',1,'Inf',1,'values',[0,1]);
 			md = checkfield(md,'fieldname','smb.denIdx','NaN',1,'Inf',1,'values',[1,2,3,4,5]);
@@ -216,4 +222,5 @@
 			md = checkfield(md,'fieldname','smb.outputFreq','NaN',1,'Inf',1,'>',0,'<',10*365); %10 years max 
 			md = checkfield(md,'fieldname','smb.InitDensityScaling','NaN',1,'Inf',1,'>=',0,'<=',1);
+			md = checkfield(md,'fieldname','smb.ThermoDeltaTScaling','NaN',1,'Inf',1,'>=',0,'<=',1);
 
 			switch self.aIdx,
@@ -269,11 +276,13 @@
 			fielddisplay(self,'zY','strech grid cells bellow top_z by a [top_dz * y ^ (cells bellow top_z)]');
 			fielddisplay(self,'InitDensityScaling',{'initial scaling factor multiplying the density of ice','which describes the density of the snowpack.'});
+			fielddisplay(self,'ThermoDeltaTScaling',{'scaling factor to multiply the thermal diffusion timestep (delta t)'});
 			fielddisplay(self,'outputFreq','output frequency in days (default is monthly, 30)');
 			fielddisplay(self,'aIdx',{'method for calculating albedo and subsurface absorption (default is 1)',...
-				               '0: direct input from aValue parameter',...
-									'1: effective grain radius [Gardner & Sharp, 2009]',...
-									'2: effective grain radius [Brun et al., 2009]',...
-									'3: density and cloud amount [Greuell & Konzelmann, 1994]',...
-									'4: exponential time decay & wetness [Bougamont & Bamber, 2005]'});
+				'0: direct input from aValue parameter',...
+				'1: effective grain radius [Gardner & Sharp, 2009]',...
+				'2: effective grain radius [Brun et al., 2009]',...
+				'3: density and cloud amount [Greuell & Konzelmann, 1994]',...
+				'4: exponential time decay & wetness [Bougamont & Bamber, 2005]',...
+				'5: ingest MODIS mode, direct input from aValue parameter applied to surface ice only'});
 
 			fielddisplay(self,'teValue','Outward longwave radiation thermal emissivity forcing at every element (default in code is 1)');
@@ -294,6 +303,6 @@
 			%additional albedo parameters: 
 			switch self.aIdx
-			case 0
-				fielddisplay(self,'aValue','Albedo forcing at every element.  Used only if aIdx == 0.');
+			case {0 5}
+				fielddisplay(self,'aValue','Albedo forcing at every element.  Used only if aIdx == {0,5}.');
 			case {1 2}
 				fielddisplay(self,'aSnow','new snow albedo (0.64 - 0.89)');
@@ -356,4 +365,5 @@
 			WriteData(fid,prefix,'object',self,'class','smb','fieldname','denIdx','format','Integer');
 			WriteData(fid,prefix,'object',self,'class','smb','fieldname','InitDensityScaling','format','Double');
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','ThermoDeltaTScaling','format','Double');
 			WriteData(fid,prefix,'object',self,'class','smb','fieldname','outputFreq','format','Double');
 			WriteData(fid,prefix,'object',self,'class','smb','fieldname','aSnow','format','Double');
Index: /issm/trunk-jpl/src/m/classes/SMBgemb.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/SMBgemb.py	(revision 22474)
+++ /issm/trunk-jpl/src/m/classes/SMBgemb.py	(revision 22475)
@@ -66,4 +66,6 @@
 					  # 3: density and cloud amount [Greuell & Konzelmann, 1994]
 					  # 4: exponential time decay & wetness [Bougamont & Bamber, 2005]
+					  # 5: ingest MODIS mode, direct input from aValue parameter applied to surface ice only
+
 		swIdx  = float('NaN')	# apply all SW to top grid cell (0) or allow SW to penetrate surface (1) (default 1)
 
@@ -96,4 +98,7 @@
 		#densities:
 		InitDensityScaling =  float('NaN')	#initial scaling factor multiplying the density of ice, which describes the density of the snowpack.
+
+		#thermo:
+		ThermoDeltaTScaling = float('NaN') #scaling factor to multiply the thermal diffusion timestep (delta t)
 		
 		requested_outputs      = []
@@ -138,4 +143,5 @@
 		string = "%s\n%s"%(string,fielddisplay(self,'zY','strech grid cells bellow top_z by a [top_dz * y ^ (cells bellow top_z)]'))
 		string = "%s\n%s"%(string,fielddisplay(self,'InitDensityScaling',['initial scaling factor multiplying the density of ice','which describes the density of the snowpack.']))
+		string = "%s\n%s"%(string,fielddisplay(self,'ThermoDeltaTScaling','scaling factor to multiply the thermal diffusion timestep (delta t)'))
 		string = "%s\n%s"%(string,fielddisplay(self,'outputFreq','output frequency in days (default is monthly, 30)'))
 		string = "%s\n%s"%(string,fielddisplay(self,'aIdx',['method for calculating albedo and subsurface absorption (default is 1)',
@@ -144,5 +150,6 @@
 						'2: effective grain radius [Brun et al., 2009]',
 						'3: density and cloud amount [Greuell & Konzelmann, 1994]',
-						'4: exponential time decay & wetness [Bougamont & Bamber, 2005]']))
+						'4: exponential time decay & wetness [Bougamont & Bamber, 2005]',
+						'5: ingest MODIS mode, direct input from aValue parameter applied to surface ice only']))
 
 		string = "%s\n%s"%(string,fielddisplay(self,'teValue','Outward longwave radiation thermal emissivity forcing at every element (default in code is 1)'))
@@ -164,6 +171,8 @@
 			string = "%s\n%s"%(string,fielddisplay(self,'aSnow','new snow albedo (0.64 - 0.89)'))
 			string = "%s\n%s"%(string,fielddisplay(self,'aIce','albedo of ice (0.27-0.58)'))
-		elif self.aIdx == 0:
-			string = "%s\n%s"%(string,fielddisplay(self,'aValue','Albedo forcing at every element.  Used only if aIdx == 0.'))
+		elif elf.aIdx == 0:
+			string = "%s\n%s"%(string,fielddisplay(self,'aValue','Albedo forcing at every element.  Used only if aIdx == {0,5}'))
+		elif elf.aIdx == 5:
+			string = "%s\n%s"%(string,fielddisplay(self,'aValue','Albedo forcing at every element.  Used only if aIdx == {0,5}'))
 		elif self.aIdx == 3:
 			string = "%s\n%s"%(string,fielddisplay(self,'cldFrac','average cloud amount'))
@@ -194,5 +203,5 @@
 		self.pAir = project3d(md,'vector',self.pAir,'type','node')
 
-		if aIdx == 0 and np.isnan(self.aValue):
+		if (aIdx == 0 or aIdx == 5) and np.isnan(self.aValue):
 			self.aValue=project3d(md,'vector',self.aValue,'type','node');
 		if np.isnan(self.teValue):
@@ -222,4 +231,5 @@
 		self.dzMin = self.dzTop/2
 		self.InitDensityScaling = 1.0
+		self.ThermoDeltaTScaling = 1/11.0
 		
 		self.zMax = 250*np.ones((mesh.numberofelements,))
@@ -278,5 +288,5 @@
 		md = checkfield(md,'fieldname','smb.teValue','timeseries',1,'NaN',1,'Inf',1,'>=',0,'<=',1);
 
-		md = checkfield(md,'fieldname','smb.aIdx','NaN',1,'Inf',1,'values',[0,1,2,3,4])
+		md = checkfield(md,'fieldname','smb.aIdx','NaN',1,'Inf',1,'values',[0,1,2,3,4,5])
 		md = checkfield(md,'fieldname','smb.swIdx','NaN',1,'Inf',1,'values',[0,1])
 		md = checkfield(md,'fieldname','smb.denIdx','NaN',1,'Inf',1,'values',[1,2,3,4,5])
@@ -288,4 +298,5 @@
 		md = checkfield(md,'fieldname','smb.outputFreq','NaN',1,'Inf',1,'>',0,'<',10*365) #10 years max 
 		md = checkfield(md,'fieldname','smb.InitDensityScaling','NaN',1,'Inf',1,'> = ',0,'< = ',1)
+		md = checkfield(md,'fieldname','smb.ThermoDeltaTScaling','NaN',1,'Inf',1,'> = ',0,'< = ',1)
 
 		if type(self.aIdx) == list or type(self.aIdx) == type(np.array([1,2])) and (self.aIdx == [1,2] or (1 in self.aIdx and 2 in self.aIdx)):
@@ -349,4 +360,5 @@
 		WriteData(fid,prefix,'object',self,'class','smb','fieldname','denIdx','format','Integer')
 		WriteData(fid,prefix,'object',self,'class','smb','fieldname','InitDensityScaling','format','Double')
+		WriteData(fid,prefix,'object',self,'class','smb','fieldname','ThermoDeltaTScaling','format','Double')
 		WriteData(fid,prefix,'object',self,'class','smb','fieldname','outputFreq','format','Double')
 		WriteData(fid,prefix,'object',self,'class','smb','fieldname','aSnow','format','Double')
