Index: /issm/trunk-jpl/src/c/classes/Elements/Element.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 26270)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 26271)
@@ -3621,18 +3621,22 @@
 	IssmDouble initMass=0.0;
    IssmDouble sumR=0.0;
-   IssmDouble sumM=0.0;
+	IssmDouble sumF=0.0;
+	IssmDouble sumM=0.0;
 	IssmDouble sumMsurf=0.0;
-   IssmDouble sumEC=0.0;
-   IssmDouble sumP=0.0;
-   IssmDouble sumW=0.0;
-   IssmDouble sumMassAdd=0.0;
+	IssmDouble sumEC=0.0;
+	IssmDouble sumP=0.0;
+	IssmDouble sumRa=0.0;
+	IssmDouble sumW=0.0;
+	IssmDouble sumMassAdd=0.0;
 	IssmDouble fac=0.0;
 	IssmDouble sumMass=0.0;
 	IssmDouble dMass=0.0;
 	IssmDouble accsumR=0.0;
+	IssmDouble accsumF=0.0;
 	IssmDouble accsumM=0.0;
 	IssmDouble accsumSMB=0.0;
 	IssmDouble accsumEC=0.0;
 	IssmDouble accsumP=0.0;
+	IssmDouble accsumRa=0.0;
 	bool isgraingrowth,isalbedo,isshortwave,isthermal,isaccumulation,ismelt,isdensification,isturbulentflux;
 	bool isconstrainsurfaceT=false;
@@ -3663,4 +3667,6 @@
 	IssmDouble  Msurf = 0.0;
 	IssmDouble  R = 0.0;
+	IssmDouble  F = 0.0;
+	IssmDouble  Ra = 0.0;
 	IssmDouble  mAdd = 0.0;
 	IssmDouble  dz_add = 0.0;
@@ -3802,4 +3808,6 @@
 		this->SetElementInput(SmbAccumulatedMeltEnum,0.0);
 		this->SetElementInput(SmbAccumulatedRunoffEnum,0.0);
+		this->SetElementInput(SmbAccumulatedRefreezeEnum,0.0);
+		this->SetElementInput(SmbAccumulatedRainEnum,0.0);
 		this->SetElementInput(SmbAccumulatedPrecipitationEnum,0.0);
 
@@ -3830,5 +3838,5 @@
 
 	// initialize cumulative variables
-	sumR = 0; sumM = 0; sumEC = 0; sumP = 0; sumMassAdd = 0; sumMsurf = 0;
+	sumR = 0; sumF=0; sumM = 0; sumEC = 0; sumP = 0; sumMassAdd = 0; sumMsurf = 0; sumRa = 0;
 
 	//before starting loop, realize that the transient core runs this smb_core at time = time +deltaT.
@@ -3843,4 +3851,6 @@
 		Input *sumM_input          = this->GetInput(SmbMeltEnum);  _assert_(sumM_input);
 		Input *sumR_input          = this->GetInput(SmbRunoffEnum);  _assert_(sumR_input);
+		Input *sumF_input          = this->GetInput(SmbRefreezeEnum);  _assert_(sumF_input);
+		Input *sumRa_input         = this->GetInput(SmbRainEnum);  _assert_(sumRa_input);
 		Input *sumP_input          = this->GetInput(SmbPrecipitationEnum);  _assert_(sumP_input);
 		Input *ULW_input           = this->GetInput(SmbMeanULWEnum);  _assert_(ULW_input);
@@ -3871,4 +3881,8 @@
 		sumR_input->GetInputAverage(&sumR);
 		sumR=sumR*dt*rho_ice;
+		sumF_input->GetInputAverage(&sumF);
+		sumF=sumF*dt*rho_ice;
+		sumRa_input->GetInputAverage(&sumRa);
+		sumRa=sumRa*dt*rho_ice;
 		sumP_input->GetInputAverage(&sumP);
 		sumP=sumP*dt*rho_ice;
@@ -3934,9 +3948,9 @@
 
 	/*Add snow/rain to top grid cell adjusting cell depth, temperature and density*/
-	if(isaccumulation)accumulation(&T, &dz, &d, &W, &a, &adiff, &re, &gdn, &gsp, &m, aIdx, dsnowIdx, Tmean, Ta, P, dzMin, aSnow, C, V, Vmean, rho_ice,this->Sid());
+	if(isaccumulation)accumulation(&T, &dz, &d, &W, &a, &adiff, &re, &gdn, &gsp, &Ra, &m, aIdx, dsnowIdx, Tmean, Ta, P, dzMin, aSnow, C, V, Vmean, rho_ice,this->Sid());
 
 	/*Calculate water production, M [kg m-2] resulting from snow/ice temperature exceeding 273.15 deg K
 	 * (> 0 deg C), runoff R [kg m-2] and resulting changes in density and determine wet compaction [m]*/
-	if(ismelt)melt(&M, &Msurf, &R, &mAdd, &dz_add, &T, &d, &dz, &W, &a, &adiff, &re, &gdn, &gsp, &m, dzMin, zMax, zMin, zTop, zY, rho_ice,this->Sid());
+	if(ismelt)melt(&M, &Msurf, &R, &F, &mAdd, &dz_add, &T, &d, &dz, &W, &a, &adiff, &re, &gdn, &gsp, &m, Ra, dzMin, zMax, zMin, zTop, zY, rho_ice,this->Sid());
 
 	/*Allow non-melt densification and determine compaction [m]*/
@@ -3983,5 +3997,7 @@
 	sumW = cellsum(W,m);
 	sumP = P +  sumP;
-	sumEC = sumEC + EC;  // evap (-)/cond(+)
+	sumEC = EC + sumEC;  // evap (-)/cond(+)
+	sumRa = Ra + sumRa;
+	sumF = F + sumF;
 
 	/*Calculate total system mass:*/
@@ -4015,13 +4031,17 @@
    Input *accsumEC_input         = this->GetInput(SmbAccumulatedECEnum);  _assert_(accsumEC_input);
    Input *accsumM_input          = this->GetInput(SmbAccumulatedMeltEnum);  _assert_(accsumM_input);
