Index: /issm/trunk-jpl/m4/analyses.m4
===================================================================
--- /issm/trunk-jpl/m4/analyses.m4	(revision 19527)
+++ /issm/trunk-jpl/m4/analyses.m4	(revision 19528)
@@ -10,4 +10,30 @@
 [
 
+dnl with-Smb{{{
+
+AC_ARG_WITH([Smb],
+
+	AS_HELP_STRING([--with-Smb = YES], [compile with Smb capabilities (default is yes)]),
+
+	[SMB=$withval],[SMB=yes])
+
+AC_MSG_CHECKING(for Smb capability compilation)
+
+
+HAVE_SMB=no 
+
+if test "x$SMB" = "xyes"; then
+
+	HAVE_SMB=yes
+
+	AC_DEFINE([_HAVE_SMB_],[1],[with Smb capability])
+
+fi
+
+AM_CONDITIONAL([SMB], [test x$HAVE_SMB = xyes])
+
+AC_MSG_RESULT($HAVE_SMB)
+
+dnl }}}
 dnl with-AdjointBalancethickness{{{
 
Index: /issm/trunk-jpl/src/c/Makefile.am
===================================================================
--- /issm/trunk-jpl/src/c/Makefile.am	(revision 19527)
+++ /issm/trunk-jpl/src/c/Makefile.am	(revision 19528)
@@ -403,4 +403,8 @@
 issm_sources += ./analyses/MasstransportAnalysis.cpp
 endif
+if SMB
+issm_sources += ./analyses/SmbAnalysis.cpp
+endif
+
 if FREESURFACEBASE
 issm_sources += ./analyses/FreeSurfaceBaseAnalysis.cpp
Index: /issm/trunk-jpl/src/c/analyses/EnumToAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/EnumToAnalysis.cpp	(revision 19527)
+++ /issm/trunk-jpl/src/c/analyses/EnumToAnalysis.cpp	(revision 19528)
@@ -14,4 +14,7 @@
 
 	switch(analysis_enum){
+		#ifdef _HAVE_SMB_
+		case SmbAnalysisEnum : return new SmbAnalysis();
+		#endif
 		#ifdef _HAVE_ADJOINTBALANCETHICKNESS_
 		case AdjointBalancethicknessAnalysisEnum : return new AdjointBalancethicknessAnalysis();
Index: /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 19527)
+++ /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 19528)
@@ -118,7 +118,6 @@
 void MasstransportAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
 
-	int    stabilization,finiteelement,smb_model;
+	int    stabilization,finiteelement;
 	bool   dakota_analysis;
-	bool   isdelta18o,ismungsm,isd18opd;
 	bool   isgroundingline;
 	bool   islevelset;
@@ -127,5 +126,4 @@
 	iomodel->Constant(&stabilization,MasstransportStabilizationEnum);
 	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
-	iomodel->Constant(&smb_model,SmbEnum);
 	iomodel->Constant(&isgroundingline,TransientIsgroundinglineEnum);
 	iomodel->Constant(&islevelset,TransientIslevelsetEnum);
@@ -173,60 +171,5 @@
 	}
 
-	switch(smb_model){
-		case SMBforcingEnum:
-			iomodel->FetchDataToInput(elements,SmbMassBalanceEnum,0.);
-			break;
-		case SMBpddEnum:
-			iomodel->Constant(&isdelta18o,SmbIsdelta18oEnum);
-			iomodel->Constant(&ismungsm,SmbIsmungsmEnum);
-			iomodel->FetchDataToInput(elements,ThermalSpctemperatureEnum);
-			iomodel->FetchDataToInput(elements,SmbS0pEnum);
-			iomodel->FetchDataToInput(elements,SmbS0tEnum);
-			if(isdelta18o || ismungsm){
-				iomodel->FetchDataToInput(elements,SmbTemperaturesLgmEnum);
-				iomodel->FetchDataToInput(elements,SmbTemperaturesPresentdayEnum);
-				iomodel->FetchDataToInput(elements,SmbPrecipitationsPresentdayEnum);
-				iomodel->FetchDataToInput(elements,SmbPrecipitationsLgmEnum);
-			}
-			else{
-				iomodel->FetchDataToInput(elements,SmbPrecipitationEnum);
-				iomodel->FetchDataToInput(elements,SmbMonthlytemperaturesEnum);
-			}
-			break;
-		case SMBd18opddEnum:
-			iomodel->Constant(&ismungsm,SmbIsmungsmEnum);
-			iomodel->Constant(&isd18opd,SmbIsd18opdEnum);
-			iomodel->FetchDataToInput(elements,ThermalSpctemperatureEnum);
-			iomodel->FetchDataToInput(elements,SmbS0pEnum);
-			iomodel->FetchDataToInput(elements,SmbS0tEnum);
-			if (isd18opd){
-			        iomodel->FetchDataToInput(elements,SmbTemperaturesPresentdayEnum);
-			        iomodel->FetchDataToInput(elements,SmbPrecipitationsPresentdayEnum);
-			}
-
-			break;
-		case SMBgradientsEnum:
-			iomodel->FetchDataToInput(elements,SmbHrefEnum);
-			iomodel->FetchDataToInput(elements,SmbSmbrefEnum);
-			iomodel->FetchDataToInput(elements,SmbBPosEnum);
-			iomodel->FetchDataToInput(elements,SmbBNegEnum);
-			break;
-		case SMBhenningEnum:
-			iomodel->FetchDataToInput(elements,SmbSmbrefEnum,0.);
-			break;
-		case SMBcomponentsEnum:
-			iomodel->FetchDataToInput(elements,SmbAccumulationEnum,0.);
-			iomodel->FetchDataToInput(elements,SmbEvaporationEnum,0.);
-			iomodel->FetchDataToInput(elements,SmbRunoffEnum,0.);
-			break;
-		case SMBmeltcomponentsEnum:
-			iomodel->FetchDataToInput(elements,SmbAccumulationEnum,0.);
-			iomodel->FetchDataToInput(elements,SmbEvaporationEnum,0.);
-			iomodel->FetchDataToInput(elements,SmbMeltEnum,0.);
-			iomodel->FetchDataToInput(elements,SmbRefreezeEnum,0.);
-			break;
-		default:
-			_error_("Surface mass balance model "<<EnumToStringx(smb_model)<<" not supported yet");
-	}
+	
 
 }/*}}}*/
@@ -248,9 +191,5 @@
 	iomodel->DeleteData(&requestedoutputs,numoutputs,MasstransportRequestedOutputsEnum);
 	
-	iomodel->FetchData(&requestedoutputs,&numoutputs,SmbRequestedOutputsEnum);
-	parameters->AddObject(new IntParam(SmbNumRequestedOutputsEnum,numoutputs));
-	if(numoutputs)parameters->AddObject(new StringArrayParam(SmbRequestedOutputsEnum,requestedoutputs,numoutputs));
-	iomodel->DeleteData(&requestedoutputs,numoutputs,SmbRequestedOutputsEnum);
-
+	
 
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp	(revision 19528)
+++ /issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp	(revision 19528)
@@ -0,0 +1,271 @@
+#include "./SmbAnalysis.h"
+#include "../toolkits/toolkits.h"
+#include "../classes/classes.h"
+#include "../shared/shared.h"
+#include "../modules/modules.h"
+
+/*Model processing*/
+void SmbAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/
+	/*No constraints*/
+}/*}}}*/
+void SmbAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
+	/*No loads*/
+}/*}}}*/
+void SmbAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
+	::CreateNodes(nodes,iomodel,SmbAnalysisEnum,P1Enum);
+}/*}}}*/
+int  SmbAnalysis::DofsPerNode(int** doflist,int domaintype,int approximation){/*{{{*/
+	return 1;
+}/*}}}*/
+void SmbAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+	
+	int    smb_model;
+	bool   isdelta18o,ismungsm,isd18opd;
+	
+	/*Figure out smb model: */
+	iomodel->Constant(&smb_model,SmbEnum);
+
+	/*Update elements: */
+	int counter=0;
+	for(int i=0;i<iomodel->numberofelements;i++){
+		if(iomodel->my_elements[i]){
+			Element* element=(Element*)elements->GetObjectByOffset(counter);
+			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
+			counter++;
+		}
+	}
+	
+	switch(smb_model){
+		case SMBforcingEnum:
+			iomodel->FetchDataToInput(elements,SmbMassBalanceEnum,0.);
+			break;
+		case SMBpddEnum:
+			iomodel->Constant(&isdelta18o,SmbIsdelta18oEnum);
+			iomodel->Constant(&ismungsm,SmbIsmungsmEnum);
+			iomodel->FetchDataToInput(elements,ThermalSpctemperatureEnum);
+			iomodel->FetchDataToInput(elements,SmbS0pEnum);
+			iomodel->FetchDataToInput(elements,SmbS0tEnum);
+			if(isdelta18o || ismungsm){
+				iomodel->FetchDataToInput(elements,SmbTemperaturesLgmEnum);
+				iomodel->FetchDataToInput(elements,SmbTemperaturesPresentdayEnum);
+				iomodel->FetchDataToInput(elements,SmbPrecipitationsPresentdayEnum);
+				iomodel->FetchDataToInput(elements,SmbPrecipitationsLgmEnum);
+			}
+			else{
+				iomodel->FetchDataToInput(elements,SmbPrecipitationEnum);
+				iomodel->FetchDataToInput(elements,SmbMonthlytemperaturesEnum);
+			}
+			break;
+		case SMBd18opddEnum:
+			iomodel->Constant(&ismungsm,SmbIsmungsmEnum);
+			iomodel->Constant(&isd18opd,SmbIsd18opdEnum);
+			iomodel->FetchDataToInput(elements,ThermalSpctemperatureEnum);
+			iomodel->FetchDataToInput(elements,SmbS0pEnum);
+			iomodel->FetchDataToInput(elements,SmbS0tEnum);
+			if (isd18opd){
+			        iomodel->FetchDataToInput(elements,SmbTemperaturesPresentdayEnum);
+			        iomodel->FetchDataToInput(elements,SmbPrecipitationsPresentdayEnum);
+			}
+
+			break;
+		case SMBgradientsEnum:
+			iomodel->FetchDataToInput(elements,SmbHrefEnum);
+			iomodel->FetchDataToInput(elements,SmbSmbrefEnum);
+			iomodel->FetchDataToInput(elements,SmbBPosEnum);
+			iomodel->FetchDataToInput(elements,SmbBNegEnum);
+			break;
+		case SMBhenningEnum:
+			iomodel->FetchDataToInput(elements,SmbSmbrefEnum,0.);
+			break;
+		case SMBcomponentsEnum:
+			iomodel->FetchDataToInput(elements,SmbAccumulationEnum,0.);
+			iomodel->FetchDataToInput(elements,SmbEvaporationEnum,0.);
+			iomodel->FetchDataToInput(elements,SmbRunoffEnum,0.);
+			break;
+		case SMBmeltcomponentsEnum:
+			iomodel->FetchDataToInput(elements,SmbAccumulationEnum,0.);
+			iomodel->FetchDataToInput(elements,SmbEvaporationEnum,0.);
+			iomodel->FetchDataToInput(elements,SmbMeltEnum,0.);
+			iomodel->FetchDataToInput(elements,SmbRefreezeEnum,0.);
+			break;
+		default:
+			_error_("Surface mass balance model "<<EnumToStringx(smb_model)<<" not supported yet");
+	}
+
+}/*}}}*/
+void SmbAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
+
+	int     numoutputs;
+	char**  requestedoutputs = NULL;
+	bool    isdelta18o,ismungsm,isd18opd,interp;
+	int     smb_model;
+	IssmDouble *temp = NULL;
+	int         N,M;
+	
+	parameters->AddObject(iomodel->CopyConstantObject(SmbEnum));
+	
+	iomodel->Constant(&smb_model,SmbEnum);
+	iomodel->Constant(&interp,TimesteppingInterpForcingsEnum);
+	
+	switch(smb_model){
+		case SMBforcingEnum:
+			/*Nothing to add to parameters*/
+			break;
+		case SMBpddEnum:
+			parameters->AddObject(iomodel->CopyConstantObject(SmbIsdelta18oEnum));
+			parameters->AddObject(iomodel->CopyConstantObject(SmbIsmungsmEnum));
+			parameters->AddObject(iomodel->CopyConstantObject(SmbDesfacEnum));
+			parameters->AddObject(iomodel->CopyConstantObject(SmbRlapsEnum));
+			parameters->AddObject(iomodel->CopyConstantObject(SmbRlapslgmEnum));
+			iomodel->Constant(&isdelta18o,SmbIsdelta18oEnum);
+			iomodel->Constant(&ismungsm,SmbIsmungsmEnum);
+
+			if(ismungsm){
+			  iomodel->FetchData(&temp,&N,&M,SmbPfacEnum); _assert_(N==2);
+			  parameters->AddObject(new TransientParam(SmbPfacEnum,&temp[0],&temp[M],interp,M));
+			  iomodel->DeleteData(temp,SmbPfacEnum);
+			
+			  iomodel->FetchData(&temp,&N,&M,SmbTdiffEnum); _assert_(N==2);
+			  parameters->AddObject(new TransientParam(SmbTdiffEnum,&temp[0],&temp[M],interp,M));
+			  iomodel->DeleteData(temp,SmbTdiffEnum);
+
+			  iomodel->FetchData(&temp,&N,&M,SmbSealevEnum); _assert_(N==2);
+			  parameters->AddObject(new TransientParam(SmbSealevEnum,&temp[0],&temp[M],interp,M));
+			  iomodel->DeleteData(temp,SmbSealevEnum);
+			}
+			if(isdelta18o){
+				iomodel->FetchData(&temp,&N,&M,SmbDelta18oEnum); _assert_(N==2);
+				parameters->AddObject(new TransientParam(SmbDelta18oEnum,&temp[0],&temp[M],interp,M));
+				iomodel->DeleteData(temp,SmbDelta18oEnum);
+
+				iomodel->FetchData(&temp,&N,&M,SmbDelta18oSurfaceEnum); _assert_(N==2);
+				parameters->AddObject(new TransientParam(SmbDelta18oSurfaceEnum,&temp[0],&temp[M],interp,M));
+				iomodel->DeleteData(temp,SmbDelta18oSurfaceEnum);
+			}
+			break;
+		case SMBd18opddEnum:
+			parameters->AddObject(iomodel->CopyConstantObject(SmbIsmungsmEnum));
+			parameters->AddObject(iomodel->CopyConstantObject(SmbIsd18opdEnum));
+			parameters->AddObject(iomodel->CopyConstantObject(SmbDesfacEnum));
+			parameters->AddObject(iomodel->CopyConstantObject(SmbRlapsEnum));
+			parameters->AddObject(iomodel->CopyConstantObject(SmbRlapslgmEnum));
+			iomodel->Constant(&ismungsm,SmbIsmungsmEnum);
+			iomodel->Constant(&isd18opd,SmbIsd18opdEnum);
+			if(isd18opd){
+				iomodel->FetchData(&temp,&N,&M,SmbDelta18oEnum); _assert_(N==2);
+				parameters->AddObject(new TransientParam(SmbDelta18oEnum,&temp[0],&temp[M],interp,M));
+				iomodel->DeleteData(temp,SmbDelta18oEnum);
+				
+				parameters->AddObject(iomodel->CopyConstantObject(SmbDpermilEnum));
+			}
+			break;
+		case SMBgradientsEnum:
+			/*Nothing to add to parameters*/
+			break;
+		case SMBhenningEnum:
+			/*Nothing to add to parameters*/
+			break;
+		case SMBcomponentsEnum:
+			/*Nothing to add to parameters*/
+			break;
+		case SMBmeltcomponentsEnum:
+			/*Nothing to add to parameters*/
+			break;
+		default:
+			_error_("Surface mass balance model "<<EnumToStringx(smb_model)<<" not supported yet");
+	}
+
+	iomodel->FetchData(&requestedoutputs,&numoutputs,SmbRequestedOutputsEnum);
+	parameters->AddObject(new IntParam(SmbNumRequestedOutputsEnum,numoutputs));
+	if(numoutputs)parameters->AddObject(new StringArrayParam(SmbRequestedOutputsEnum,requestedoutputs,numoutputs));
+	iomodel->DeleteData(&requestedoutputs,numoutputs,SmbRequestedOutputsEnum);
+
+}/*}}}*/
+
+/*Finite Element Analysis*/
+void           SmbAnalysis::Core(FemModel* femmodel){/*{{{*/
+
+	int    smb_model;
+
+	/*Figure out smb model: */
+	femmodel->parameters->FindParam(&smb_model,SmbEnum);
+	
+	/*branch to correct module*/
+	switch(smb_model){
+		case SMBforcingEnum:
+			/*Nothing to be done*/
+			break;
+		case SMBpddEnum:
+			bool isdelta18o,ismungsm;
+			femmodel->parameters->FindParam(&isdelta18o,SmbIsdelta18oEnum);
+			femmodel->parameters->FindParam(&ismungsm,SmbIsmungsmEnum);
+			if(isdelta18o){
+				if(VerboseSolution()) _printf0_("   call Delta18oParameterization module\n");
+				Delta18oParameterizationx(femmodel);
+			} 
+			if(ismungsm){
+				if(VerboseSolution()) _printf0_("   call MungsmtpParameterization module\n");
+				MungsmtpParameterizationx(femmodel);
+			} 
+			if(VerboseSolution()) _printf0_("   call positive degree day module\n");
+			PositiveDegreeDayx(femmodel);
+			break;
+		case SMBd18opddEnum:
+			bool isd18opd;
+			femmodel->parameters->FindParam(&isd18opd,SmbIsd18opdEnum);
+			if(isd18opd){
+				if(VerboseSolution()) _printf0_("   call Delta18opdParameterization module\n");
+				Delta18opdParameterizationx(femmodel);
+				if(VerboseSolution()) _printf0_("   call positive degree day module\n");
+				PositiveDegreeDayx(femmodel);
+			} 
+			break;
+		case SMBgradientsEnum:
+			if(VerboseSolution())_printf0_("	call smb gradients module\n");
+			SmbGradientsx(femmodel);
+			break;
+		case SMBhenningEnum:
+			if(VerboseSolution())_printf0_("  call smb Henning module\n");
+			SmbHenningx(femmodel);
+			break;
+		case SMBcomponentsEnum:
+			if(VerboseSolution())_printf0_("  call smb Components module\n");
+			SmbComponentsx(femmodel);
+			break;
+		case SMBmeltcomponentsEnum:
+			if(VerboseSolution())_printf0_("  call smb Melt Components module\n");
+			SmbMeltComponentsx(femmodel);
+			break;
+		case SMBgcmEnum:
+			/*Nothing to be done*/
+			break;
+		default:
+			_error_("Surface mass balance model "<<EnumToStringx(smb_model)<<" not supported yet");
+	}
+
+}/*}}}*/
+ElementVector* SmbAnalysis::CreateDVector(Element* element){/*{{{*/
+	_error_("not implemented");
+}/*}}}*/
+ElementMatrix* SmbAnalysis::CreateJacobianMatrix(Element* element){/*{{{*/
+_error_("Not implemented");
+}/*}}}*/
+ElementMatrix* SmbAnalysis::CreateKMatrix(Element* element){/*{{{*/
+	_error_("not implemented yet");
+}/*}}}*/
+ElementVector* SmbAnalysis::CreatePVector(Element* element){/*{{{*/
+_error_("not implemented yet");
+}/*}}}*/
+void           SmbAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
+	   _error_("not implemented yet");
+}/*}}}*/
+void           SmbAnalysis::GradientJ(Vector<IssmDouble>* gradient,Element* element,int control_type,int control_index){/*{{{*/
+	_error_("Not implemented yet");
+}/*}}}*/
+void           SmbAnalysis::InputUpdateFromSolution(IssmDouble* solution,Element* element){/*{{{*/
+	_error_("not implemented yet");
+}/*}}}*/
+void           SmbAnalysis::UpdateConstraints(FemModel* femmodel){/*{{{*/
+	/*Default, do nothing*/
+	return;
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/SmbAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/SmbAnalysis.h	(revision 19528)
+++ /issm/trunk-jpl/src/c/analyses/SmbAnalysis.h	(revision 19528)
@@ -0,0 +1,33 @@
+/*! \file SmbAnalysis.h 
+ *  \brief: header file for generic external result object
+ */
+
+#ifndef _SmbAnalysis_
+#define _SmbAnalysis_
+
+/*Headers*/
+#include "./Analysis.h"
+
+class SmbAnalysis: public Analysis{
+
+	public:
+		/*Model processing*/
+		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
+		void CreateLoads(Loads* loads, IoModel* iomodel);
+		void CreateNodes(Nodes* nodes,IoModel* iomodel);
+		int  DofsPerNode(int** doflist,int domaintype,int approximation);
+		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
+
+		/*Finite element Analysis*/
+		void           Core(FemModel* femmodel);
+		ElementVector* CreateDVector(Element* element);
+		ElementMatrix* CreateJacobianMatrix(Element* element);
+		ElementMatrix* CreateKMatrix(Element* element);
+		ElementVector* CreatePVector(Element* element);
+		void           GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element);
+		void           GradientJ(Vector<IssmDouble>* gradient,Element* element,int control_type,int control_index);
+		void           InputUpdateFromSolution(IssmDouble* solution,Element* element);
+		void           UpdateConstraints(FemModel* femmodel);
+};
+#endif
Index: /issm/trunk-jpl/src/c/analyses/analyses.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/analyses.h	(revision 19527)
+++ /issm/trunk-jpl/src/c/analyses/analyses.h	(revision 19528)
@@ -30,4 +30,5 @@
 #include "./LsfReinitializationAnalysis.h"
 #include "./MasstransportAnalysis.h"
