Index: /issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp	(revision 28101)
+++ /issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp	(revision 28102)
@@ -39,4 +39,5 @@
 	iomodel->FindConstant(&smb_model,"md.smb.model");
 	iomodel->FindConstant(&isstochastic,"md.stochasticforcing.isstochasticforcing");
+	InputUpdateFromConstantx(inputs,elements,false,SmbIsInitializedEnum);
 	switch(smb_model){
 		case SMBforcingEnum:
@@ -67,5 +68,4 @@
 			iomodel->FetchDataToInput(inputs,elements,"md.smb.Tz",SmbTzEnum);
 			iomodel->FetchDataToInput(inputs,elements,"md.smb.Vz",SmbVzEnum);
-			InputUpdateFromConstantx(inputs,elements,false,SmbIsInitializedEnum);
 			iomodel->FetchDataToInput(inputs,elements,"md.smb.Dzini",SmbDziniEnum);
 			iomodel->FetchDataToInput(inputs,elements,"md.smb.Dini",SmbDiniEnum);
Index: /issm/trunk-jpl/src/c/classes/Elements/Element.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 28101)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 28102)
@@ -3409,7 +3409,8 @@
 
 	int  		i,vertexlids[MAXVERTICES];
+	bool     isinitialized=false;
 	IssmDouble* agd=xNew<IssmDouble>(NUM_VERTICES); // surface mass balance
-	IssmDouble* melt=xNew<IssmDouble>(NUM_VERTICES); // surface mass balance
-	IssmDouble* accu=xNew<IssmDouble>(NUM_VERTICES); // surface mass balance
+	IssmDouble* melt=xNew<IssmDouble>(NUM_VERTICES); // surface melt
+	IssmDouble* accu=xNew<IssmDouble>(NUM_VERTICES); // surface precipitation
 	IssmDouble* monthlytemperatures=xNew<IssmDouble>(NUM_VERTICES_MONTHS_PER_YEAR);
 	IssmDouble* monthlyprec=xNew<IssmDouble>(NUM_VERTICES_MONTHS_PER_YEAR);
@@ -3422,4 +3423,10 @@
 	IssmDouble pddsnowfac = -1.;
 	IssmDouble pddicefac = -1.;
+	IssmDouble accsumM = 0.0;
+	IssmDouble accsumSMB = 0.0;
+	IssmDouble accsumP = 0.0;
+	IssmDouble avgM = 0.0;
+	IssmDouble avgSMB = 0.0;
+	IssmDouble avgP = 0.0;
 	IssmDouble rho_water,rho_ice,desfac,rlaps,rlapslgm;
 	IssmDouble PfacTime,TdiffTime,sealevTime;
@@ -3428,4 +3435,7 @@
 	/*Get vertex Lids for later*/
 	this->GetVerticesLidList(&vertexlids[0]);
+
+	/*Check for smb initialization*/
+	this->GetInputValue(&isinitialized,SmbIsInitializedEnum);
 
 	/*Get material parameters :*/
@@ -3438,7 +3448,8 @@
 	rlapslgm=this->FindParam(SmbRlapslgmEnum);
 
-	IssmDouble time,yts,time_yr;
+	IssmDouble time,yts,time_yr,dt;
 	this->parameters->FindParam(&time,TimeEnum);
 	this->parameters->FindParam(&yts,ConstantsYtsEnum);
+	this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);          /*transient core time step*/
 	time_yr=floor(time/yts)*yts;
 
@@ -3490,4 +3501,14 @@
 	GetInputListOnVertices(&s0t[0],SmbS0tEnum);
 
+	//Get accumulated input
+	Input *accsumM_input = NULL;
+	Input *accsumP_input = NULL;
+	Input *accsumSMB_input = NULL;
+	if (isinitialized){
+		accsumM_input = this->GetInput(SmbAccumulatedMeltEnum);  _assert_(accsumM_input);
+		accsumP_input = this->GetInput(SmbAccumulatedPrecipitationEnum);  _assert_(accsumP_input);
+		accsumSMB_input = this->GetInput(SmbAccumulatedMassBalanceEnum);  _assert_(accsumSMB_input);
+	}
+
 	/*measure the surface mass balance*/
 	for(int iv = 0; iv<NUM_VERTICES; iv++){
@@ -3507,5 +3528,19 @@
 			yearlytemperatures[iv]=yearlytemperatures[iv]+(monthlytemperatures[iv*12+month]+273.15)*mavg; // Has to be in Kelvin
 		}
-	}
+
+	}
+
+	/*Save accumulated inputs {{{*/
+	Input *avgM_input = NULL;
+	Input *avgP_input = NULL;
+	Input *avgSMB_input = NULL;
+
+	if (isinitialized){
+		accsumM_input->GetInputAverage(&accsumM);
+		accsumP_input->GetInputAverage(&accsumP);
+		accsumSMB_input->GetInputAverage(&accsumSMB);
+	}
+
+	/*}}}*/
 
 	/*Update inputs*/
@@ -3583,4 +3618,20 @@
 			break;
 		default: _error_("Not implemented yet");
+	}
+
+	avgM_input = this->GetInput(SmbMeltEnum);  _assert_(avgM_input);
+	avgP_input = this->GetInput(SmbAccumulationEnum);  _assert_(avgP_input);
+	avgSMB_input = this->GetInput(SmbMassBalanceEnum);  _assert_(avgSMB_input);
+
+	avgM_input->GetInputAverage(&avgM);
+	avgP_input->GetInputAverage(&avgP);
+	avgSMB_input->GetInputAverage(&avgSMB);
+
+	this->SetElementInput(SmbAccumulatedMassBalanceEnum,accsumSMB+avgSMB*dt);
+	this->SetElementInput(SmbAccumulatedPrecipitationEnum,accsumP+avgP*dt);
+	this->SetElementInput(SmbAccumulatedMeltEnum,accsumM+avgM*dt);
+	if (!isinitialized){
+		/*Flag the initialization:*/
+		this->SetBoolInput(this->inputs,SmbIsInitializedEnum,true);
 	}
 