-   Input *accsumR_input          = this->GetInput(SmbAccumulatedRunoffEnum);  _assert_(accsumR_input);
-   Input *accsumP_input          = this->GetInput(SmbAccumulatedPrecipitationEnum);  _assert_(accsumP_input);
-   Input *accsumSMB_input        = this->GetInput(SmbAccumulatedMassBalanceEnum);  _assert_(accsumP_input);
+	Input *accsumR_input          = this->GetInput(SmbAccumulatedRunoffEnum);  _assert_(accsumR_input);
+	Input *accsumF_input          = this->GetInput(SmbAccumulatedRefreezeEnum);  _assert_(accsumF_input);
+	Input *accsumRa_input         = this->GetInput(SmbAccumulatedRainEnum);  _assert_(accsumRa_input);
+	Input *accsumP_input          = this->GetInput(SmbAccumulatedPrecipitationEnum);  _assert_(accsumP_input);
+	Input *accsumSMB_input        = this->GetInput(SmbAccumulatedMassBalanceEnum);  _assert_(accsumSMB_input);
 
    accsumEC_input->GetInputAverage(&accsumEC);
-   accsumM_input->GetInputAverage(&accsumM);
-   accsumR_input->GetInputAverage(&accsumR);
-   accsumP_input->GetInputAverage(&accsumP);
-   accsumSMB_input->GetInputAverage(&accsumSMB);
+	accsumM_input->GetInputAverage(&accsumM);
+	accsumR_input->GetInputAverage(&accsumR);
+	accsumF_input->GetInputAverage(&accsumF);
+	accsumRa_input->GetInputAverage(&accsumRa);
+	accsumP_input->GetInputAverage(&accsumP);
+	accsumSMB_input->GetInputAverage(&accsumSMB);
 
 	this->SetElementInput(SmbAccumulatedECEnum,accsumEC+EC/rho_ice);
@@ -4029,4 +4049,6 @@
 	this->SetElementInput(SmbAccumulatedMeltEnum,accsumM+M/rho_ice);
 	this->SetElementInput(SmbAccumulatedRunoffEnum,accsumR+R/rho_ice);
+	this->SetElementInput(SmbAccumulatedRefreezeEnum,accsumF+F/rho_ice);
+	this->SetElementInput(SmbAccumulatedRainEnum,accsumRa+Ra/rho_ice);
 	this->SetElementInput(SmbAccumulatedPrecipitationEnum,accsumP+P/rho_ice);
    /*}}}*/
@@ -4046,4 +4068,6 @@
 	this->SetElementInput(SmbMeltEnum,sumM/dt/rho_ice);
 	this->SetElementInput(SmbRunoffEnum,sumR/dt/rho_ice);
+	this->SetElementInput(SmbRefreezeEnum,sumF/dt/rho_ice);
+	this->SetElementInput(SmbRainEnum,sumRa/dt/rho_ice);
 	this->SetElementInput(SmbPrecipitationEnum,sumP/dt/rho_ice);
 	this->SetElementInput(SmbMeanULWEnum,meanULW);
Index: /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp	(revision 26270)
+++ /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp	(revision 26271)
@@ -1278,5 +1278,5 @@
 
 } /*}}}*/ 
-void accumulation(IssmDouble** pT, IssmDouble** pdz, IssmDouble** pd, IssmDouble** pW, IssmDouble** pa, IssmDouble** padiff, IssmDouble** pre, IssmDouble** pgdn, IssmDouble** pgsp, int* pm, int aIdx, int dsnowIdx, IssmDouble Tmean, IssmDouble T_air, IssmDouble P, IssmDouble dzMin, IssmDouble aSnow, IssmDouble C, IssmDouble V, IssmDouble Vmean, IssmDouble dIce, int sid){ /*{{{*/
+void accumulation(IssmDouble** pT, IssmDouble** pdz, IssmDouble** pd, IssmDouble** pW, IssmDouble** pa, IssmDouble** padiff, IssmDouble** pre, IssmDouble** pgdn, IssmDouble** pgsp, IssmDouble* pRa, int* pm, int aIdx, int dsnowIdx, IssmDouble Tmean, IssmDouble T_air, IssmDouble P, IssmDouble dzMin, IssmDouble aSnow, IssmDouble C, IssmDouble V, IssmDouble Vmean, IssmDouble dIce, int sid){ /*{{{*/
 
 	// Adds precipitation and deposition to the model grid
@@ -1294,8 +1294,9 @@
 	   dz = topgrid cell length [m]
 	   d = density of top grid gell [kg m-3]
-	   P = precipitation [mm w.e.] or [kg m-3]
-	   re = effective grain radius [mm]
-	   gdn = grain dentricity
-	   gsp = grain sphericity*/
+		P = precipitation [mm w.e.] or [kg m-3]
+		Ra = rainfall [mm w.e.] or [kg m-3]
+		re = effective grain radius [mm]
+		gdn = grain dentricity
+		gsp = grain sphericity*/
 
 	// MAIN FUNCTION
@@ -1323,4 +1324,5 @@
 	IssmDouble* gdn=NULL;
 	IssmDouble* gsp=NULL;
+	IssmDouble  ra=0.0;
 	int         m=0;
 
@@ -1338,4 +1340,5 @@
 	gsp=*pgsp;
 	m=*pm;
+	ra=*pRa;
 
 	//Density of fresh snow [kg m-3]
@@ -1439,4 +1442,6 @@
 				dz[0] = mass / d[0];    // dz is adjusted to conserve mass
 			}
+
+			ra=P;
 		}
 
@@ -1466,6 +1471,7 @@
 	*pgsp=gsp;
 	*pm=m;
+	*pRa=ra;
 } /*}}}*/