+#include "./SmbAnalysis.h"
 #include "./MeltingAnalysis.h"
 #include "./MeshdeformationAnalysis.h"
Index: /issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 19527)
+++ /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 19528)
@@ -496,4 +496,5 @@
 		case MasstransportSolutionEnum:
 			analyses_temp[numanalyses++]=MasstransportAnalysisEnum;
+			analyses_temp[numanalyses++]=SmbAnalysisEnum;
 			break;
 
@@ -529,4 +530,8 @@
 			break;
 		
+		case SmbSolutionEnum:
+			analyses_temp[numanalyses++]=SmbAnalysisEnum;
+			break;
+
 		case DamageEvolutionSolutionEnum:
 			analyses_temp[numanalyses++]=DamageEvolutionAnalysisEnum;
@@ -534,5 +539,5 @@
 
 		case TransientSolutionEnum:{
-			bool isSIA,isFS,isthermal,isenthalpy,ismasstransport,isgroundingline,isstressbalance,islevelset,ishydrology,isdamage;
+			bool isSIA,isFS,isthermal,isenthalpy,ismasstransport,isgroundingline,isstressbalance,islevelset,ishydrology,isdamage,issmb;
 			iomodel->Constant(&isSIA,FlowequationIsSIAEnum);
 			iomodel->Constant(&isFS,FlowequationIsFSEnum);
@@ -545,4 +550,5 @@
 			iomodel->Constant(&isdamage,TransientIsdamageevolutionEnum);
 			iomodel->Constant(&ishydrology,TransientIshydrologyEnum);
+			iomodel->Constant(&issmb,TransientIssmbEnum);
 			if(isstressbalance){
 				int  fe_FS;
@@ -570,4 +576,5 @@
 				analyses_temp[numanalyses++]=MasstransportAnalysisEnum;
 			}
+			if(issmb) analyses_temp[numanalyses++]=SmbAnalysisEnum;
 			if(islevelset){
 				analyses_temp[numanalyses++]=LevelsetAnalysisEnum;
Index: /issm/trunk-jpl/src/c/cores/smb_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/smb_core.cpp	(revision 19527)
+++ /issm/trunk-jpl/src/c/cores/smb_core.cpp	(revision 19528)
@@ -13,4 +13,5 @@
 
 	/*parameters: */
+	Analysis* analysis=NULL;
 	int    smb_model;
 	int    numoutputs;
@@ -18,4 +19,7 @@
 	int    solution_type;
 	char** requested_outputs = NULL;
+
+	/*activate configuration*/
+	femmodel->SetCurrentConfiguration(SmbAnalysisEnum);
 
 	/*recover parameters: */
@@ -27,57 +31,8 @@
 			
 	if(VerboseSolution()) _printf0_("   computing smb \n");
-
-	/*branch to correct module*/
-	switch(smb_model){
-		case SMBforcingEnum:
-			/*Nothing to be done*/
-			break;
-		case SMBpddEnum:
-			bool isdelta18o,ismungsm;
-			femmodel->parameters->FindParam(&isdelta18o,SmbIsdelta18oEnum);
-			femmodel->parameters->FindParam(&ismungsm,SmbIsmungsmEnum);
-			if(isdelta18o){
-				if(VerboseSolution()) _printf0_("   call Delta18oParameterization module\n");
-				Delta18oParameterizationx(femmodel);
-			} 
-			if(ismungsm){
-				if(VerboseSolution()) _printf0_("   call MungsmtpParameterization module\n");
-				MungsmtpParameterizationx(femmodel);
-			} 
-			if(VerboseSolution()) _printf0_("   call positive degree day module\n");
-			PositiveDegreeDayx(femmodel);
-			break;
-		case SMBd18opddEnum:
-			bool isd18opd;
-			femmodel->parameters->FindParam(&isd18opd,SmbIsd18opdEnum);
-			if(isd18opd){
-				if(VerboseSolution()) _printf0_("   call Delta18opdParameterization module\n");
-				Delta18opdParameterizationx(femmodel);
-				if(VerboseSolution()) _printf0_("   call positive degree day module\n");
-				PositiveDegreeDayx(femmodel);
-			} 
-			break;
-		case SMBgradientsEnum:
-			if(VerboseSolution())_printf0_("	call smb gradients module\n");
-			SmbGradientsx(femmodel);
-			break;
-		case SMBhenningEnum:
-			if(VerboseSolution())_printf0_("  call smb Henning module\n");
-			SmbHenningx(femmodel);
-			break;
-		case SMBcomponentsEnum:
-			if(VerboseSolution())_printf0_("  call smb Components module\n");
-			SmbComponentsx(femmodel);
-			break;
-		case SMBmeltcomponentsEnum:
-			if(VerboseSolution())_printf0_("  call smb Melt Components module\n");
-			SmbMeltComponentsx(femmodel);
-			break;
-		case SMBgcmEnum:
-			/*Nothing to be done*/
-			break;
-		default:
-			_error_("Surface mass balance model "<<EnumToStringx(smb_model)<<" not supported yet");
-	}
+ 
+	analysis = new SmbAnalysis();
+	analysis->Core(femmodel);
+	delete analysis;
 
 	if(save_results){
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 19527)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 19528)
@@ -22,5 +22,4 @@
 	char**      requestedoutputs = NULL;
 	IssmDouble  time;
-	bool        isdelta18o,ismungsm,isd18opd,interp;
 
 	/*parameters for mass flux:*/
@@ -99,76 +98,5 @@
 	}
 