-void melt(IssmDouble* pM, IssmDouble* pMs, IssmDouble* pR, IssmDouble* pmAdd, IssmDouble* pdz_add, IssmDouble** pT, IssmDouble** pd, IssmDouble** pdz, IssmDouble** pW, IssmDouble** pa, IssmDouble** padiff, IssmDouble** pre, IssmDouble** pgdn, IssmDouble** pgsp, int* pn, IssmDouble dzMin, IssmDouble zMax, IssmDouble zMin, IssmDouble zTop, IssmDouble zY, IssmDouble dIce, int sid){ /*{{{*/
+void melt(IssmDouble* pM, IssmDouble* pMs, IssmDouble* pR, IssmDouble* pF, IssmDouble* pmAdd, IssmDouble* pdz_add, IssmDouble** pT, IssmDouble** pd, IssmDouble** pdz, IssmDouble** pW, IssmDouble** pa, IssmDouble** padiff, IssmDouble** pre, IssmDouble** pgdn, IssmDouble** pgsp, int* pn, IssmDouble Ra, IssmDouble dzMin, IssmDouble zMax, IssmDouble zMin, IssmDouble zTop, IssmDouble zY, IssmDouble dIce, int sid){ /*{{{*/
 
 	//// MELT ROUTINE
@@ -1488,5 +1494,5 @@
 	IssmDouble* EW=NULL;
 	IssmDouble* M=NULL;
-	int*       D=NULL;
+	int*        D=NULL;
 
 	IssmDouble sumM=0.0;
@@ -1532,6 +1538,7 @@
 	IssmDouble  surplusE = 0.0;
 	IssmDouble  surplusT = 0.0;
-	IssmDouble dz_add = 0.0;
+	IssmDouble  dz_add = 0.0;
 	IssmDouble  Rsum = 0.0;
+	IssmDouble  Fsum = 0.0;
 	IssmDouble* T=*pT;
 	IssmDouble* d=*pd;
@@ -1565,4 +1572,5 @@
 	// initialize melt and runoff scalars
 	Rsum = 0.0;       // runoff [kg]
+	Fsum = 0.0;       // refreeze [kg]
 	sumM = 0.0;       // total melt [kg]
 	mAdd = 0.0;       // mass added/removed to/from base of model [kg]
@@ -1610,4 +1618,13 @@
 
 	//// MELT, PERCOLATION AND REFREEZE
+	
+	// initialize refreeze, runoff, flxDn and dW vectors [kg]
+	IssmDouble* F = xNewZeroInit<IssmDouble>(n);
+
+	// Add previous refreeze to F and reset dW
+	for(int i=0;i<n;i++){
+		F[i]=F[i]+dW[i];
+		dW[i] = 0.0;
+	}
 
 	// run melt algorithm if there is melt water or excess pore water
@@ -1660,5 +1677,5 @@
 		}
 		Msurf = M[0];
-		sumM = cellsum(M,n);                                                       // total melt [kg]
+		sumM = max(0.0,cellsum(M,n)-Ra);  // total melt [kg] minus the liquid rain that had been added
 
 		// calculate maximum refreeze amount, maxF [kg]
@@ -1666,8 +1683,6 @@
 
 		// initialize refreeze, runoff, flxDn and dW vectors [kg]
- 		IssmDouble* F = xNewZeroInit<IssmDouble>(n);
 		IssmDouble* R = xNewZeroInit<IssmDouble>(n);
 
-		for(int i=0;i<n;i++)dW[i] = 0.0;
 		flxDn=xNewZeroInit<IssmDouble>(n+1);
 
@@ -1682,4 +1697,5 @@
 
 		IssmDouble depthice=0.0;
+		int Xi=0;
 		//// meltwater percolation
 		for(int i=0;i<n;i++){
@@ -1691,5 +1707,5 @@
 				for(int l=i;(l<n && d[l]>=dPHC-Dtol);l++) depthice=depthice+dz[l];
 			}
-
+			
 			// break loop if there is no meltwater and if depth is > mw_depth
 			if (fabs(inM) < Wtol && i > X){
@@ -1707,5 +1723,4 @@
 				dW[i] = max(min(inM, Wi - W[i]),-1*W[i]);            // change in pore water
 				R[i] = max(0.0, inM - dW[i]);             // runoff
-				F[i] = 0.0;
 			}
 			// check if no energy to refreeze meltwater
@@ -1720,5 +1735,4 @@
 				flxDn[i+1] = max(0.0, inM - dW[i]);         // meltwater out
 				R[i] = 0.0;
-				F[i] = 0.0;                               // no freeze 
 			}
 			// some or all meltwater refreezes
@@ -1736,8 +1750,5 @@
 				//-----------------------pore water-----------------------------
 				Wi = (dIce-d[i])* Swi * dz_0;            // irreducible water 
-				dW[i] = min(inM - F1, Wi-W[i]);         // change in pore water
-				if (dW[i] < 0.0-Wtol && -1*dW[i]> W[i]-Wtol ){
-					dW[i]= -1*W[i];
-				}
+				dW[i] = max(min(inM - F1, Wi-W[i]),-1*W[i]);         // change in pore water
 				IssmDouble F2 = 0.0;                                 
 
@@ -1748,10 +1759,9 @@
 					m[i] = m[i] + F2;                   // mass after refreeze
 					d[i] = m[i]/dz_0;
-					dW[i] = dW[i] - F2;
 				}
 
-				F[i] = F1 + F2;
-
-				flxDn[i+1] = inM - F1 - dW[i];     // meltwater out        
+				F[i] = F[i] + F1 + F2;
+
+				flxDn[i+1] = max(0.0,inM - F1 - dW[i]);     // meltwater out        
 				if (m[i]>Wtol){
 					T[i] = T[i] + ((F1+F2)*(LF+(CtoK - T[i])*CI)/(m[i]*CI));// change in temperature
@@ -1767,4 +1777,5 @@
 				}
 			}
+			Xi=Xi+1;
 		}
 
@@ -1777,5 +1788,5 @@
 
 		//calculate Rsum:
-		Rsum=cellsum(R,n) + flxDn[n];
+		Rsum=cellsum(R,n) + flxDn[Xi];
 
 		// delete all cells with zero mass
@@ -1803,7 +1814,12 @@
 
 		/*Free resources:*/
-		xDelete<IssmDouble>(F);
 		xDelete<IssmDouble>(R);
 	}
+
+	//calculate Fsum:
+	Fsum=cellsum(F,n);
+
+	/*Free resources:*/
+	xDelete<IssmDouble>(F);
 
 	//Merging of cells as they are burried under snow.
@@ -2040,4 +2056,5 @@
 	*pM=sumM;
 	*pR=Rsum;
+	*pF=Fsum;
 	*pmAdd=mAdd;
 	*pdz_add=dz_add;
Index: /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.h
===================================================================
--- /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.h	(revision 26270)
+++ /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.h	(revision 26271)
@@ -33,6 +33,6 @@
 void shortwave(IssmDouble** pswf, int swIdx, int aIdx, IssmDouble dsw, IssmDouble dswdiff, IssmDouble as, IssmDouble asdiff, IssmDouble* d, IssmDouble* dz, IssmDouble* re, IssmDouble dIce, int m, int sid);
 void thermo(IssmDouble* pEC, IssmDouble** T, IssmDouble* pulwrf, 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, bool isconstrainsurfaceT);
-void accumulation(IssmDouble** pT, IssmDouble** pdz, IssmDouble** pd, IssmDouble** pW, IssmDouble** pa, IssmDouble** padiff, IssmDouble** pre, IssmDouble** pgdn, IssmDouble** pgsp, int* pm, int aIdx, int dsnowIdx, IssmDouble Tmean, IssmDouble Ta, IssmDouble P, IssmDouble dzMin, IssmDouble aSnow, IssmDouble C, IssmDouble V, IssmDouble Vmean, IssmDouble dIce, int sid);
-void melt(IssmDouble* pM, IssmDouble* pMs, IssmDouble* pR, IssmDouble* pmAdd, IssmDouble* pdz_add, IssmDouble** pT, IssmDouble** pd, IssmDouble** pdz, IssmDouble** pW, IssmDouble** pa, IssmDouble** padiff, IssmDouble** pre, IssmDouble** pgdn, IssmDouble** pgsp, int* pn, IssmDouble dzMin, IssmDouble zMax, IssmDouble zMin, IssmDouble zTop, IssmDouble zY, IssmDouble dIce, int sid);
+void accumulation(IssmDouble** pT, IssmDouble** pdz, IssmDouble** pd, IssmDouble** pW, IssmDouble** pa, IssmDouble** padiff, IssmDouble** pre, IssmDouble** pgdn, IssmDouble** pgsp, IssmDouble* pRa, int* pm, int aIdx, int dsnowIdx, IssmDouble Tmean, IssmDouble Ta, IssmDouble P, IssmDouble dzMin, IssmDouble aSnow, IssmDouble C, IssmDouble V, IssmDouble Vmean, IssmDouble dIce, int sid);
+void melt(IssmDouble* pM, IssmDouble* pMs, IssmDouble* pR, IssmDouble* pF, IssmDouble* pmAdd, IssmDouble* pdz_add, IssmDouble** pT, IssmDouble** pd, IssmDouble** pdz, IssmDouble** pW, IssmDouble** pa, IssmDouble** padiff, IssmDouble** pre, IssmDouble** pgdn, IssmDouble** pgsp, int* pn, IssmDouble Ra, IssmDouble dzMin, IssmDouble zMax, IssmDouble zMin, IssmDouble zTop, IssmDouble zY, IssmDouble dIce, int sid);
 void densification(IssmDouble** pd,IssmDouble** pdz, IssmDouble* T, IssmDouble* re, int denIdx, int aIdx, int swIdx, IssmDouble adThresh, IssmDouble C, IssmDouble dt, IssmDouble Tmean, IssmDouble dIce, int m, int sid);
 void turbulentFlux(IssmDouble* pshf, IssmDouble* plhf, IssmDouble* pEC, IssmDouble Ta, IssmDouble Ts, IssmDouble V, IssmDouble eAir, IssmDouble pAir, IssmDouble ds, IssmDouble Ws, IssmDouble Vz, IssmDouble Tz, IssmDouble dIce, int sid);
Index: /issm/trunk-jpl/src/c/shared/Enum/Enum.vim
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 26270)
+++ /issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 26271)
@@ -711,4 +711,5 @@
 syn keyword cConstant LevelsetfunctionSlopeXEnum
 syn keyword cConstant LevelsetfunctionSlopeYEnum
+syn keyword cConstant LevelsetObservationEnum
 syn keyword cConstant LoadingforceXEnum
 syn keyword cConstant LoadingforceYEnum
@@ -716,4 +717,5 @@
 syn keyword cConstant MaskOceanLevelsetEnum
 syn keyword cConstant MaskIceLevelsetEnum
+syn keyword cConstant MaskIceRefLevelsetEnum
 syn keyword cConstant MasstransportSpcthicknessEnum
 syn keyword cConstant MaterialsRheologyBEnum
@@ -838,4 +840,6 @@
 syn keyword cConstant SmbAccumulatedMeltEnum
 syn keyword cConstant SmbAccumulatedPrecipitationEnum
+syn keyword cConstant SmbAccumulatedRainEnum
+syn keyword cConstant SmbAccumulatedRefreezeEnum
 syn keyword cConstant SmbAccumulatedRunoffEnum
 syn keyword cConstant SmbAEnum
@@ -906,4 +910,5 @@
 syn keyword cConstant SmbPrecipitationsPresentdayEnum
 syn keyword cConstant SmbPrecipitationsReconstructedEnum
+syn keyword cConstant SmbRainEnum
 syn keyword cConstant SmbReEnum
 syn keyword cConstant SmbRefreezeEnum
@@ -1015,4 +1020,5 @@
 syn keyword cConstant WaterfractionEnum
 syn keyword cConstant WaterheightEnum
+syn keyword cConstant WeightsLevelsetObservationEnum
 syn keyword cConstant WeightsSurfaceObservationEnum
 syn keyword cConstant OldAccumulatedDeltaBottomPressureEnum
@@ -1158,4 +1164,5 @@
 syn keyword cConstant CfsurfacelogvelEnum
 syn keyword cConstant CfsurfacesquareEnum
+syn keyword cConstant CflevelsetmisfitEnum
 syn keyword cConstant ChannelEnum
 syn keyword cConstant ChannelAreaEnum
@@ -1508,4 +1515,5 @@
 syn keyword cType BoolParam
 syn keyword cType Cfdragcoeffabsgrad
+syn keyword cType Cflevelsetmisfit
 syn keyword cType Cfsurfacelogvel
 syn keyword cType Cfsurfacesquare
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 26270)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 26271)
@@ -836,4 +836,6 @@
 	SmbAccumulatedMeltEnum,
 	SmbAccumulatedPrecipitationEnum,
+	SmbAccumulatedRainEnum,
+	SmbAccumulatedRefreezeEnum,
 	SmbAccumulatedRunoffEnum,
 	SmbAEnum,
@@ -905,4 +907,5 @@
 	SmbPrecipitationsPresentdayEnum,
 	SmbPrecipitationsReconstructedEnum,
+	SmbRainEnum,
 	SmbReEnum,
 	SmbRefreezeEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 26270)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 26271)
@@ -713,4 +713,5 @@
 		case LevelsetfunctionSlopeXEnum : return "LevelsetfunctionSlopeX";
 		case LevelsetfunctionSlopeYEnum : return "LevelsetfunctionSlopeY";
+		case LevelsetObservationEnum : return "LevelsetObservation";
 		case LoadingforceXEnum : return "LoadingforceX";
 		case LoadingforceYEnum : return "LoadingforceY";
@@ -718,4 +719,5 @@
 		case MaskOceanLevelsetEnum : return "MaskOceanLevelset";
 		case MaskIceLevelsetEnum : return "MaskIceLevelset";
+		case MaskIceRefLevelsetEnum : return "MaskIceRefLevelset";
 		case MasstransportSpcthicknessEnum : return "MasstransportSpcthickness";
 		case MaterialsRheologyBEnum : return "MaterialsRheologyB";