-	/*Surface mass balance parameters*/
-	parameters->AddObject(iomodel->CopyConstantObject(SmbEnum));
-	iomodel->Constant(&smb_model,SmbEnum);
-	iomodel->Constant(&interp,TimesteppingInterpForcingsEnum);
-	switch(smb_model){
-		case SMBforcingEnum:
-			/*Nothing to add to parameters*/
-			break;
-		case SMBpddEnum:
-			parameters->AddObject(iomodel->CopyConstantObject(SmbIsdelta18oEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(SmbIsmungsmEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(SmbDesfacEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(SmbRlapsEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(SmbRlapslgmEnum));
-			iomodel->Constant(&isdelta18o,SmbIsdelta18oEnum);
-			iomodel->Constant(&ismungsm,SmbIsmungsmEnum);
-
-			if(ismungsm){
-			  iomodel->FetchData(&temp,&N,&M,SmbPfacEnum); _assert_(N==2);
-			  parameters->AddObject(new TransientParam(SmbPfacEnum,&temp[0],&temp[M],interp,M));
-			  iomodel->DeleteData(temp,SmbPfacEnum);
-			
-			  iomodel->FetchData(&temp,&N,&M,SmbTdiffEnum); _assert_(N==2);
-			  parameters->AddObject(new TransientParam(SmbTdiffEnum,&temp[0],&temp[M],interp,M));
-			  iomodel->DeleteData(temp,SmbTdiffEnum);
-
-			  iomodel->FetchData(&temp,&N,&M,SmbSealevEnum); _assert_(N==2);
-			  parameters->AddObject(new TransientParam(SmbSealevEnum,&temp[0],&temp[M],interp,M));
-			  iomodel->DeleteData(temp,SmbSealevEnum);
-			}
-			if(isdelta18o){
-				iomodel->FetchData(&temp,&N,&M,SmbDelta18oEnum); _assert_(N==2);
-				parameters->AddObject(new TransientParam(SmbDelta18oEnum,&temp[0],&temp[M],interp,M));
-				iomodel->DeleteData(temp,SmbDelta18oEnum);
-
-				iomodel->FetchData(&temp,&N,&M,SmbDelta18oSurfaceEnum); _assert_(N==2);
-				parameters->AddObject(new TransientParam(SmbDelta18oSurfaceEnum,&temp[0],&temp[M],interp,M));
-				iomodel->DeleteData(temp,SmbDelta18oSurfaceEnum);
-			}
-			break;
-		case SMBd18opddEnum:
-			parameters->AddObject(iomodel->CopyConstantObject(SmbIsmungsmEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(SmbIsd18opdEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(SmbDesfacEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(SmbRlapsEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(SmbRlapslgmEnum));
-			iomodel->Constant(&ismungsm,SmbIsmungsmEnum);
-			iomodel->Constant(&isd18opd,SmbIsd18opdEnum);
-			if(isd18opd){
-				iomodel->FetchData(&temp,&N,&M,SmbDelta18oEnum); _assert_(N==2);
-				parameters->AddObject(new TransientParam(SmbDelta18oEnum,&temp[0],&temp[M],interp,M));
-				iomodel->DeleteData(temp,SmbDelta18oEnum);
-				
-				parameters->AddObject(iomodel->CopyConstantObject(SmbDpermilEnum));
-			}
-			break;
-		case SMBgradientsEnum:
-			/*Nothing to add to parameters*/
-			break;
-		case SMBhenningEnum:
-			/*Nothing to add to parameters*/
-			break;
-		case SMBcomponentsEnum:
-			/*Nothing to add to parameters*/
-			break;
-		case SMBmeltcomponentsEnum:
-			/*Nothing to add to parameters*/
-			break;
-		default:
-			_error_("Surface mass balance model "<<EnumToStringx(smb_model)<<" not supported yet");
-	}
-
+	
 	/*Basal forcing parameters*/
 	parameters->AddObject(iomodel->CopyConstantObject(BasalforcingsEnum));
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 19527)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 19528)
@@ -350,9 +350,42 @@
 	/*Smb{{{*/
 	SmbEnum,
+	SmbAnalysisEnum,
 	SmbSolutionEnum,
 	SmbNumRequestedOutputsEnum,
 	SmbRequestedOutputsEnum,
+	/*SMBforcing*/
 	SMBforcingEnum,
 	SmbMassBalanceEnum,
+	/*SMBgemb*/
+	SMBgembEnum,
+	SmbTaEnum,
+	SmbVEnum,
+	SmbDswrfEnum,
+	SmbDlwrfEnum,
+	SmbPEnum, 
+	SmbEAirEnum, 
+	SmbPAirEnum,
+	SmbTmeanEnum,
+	SmbCEnum,
+	SmbTzEnum,
+	SmbVzEnum,
+	SmbSpinUpEnum,
+	SmbAIdxEnum,
+	SmbSwIdxEnum,
+	SmbDenIdxEnum,
+	SmbZTopEnum, 
+	SmbDzTopEnum, 
+	SmbDzMinEnum, 
+	SmbZYEnum, 
+	SmbZMaxEnum, 
+	SmbZMinEnum, 
+	SmbOutputFreqEnum, 
+	SmbASnowEnum, 
+	SmbAIceEnum, 
+	SmbCldFracEnum, 
+	SmbT0wetEnum, 
+	SmbT0dryEnum, 
+	SmbKEnum, 
+	/*SMBpdd*/
 	SMBpddEnum,	
 	SmbDelta18oEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 19527)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 19528)
@@ -354,4 +354,5 @@
 		case BalancethicknessD0Enum : return "BalancethicknessD0";
 		case SmbEnum : return "Smb";
+		case SmbAnalysisEnum : return "SmbAnalysis";
 		case SmbSolutionEnum : return "SmbSolution";
 		case SmbNumRequestedOutputsEnum : return "SmbNumRequestedOutputs";
@@ -359,4 +360,33 @@
 		case SMBforcingEnum : return "SMBforcing";
 		case SmbMassBalanceEnum : return "SmbMassBalance";
+		case SMBgembEnum : return "SMBgemb";
+		case SmbTaEnum : return "SmbTa";
+		case SmbVEnum : return "SmbV";
+		case SmbDswrfEnum : return "SmbDswrf";
+		case SmbDlwrfEnum : return "SmbDlwrf";
+		case SmbPEnum : return "SmbP";
+		case SmbEAirEnum : return "SmbEAir";
+		case SmbPAirEnum : return "SmbPAir";
+		case SmbTmeanEnum : return "SmbTmean";
+		case SmbCEnum : return "SmbC";
+		case SmbTzEnum : return "SmbTz";
+		case SmbVzEnum : return "SmbVz";
+		case SmbSpinUpEnum : return "SmbSpinUp";
+		case SmbAIdxEnum : return "SmbAIdx";
+		case SmbSwIdxEnum : return "SmbSwIdx";
+		case SmbDenIdxEnum : return "SmbDenIdx";
+		case SmbZTopEnum : return "SmbZTop";
+		case SmbDzTopEnum : return "SmbDzTop";
+		case SmbDzMinEnum : return "SmbDzMin";
+		case SmbZYEnum : return "SmbZY";
+		case SmbZMaxEnum : return "SmbZMax";
+		case SmbZMinEnum : return "SmbZMin";
+		case SmbOutputFreqEnum : return "SmbOutputFreq";
+		case SmbASnowEnum : return "SmbASnow";
+		case SmbAIceEnum : return "SmbAIce";
+		case SmbCldFracEnum : return "SmbCldFrac";
+		case SmbT0wetEnum : return "SmbT0wet";
+		case SmbT0dryEnum : return "SmbT0dry";
+		case SmbKEnum : return "SmbK";
 		case SMBpddEnum : return "SMBpdd";
 		case SmbDelta18oEnum : return "SmbDelta18o";
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 19527)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 19528)
@@ -360,4 +360,5 @@
 	      else if (strcmp(name,"BalancethicknessD0")==0) return BalancethicknessD0Enum;
 	      else if (strcmp(name,"Smb")==0) return SmbEnum;
+	      else if (strcmp(name,"SmbAnalysis")==0) return SmbAnalysisEnum;
 	      else if (strcmp(name,"SmbSolution")==0) return SmbSolutionEnum;
 	      else if (strcmp(name,"SmbNumRequestedOutputs")==0) return SmbNumRequestedOutputsEnum;
@@ -365,4 +366,36 @@
 	      else if (strcmp(name,"SMBforcing")==0) return SMBforcingEnum;
 	      else if (strcmp(name,"SmbMassBalance")==0) return SmbMassBalanceEnum;
+	      else if (strcmp(name,"SMBgemb")==0) return SMBgembEnum;
+	      else if (strcmp(name,"SmbTa")==0) return SmbTaEnum;
+	      else if (strcmp(name,"SmbV")==0) return SmbVEnum;
+	      else if (strcmp(name,"SmbDswrf")==0) return SmbDswrfEnum;
+	      else if (strcmp(name,"SmbDlwrf")==0) return SmbDlwrfEnum;
+	      else if (strcmp(name,"SmbP")==0) return SmbPEnum;
+	      else if (strcmp(name,"SmbEAir")==0) return SmbEAirEnum;
+	      else if (strcmp(name,"SmbPAir")==0) return SmbPAirEnum;
+	      else if (strcmp(name,"SmbTmean")==0) return SmbTmeanEnum;
+	      else if (strcmp(name,"SmbC")==0) return SmbCEnum;
+	      else if (strcmp(name,"SmbTz")==0) return SmbTzEnum;
+	      else if (strcmp(name,"SmbVz")==0) return SmbVzEnum;
+	      else if (strcmp(name,"SmbSpinUp")==0) return SmbSpinUpEnum;
+	      else if (strcmp(name,"SmbAIdx")==0) return SmbAIdxEnum;
+	      else if (strcmp(name,"SmbSwIdx")==0) return SmbSwIdxEnum;
+	      else if (strcmp(name,"SmbDenIdx")==0) return SmbDenIdxEnum;
+	      else if (strcmp(name,"SmbZTop")==0) return SmbZTopEnum;
+         else stage=4;
+   }
+   if(stage==4){
+	      if (strcmp(name,"SmbDzTop")==0) return SmbDzTopEnum;
+	      else if (strcmp(name,"SmbDzMin")==0) return SmbDzMinEnum;
+	      else if (strcmp(name,"SmbZY")==0) return SmbZYEnum;
+	      else if (strcmp(name,"SmbZMax")==0) return SmbZMaxEnum;
+	      else if (strcmp(name,"SmbZMin")==0) return SmbZMinEnum;
+	      else if (strcmp(name,"SmbOutputFreq")==0) return SmbOutputFreqEnum;
+	      else if (strcmp(name,"SmbASnow")==0) return SmbASnowEnum;
+	      else if (strcmp(name,"SmbAIce")==0) return SmbAIceEnum;
+	      else if (strcmp(name,"SmbCldFrac")==0) return SmbCldFracEnum;
+	      else if (strcmp(name,"SmbT0wet")==0) return SmbT0wetEnum;
+	      else if (strcmp(name,"SmbT0dry")==0) return SmbT0dryEnum;
+	      else if (strcmp(name,"SmbK")==0) return SmbKEnum;
 	      else if (strcmp(name,"SMBpdd")==0) return SMBpddEnum;
 	      else if (strcmp(name,"SmbDelta18o")==0) return SmbDelta18oEnum;
@@ -383,8 +416,5 @@
 	      else if (strcmp(name,"SmbPfac")==0) return SmbPfacEnum;
 	      else if (strcmp(name,"SmbTdiff")==0) return SmbTdiffEnum;
-         else stage=4;
-   }
-   if(stage==4){
-	      if (strcmp(name,"SmbSealev")==0) return SmbSealevEnum;
+	      else if (strcmp(name,"SmbSealev")==0) return SmbSealevEnum;
 	      else if (strcmp(name,"SMBd18opdd")==0) return SMBd18opddEnum;
 	      else if (strcmp(name,"SmbDpermil")==0) return SmbDpermilEnum;
@@ -476,5 +506,8 @@
 	      else if (strcmp(name,"DataSet")==0) return DataSetEnum;
 	      else if (strcmp(name,"Constraints")==0) return ConstraintsEnum;
-	      else if (strcmp(name,"Loads")==0) return LoadsEnum;
+         else stage=5;
+   }
+   if(stage==5){
+	      if (strcmp(name,"Loads")==0) return LoadsEnum;
 	      else if (strcmp(name,"Materials")==0) return MaterialsEnum;
 	      else if (strcmp(name,"Nodes")==0) return NodesEnum;
@@ -506,8 +539,5 @@
 	      else if (strcmp(name,"InputToL2Project")==0) return InputToL2ProjectEnum;
 	      else if (strcmp(name,"InputToDepthaverage")==0) return InputToDepthaverageEnum;
-         else stage=5;
-   }
-   if(stage==5){
-	      if (strcmp(name,"InputToSmooth")==0) return InputToSmoothEnum;
+	      else if (strcmp(name,"InputToSmooth")==0) return InputToSmoothEnum;
 	      else if (strcmp(name,"SmoothThicknessMultiplier")==0) return SmoothThicknessMultiplierEnum;
 	      else if (strcmp(name,"IntParam")==0) return IntParamEnum;
@@ -599,5 +629,8 @@
 	      else if (strcmp(name,"ThicknessAbsMisfit")==0) return ThicknessAbsMisfitEnum;
 	      else if (strcmp(name,"SurfaceAbsMisfit")==0) return SurfaceAbsMisfitEnum;
-	      else if (strcmp(name,"Vel")==0) return VelEnum;
+         else stage=6;
+   }
+   if(stage==6){
+	      if (strcmp(name,"Vel")==0) return VelEnum;
 	      else if (strcmp(name,"Velocity")==0) return VelocityEnum;
 	      else if (strcmp(name,"VxAverage")==0) return VxAverageEnum;
@@ -629,8 +662,5 @@
 	      else if (strcmp(name,"BasalFriction")==0) return BasalFrictionEnum;
 	      else if (strcmp(name,"ViscousHeating")==0) return ViscousHeatingEnum;
-         else stage=6;
-   }
-   if(stage==6){
-	      if (strcmp(name,"HydrologyWaterVx")==0) return HydrologyWaterVxEnum;
+	      else if (strcmp(name,"HydrologyWaterVx")==0) return HydrologyWaterVxEnum;
 	      else if (strcmp(name,"HydrologyWaterVy")==0) return HydrologyWaterVyEnum;
 	      else if (strcmp(name,"DrivingStressX")==0) return DrivingStressXEnum;
@@ -722,5 +752,8 @@
 	      else if (strcmp(name,"Outputdefinition24")==0) return Outputdefinition24Enum;
 	      else if (strcmp(name,"Outputdefinition25")==0) return Outputdefinition25Enum;
-	      else if (strcmp(name,"Outputdefinition26")==0) return Outputdefinition26Enum;
+         else stage=7;
+   }
+   if(stage==7){
+	      if (strcmp(name,"Outputdefinition26")==0) return Outputdefinition26Enum;
 	      else if (strcmp(name,"Outputdefinition27")==0) return Outputdefinition27Enum;
 	      else if (strcmp(name,"Outputdefinition28")==0) return Outputdefinition28Enum;
@@ -752,8 +785,5 @@
 	      else if (strcmp(name,"Outputdefinition54")==0) return Outputdefinition54Enum;
 	      else if (strcmp(name,"Outputdefinition55")==0) return Outputdefinition55Enum;
-         else stage=7;
-   }
-   if(stage==7){
-	      if (strcmp(name,"Outputdefinition56")==0) return Outputdefinition56Enum;
+	      else if (strcmp(name,"Outputdefinition56")==0) return Outputdefinition56Enum;
 	      else if (strcmp(name,"Outputdefinition57")==0) return Outputdefinition57Enum;
 	      else if (strcmp(name,"Outputdefinition58")==0) return Outputdefinition58Enum;
@@ -845,5 +875,8 @@
 	      else if (strcmp(name,"None")==0) return NoneEnum;
 	      else if (strcmp(name,"AggressiveMigration")==0) return AggressiveMigrationEnum;
-	      else if (strcmp(name,"SoftMigration")==0) return SoftMigrationEnum;
+         else stage=8;
+   }
+   if(stage==8){
+	      if (strcmp(name,"SoftMigration")==0) return SoftMigrationEnum;
 	      else if (strcmp(name,"SubelementMigration")==0) return SubelementMigrationEnum;
 	      else if (strcmp(name,"SubelementMigration2")==0) return SubelementMigration2Enum;
@@ -875,8 +908,5 @@
 	      else if (strcmp(name,"RootPath")==0) return RootPathEnum;
 	      else if (strcmp(name,"OutputFileName")==0) return OutputFileNameEnum;
-         else stage=8;
-   }
-   if(stage==8){
-	      if (strcmp(name,"InputFileName")==0) return InputFileNameEnum;
+	      else if (strcmp(name,"InputFileName")==0) return InputFileNameEnum;
 	      else if (strcmp(name,"LockFileName")==0) return LockFileNameEnum;
 	      else if (strcmp(name,"RestartFileName")==0) return RestartFileNameEnum;
Index: /issm/trunk-jpl/src/m/classes/SMBgemb.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/SMBgemb.m	(revision 19527)
+++ /issm/trunk-jpl/src/m/classes/SMBgemb.m	(revision 19528)
@@ -123,11 +123,39 @@
 function md = checkconsistency(self,md,solution,analyses) % {{{
 
-		md = checkfield(md,'fieldname','smb.Ta','timeseries',1,'NaN',1,'>',0,'<',273+60); %60 celsius max value
-		md = checkfield(md,'fieldname','smb.V','timeseries',1,'NaN',1);
-		md = checkfield(md,'fieldname','smb.dswrf','timeseries',1,'NaN',1);
-		md = checkfield(md,'fieldname','smb.dlwrf','timeseries',1,'NaN',1);
-		md = checkfield(md,'fieldname','smb.P','timeseries',1,'NaN',1);
+		md = checkfield(md,'fieldname','smb.Ta','timeseries',1,'NaN',1,'>',273-60,'<',273+60); %60 celsius max value
+		md = checkfield(md,'fieldname','smb.V','timeseries',1,'NaN',1,'>=',0,'<',45); %max 500 km/h
+		md = checkfield(md,'fieldname','smb.dswrf','timeseries',1,'NaN',1,'>=',0,'<=',1400);
+		md = checkfield(md,'fieldname','smb.dlwrf','timeseries',1,'NaN',1,'>=',0);
+		md = checkfield(md,'fieldname','smb.P','timeseries',1,'NaN',1,'>=',0,'<=',100);
 		md = checkfield(md,'fieldname','smb.eAir','timeseries',1,'NaN',1);
-
+		
+		md = checkfield(md,'fieldname','smb.Tmean','NaN',1,'>',273-60,'<',273+60); %60 celsius max value
+		md = checkfield(md,'fieldname','smb.C','NaN',1,'>=',0); 
+		md = checkfield(md,'fieldname','smb.Tz','NaN',1,'>=',0,'<=',5000); 
+		md = checkfield(md,'fieldname','smb.Vz','NaN',1,'>=',0,'<=',5000); 
+		
+		md = checkfield(md,'fieldname','smb.spinUp','NaN',1,'>=',0);
+		md = checkfield(md,'fieldname','smb.aIdx','NaN',1,'values',[1,2,3,4]);
+		md = checkfield(md,'fieldname','smb.swIdx','NaN',1,'values',[0,1]);
+		md = checkfield(md,'fieldname','smb.denIdx','NaN',1,'values',[1,2,3,4,5]);
+		
+		md = checkfield(md,'fieldname','smb.zTop','NaN',1,'>=',0);
+		md = checkfield(md,'fieldname','smb.dzTop','NaN',1,'>',0);
+		md = checkfield(md,'fieldname','smb.dzMin','NaN',1,'>',0);
+		md = checkfield(md,'fieldname','smb.zY','NaN',1,'>=',1);
+		md = checkfield(md,'fieldname','smb.outputFreq','NaN',1,'>',0,'<',10*365); %10 years max 
+		
+		switch self.aIdx,
+		case {1 2}
+			md = checkfield(md,'fieldname','smb.aSnow','NaN',1,'>=',.64,'<=',.89);
+			md = checkfield(md,'fieldname','smb.aIce','NaN',1,'>=',.27,'<=',.58);
+		case 3
+			md = checkfield(md,'fieldname','smb.cldFrac','NaN',1,'>=',0,'<=',1);
+		case 4
+			md = checkfield(md,'fieldname','smb.t0wet','NaN',1,'>=',15,'<=',21.9);
+			md = checkfield(md,'fieldname','smb.t0dry','NaN',1,'>=',30,'<=',30);
+			md = checkfield(md,'fieldname','smb.K','NaN',1,'>=',7,'<=',7);
+		end
+		
 		%check zTop is < local thickness:
 		he=sum(md.geometry.thickness(md.mesh.elements),2)/size(md.mesh.elements,2);
@@ -195,7 +223,36 @@
 
 			WriteData(fid,'enum',SmbEnum(),'data',SMBgembEnum(),'format','Integer');
-			WriteData(fid,'object',self,'class','smb','fieldname','accumulation','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'object',self,'class','smb','fieldname','runoff','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'object',self,'class','smb','fieldname','evaporation','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
+			
+			WriteData(fid,'object',self,'class','smb','fieldname','Ta','format','DoubleMat','mattype',1,'scale',1,'timeserieslength',md.mesh.numberofelements+1);
+			WriteData(fid,'object',self,'class','smb','fieldname','V','format','DoubleMat','mattype',1,'scale',1,'timeserieslength',md.mesh.numberofelements+1);
+			WriteData(fid,'object',self,'class','smb','fieldname','dswrf','format','DoubleMat','mattype',1,'scale',1,'timeserieslength',md.mesh.numberofelements+1);
+			WriteData(fid,'object',self,'class','smb','fieldname','dlwrf','format','DoubleMat','mattype',1,'scale',1,'timeserieslength',md.mesh.numberofelements+1);
+			WriteData(fid,'object',self,'class','smb','fieldname','P','format','DoubleMat','mattype',1,'scale',1,'timeserieslength',md.mesh.numberofelements+1);
+			WriteData(fid,'object',self,'class','smb','fieldname','eAir','format','DoubleMat','mattype',1,'scale',1,'timeserieslength',md.mesh.numberofelements+1);
+			WriteData(fid,'object',self,'class','smb','fieldname','pAir','format','DoubleMat','mattype',1,'scale',1,'timeserieslength',md.mesh.numberofelements+1);
+			
+			WriteData(fid,'object',self,'class','smb','fieldname','Tmean','format','Double','scale',1);
+			WriteData(fid,'object',self,'class','smb','fieldname','C','format','Double','scale',1);
+			WriteData(fid,'object',self,'class','smb','fieldname','Tz','format','Double','scale',1);
+			WriteData(fid,'object',self,'class','smb','fieldname','Vz','format','Double','scale',1);
+			WriteData(fid,'object',self,'class','smb','fieldname','spinUp','format','Integer','scale',1);
+			WriteData(fid,'object',self,'class','smb','fieldname','aIdx','format','Integer','scale',1);
+			WriteData(fid,'object',self,'class','smb','fieldname','swIdx','format','Integer','scale',1);
+			WriteData(fid,'object',self,'class','smb','fieldname','denIdx','format','Integer','scale',1);
+
+			WriteData(fid,'object',self,'class','smb','fieldname','zTop','format','DoubleMat','mattype',1,'scale',1);
+			WriteData(fid,'object',self,'class','smb','fieldname','dzTop','format','DoubleMat','mattype',1,'scale',1);
+			WriteData(fid,'object',self,'class','smb','fieldname','dzMin','format','DoubleMat','mattype',1,'scale',1);
+			WriteData(fid,'object',self,'class','smb','fieldname','zY','format','DoubleMat','mattype',1,'scale',1);
+			WriteData(fid,'object',self,'class','smb','fieldname','zMax','format','DoubleMat','mattype',1,'scale',1);
+			WriteData(fid,'object',self,'class','smb','fieldname','zMin','format','DoubleMat','mattype',1,'scale',1);
+
+			WriteData(fid,'object',self,'class','smb','fieldname','outputFreq','format','Double','scale',1);
+			WriteData(fid,'object',self,'class','smb','fieldname','aSnow','format','Double','scale',1);
+			WriteData(fid,'object',self,'class','smb','fieldname','aIce','format','Double','scale',1);
+			WriteData(fid,'object',self,'class','smb','fieldname','cldFrac','format','Double','scale',1);
+			WriteData(fid,'object',self,'class','smb','fieldname','t0wet','format','Double','scale',1);
+			WriteData(fid,'object',self,'class','smb','fieldname','t0dry','format','Double','scale',1);
+			WriteData(fid,'object',self,'class','smb','fieldname','K','format','Double','scale',1);
 			
 			%process requested outputs
@@ -210,3 +267,3 @@
 		end % }}}
 	end
-end
+end		
Index: /issm/trunk-jpl/src/m/consistency/checkfield.m
===================================================================
--- /issm/trunk-jpl/src/m/consistency/checkfield.m	(revision 19527)
+++ /issm/trunk-jpl/src/m/consistency/checkfield.m	(revision 19528)
@@ -139,4 +139,5 @@
 	lowerbound=getfieldvalue(options,'>=');
 	field2=reshape(field,prod(size(field)),1);
+	if getfieldvalue(options,'timeseries',0), field2=reshape(field(1:end-1,:),prod(size(field(1:end-1,:))),1); end
 	if any(field2<lowerbound),
 		md = checkmessage(md,getfieldvalue(options,'message',...
@@ -147,4 +148,5 @@
 	lowerbound=getfieldvalue(options,'>');
 	field2=reshape(field,prod(size(field)),1);
+	if getfieldvalue(options,'timeseries',0), field2=reshape(field(1:end-1,:),prod(size(field(1:end-1,:))),1); end
 	if any(field2<=lowerbound),
 		md = checkmessage(md,getfieldvalue(options,'message',...
@@ -157,4 +159,5 @@
 	upperbound=getfieldvalue(options,'<=');
 	field2=reshape(field,prod(size(field)),1);
+	if getfieldvalue(options,'timeseries',0), field2=reshape(field(1:end-1,:),prod(size(field(1:end-1,:))),1); end
 	if any(field2>upperbound),
 		md = checkmessage(md,getfieldvalue(options,'message',...
@@ -165,4 +168,5 @@
 	upperbound=getfieldvalue(options,'<');
 	field2=reshape(field,prod(size(field)),1);
+	if getfieldvalue(options,'timeseries',0), field2=reshape(field(1:end-1,:),prod(size(field(1:end-1,:))),1); end
 	if any(field2>=upperbound),
 		md = checkmessage(md,getfieldvalue(options,'message',...
Index: /issm/trunk-jpl/src/m/enum/EnumDefinitions.py
===================================================================
--- /issm/trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 19527)
+++ /issm/trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 19528)
@@ -346,4 +346,5 @@
 def BalancethicknessD0Enum(): return StringToEnum("BalancethicknessD0")[0]
 def SmbEnum(): return StringToEnum("Smb")[0]
+def SmbAnalysisEnum(): return StringToEnum("SmbAnalysis")[0]
 def SmbSolutionEnum(): return StringToEnum("SmbSolution")[0]
 def SmbNumRequestedOutputsEnum(): return StringToEnum("SmbNumRequestedOutputs")[0]
@@ -351,4 +352,33 @@
 def SMBforcingEnum(): return StringToEnum("SMBforcing")[0]
 def SmbMassBalanceEnum(): return StringToEnum("SmbMassBalance")[0]
+def SMBgembEnum(): return StringToEnum("SMBgemb")[0]
+def SmbTaEnum(): return StringToEnum("SmbTa")[0]
+def SmbVEnum(): return StringToEnum("SmbV")[0]
+def SmbDswrfEnum(): return StringToEnum("SmbDswrf")[0]
+def SmbDlwrfEnum(): return StringToEnum("SmbDlwrf")[0]
+def SmbPEnum(): return StringToEnum("SmbP")[0]
+def SmbEAirEnum(): return StringToEnum("SmbEAir")[0]
+def SmbPAirEnum(): return StringToEnum("SmbPAir")[0]
+def SmbTmeanEnum(): return StringToEnum("SmbTmean")[0]
+def SmbCEnum(): return StringToEnum("SmbC")[0]
+def SmbTzEnum(): return StringToEnum("SmbTz")[0]
+def SmbVzEnum(): return StringToEnum("SmbVz")[0]
+def SmbSpinUpEnum(): return StringToEnum("SmbSpinUp")[0]
+def SmbAIdxEnum(): return StringToEnum("SmbAIdx")[0]
+def SmbSwIdxEnum(): return StringToEnum("SmbSwIdx")[0]
+def SmbDenIdxEnum(): return StringToEnum("SmbDenIdx")[0]
+def SmbZTopEnum(): return StringToEnum("SmbZTop")[0]
+def SmbDzTopEnum(): return StringToEnum("SmbDzTop")[0]
+def SmbDzMinEnum(): return StringToEnum("SmbDzMin")[0]
+def SmbZYEnum(): return StringToEnum("SmbZY")[0]
+def SmbZMaxEnum(): return StringToEnum("SmbZMax")[0]
+def SmbZMinEnum(): return StringToEnum("SmbZMin")[0]
+def SmbOutputFreqEnum(): return StringToEnum("SmbOutputFreq")[0]
+def SmbASnowEnum(): return StringToEnum("SmbASnow")[0]
+def SmbAIceEnum(): return StringToEnum("SmbAIce")[0]
+def SmbCldFracEnum(): return StringToEnum("SmbCldFrac")[0]
+def SmbT0wetEnum(): return StringToEnum("SmbT0wet")[0]
+def SmbT0dryEnum(): return StringToEnum("SmbT0dry")[0]
+def SmbKEnum(): return StringToEnum("SmbK")[0]
 def SMBpddEnum(): return StringToEnum("SMBpdd")[0]
 def SmbDelta18oEnum(): return StringToEnum("SmbDelta18o")[0]
Index: /issm/trunk-jpl/src/m/enum/SMBgembEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/SMBgembEnum.m	(revision 19528)
+++ /issm/trunk-jpl/src/m/enum/SMBgembEnum.m	(revision 19528)
@@ -0,0 +1,11 @@
+function macro=SMBgembEnum()
+%SMBGEMBENUM - Enum of SMBgemb
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+%            Please read src/c/shared/Enum/README for more information
+%
+%   Usage:
+%      macro=SMBgembEnum()
+
+macro=StringToEnum('SMBgemb');
Index: /issm/trunk-jpl/src/m/enum/SmbAIceEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/SmbAIceEnum.m	(revision 19528)
+++ /issm/trunk-jpl/src/m/enum/SmbAIceEnum.m	(revision 19528)
@@ -0,0 +1,11 @@
+function macro=SmbAIceEnum()
+%SMBAICEENUM - Enum of SmbAIce
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+%            Please read src/c/shared/Enum/README for more information
+%
+%   Usage:
+%      macro=SmbAIceEnum()
+
+macro=StringToEnum('SmbAIce');
Index: /issm/trunk-jpl/src/m/enum/SmbAIdxEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/SmbAIdxEnum.m	(revision 19528)
+++ /issm/trunk-jpl/src/m/enum/SmbAIdxEnum.m	(revision 19528)
@@ -0,0 +1,11 @@
+function macro=SmbAIdxEnum()
+%SMBAIDXENUM - Enum of SmbAIdx
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+%            Please read src/c/shared/Enum/README for more information
+%
+%   Usage:
+%      macro=SmbAIdxEnum()
+
+macro=StringToEnum('SmbAIdx');
Index: /issm/trunk-jpl/src/m/enum/SmbASnowEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/SmbASnowEnum.m	(revision 19528)
+++ /issm/trunk-jpl/src/m/enum/SmbASnowEnum.m	(revision 19528)
@@ -0,0 +1,11 @@
+function macro=SmbASnowEnum()
+%SMBASNOWENUM - Enum of SmbASnow
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+%            Please read src/c/shared/Enum/README for more information
+%
+%   Usage:
+%      macro=SmbASnowEnum()
+
+macro=StringToEnum('SmbASnow');
Index: /issm/trunk-jpl/src/m/enum/SmbAnalysisEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/SmbAnalysisEnum.m	(revision 19528)
+++ /issm/trunk-jpl/src/m/enum/SmbAnalysisEnum.m	(revision 19528)
@@ -0,0 +1,11 @@
+function macro=SmbAnalysisEnum()
+%SMBANALYSISENUM - Enum of SmbAnalysis
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+%            Please read src/c/shared/Enum/README for more information
+%
+%   Usage:
+%      macro=SmbAnalysisEnum()
+
+macro=StringToEnum('SmbAnalysis');
Index: /issm/trunk-jpl/src/m/enum/SmbCEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/SmbCEnum.m	(revision 19528)
+++ /issm/trunk-jpl/src/m/enum/SmbCEnum.m	(revision 19528)
@@ -0,0 +1,11 @@
+function macro=SmbCEnum()
+%SMBCENUM - Enum of SmbC
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+%            Please read src/c/shared/Enum/README for more information
+%
+%   Usage:
+%      macro=SmbCEnum()
+
+macro=StringToEnum('SmbC');
Index: /issm/trunk-jpl/src/m/enum/SmbCldFracEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/SmbCldFracEnum.m	(revision 19528)
+++ /issm/trunk-jpl/src/m/enum/SmbCldFracEnum.m	(revision 19528)
@@ -0,0 +1,11 @@
+function macro=SmbCldFracEnum()
+%SMBCLDFRACENUM - Enum of SmbCldFrac
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+%            Please read src/c/shared/Enum/README for more information
+%
+%   Usage:
+%      macro=SmbCldFracEnum()
+
+macro=StringToEnum('SmbCldFrac');
Index: /issm/trunk-jpl/src/m/enum/SmbDenIdxEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/SmbDenIdxEnum.m	(revision 19528)
+++ /issm/trunk-jpl/src/m/enum/SmbDenIdxEnum.m	(revision 19528)
@@ -0,0 +1,11 @@
+function macro=SmbDenIdxEnum()
+%SMBDENIDXENUM - Enum of SmbDenIdx
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+%            Please read src/c/shared/Enum/README for more information
+%
+%   Usage:
+%      macro=SmbDenIdxEnum()
+
+macro=StringToEnum('SmbDenIdx');
Index: /issm/trunk-jpl/src/m/enum/SmbDlwrfEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/SmbDlwrfEnum.m	(revision 19528)
+++ /issm/trunk-jpl/src/m/enum/SmbDlwrfEnum.m	(revision 19528)
@@ -0,0 +1,11 @@
+function macro=SmbDlwrfEnum()
+%SMBDLWRFENUM - Enum of SmbDlwrf
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+%            Please read src/c/shared/Enum/README for more information
+%
+%   Usage:
+%      macro=SmbDlwrfEnum()
+
+macro=StringToEnum('SmbDlwrf');
Index: /issm/trunk-jpl/src/m/enum/SmbDswrfEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/SmbDswrfEnum.m	(revision 19528)
+++ /issm/trunk-jpl/src/m/enum/SmbDswrfEnum.m	(revision 19528)
@@ -0,0 +1,11 @@
+function macro=SmbDswrfEnum()
+%SMBDSWRFENUM - Enum of SmbDswrf
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+%            Please read src/c/shared/Enum/README for more information
+%
+%   Usage:
+%      macro=SmbDswrfEnum()
+
+macro=StringToEnum('SmbDswrf');
Index: /issm/trunk-jpl/src/m/enum/SmbDzMinEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/SmbDzMinEnum.m	(revision 19528)
+++ /issm/trunk-jpl/src/m/enum/SmbDzMinEnum.m	(revision 19528)
@@ -0,0 +1,11 @@
+function macro=SmbDzMinEnum()
+%SMBDZMINENUM - Enum of SmbDzMin
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+%            Please read src/c/shared/Enum/README for more information
+%
+%   Usage:
+%      macro=SmbDzMinEnum()
+
+macro=StringToEnum('SmbDzMin');
Index: /issm/trunk-jpl/src/m/enum/SmbDzTopEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/SmbDzTopEnum.m	(revision 19528)
+++ /issm/trunk-jpl/src/m/enum/SmbDzTopEnum.m	(revision 19528)
@@ -0,0 +1,11 @@
+function macro=SmbDzTopEnum()
+%SMBDZTOPENUM - Enum of SmbDzTop
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+%            Please read src/c/shared/Enum/README for more information
+%
+%   Usage:
+%      macro=SmbDzTopEnum()
+
+macro=StringToEnum('SmbDzTop');
Index: /issm/trunk-jpl/src/m/enum/SmbEAirEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/SmbEAirEnum.m	(revision 19528)
+++ /issm/trunk-jpl/src/m/enum/SmbEAirEnum.m	(revision 19528)
@@ -0,0 +1,11 @@
+function macro=SmbEAirEnum()
+%SMBEAIRENUM - Enum of SmbEAir
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+%            Please read src/c/shared/Enum/README for more information
+%
+%   Usage:
+%      macro=SmbEAirEnum()
+
+macro=StringToEnum('SmbEAir');
Index: /issm/trunk-jpl/src/m/enum/SmbEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/SmbEnum.m	(revision 19528)
+++ /issm/trunk-jpl/src/m/enum/SmbEnum.m	(revision 19528)
@@ -0,0 +1,11 @@
+function macro=SmbEnum()
+%SMBENUM - Enum of Smb
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+%            Please read src/c/shared/Enum/README for more information
+%
+%   Usage:
+%      macro=SmbEnum()
+
+macro=StringToEnum('Smb');
Index: /issm/trunk-jpl/src/m/enum/SmbKEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/SmbKEnum.m	(revision 19528)
+++ /issm/trunk-jpl/src/m/enum/SmbKEnum.m	(revision 19528)
@@ -0,0 +1,11 @@
+function macro=SmbKEnum()
+%SMBKENUM - Enum of SmbK
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+%            Please read src/c/shared/Enum/README for more information
+%
+%   Usage:
+%      macro=SmbKEnum()
+
+macro=StringToEnum('SmbK');
Index: /issm/trunk-jpl/src/m/enum/SmbOutputFreqEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/SmbOutputFreqEnum.m	(revision 19528)
+++ /issm/trunk-jpl/src/m/enum/SmbOutputFreqEnum.m	(revision 19528)
@@ -0,0 +1,11 @@
+function macro=SmbOutputFreqEnum()
+%SMBOUTPUTFREQENUM - Enum of SmbOutputFreq
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+%            Please read src/c/shared/Enum/README for more information
+%
+%   Usage:
+%      macro=SmbOutputFreqEnum()
+
+macro=StringToEnum('SmbOutputFreq');
Index: /issm/trunk-jpl/src/m/enum/SmbPAirEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/SmbPAirEnum.m	(revision 19528)
+++ /issm/trunk-jpl/src/m/enum/SmbPAirEnum.m	(revision 19528)
@@ -0,0 +1,11 @@
+function macro=SmbPAirEnum()
+%SMBPAIRENUM - Enum of SmbPAir
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+%            Please read src/c/shared/Enum/README for more information
+%
+%   Usage:
+%      macro=SmbPAirEnum()
+
+macro=StringToEnum('SmbPAir');
Index: /issm/trunk-jpl/src/m/enum/SmbPEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/SmbPEnum.m	(revision 19528)
+++ /issm/trunk-jpl/src/m/enum/SmbPEnum.m	(revision 19528)
@@ -0,0 +1,11 @@
+function macro=SmbPEnum()
+%SMBPENUM - Enum of SmbP
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+%            Please read src/c/shared/Enum/README for more information
+%
+%   Usage:
+%      macro=SmbPEnum()
+
+macro=StringToEnum('SmbP');
Index: /issm/trunk-jpl/src/m/enum/SmbSpinUpEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/SmbSpinUpEnum.m	(revision 19528)
+++ /issm/trunk-jpl/src/m/enum/SmbSpinUpEnum.m	(revision 19528)
@@ -0,0 +1,11 @@
+function macro=SmbSpinUpEnum()
+%SMBSPINUPENUM - Enum of SmbSpinUp
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+%            Please read src/c/shared/Enum/README for more information
+%
+%   Usage:
+%      macro=SmbSpinUpEnum()
+
+macro=StringToEnum('SmbSpinUp');
Index: /issm/trunk-jpl/src/m/enum/SmbSwIdxEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/SmbSwIdxEnum.m	(revision 19528)
+++ /issm/trunk-jpl/src/m/enum/SmbSwIdxEnum.m	(revision 19528)
@@ -0,0 +1,11 @@
+function macro=SmbSwIdxEnum()
+%SMBSWIDXENUM - Enum of SmbSwIdx
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+%            Please read src/c/shared/Enum/README for more information
+%
+%   Usage:
+%      macro=SmbSwIdxEnum()
+
+macro=StringToEnum('SmbSwIdx');
Index: /issm/trunk-jpl/src/m/enum/SmbT0dryEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/SmbT0dryEnum.m	(revision 19528)
+++ /issm/trunk-jpl/src/m/enum/SmbT0dryEnum.m	(revision 19528)
@@ -0,0 +1,11 @@
+function macro=SmbT0dryEnum()
+%SMBT0DRYENUM - Enum of SmbT0dry
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+%            Please read src/c/shared/Enum/README for more information
+%
+%   Usage:
+%      macro=SmbT0dryEnum()
+
+macro=StringToEnum('SmbT0dry');
Index: /issm/trunk-jpl/src/m/enum/SmbT0wetEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/SmbT0wetEnum.m	(revision 19528)
+++ /issm/trunk-jpl/src/m/enum/SmbT0wetEnum.m	(revision 19528)
@@ -0,0 +1,11 @@
+function macro=SmbT0wetEnum()
+%SMBT0WETENUM - Enum of SmbT0wet
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+%            Please read src/c/shared/Enum/README for more information
+%
+%   Usage:
+%      macro=SmbT0wetEnum()
+
+macro=StringToEnum('SmbT0wet');
Index: /issm/trunk-jpl/src/m/enum/SmbTaEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/SmbTaEnum.m	(revision 19528)
+++ /issm/trunk-jpl/src/m/enum/SmbTaEnum.m	(revision 19528)
@@ -0,0 +1,11 @@
+function macro=SmbTaEnum()
+%SMBTAENUM - Enum of SmbTa
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+%            Please read src/c/shared/Enum/README for more information
+%
+%   Usage:
+%      macro=SmbTaEnum()
+
+macro=StringToEnum('SmbTa');
Index: /issm/trunk-jpl/src/m/enum/SmbTmeanEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/SmbTmeanEnum.m	(revision 19528)
+++ /issm/trunk-jpl/src/m/enum/SmbTmeanEnum.m	(revision 19528)
@@ -0,0 +1,11 @@
+function macro=SmbTmeanEnum()
+%SMBTMEANENUM - Enum of SmbTmean
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+%            Please read src/c/shared/Enum/README for more information
+%
+%   Usage:
+%      macro=SmbTmeanEnum()
+
+macro=StringToEnum('SmbTmean');
Index: /issm/trunk-jpl/src/m/enum/SmbTzEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/SmbTzEnum.m	(revision 19528)
+++ /issm/trunk-jpl/src/m/enum/SmbTzEnum.m	(revision 19528)
@@ -0,0 +1,11 @@
+function macro=SmbTzEnum()
+%SMBTZENUM - Enum of SmbTz
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+%            Please read src/c/shared/Enum/README for more information
+%
+%   Usage:
+%      macro=SmbTzEnum()
+
+macro=StringToEnum('SmbTz');
Index: /issm/trunk-jpl/src/m/enum/SmbVEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/SmbVEnum.m	(revision 19528)
+++ /issm/trunk-jpl/src/m/enum/SmbVEnum.m	(revision 19528)
@@ -0,0 +1,11 @@
+function macro=SmbVEnum()
+%SMBVENUM - Enum of SmbV
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+%            Please read src/c/shared/Enum/README for more information
+%
+%   Usage:
+%      macro=SmbVEnum()
+
+macro=StringToEnum('SmbV');
Index: /issm/trunk-jpl/src/m/enum/SmbVzEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/SmbVzEnum.m	(revision 19528)
+++ /issm/trunk-jpl/src/m/enum/SmbVzEnum.m	(revision 19528)
@@ -0,0 +1,11 @@
+function macro=SmbVzEnum()
+%SMBVZENUM - Enum of SmbVz
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+%            Please read src/c/shared/Enum/README for more information
+%
+%   Usage:
+%      macro=SmbVzEnum()
+
+macro=StringToEnum('SmbVz');
Index: /issm/trunk-jpl/src/m/enum/SmbZMaxEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/SmbZMaxEnum.m	(revision 19528)
+++ /issm/trunk-jpl/src/m/enum/SmbZMaxEnum.m	(revision 19528)
@@ -0,0 +1,11 @@
+function macro=SmbZMaxEnum()
+%SMBZMAXENUM - Enum of SmbZMax
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+%            Please read src/c/shared/Enum/README for more information
+%
+%   Usage:
+%      macro=SmbZMaxEnum()
+
+macro=StringToEnum('SmbZMax');
Index: /issm/trunk-jpl/src/m/enum/SmbZMinEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/SmbZMinEnum.m	(revision 19528)
+++ /issm/trunk-jpl/src/m/enum/SmbZMinEnum.m	(revision 19528)
@@ -0,0 +1,11 @@
+function macro=SmbZMinEnum()
+%SMBZMINENUM - Enum of SmbZMin
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+%            Please read src/c/shared/Enum/README for more information
+%
+%   Usage:
+%      macro=SmbZMinEnum()
+
+macro=StringToEnum('SmbZMin');
Index: /issm/trunk-jpl/src/m/enum/SmbZTopEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/SmbZTopEnum.m	(revision 19528)
+++ /issm/trunk-jpl/src/m/enum/SmbZTopEnum.m	(revision 19528)
@@ -0,0 +1,11 @@
+function macro=SmbZTopEnum()
+%SMBZTOPENUM - Enum of SmbZTop
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+%            Please read src/c/shared/Enum/README for more information
+%
+%   Usage:
+%      macro=SmbZTopEnum()
+
+macro=StringToEnum('SmbZTop');
Index: /issm/trunk-jpl/src/m/enum/SmbZYEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/SmbZYEnum.m	(revision 19528)
+++ /issm/trunk-jpl/src/m/enum/SmbZYEnum.m	(revision 19528)
@@ -0,0 +1,11 @@
+function macro=SmbZYEnum()
+%SMBZYENUM - Enum of SmbZY
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+%            Please read src/c/shared/Enum/README for more information
+%
+%   Usage:
+%      macro=SmbZYEnum()
+
+macro=StringToEnum('SmbZY');
Index: /issm/trunk-jpl/test/NightlyRun/test109.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test109.m	(revision 19527)
+++ /issm/trunk-jpl/test/NightlyRun/test109.m	(revision 19528)
@@ -8,7 +8,8 @@
 md.transient.isstressbalance=0;
 md.transient.ismasstransport=0;
-md.transient.issmb=0;
+md.transient.issmb=1;
 md.transient.isthermal=1;
 md.transient.isgroundingline=0;
+md.verbose=verbose('11111111');
 md=solve(md,TransientSolutionEnum());
 
Index: /issm/trunk-jpl/test/NightlyRun/test109.py
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test109.py	(revision 19527)
+++ /issm/trunk-jpl/test/NightlyRun/test109.py	(revision 19528)
@@ -17,5 +17,5 @@
 md.transient.isstressbalance=False
 md.transient.ismasstransport=False
-md.transient.issmb=False
+md.transient.issmb=True
 md.transient.isthermal=True
 md.transient.isgroundingline=False
Index: /issm/trunk-jpl/test/NightlyRun/test121.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test121.m	(revision 19527)
+++ /issm/trunk-jpl/test/NightlyRun/test121.m	(revision 19528)
@@ -10,5 +10,5 @@
 md.transient.isstressbalance=0;
 md.transient.ismasstransport=0;
-md.transient.issmb=0;
+md.transient.issmb=1;
 md.transient.isthermal=1;
 md.transient.isgroundingline=0;
Index: /issm/trunk-jpl/test/NightlyRun/test121.py
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test121.py	(revision 19527)
+++ /issm/trunk-jpl/test/NightlyRun/test121.py	(revision 19528)
@@ -19,5 +19,5 @@
 md.transient.isstressbalance=False
 md.transient.ismasstransport=False
-md.transient.issmb=False
+md.transient.issmb=True
 md.transient.isthermal=True
 md.transient.isgroundingline=False
Index: /issm/trunk-jpl/test/NightlyRun/test207.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test207.m	(revision 19527)
+++ /issm/trunk-jpl/test/NightlyRun/test207.m	(revision 19528)
@@ -8,5 +8,5 @@
 md.transient.isstressbalance=0;
 md.transient.ismasstransport=0;
-md.transient.issmb=0;
+md.transient.issmb=1;
 md.transient.isthermal=1;
 md.transient.isgroundingline=0;
Index: /issm/trunk-jpl/test/NightlyRun/test207.py
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test207.py	(revision 19527)
+++ /issm/trunk-jpl/test/NightlyRun/test207.py	(revision 19528)
@@ -19,5 +19,5 @@
 md.transient.isstressbalance=False
 md.transient.ismasstransport=False
-md.transient.issmb=False
+md.transient.issmb=True
 md.transient.isthermal=True
 md.transient.isgroundingline=False
Index: /issm/trunk-jpl/test/NightlyRun/test232.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test232.m	(revision 19527)
+++ /issm/trunk-jpl/test/NightlyRun/test232.m	(revision 19528)
@@ -11,5 +11,5 @@
 md.transient.isstressbalance=0;
 md.transient.ismasstransport=0;
-md.transient.issmb=0;
+md.transient.issmb=1;
 md.transient.isthermal=1;
 md.transient.isgroundingline=0;
Index: /issm/trunk-jpl/test/NightlyRun/test232.py
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test232.py	(revision 19527)
+++ /issm/trunk-jpl/test/NightlyRun/test232.py	(revision 19528)
@@ -21,5 +21,5 @@
 md.transient.isstressbalance=False
 md.transient.ismasstransport=False
-md.transient.issmb=False
+md.transient.issmb=True
 md.transient.isthermal=True
 md.transient.isgroundingline=False
Index: /issm/trunk-jpl/test/NightlyRun/test3009.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test3009.m	(revision 19527)
+++ /issm/trunk-jpl/test/NightlyRun/test3009.m	(revision 19528)
@@ -8,5 +8,5 @@
 md.transient.isstressbalance=0;
 md.transient.ismasstransport=0;
-md.transient.issmb=0;
+md.transient.issmb=1;
 md.transient.isthermal=1;
 md.transient.isgroundingline=0;
Index: /issm/trunk-jpl/test/NightlyRun/test3009.py
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test3009.py	(revision 19527)
+++ /issm/trunk-jpl/test/NightlyRun/test3009.py	(revision 19528)
@@ -17,5 +17,5 @@
 md.transient.isstressbalance=False
 md.transient.ismasstransport=False
-md.transient.issmb=False
+md.transient.issmb=True
 md.transient.isthermal=True
 md.transient.isgroundingline=False
Index: /issm/trunk-jpl/test/NightlyRun/test3109.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test3109.m	(revision 19527)
+++ /issm/trunk-jpl/test/NightlyRun/test3109.m	(revision 19528)
@@ -8,5 +8,5 @@
 md.transient.isstressbalance=0;
 md.transient.ismasstransport=0;
-md.transient.issmb=0;
+md.transient.issmb=1;
 md.transient.isthermal=1;
 md.transient.isgroundingline=0;
Index: /issm/trunk-jpl/test/NightlyRun/test3109.py
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test3109.py	(revision 19527)
+++ /issm/trunk-jpl/test/NightlyRun/test3109.py	(revision 19528)
@@ -17,5 +17,5 @@
 md.transient.isstressbalance=False
 md.transient.ismasstransport=False
-md.transient.issmb=False
+md.transient.issmb=True
 md.transient.isthermal=True
 md.transient.isgroundingline=False
Index: /issm/trunk-jpl/test/NightlyRun/test313.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test313.m	(revision 19527)
+++ /issm/trunk-jpl/test/NightlyRun/test313.m	(revision 19528)
@@ -9,5 +9,5 @@
 md.transient.isstressbalance=0;
 md.transient.ismasstransport=0;
-md.transient.issmb=0;
+md.transient.issmb=1;
 md.transient.isthermal=1;
 md.transient.isgroundingline=0;
Index: /issm/trunk-jpl/test/NightlyRun/test313.py
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test313.py	(revision 19527)
+++ /issm/trunk-jpl/test/NightlyRun/test313.py	(revision 19528)
@@ -18,5 +18,5 @@
 md.transient.isstressbalance=False
 md.transient.ismasstransport=False
-md.transient.issmb=False
+md.transient.issmb=True
 md.transient.isthermal=True
 md.transient.isgroundingline=False
Index: /issm/trunk-jpl/test/NightlyRun/test326.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test326.m	(revision 19527)
+++ /issm/trunk-jpl/test/NightlyRun/test326.m	(revision 19528)
@@ -10,5 +10,5 @@
 md.transient.isstressbalance=0;
 md.transient.ismasstransport=0;
-md.transient.issmb=0;
+md.transient.issmb=1;
 md.transient.isthermal=1;
 md.transient.isgroundingline=0;
Index: /issm/trunk-jpl/test/NightlyRun/test326.py
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test326.py	(revision 19527)
+++ /issm/trunk-jpl/test/NightlyRun/test326.py	(revision 19528)
@@ -20,5 +20,5 @@
 md.transient.isstressbalance=False
 md.transient.ismasstransport=False
-md.transient.issmb=False
+md.transient.issmb=True
 md.transient.isthermal=True
 md.transient.isgroundingline=False
Index: /issm/trunk-jpl/test/NightlyRun/test407.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test407.m	(revision 19527)
+++ /issm/trunk-jpl/test/NightlyRun/test407.m	(revision 19528)
@@ -8,5 +8,5 @@
 md.transient.isstressbalance=0;
 md.transient.ismasstransport=0;
-md.transient.issmb=0;
+md.transient.issmb=1;
 md.transient.isthermal=1;
 md.transient.isgroundingline=0;
Index: /issm/trunk-jpl/test/NightlyRun/test407.py
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test407.py	(revision 19527)
+++ /issm/trunk-jpl/test/NightlyRun/test407.py	(revision 19528)
@@ -18,5 +18,5 @@
 md.transient.isstressbalance=False
 md.transient.ismasstransport=False
-md.transient.issmb=False
+md.transient.issmb=True
 md.transient.isthermal=True
 md.transient.isgroundingline=False
Index: /issm/trunk-jpl/test/NightlyRun/test437.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test437.m	(revision 19527)
+++ /issm/trunk-jpl/test/NightlyRun/test437.m	(revision 19528)
@@ -37,6 +37,6 @@
 %Additional settings
 md.transient.ismasstransport=0;
-md.transient.issmb=0;
 md.transient.isstressbalance=0;
+md.transient.issmb=1;
 md.transient.isthermal=1;
 md.thermal.stabilization = 0;
Index: /issm/trunk-jpl/test/NightlyRun/test515.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test515.m	(revision 19527)
+++ /issm/trunk-jpl/test/NightlyRun/test515.m	(revision 19528)
@@ -9,5 +9,5 @@
 md.transient.isstressbalance=0;
 md.transient.ismasstransport=0;
-md.transient.issmb=0;
+md.transient.issmb=1;
 md.transient.isthermal=1;
 md.transient.isgroundingline=0;
Index: /issm/trunk-jpl/test/NightlyRun/test515.py
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test515.py	(revision 19527)
+++ /issm/trunk-jpl/test/NightlyRun/test515.py	(revision 19528)
@@ -18,5 +18,5 @@
 md.transient.isstressbalance=False
 md.transient.ismasstransport=False
-md.transient.issmb=False
+md.transient.issmb=True
 md.transient.isthermal=True
 md.transient.isgroundingline=False