@@ -840,4 +842,6 @@
 		case SmbAccumulatedMeltEnum : return "SmbAccumulatedMelt";
 		case SmbAccumulatedPrecipitationEnum : return "SmbAccumulatedPrecipitation";
+		case SmbAccumulatedRainEnum : return "SmbAccumulatedRain";
+		case SmbAccumulatedRefreezeEnum : return "SmbAccumulatedRefreeze";
 		case SmbAccumulatedRunoffEnum : return "SmbAccumulatedRunoff";
 		case SmbAEnum : return "SmbA";
@@ -908,4 +912,5 @@
 		case SmbPrecipitationsPresentdayEnum : return "SmbPrecipitationsPresentday";
 		case SmbPrecipitationsReconstructedEnum : return "SmbPrecipitationsReconstructed";
+		case SmbRainEnum : return "SmbRain";
 		case SmbReEnum : return "SmbRe";
 		case SmbRefreezeEnum : return "SmbRefreeze";
@@ -1017,4 +1022,5 @@
 		case WaterfractionEnum : return "Waterfraction";
 		case WaterheightEnum : return "Waterheight";
+		case WeightsLevelsetObservationEnum : return "WeightsLevelsetObservation";
 		case WeightsSurfaceObservationEnum : return "WeightsSurfaceObservation";
 		case OldAccumulatedDeltaBottomPressureEnum : return "OldAccumulatedDeltaBottomPressure";
@@ -1160,4 +1166,5 @@
 		case CfsurfacelogvelEnum : return "Cfsurfacelogvel";
 		case CfsurfacesquareEnum : return "Cfsurfacesquare";
+		case CflevelsetmisfitEnum : return "Cflevelsetmisfit";
 		case ChannelEnum : return "Channel";
 		case ChannelAreaEnum : return "ChannelArea";
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 26270)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 26271)
@@ -728,4 +728,5 @@
 	      else if (strcmp(name,"LevelsetfunctionSlopeX")==0) return LevelsetfunctionSlopeXEnum;
 	      else if (strcmp(name,"LevelsetfunctionSlopeY")==0) return LevelsetfunctionSlopeYEnum;
+	      else if (strcmp(name,"LevelsetObservation")==0) return LevelsetObservationEnum;
 	      else if (strcmp(name,"LoadingforceX")==0) return LoadingforceXEnum;
 	      else if (strcmp(name,"LoadingforceY")==0) return LoadingforceYEnum;
@@ -733,4 +734,5 @@
 	      else if (strcmp(name,"MaskOceanLevelset")==0) return MaskOceanLevelsetEnum;
 	      else if (strcmp(name,"MaskIceLevelset")==0) return MaskIceLevelsetEnum;
+	      else if (strcmp(name,"MaskIceRefLevelset")==0) return MaskIceRefLevelsetEnum;
 	      else if (strcmp(name,"MasstransportSpcthickness")==0) return MasstransportSpcthicknessEnum;
 	      else if (strcmp(name,"MaterialsRheologyB")==0) return MaterialsRheologyBEnum;
@@ -750,10 +752,10 @@
 	      else if (strcmp(name,"MovingFrontalVx")==0) return MovingFrontalVxEnum;
 	      else if (strcmp(name,"MovingFrontalVy")==0) return MovingFrontalVyEnum;
-	      else if (strcmp(name,"Neumannflux")==0) return NeumannfluxEnum;
-	      else if (strcmp(name,"NewDamage")==0) return NewDamageEnum;
          else stage=7;
    }
    if(stage==7){
-	      if (strcmp(name,"Node")==0) return NodeEnum;
+	      if (strcmp(name,"Neumannflux")==0) return NeumannfluxEnum;
+	      else if (strcmp(name,"NewDamage")==0) return NewDamageEnum;
+	      else if (strcmp(name,"Node")==0) return NodeEnum;
 	      else if (strcmp(name,"OmegaAbsGradient")==0) return OmegaAbsGradientEnum;
 	      else if (strcmp(name,"OceantransportSpcbottompressure")==0) return OceantransportSpcbottompressureEnum;
@@ -858,4 +860,6 @@
 	      else if (strcmp(name,"SmbAccumulatedMelt")==0) return SmbAccumulatedMeltEnum;
 	      else if (strcmp(name,"SmbAccumulatedPrecipitation")==0) return SmbAccumulatedPrecipitationEnum;
+	      else if (strcmp(name,"SmbAccumulatedRain")==0) return SmbAccumulatedRainEnum;
+	      else if (strcmp(name,"SmbAccumulatedRefreeze")==0) return SmbAccumulatedRefreezeEnum;
 	      else if (strcmp(name,"SmbAccumulatedRunoff")==0) return SmbAccumulatedRunoffEnum;
 	      else if (strcmp(name,"SmbA")==0) return SmbAEnum;
@@ -871,12 +875,12 @@
 	      else if (strcmp(name,"SmbC")==0) return SmbCEnum;
 	      else if (strcmp(name,"SmbCcsnowValue")==0) return SmbCcsnowValueEnum;
-	      else if (strcmp(name,"SmbCciceValue")==0) return SmbCciceValueEnum;
+         else stage=8;
+   }
+   if(stage==8){
+	      if (strcmp(name,"SmbCciceValue")==0) return SmbCciceValueEnum;
 	      else if (strcmp(name,"SmbCotValue")==0) return SmbCotValueEnum;
 	      else if (strcmp(name,"SmbD")==0) return SmbDEnum;
 	      else if (strcmp(name,"SmbDailyairdensity")==0) return SmbDailyairdensityEnum;
-         else stage=8;
-   }
-   if(stage==8){
-	      if (strcmp(name,"SmbDailyairhumidity")==0) return SmbDailyairhumidityEnum;
+	      else if (strcmp(name,"SmbDailyairhumidity")==0) return SmbDailyairhumidityEnum;
 	      else if (strcmp(name,"SmbDailydlradiation")==0) return SmbDailydlradiationEnum;
 	      else if (strcmp(name,"SmbDailydsradiation")==0) return SmbDailydsradiationEnum;
@@ -929,4 +933,5 @@
 	      else if (strcmp(name,"SmbPrecipitationsPresentday")==0) return SmbPrecipitationsPresentdayEnum;
 	      else if (strcmp(name,"SmbPrecipitationsReconstructed")==0) return SmbPrecipitationsReconstructedEnum;
+	      else if (strcmp(name,"SmbRain")==0) return SmbRainEnum;
 	      else if (strcmp(name,"SmbRe")==0) return SmbReEnum;
 	      else if (strcmp(name,"SmbRefreeze")==0) return SmbRefreezeEnum;
@@ -993,13 +998,13 @@
 	      else if (strcmp(name,"SurfaceOld")==0) return SurfaceOldEnum;
 	      else if (strcmp(name,"SurfaceLogVelMisfit")==0) return SurfaceLogVelMisfitEnum;
-	      else if (strcmp(name,"SurfaceLogVxVyMisfit")==0) return SurfaceLogVxVyMisfitEnum;
+         else stage=9;
+   }
+   if(stage==9){
+	      if (strcmp(name,"SurfaceLogVxVyMisfit")==0) return SurfaceLogVxVyMisfitEnum;
 	      else if (strcmp(name,"SurfaceObservation")==0) return SurfaceObservationEnum;
 	      else if (strcmp(name,"SurfaceRelVelMisfit")==0) return SurfaceRelVelMisfitEnum;
 	      else if (strcmp(name,"SurfaceSlopeX")==0) return SurfaceSlopeXEnum;
 	      else if (strcmp(name,"SurfaceSlopeY")==0) return SurfaceSlopeYEnum;
-         else stage=9;
-   }
-   if(stage==9){
-	      if (strcmp(name,"Temperature")==0) return TemperatureEnum;
+	      else if (strcmp(name,"Temperature")==0) return TemperatureEnum;
 	      else if (strcmp(name,"TemperaturePDD")==0) return TemperaturePDDEnum;
 	      else if (strcmp(name,"TemperaturePicard")==0) return TemperaturePicardEnum;
@@ -1041,4 +1046,5 @@
 	      else if (strcmp(name,"Waterfraction")==0) return WaterfractionEnum;
 	      else if (strcmp(name,"Waterheight")==0) return WaterheightEnum;
+	      else if (strcmp(name,"WeightsLevelsetObservation")==0) return WeightsLevelsetObservationEnum;
 	      else if (strcmp(name,"WeightsSurfaceObservation")==0) return WeightsSurfaceObservationEnum;
 	      else if (strcmp(name,"OldAccumulatedDeltaBottomPressure")==0) return OldAccumulatedDeltaBottomPressureEnum;
@@ -1115,5 +1121,8 @@
 	      else if (strcmp(name,"Outputdefinition72")==0) return Outputdefinition72Enum;
 	      else if (strcmp(name,"Outputdefinition73")==0) return Outputdefinition73Enum;
-	      else if (strcmp(name,"Outputdefinition74")==0) return Outputdefinition74Enum;
+         else stage=10;
+   }
+   if(stage==10){
+	      if (strcmp(name,"Outputdefinition74")==0) return Outputdefinition74Enum;
 	      else if (strcmp(name,"Outputdefinition75")==0) return Outputdefinition75Enum;
 	      else if (strcmp(name,"Outputdefinition76")==0) return Outputdefinition76Enum;
@@ -1121,8 +1130,5 @@
 	      else if (strcmp(name,"Outputdefinition78")==0) return Outputdefinition78Enum;
 	      else if (strcmp(name,"Outputdefinition79")==0) return Outputdefinition79Enum;
-         else stage=10;
-   }
-   if(stage==10){
-	      if (strcmp(name,"Outputdefinition7")==0) return Outputdefinition7Enum;
+	      else if (strcmp(name,"Outputdefinition7")==0) return Outputdefinition7Enum;
 	      else if (strcmp(name,"Outputdefinition80")==0) return Outputdefinition80Enum;
 	      else if (strcmp(name,"Outputdefinition81")==0) return Outputdefinition81Enum;
@@ -1187,4 +1193,5 @@
 	      else if (strcmp(name,"Cfsurfacelogvel")==0) return CfsurfacelogvelEnum;
 	      else if (strcmp(name,"Cfsurfacesquare")==0) return CfsurfacesquareEnum;
+	      else if (strcmp(name,"Cflevelsetmisfit")==0) return CflevelsetmisfitEnum;
 	      else if (strcmp(name,"Channel")==0) return ChannelEnum;
 	      else if (strcmp(name,"ChannelArea")==0) return ChannelAreaEnum;
@@ -1237,5 +1244,8 @@
 	      else if (strcmp(name,"ExtrudeFromBaseAnalysis")==0) return ExtrudeFromBaseAnalysisEnum;
 	      else if (strcmp(name,"ExtrudeFromTopAnalysis")==0) return ExtrudeFromTopAnalysisEnum;
-	      else if (strcmp(name,"FSApproximation")==0) return FSApproximationEnum;
+         else stage=11;
+   }
+   if(stage==11){
+	      if (strcmp(name,"FSApproximation")==0) return FSApproximationEnum;
 	      else if (strcmp(name,"FSSolver")==0) return FSSolverEnum;
 	      else if (strcmp(name,"FSpressure")==0) return FSpressureEnum;
@@ -1244,8 +1254,5 @@
 	      else if (strcmp(name,"FileParam")==0) return FileParamEnum;
 	      else if (strcmp(name,"FixedTimestepping")==0) return FixedTimesteppingEnum;
-         else stage=11;
-   }
-   if(stage==11){
-	      if (strcmp(name,"FloatingArea")==0) return FloatingAreaEnum;
+	      else if (strcmp(name,"FloatingArea")==0) return FloatingAreaEnum;
 	      else if (strcmp(name,"FloatingAreaScaled")==0) return FloatingAreaScaledEnum;
 	      else if (strcmp(name,"FloatingMeltRate")==0) return FloatingMeltRateEnum;
@@ -1360,5 +1367,8 @@
 	      else if (strcmp(name,"Melange")==0) return MelangeEnum;
 	      else if (strcmp(name,"MeltingAnalysis")==0) return MeltingAnalysisEnum;
-	      else if (strcmp(name,"MeshElements")==0) return MeshElementsEnum;
+         else stage=12;
+   }
+   if(stage==12){
+	      if (strcmp(name,"MeshElements")==0) return MeshElementsEnum;
 	      else if (strcmp(name,"MeshX")==0) return MeshXEnum;
 	      else if (strcmp(name,"MeshY")==0) return MeshYEnum;
@@ -1367,8 +1377,5 @@
 	      else if (strcmp(name,"MinVy")==0) return MinVyEnum;
 	      else if (strcmp(name,"MinVz")==0) return MinVzEnum;
-         else stage=12;
-   }
-   if(stage==12){
-	      if (strcmp(name,"MismipFloatingMeltRate")==0) return MismipFloatingMeltRateEnum;
+	      else if (strcmp(name,"MismipFloatingMeltRate")==0) return MismipFloatingMeltRateEnum;
 	      else if (strcmp(name,"Moulin")==0) return MoulinEnum;
 	      else if (strcmp(name,"MpiDense")==0) return MpiDenseEnum;
@@ -1483,5 +1490,8 @@
 	      else if (strcmp(name,"SubelementMigration")==0) return SubelementMigrationEnum;
 	      else if (strcmp(name,"SurfaceSlopeSolution")==0) return SurfaceSlopeSolutionEnum;
-	      else if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum;
+         else stage=13;
+   }
+   if(stage==13){
+	      if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum;
 	      else if (strcmp(name,"Tetra")==0) return TetraEnum;
 	      else if (strcmp(name,"TetraInput")==0) return TetraInputEnum;
@@ -1490,8 +1500,5 @@
 	      else if (strcmp(name,"ThicknessErrorEstimator")==0) return ThicknessErrorEstimatorEnum;
 	      else if (strcmp(name,"TotalCalvingFluxLevelset")==0) return TotalCalvingFluxLevelsetEnum;
-         else stage=13;
-   }
-   if(stage==13){
-	      if (strcmp(name,"TotalCalvingMeltingFluxLevelset")==0) return TotalCalvingMeltingFluxLevelsetEnum;
+	      else if (strcmp(name,"TotalCalvingMeltingFluxLevelset")==0) return TotalCalvingMeltingFluxLevelsetEnum;
 	      else if (strcmp(name,"TotalFloatingBmb")==0) return TotalFloatingBmbEnum;
 	      else if (strcmp(name,"TotalFloatingBmbScaled")==0) return TotalFloatingBmbScaledEnum;
Index: /issm/trunk-jpl/src/m/solve/parseresultsfromdisk.m
===================================================================
--- /issm/trunk-jpl/src/m/solve/parseresultsfromdisk.m	(revision 26270)
+++ /issm/trunk-jpl/src/m/solve/parseresultsfromdisk.m	(revision 26271)
@@ -263,4 +263,6 @@
 	elseif strcmp(fieldname,'SmbPrecipitation'),
 		field = field*yts;
+	elseif strcmp(fieldname,'SmbRain'),
+		field = field*yts;
 	elseif strcmp(fieldname,'SmbRunoff'),
 		field = field*yts;
@@ -278,4 +280,6 @@
 		field = field*yts;
 	elseif strcmp(fieldname,'SmbMAdd'),
+		field = field*yts;
+	elseif strcmp(fieldname,'SmbWAdd'),
 		field = field*yts;
 	elseif strcmp(fieldname,'CalvingCalvingrate'),
Index: /issm/trunk-jpl/src/m/solve/parseresultsfromdisk.py
===================================================================
--- /issm/trunk-jpl/src/m/solve/parseresultsfromdisk.py	(revision 26270)
+++ /issm/trunk-jpl/src/m/solve/parseresultsfromdisk.py	(revision 26271)
@@ -214,4 +214,6 @@
         elif fieldname == 'SmbPrecipitation':
             field = field * yts
+        elif fieldname == 'SmbRain':
+            field = field * yts
         elif fieldname == 'SmbRunoff':
             field = field * yts
@@ -229,4 +231,6 @@
             field = field * yts
         elif fieldname == 'SmbMAdd':
+            field = field * yts
+        elif fieldname == 'SmbWAdd':
             field = field * yts
         elif fieldname == 'CalvingCalvingrate':
Index: /issm/trunk-jpl/test/NightlyRun/test243.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test243.m	(revision 26270)
+++ /issm/trunk-jpl/test/NightlyRun/test243.m	(revision 26271)
@@ -30,6 +30,8 @@
 md.smb.requested_outputs={'SmbDz','SmbT','SmbD','SmbRe','SmbGdn','SmbGsp','SmbEC',...
 	'SmbA','SmbMassBalance','SmbMAdd','SmbDzAdd','SmbFAC','SmbMeanSHF','SmbMeanLHF',...
-	'SmbMeanULW','SmbNetLW','SmbNetSW','SmbAccumulatedMassBalance','SmbAccumulatedRunoff',...
-	'SmbAccumulatedMelt','SmbAccumulatedEC','SmbAccumulatedPrecipitation'};
+	'SmbMeanULW','SmbNetLW','SmbNetSW','SmbWAdd','SmbRunoff','SmbRefreeze','SmbMelt',...
+	'SmbEC','SmbPrecipitation','SmbRain','SmbAccumulatedMassBalance','SmbAccumulatedRunoff',...
+	'SmbAccumulatedMelt','SmbAccumulatedEC','SmbAccumulatedPrecipitation','SmbAccumulatedRain',...
+	'SmbAccumulatedPrecipitation','SmbAccumulatedRefreeze'};
 
 %only run smb core: 
@@ -53,6 +55,6 @@
 
 %Fields and tolerances to track changes
-field_names      ={'Layers','SmbDz','SmbT' ,'SmbD' ,'SmbRe','SmbGdn','SmbGsp','SmbA' ,'SmbEC','SmbMassBalance','SmbMAdd','SmbDzAdd','SmbFAC','SmbMeanSHF','SmbMeanLHF','SmbMeanULW','SmbNetLW','SmbNetSW','SmbAccumulatedMassBalance','SmbAccumulatedRunoff','SmbAccumulatedMelt','SmbAccumulatedEC','SmbAccumulatedPrecipitation'};
-field_tolerances ={1e-12,2e-12,1e-12,2e-11,1e-11,2e-11,1e-11,1e-12,1e-11,1e-12,1e-12,1e-12,1e-11,2e-11,2e-11,1e-11,9e-10,2e-11,1e-11,9e-10,2e-11,1e-11,1e-11,1e-11,1e-11,1e-11,};
+field_names      ={'Layers','SmbDz','SmbT','SmbD','SmbRe','SmbGdn','SmbGsp','SmbA' ,'SmbEC','SmbMassBalance','SmbMAdd','SmbDzAdd','SmbFAC','SmbMeanSHF','SmbMeanLHF','SmbMeanULW','SmbNetLW','SmbNetSW','SmbAccumulatedMassBalance','SmbAccumulatedRunoff','SmbAccumulatedMelt','SmbAccumulatedEC','SmbAccumulatedPrecipitation','SmbAccumulatedRain','SmbAccumulatedRefreeze','SmbRunoff','SmbMelt','SmbEC','SmbPrecipitation','SmbRain','SmbRefreeze','SmbWAdd'};
+field_tolerances ={1e-12,2e-12,1e-12,2e-11,1e-11,2e-11,1e-11,1e-12,1e-11,1e-12,1e-12,1e-12,1e-11,2e-11,2e-11,1e-11,9e-10,2e-11,1e-11,9e-10,2e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11};
 
 field_values={...
@@ -79,4 +81,13 @@
 	(md.results.TransientSolution(end).SmbAccumulatedMelt(1)),...
 	(md.results.TransientSolution(end).SmbAccumulatedEC(1)),...
-	(md.results.TransientSolution(end).SmbAccumulatedPrecipitation(1))
+	(md.results.TransientSolution(end).SmbAccumulatedPrecipitation(1)),...
+	(md.results.TransientSolution(end).SmbAccumulatedRain(1)),...
+	(md.results.TransientSolution(end).SmbAccumulatedRefreeze(1)),...
+	(md.results.TransientSolution(200).SmbRunoff(1)),...
+	(md.results.TransientSolution(200).SmbMelt(1)),...
+	(md.results.TransientSolution(200).SmbEC(1)),...
+	(md.results.TransientSolution(200).SmbPrecipitation(1)),...
+	(md.results.TransientSolution(200).SmbRain(1)),...
+	(md.results.TransientSolution(200).SmbRefreeze(1)),...
+	(md.results.TransientSolution(200).SmbWAdd(1))...
 };
Index: /issm/trunk-jpl/test/NightlyRun/test243.py
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test243.py	(revision 26270)
+++ /issm/trunk-jpl/test/NightlyRun/test243.py	(revision 26271)
@@ -45,8 +45,10 @@
 #smb settings
 md.smb.requested_outputs = [
-    'SmbDz', 'SmbT', 'SmbD', 'SmbRe', 'SmbGdn', 'SmbGsp', 'SmbEC',
-    'SmbA', 'SmbMassBalance', 'SmbMAdd', 'SmbDzAdd', 'SmbFAC', 'SmbMeanSHF', 'SmbMeanLHF',
-    'SmbMeanULW', 'SmbNetLW', 'SmbNetSW','SmbAccumulatedMassBalance','SmbAccumulatedRunoff',
-    'SmbAccumulatedMelt','SmbAccumulatedEC','SmbAccumulatedPrecipitation'
+        'SmbDz','SmbT','SmbD','SmbRe','SmbGdn','SmbGsp','SmbEC',
+        'SmbA','SmbMassBalance','SmbMAdd','SmbDzAdd','SmbFAC','SmbMeanSHF','SmbMeanLHF',
+        'SmbMeanULW','SmbNetLW','SmbNetSW','SmbWAdd','SmbRunoff','SmbRefreeze','SmbMelt',
+        'SmbEC','SmbPrecipitation','SmbRain','SmbAccumulatedMassBalance','SmbAccumulatedRunoff',
+        'SmbAccumulatedMelt','SmbAccumulatedEC','SmbAccumulatedPrecipitation','SmbAccumulatedRain',
+        'SmbAccumulatedPrecipitation','SmbAccumulatedRefreeze'
     ]
 
@@ -70,6 +72,8 @@
 
 #Fields and tolerances to track changes
-field_names = ['Layers', 'SmbDz', 'SmbT', 'SmbD', 'SmbRe', 'SmbGdn', 'SmbGsp', 'SmbA', 'SmbEC', 'SmbMassBalance', 'SmbMAdd', 'SmbDzAdd', 'SmbFAC', 'SmbMeanSHF', 'SmbMeanLHF', 'SmbMeanULW', 'SmbNetLW', 'SmbNetSW', 'SmbAccumulatedMassBalance','SmbAccumulatedRunoff','SmbAccumulatedMelt','SmbAccumulatedEC','SmbAccumulatedPrecipitation']
-field_tolerances = [1e-12, 2e-12, 1e-12, 1e-11, 2e-11, 2e-11, 1e-11, 1e-12, 1e-11, 1e-12, 1e-12, 1e-12, 1e-11, 2e-11, 2e-11, 1e-11, 9e-10, 2e-11, 1e-11, 1e-11, 1e-11, 1e-11, 1e-11]
+field_names = ['Layers','SmbDz','SmbT','SmbD','SmbRe','SmbGdn','SmbGsp','SmbA' ,'SmbEC','SmbMassBalance','SmbMAdd','SmbDzAdd','SmbFAC','SmbMeanSHF','SmbMeanLHF','SmbMeanULW','SmbNetLW','SmbNetSW','SmbAccumulatedMassBalance','SmbAccumulatedRunoff','SmbAccumulatedMelt','SmbAccumulatedEC','SmbAccumulatedPrecipitation','SmbAccumulatedRain','SmbAccumulatedRefreeze','SmbRunoff','SmbMelt','SmbEC','SmbPrecipitation','SmbRain','SmbRefreeze','SmbWAdd']
+field_tolerances = [1e-12, 2e-12, 1e-12, 2e-11, 1e-11, 2e-11, 1e-11, 1e-12, 1e-11, 1e-12, 1e-12, 1e-12, 1e-11, 2e-11, 2e-11, 1e-11, 9e-10, 2e-11, 1e-11, 9e-10, 2e-11, 1e-11, 1e-11, 1e-11, 1e-11, 1e-11, 1e-11, 1e-11, 1e-11, 1e-11, 1e-11, 1e-11]
+
+
 # Shape is different in python solution (fixed using reshape) which can cause test failure
 field_values = [
@@ -96,4 +100,13 @@
     md.results.TransientSolution[-1].SmbAccumulatedMelt[0],
     md.results.TransientSolution[-1].SmbAccumulatedEC[0],
-    md.results.TransientSolution[-1].SmbAccumulatedPrecipitation[0]
+    md.results.TransientSolution[-1].SmbAccumulatedPrecipitation[0],
+    md.results.TransientSolution[-1].SmbAccumulatedRain[0],
+    md.results.TransientSolution[-1].SmbAccumulatedRefreeze[0],
+    md.results.TransientSolution[199].SmbRunoff[0],
+    md.results.TransientSolution[199].SmbMelt[0],
+    md.results.TransientSolution[199].SmbEC[0],
+    md.results.TransientSolution[199].SmbPrecipitation[0],
+    md.results.TransientSolution[199].SmbRain[0],
+    md.results.TransientSolution[199].SmbRefreeze[0],
+    md.results.TransientSolution[199].SmbWAdd[0]
     ]
