Index: /issm/trunk-jpl/examples/SlrGRACE/runme.m
===================================================================
--- /issm/trunk-jpl/examples/SlrGRACE/runme.m	(revision 26207)
+++ /issm/trunk-jpl/examples/SlrGRACE/runme.m	(revision 26208)
@@ -190,5 +190,5 @@
 	md.timestepping.final_time=nt;
 	md.timestepping.time_step=1;
-	md.timestepping.interp_forcings=0;
+	md.timestepping.interp_forcing=0;
 	md.settings.output_frequency=1;
 
Index: /issm/trunk-jpl/examples/SlrGRACE_NIMS/runme.m
===================================================================
--- /issm/trunk-jpl/examples/SlrGRACE_NIMS/runme.m	(revision 26207)
+++ /issm/trunk-jpl/examples/SlrGRACE_NIMS/runme.m	(revision 26208)
@@ -269,5 +269,5 @@
 	md.timestepping.final_time=nt;
 	md.timestepping.time_step=1;
-	md.timestepping.interp_forcings=0;
+	md.timestepping.interp_forcing=0;
 	md.settings.output_frequency=1;
 
Index: /issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp	(revision 26207)
+++ /issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp	(revision 26208)
@@ -226,5 +226,5 @@
 
 	iomodel->FindConstant(&smb_model,"md.smb.model");
-	iomodel->FindConstant(&interp,"md.timestepping.interp_forcings");
+	iomodel->FindConstant(&interp,"md.timestepping.interp_forcing");
 	iomodel->FindConstant(&cycle,"md.timestepping.cycle_forcing");
 
@@ -237,5 +237,4 @@
 	switch(smb_model){
 		case SMBforcingEnum:
-			parameters->AddObject(iomodel->CopyConstantObject("md.smb.isclimatology",SmbIsclimatologyEnum));
 			break;
 		case SMBgembEnum:
@@ -259,5 +258,4 @@
 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.isdensification",SmbIsdensificationEnum));
 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.isturbulentflux",SmbIsturbulentfluxEnum));
-			parameters->AddObject(iomodel->CopyConstantObject("md.smb.isclimatology",SmbIsclimatologyEnum));
 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.isconstrainsurfaceT",SmbIsconstrainsurfaceTEnum));
 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.InitDensityScaling",SmbInitDensityScalingEnum));
@@ -382,8 +380,6 @@
 			break;
 		case SMBcomponentsEnum:
-			parameters->AddObject(iomodel->CopyConstantObject("md.smb.isclimatology",SmbIsclimatologyEnum));
 			break;
 		case SMBmeltcomponentsEnum:
-			parameters->AddObject(iomodel->CopyConstantObject("md.smb.isclimatology",SmbIsclimatologyEnum));
 			break;
 		case SMBgradientscomponentsEnum:
Index: /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 26207)
+++ /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 26208)
@@ -417,10 +417,19 @@
 	/*First, recover current time from parameters: */
 	bool linear_interp,cycle;
-	this->parameters->FindParam(&linear_interp,TimesteppingInterpForcingsEnum);
+	IssmDouble dt;
+	this->parameters->FindParam(&linear_interp,TimesteppingInterpForcingEnum);
 	this->parameters->FindParam(&cycle,TimesteppingCycleForcingEnum);
+	this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);          /*transient core time step*/
 
 	/*Change input time if we cycle through the forcing*/
 	IssmDouble time0 = this->timesteps[0];
 	IssmDouble time1 = this->timesteps[this->numtimesteps - 1];
+
+	/*We need the end time to be the last timestep that would be taken*/
+	/* i.e., the case where GEMB has time stamps (finer timestep) after the last timestep */
+	IssmDouble nsteps = reCast<int,IssmDouble>(time1/dt);
+	if (reCast<IssmDouble>(nsteps)<time1/dt) nsteps=nsteps+1;
+	time1 = nsteps*dt;
+
 	if(cycle && (time<time0 || time>time1)){
 
@@ -433,5 +442,5 @@
 		/*Uncomment following line if you would like to apply a cycle BEFORE the time series starts*/
 		//if(time<time0) num_intervals = -num_intervals-1;
-		
+
 		if(fabs(time-time0)/deltat == reCast<IssmDouble>(num_intervals)){
 			/*Hack to make sure we always cover the last value of the series (discussion with Nicole)*/
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 26207)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 26208)
@@ -159,5 +159,5 @@
 			break;
 		case LinearFloatingMeltRateEnum:
-			iomodel->FindConstant(&interp,"md.timestepping.interp_forcings");
+			iomodel->FindConstant(&interp,"md.timestepping.interp_forcing");
 			iomodel->FindConstant(&cycle,"md.timestepping.cycle_forcing");
 			iomodel->FetchData(&transparam,&N,&M,"md.basalforcings.deepwater_melting_rate");
@@ -224,5 +224,5 @@
 			break;
 		case BasalforcingsPicoEnum:
-			iomodel->FindConstant(&interp,"md.timestepping.interp_forcings");
+			iomodel->FindConstant(&interp,"md.timestepping.interp_forcing");
 			iomodel->FindConstant(&cycle,"md.timestepping.cycle_forcing");
 			parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.num_basins",BasalforcingsPicoNumBasinsEnum));
@@ -267,5 +267,5 @@
 			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.final_time",TimesteppingFinalTimeEnum));
 			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.time_step",TimesteppingTimeStepEnum));
-			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.interp_forcings",TimesteppingInterpForcingsEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.interp_forcing",TimesteppingInterpForcingEnum));
 			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.cycle_forcing",TimesteppingCycleForcingEnum));
 			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.coupling_time",TimesteppingCouplingTimeEnum));
@@ -277,5 +277,5 @@
 			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.time_step_max",TimesteppingTimeStepMaxEnum));
 			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.cfl_coefficient",TimesteppingCflCoefficientEnum));
-			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.interp_forcings",TimesteppingInterpForcingsEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.interp_forcing",TimesteppingInterpForcingEnum));
 			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.cycle_forcing",TimesteppingCycleForcingEnum));
 			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.coupling_time",TimesteppingCouplingTimeEnum));
Index: /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp	(revision 26207)
+++ /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp	(revision 26208)
@@ -39,13 +39,11 @@
 	IssmDouble t,smb_dt;
    IssmDouble delta;
-	bool       isclimatology=false;
 	bool       linear_interp=true;
 
-	femmodel->parameters->FindParam(&linear_interp,TimesteppingInterpForcingsEnum); /*is interpolation requested*/
+	femmodel->parameters->FindParam(&linear_interp,TimesteppingInterpForcingEnum); /*is interpolation requested*/
 	femmodel->parameters->FindParam(&time,TimeEnum);                        /*transient core time at which we run the smb core*/
    femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);          /*transient core time step*/
 	femmodel->parameters->FindParam(&finaltime,TimesteppingFinalTimeEnum);
    femmodel->parameters->FindParam(&smb_dt,SmbDtEnum);                     /*time period for the smb solution,  usually smaller than the glaciological dt*/
-	femmodel->parameters->FindParam(&isclimatology,SmbIsclimatologyEnum);
 
 	//before starting loop, realize that the transient core runs this smb_core at time = time +deltaT.
@@ -63,18 +61,4 @@
 
 			timeclim=time;
-			if (isclimatology){
-				//If this is a climatology, we need to repeat the forcing after the final time
-				TransientInput* Ta_input_tr  = element->inputs->GetTransientInput(SmbTaEnum);    _assert_(Ta_input_tr);
-
-				/*Get temperature climatology value*/
-				int offsetend = Ta_input_tr->GetTimeInputOffset(finaltime);
-				IssmDouble time0     = Ta_input_tr->GetTimeByOffset(-1);
-				IssmDouble timeend   = Ta_input_tr->GetTimeByOffset(offsetend);
-				timeend   = ceil(timeend/dt)*dt;
-				if (time>time0 & timeend>time0){
-					delta=(time-time0) - (timeend-time0)*(reCast<int,IssmDouble>((time-time0)/(timeend-time0)));
-					timeclim=time0+delta;
-				}
-			}
 			if (linear_interp) timeinputs = t-time+timeclim;
 			else timeinputs = t-time+timeclim+smb_dt/2;
@@ -515,5 +499,5 @@
 	//  clabIce  = concentration of light absorbing carbon of first ice layer [ppm1], default 0
 
-	// Methods 3
+	// Method 3
 	//   d       = snow surface density [kg m-3]
 	//   n       = cloud amount
@@ -521,5 +505,5 @@
 	//   aSnow   = albedo of fresh snow
 
-	// Methods 4
+	// Method 4
 	//   aIce    = albedo of ice
 	//   aSnow   = albedo of fresh snow
@@ -661,5 +645,5 @@
 		//If we do not have fresh snow
 		if (aIdx<3 && aIdx>0 && (adThresh - d[0])>=Dtol){
-			// In a layer < 10cm, account for mix of ice and snow,
+			// In a snow layer < 10cm, account for mix of ice and snow,
 			// after P. Alexander et al., 2014
 			IssmDouble depthsnow=0.0;
@@ -1095,5 +1079,5 @@
 
 	// swIdx = 1 : absorbed SW is distributed with depth as a function of:
-	//   default   : snow density (taken from Bassford, 2004)
+	//   default   : snow density (taken from Bassford, 2002)
 	//   if aIdx=2 : grain size in 3 spectral bands (Brun et al., 1992)
 
@@ -1177,5 +1161,5 @@
 			swfS[2] = (sF[2] * dsw) * (1.0 - a2);
 
-			// absorption coeficient for spectral range:
+			// absorption coefficient for spectral range:
 			h =xNew<IssmDouble>(m);
 			B1 =xNew<IssmDouble>(m);
@@ -1365,5 +1349,5 @@
 			break;
 
-		case 2: // Density of Greenland snow, Fausto et al., 2008
+		case 2: // Density of Greenland snow, Fausto et al., 2018
 			dSnow = 315;
 			break;
Index: /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.cpp	(revision 26207)
+++ /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.cpp	(revision 26208)
@@ -14,56 +14,4 @@
 	//    INPUT parameters: ni: working size of arrays
 	//    OUTPUT: mass-balance (m/yr ice): agd(NA)
-	bool isclimatology;
-	femmodel->parameters->FindParam(&isclimatology,SmbIsclimatologyEnum);
-
-	if (isclimatology){
-
-		/*Get time parameters*/
-		IssmDouble time,dt,starttime,finaltime;
-		femmodel->parameters->FindParam(&time,TimeEnum);
-		femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
-		femmodel->parameters->FindParam(&finaltime,TimesteppingFinalTimeEnum);
-		femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum);
-
-		if(time<=starttime+dt){
-			/*FIXME: this is wrong, should be done at the ElementUpdate step of analysis, not here!*/
-			InputDuplicatex(femmodel,SmbMassBalanceEnum,SmbMassBalanceClimateEnum);
-			femmodel->inputs->DeleteInput(SmbMassBalanceEnum);
-		}
-
-		/*If this is a climatology, we need to repeat the forcing after the final time*/
-		TransientInput* smb_input=femmodel->inputs->GetTransientInput(SmbMassBalanceClimateEnum); _assert_(smb_input);
-
-		/*Get accumulation climatology value*/
-		int offsetend = smb_input->GetTimeInputOffset(finaltime);
-		IssmDouble time0     = smb_input->GetTimeByOffset(-1);
-		IssmDouble timeend   = smb_input->GetTimeByOffset(offsetend);
-
-		_assert_(timeend>time0);
-		IssmDouble timeclim  = time;
-
-		if(time>time0 && timeend>time0){
-			IssmDouble delta=(time-time0) - (timeend-time0)*(reCast<int,IssmDouble>((time-time0)/(timeend-time0)));
-			if(delta==0.){
-				timeclim=timeend;
-			}
-			else{
-				timeclim=time0+delta;
-			}
-		}
-
-		/*Loop over all the elements of this partition*/
-		for(Object* & object : femmodel->elements->objects){
-			Element* element=xDynamicCast<Element*>(object);
-
-			int         numvertices = element->GetNumberOfVertices();
-			IssmDouble* smb         = xNew<IssmDouble>(numvertices);
-			element->GetInputListOnVerticesAtTime(smb,SmbMassBalanceClimateEnum,timeclim);
-
-			/*Add input to element and Free memory*/
-			element->AddInput(SmbMassBalanceEnum,smb,P1Enum);
-			xDelete<IssmDouble>(smb);
-		}
-	}
 
 }/*}}}*/
@@ -410,6 +358,4 @@
 	//    surface runoff (m/yr water equivalent): runoff
 	//    OUTPUT: mass-balance (m/yr ice): agd(NA)
-	bool isclimatology;
-	femmodel->parameters->FindParam(&isclimatology,SmbIsclimatologyEnum);
 
 	/*Loop over all the elements of this partition*/
@@ -425,67 +371,7 @@
 
 		/*Recover Smb Components*/
-		if(isclimatology){
-
-			int offsetend;
-			IssmDouble time0,timeend,timeclim;
-			IssmDouble time,starttime,finaltime;
-
-			/*Get time parameters*/
-			femmodel->parameters->FindParam(&time,TimeEnum);
-			femmodel->parameters->FindParam(&finaltime,TimesteppingFinalTimeEnum);
-			femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum);
-
-			//If this is a climatology, we need to repeat the forcing after the final time
-			TransientInput* acc_input    = element->inputs->GetTransientInput(SmbAccumulationEnum); _assert_(acc_input);
-			TransientInput* evap_input   = element->inputs->GetTransientInput(SmbEvaporationEnum);  _assert_(evap_input);
-			TransientInput* runoff_input = element->inputs->GetTransientInput(SmbRunoffEnum);       _assert_(runoff_input);
-
-			//Get accumulation climatology value
-			offsetend = acc_input->GetTimeInputOffset(finaltime);
-			time0     = acc_input->GetTimeByOffset(-1);
-			timeend   = acc_input->GetTimeByOffset(offsetend);
-			timeclim  = time;
-			if(time>time0 & timeend>time0){
-				IssmDouble delta=(time-time0) - (timeend-time0)*(reCast<int,IssmDouble>((time-time0)/(timeend-time0)));
-				if(delta==0.)
-				 timeclim=timeend;
-				else
-				 timeclim=time0+delta;
-			}
-			element->GetInputListOnVerticesAtTime(acc,SmbAccumulationEnum,timeclim);
-
-			//Get evaporation climatology value
-			offsetend = evap_input->GetTimeInputOffset(finaltime);
-			time0     = evap_input->GetTimeByOffset(-1);
-			timeend   = evap_input->GetTimeByOffset(offsetend);
-			timeclim  = time;
-			if(time>time0 & timeend>time0){
-				IssmDouble delta=(time-time0) - (timeend-time0)*(reCast<int,IssmDouble>((time-time0)/(timeend-time0)));
-				if(delta==0.)
-				 timeclim=timeend;
-				else
-				 timeclim=time0+delta;
-			}
-			element->GetInputListOnVerticesAtTime(evap,SmbEvaporationEnum,timeclim);
-
-			//Get runoff climatology value
-			offsetend = runoff_input->GetTimeInputOffset(finaltime);
-			time0     = runoff_input->GetTimeByOffset(-1);
-			timeend   = runoff_input->GetTimeByOffset(offsetend);
-			timeclim  = time;
-			if(time>time0 & timeend>time0){
-				IssmDouble delta=(time-time0) - (timeend-time0)*(reCast<int,IssmDouble>((time-time0)/(timeend-time0)));
-				if(delta==0.)
-				 timeclim=timeend;
-				else
-				 timeclim=time0+delta;
-			}
-			element->GetInputListOnVerticesAtTime(runoff,SmbRunoffEnum,timeclim);
-		}
-		else{
-			element->GetInputListOnVertices(acc,SmbAccumulationEnum);
-			element->GetInputListOnVertices(evap,SmbEvaporationEnum);
-			element->GetInputListOnVertices(runoff,SmbRunoffEnum);
-		}
+		element->GetInputListOnVertices(acc,SmbAccumulationEnum);
+		element->GetInputListOnVertices(evap,SmbEvaporationEnum);
+		element->GetInputListOnVertices(runoff,SmbRunoffEnum);
 
 		// loop over all vertices
@@ -510,6 +396,4 @@
 	//    refreeze of surface melt (m/yr water equivalent): refreeze
 	//    OUTPUT: mass-balance (m/yr ice): agd(NA)
-	bool isclimatology;
-	femmodel->parameters->FindParam(&isclimatology,SmbIsclimatologyEnum);
 
 	/*Loop over all the elements of this partition*/
@@ -526,82 +410,8 @@
 
 		/*Recover Smb Components*/
-		if (isclimatology){
-
-			int offsetend;
-			IssmDouble time0,timeend,timeclim;
-			IssmDouble time,starttime,finaltime;
-			femmodel->parameters->FindParam(&time,TimeEnum);
-			femmodel->parameters->FindParam(&finaltime,TimesteppingFinalTimeEnum);
-			femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum);
-
-
-			//If this is a climatology, we need to repeat the forcing after the final time
-			TransientInput* acc_input      = element->inputs->GetTransientInput(SmbAccumulationEnum); _assert_(acc_input);
-			TransientInput* evap_input     = element->inputs->GetTransientInput(SmbEvaporationEnum);  _assert_(evap_input);
-			TransientInput* melt_input     = element->inputs->GetTransientInput(SmbMeltEnum);         _assert_(melt_input);
-			TransientInput* refreeze_input = element->inputs->GetTransientInput(SmbRefreezeEnum);     _assert_(refreeze_input);
-
-			//Get accumulation climatology value
-			offsetend = acc_input->GetTimeInputOffset(finaltime);
-			time0     = acc_input->GetTimeByOffset(-1);
-			timeend   = acc_input->GetTimeByOffset(offsetend);
-			timeclim  = time;
-			if(time>time0 & timeend>time0){
-				IssmDouble delta=(time-time0) - (timeend-time0)*(reCast<int,IssmDouble>((time-time0)/(timeend-time0)));
-				if(delta==0.)
-				 timeclim=timeend;
-				else
-				 timeclim=time0+delta;
-			}
-			element->GetInputListOnVerticesAtTime(acc,SmbAccumulationEnum,timeclim);
-
-			//Get evaporation climatology value
-			offsetend = evap_input->GetTimeInputOffset(finaltime);
-			time0     = evap_input->GetTimeByOffset(-1);
-			timeend   = evap_input->GetTimeByOffset(offsetend);
-			timeclim  = time;
-			if(time>time0 & timeend>time0){
-				IssmDouble delta=(time-time0) - (timeend-time0)*(reCast<int,IssmDouble>((time-time0)/(timeend-time0)));
-				if(delta==0.)
-				 timeclim=timeend;
-				else
-				 timeclim=time0+delta;
-			}
-			element->GetInputListOnVerticesAtTime(evap,SmbEvaporationEnum,timeclim);
-
-			//Get melt climatology value
-			offsetend = melt_input->GetTimeInputOffset(finaltime);
-			time0     = melt_input->GetTimeByOffset(-1);
-			timeend   = melt_input->GetTimeByOffset(offsetend);
-			timeclim  = time;
-			if(time>time0 & timeend>time0){
-				IssmDouble delta=(time-time0) - (timeend-time0)*(reCast<int,IssmDouble>((time-time0)/(timeend-time0)));
-				if(delta==0.)
-				 timeclim=timeend;
-				else
-				 timeclim=time0+delta;
-			}
-			element->GetInputListOnVerticesAtTime(melt,SmbMeltEnum,timeclim);
-
-			//Get refreeze climatology value
-			offsetend = refreeze_input->GetTimeInputOffset(finaltime);
-			time0     = refreeze_input->GetTimeByOffset(-1);
-			timeend   = refreeze_input->GetTimeByOffset(offsetend);
-			timeclim  = time;
-			if(time>time0 & timeend>time0){
-				IssmDouble delta=(time-time0) - (timeend-time0)*(reCast<int,IssmDouble>((time-time0)/(timeend-time0)));
-				if(delta==0.)
-				 timeclim=timeend;
-				else
-				 timeclim=time0+delta;
-			}
-			element->GetInputListOnVerticesAtTime(refreeze,SmbRefreezeEnum,timeclim);
-		}
-		else{
-			element->GetInputListOnVertices(acc,SmbAccumulationEnum);
-			element->GetInputListOnVertices(evap,SmbEvaporationEnum);
-			element->GetInputListOnVertices(melt,SmbMeltEnum);
-			element->GetInputListOnVertices(refreeze,SmbRefreezeEnum);
-		}
+		element->GetInputListOnVertices(acc,SmbAccumulationEnum);
+		element->GetInputListOnVertices(evap,SmbEvaporationEnum);
+		element->GetInputListOnVertices(melt,SmbMeltEnum);
+		element->GetInputListOnVertices(refreeze,SmbRefreezeEnum);
 
 		// loop over all vertices
Index: /issm/trunk-jpl/src/c/shared/Enum/Enum.vim
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 26207)
+++ /issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 26208)
@@ -408,5 +408,4 @@
 syn keyword cConstant SmbIsaccumulationEnum
 syn keyword cConstant SmbIsalbedoEnum
-syn keyword cConstant SmbIsclimatologyEnum
 syn keyword cConstant SmbIsconstrainsurfaceTEnum
 syn keyword cConstant SmbIsd18opdEnum
@@ -477,5 +476,5 @@
 syn keyword cConstant TimesteppingCouplingTimeEnum
 syn keyword cConstant TimesteppingFinalTimeEnum
-syn keyword cConstant TimesteppingInterpForcingsEnum
+syn keyword cConstant TimesteppingInterpForcingEnum
 syn keyword cConstant TimesteppingCycleForcingEnum
 syn keyword cConstant TimesteppingStartTimeEnum
@@ -1456,5 +1455,4 @@
 syn keyword cType Cfsurfacesquare
 syn keyword cType Channel
-syn keyword cType classes
 syn keyword cType Constraint
 syn keyword cType Constraints
@@ -1463,6 +1461,6 @@
 syn keyword cType ControlInput
 syn keyword cType Covertree
+syn keyword cType DataSetParam
 syn keyword cType DatasetInput
-syn keyword cType DataSetParam
 syn keyword cType Definition
 syn keyword cType DependentObject
@@ -1477,6 +1475,6 @@
 syn keyword cType ElementInput
 syn keyword cType ElementMatrix
+syn keyword cType ElementVector
 syn keyword cType Elements
-syn keyword cType ElementVector
 syn keyword cType ExponentialVariogram
 syn keyword cType ExternalResult
@@ -1485,10 +1483,9 @@
 syn keyword cType Friction
 syn keyword cType Gauss
-syn keyword cType GaussianVariogram
-syn keyword cType gaussobjects
 syn keyword cType GaussPenta
 syn keyword cType GaussSeg
 syn keyword cType GaussTetra
 syn keyword cType GaussTria
+syn keyword cType GaussianVariogram
 syn keyword cType GenericExternalResult
 syn keyword cType GenericOption
@@ -1505,5 +1502,4 @@
 syn keyword cType IssmDirectApplicInterface
 syn keyword cType IssmParallelDirectApplicInterface
-syn keyword cType krigingobjects
 syn keyword cType Load
 syn keyword cType Loads
@@ -1516,5 +1512,4 @@
 syn keyword cType Matice
 syn keyword cType Matlitho
-syn keyword cType matrixobjects
 syn keyword cType MatrixParam
 syn keyword cType Misfit
@@ -1529,6 +1524,6 @@
 syn keyword cType Observations
 syn keyword cType Option
+syn keyword cType OptionUtilities
 syn keyword cType Options
-syn keyword cType OptionUtilities
 syn keyword cType Param
 syn keyword cType Parameters
@@ -1544,11 +1539,11 @@
 syn keyword cType Regionaloutput
 syn keyword cType Results
+syn keyword cType RiftStruct
 syn keyword cType Riftfront
-syn keyword cType RiftStruct
 syn keyword cType SealevelMasks
 syn keyword cType Seg
 syn keyword cType SegInput
+syn keyword cType SegRef
 syn keyword cType Segment
-syn keyword cType SegRef
 syn keyword cType SpcDynamic
 syn keyword cType SpcStatic
@@ -1569,4 +1564,8 @@
 syn keyword cType Vertex
 syn keyword cType Vertices
+syn keyword cType classes
+syn keyword cType gaussobjects
+syn keyword cType krigingobjects
+syn keyword cType matrixobjects
 syn keyword cType AdjointBalancethickness2Analysis
 syn keyword cType AdjointBalancethicknessAnalysis
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 26207)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 26208)
@@ -402,5 +402,4 @@
 	SmbIsaccumulationEnum,
 	SmbIsalbedoEnum,
-	SmbIsclimatologyEnum,
 	SmbIsconstrainsurfaceTEnum,
 	SmbIsd18opdEnum,
@@ -471,5 +470,5 @@
 	TimesteppingCouplingTimeEnum,
 	TimesteppingFinalTimeEnum,
-	TimesteppingInterpForcingsEnum,
+	TimesteppingInterpForcingEnum,
 	TimesteppingCycleForcingEnum,
 	TimesteppingStartTimeEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 26207)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 26208)
@@ -410,5 +410,4 @@
 		case SmbIsaccumulationEnum : return "SmbIsaccumulation";
 		case SmbIsalbedoEnum : return "SmbIsalbedo";
-		case SmbIsclimatologyEnum : return "SmbIsclimatology";
 		case SmbIsconstrainsurfaceTEnum : return "SmbIsconstrainsurfaceT";
 		case SmbIsd18opdEnum : return "SmbIsd18opd";
@@ -479,5 +478,5 @@
 		case TimesteppingCouplingTimeEnum : return "TimesteppingCouplingTime";
 		case TimesteppingFinalTimeEnum : return "TimesteppingFinalTime";
-		case TimesteppingInterpForcingsEnum : return "TimesteppingInterpForcings";
+		case TimesteppingInterpForcingEnum : return "TimesteppingInterpForcing";
 		case TimesteppingCycleForcingEnum : return "TimesteppingCycleForcing";
 		case TimesteppingStartTimeEnum : return "TimesteppingStartTime";
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 26207)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 26208)
@@ -419,5 +419,4 @@
 	      else if (strcmp(name,"SmbIsaccumulation")==0) return SmbIsaccumulationEnum;
 	      else if (strcmp(name,"SmbIsalbedo")==0) return SmbIsalbedoEnum;
-	      else if (strcmp(name,"SmbIsclimatology")==0) return SmbIsclimatologyEnum;
 	      else if (strcmp(name,"SmbIsconstrainsurfaceT")==0) return SmbIsconstrainsurfaceTEnum;
 	      else if (strcmp(name,"SmbIsd18opd")==0) return SmbIsd18opdEnum;
@@ -488,5 +487,5 @@
 	      else if (strcmp(name,"TimesteppingCouplingTime")==0) return TimesteppingCouplingTimeEnum;
 	      else if (strcmp(name,"TimesteppingFinalTime")==0) return TimesteppingFinalTimeEnum;
-	      else if (strcmp(name,"TimesteppingInterpForcings")==0) return TimesteppingInterpForcingsEnum;
+	      else if (strcmp(name,"TimesteppingInterpForcing")==0) return TimesteppingInterpForcingEnum;
 	      else if (strcmp(name,"TimesteppingCycleForcing")==0) return TimesteppingCycleForcingEnum;
 	      else if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum;
@@ -506,9 +505,9 @@
 	      else if (strcmp(name,"TransientIsgroundingline")==0) return TransientIsgroundinglineEnum;
 	      else if (strcmp(name,"TransientIshydrology")==0) return TransientIshydrologyEnum;
+	      else if (strcmp(name,"TransientIsmasstransport")==0) return TransientIsmasstransportEnum;
          else stage=5;
    }
    if(stage==5){
-	      if (strcmp(name,"TransientIsmasstransport")==0) return TransientIsmasstransportEnum;
-	      else if (strcmp(name,"TransientIsoceantransport")==0) return TransientIsoceantransportEnum;
+	      if (strcmp(name,"TransientIsoceantransport")==0) return TransientIsoceantransportEnum;
 	      else if (strcmp(name,"TransientIsmovingfront")==0) return TransientIsmovingfrontEnum;
 	      else if (strcmp(name,"TransientIsoceancoupling")==0) return TransientIsoceancouplingEnum;
@@ -629,9 +628,9 @@
 	      else if (strcmp(name,"EplHead")==0) return EplHeadEnum;
 	      else if (strcmp(name,"EplHeadOld")==0) return EplHeadOldEnum;
+	      else if (strcmp(name,"EplHeadSlopeX")==0) return EplHeadSlopeXEnum;
          else stage=6;
    }
    if(stage==6){
-	      if (strcmp(name,"EplHeadSlopeX")==0) return EplHeadSlopeXEnum;
-	      else if (strcmp(name,"EplHeadSlopeY")==0) return EplHeadSlopeYEnum;
+	      if (strcmp(name,"EplHeadSlopeY")==0) return EplHeadSlopeYEnum;
 	      else if (strcmp(name,"EplHeadSubstep")==0) return EplHeadSubstepEnum;
 	      else if (strcmp(name,"EplHeadTransient")==0) return EplHeadTransientEnum;
@@ -752,9 +751,9 @@
 	      else if (strcmp(name,"RadarIcePeriod")==0) return RadarIcePeriodEnum;
 	      else if (strcmp(name,"RadarPowerMacGregor")==0) return RadarPowerMacGregorEnum;
+	      else if (strcmp(name,"RadarPowerWolff")==0) return RadarPowerWolffEnum;
          else stage=7;
    }
    if(stage==7){
-	      if (strcmp(name,"RadarPowerWolff")==0) return RadarPowerWolffEnum;
-	      else if (strcmp(name,"RheologyBAbsGradient")==0) return RheologyBAbsGradientEnum;
+	      if (strcmp(name,"RheologyBAbsGradient")==0) return RheologyBAbsGradientEnum;
 	      else if (strcmp(name,"RheologyBInitialguess")==0) return RheologyBInitialguessEnum;
 	      else if (strcmp(name,"RheologyBInitialguessMisfit")==0) return RheologyBInitialguessMisfitEnum;
@@ -875,9 +874,9 @@
 	      else if (strcmp(name,"SmbReini")==0) return SmbReiniEnum;
 	      else if (strcmp(name,"SmbRunoff")==0) return SmbRunoffEnum;
+	      else if (strcmp(name,"SmbRunoffSubstep")==0) return SmbRunoffSubstepEnum;
          else stage=8;
    }
    if(stage==8){
-	      if (strcmp(name,"SmbRunoffSubstep")==0) return SmbRunoffSubstepEnum;
-	      else if (strcmp(name,"SmbRunoffTransient")==0) return SmbRunoffTransientEnum;
+	      if (strcmp(name,"SmbRunoffTransient")==0) return SmbRunoffTransientEnum;
 	      else if (strcmp(name,"SmbS0gcm")==0) return SmbS0gcmEnum;
 	      else if (strcmp(name,"SmbS0p")==0) return SmbS0pEnum;
@@ -998,9 +997,9 @@
 	      else if (strcmp(name,"Outputdefinition18")==0) return Outputdefinition18Enum;
 	      else if (strcmp(name,"Outputdefinition19")==0) return Outputdefinition19Enum;
+	      else if (strcmp(name,"Outputdefinition20")==0) return Outputdefinition20Enum;
          else stage=9;
    }
    if(stage==9){
-	      if (strcmp(name,"Outputdefinition20")==0) return Outputdefinition20Enum;
-	      else if (strcmp(name,"Outputdefinition21")==0) return Outputdefinition21Enum;
+	      if (strcmp(name,"Outputdefinition21")==0) return Outputdefinition21Enum;
 	      else if (strcmp(name,"Outputdefinition22")==0) return Outputdefinition22Enum;
 	      else if (strcmp(name,"Outputdefinition23")==0) return Outputdefinition23Enum;
@@ -1121,9 +1120,9 @@
 	      else if (strcmp(name,"BoolParam")==0) return BoolParamEnum;
 	      else if (strcmp(name,"Boundary")==0) return BoundaryEnum;
+	      else if (strcmp(name,"BuddJacka")==0) return BuddJackaEnum;
          else stage=10;
    }
    if(stage==10){
-	      if (strcmp(name,"BuddJacka")==0) return BuddJackaEnum;
-	      else if (strcmp(name,"CalvingDev2")==0) return CalvingDev2Enum;
+	      if (strcmp(name,"CalvingDev2")==0) return CalvingDev2Enum;
 	      else if (strcmp(name,"CalvingHab")==0) return CalvingHabEnum;
 	      else if (strcmp(name,"CalvingLevermann")==0) return CalvingLevermannEnum;
@@ -1244,9 +1243,9 @@
 	      else if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum;
 	      else if (strcmp(name,"ElementInput")==0) return ElementInputEnum;
+	      else if (strcmp(name,"IntMatExternalResult")==0) return IntMatExternalResultEnum;
          else stage=11;
    }
    if(stage==11){
-	      if (strcmp(name,"IntMatExternalResult")==0) return IntMatExternalResultEnum;
-	      else if (strcmp(name,"IntMatParam")==0) return IntMatParamEnum;
+	      if (strcmp(name,"IntMatParam")==0) return IntMatParamEnum;
 	      else if (strcmp(name,"IntParam")==0) return IntParamEnum;
 	      else if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum;
@@ -1367,9 +1366,9 @@
 	      else if (strcmp(name,"SamplingAnalysis")==0) return SamplingAnalysisEnum;
 	      else if (strcmp(name,"SamplingSolution")==0) return SamplingSolutionEnum;
+	      else if (strcmp(name,"SIAApproximation")==0) return SIAApproximationEnum;
          else stage=12;
    }
    if(stage==12){
-	      if (strcmp(name,"SIAApproximation")==0) return SIAApproximationEnum;
-	      else if (strcmp(name,"SMBcomponents")==0) return SMBcomponentsEnum;
+	      if (strcmp(name,"SMBcomponents")==0) return SMBcomponentsEnum;
 	      else if (strcmp(name,"SMBd18opdd")==0) return SMBd18opddEnum;
 	      else if (strcmp(name,"SMBforcing")==0) return SMBforcingEnum;
Index: /issm/trunk-jpl/src/m/classes/SMBcomponents.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/SMBcomponents.m	(revision 26207)
+++ /issm/trunk-jpl/src/m/classes/SMBcomponents.m	(revision 26208)
@@ -6,5 +6,4 @@
 classdef SMBcomponents
 	properties (SetAccess=public)
-		isclimatology = 0;
 		accumulation = NaN;
 		runoff = NaN;
@@ -65,13 +64,4 @@
 			md = checkfield(md,'fieldname','smb.averaging','numel',[1],'values',[0 1 2]);
 			md = checkfield(md,'fieldname','smb.requested_outputs','stringrow',1);
-			md = checkfield(md,'fieldname','smb.isclimatology','values',[0 1]);
-			if (self.isclimatology)
-				md = checkfield(md,'fieldname', 'smb.accumulation', 'size',[md.mesh.numberofvertices+1],...
-						'message',['accumulation must have md.mesh.numberofvertices+1 rows in order to force a climatology']);
-				md = checkfield(md,'fieldname', 'smb.runoff', 'size',[md.mesh.numberofvertices+1],...
-						'message',['runoff must have md.mesh.numberofvertices+1 rows in order to force a climatology']);
-				md = checkfield(md,'fieldname', 'smb.evaporation', 'size',[md.mesh.numberofvertices+1],...
-						'message',['evaporation must have md.mesh.numberofvertices+1 rows in order to force a climatology']);
-			end
 		end % }}}
 		function disp(self) % {{{
@@ -80,5 +70,4 @@
 			fielddisplay(self,'runoff','amount of ice melt lost from the ice column [m/yr ice eq]');
 			fielddisplay(self,'evaporation','amount of ice lost to evaporative processes [m/yr ice eq]');
-			fielddisplay(self,'isclimatology','repeat all forcings when past last forcing time (default false)');
 			fielddisplay(self, 'steps_per_step', 'number of smb steps per time step');
 			fielddisplay(self, 'averaging', 'averaging methods from short to long steps');
@@ -106,5 +95,4 @@
 			end
 			WriteData(fid,prefix,'data',outputs,'name','md.smb.requested_outputs','format','StringArray');
-			WriteData(fid,prefix,'object',self,'class','smb','fieldname','isclimatology','format','Boolean');
 
 		end % }}}
Index: /issm/trunk-jpl/src/m/classes/SMBcomponents.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/SMBcomponents.py	(revision 26207)
+++ /issm/trunk-jpl/src/m/classes/SMBcomponents.py	(revision 26208)
@@ -15,5 +15,4 @@
 
     def __init__(self, *args):  # {{{
-        self.isclimatology = 0
         self.accumulation = np.nan
         self.runoff = np.nan
@@ -35,5 +34,4 @@
         s += '{}\n'.format(fielddisplay(self, 'runoff', 'amount of ice melt lost from the ice column [m/yr ice eq]'))
         s += '{}\n'.format(fielddisplay(self, 'evaporation', 'mount of ice lost to evaporative processes [m/yr ice eq]'))
-        s += '{}\n'.format(fielddisplay(self, 'isclimatology', 'repeat all forcings when past last forcing time (default false)'))
         s += '{}\n'.format(fielddisplay(self, 'steps_per_step', 'number of smb steps per time step'))
         s += '{}\n'.format(fielddisplay(self, 'averaging', 'averaging methods from short to long steps'))
@@ -82,10 +80,4 @@
         md = checkfield(md, 'fieldname', 'smb.averaging', 'numel', [1], 'values', [0, 1, 2])
         md = checkfield(md, 'fieldname', 'masstransport.requested_outputs', 'stringrow', 1)
-        md = checkfield(md, 'fieldname', 'smb.isclimatology', 'values', [0, 1])
-        if self.isclimatology:
-            md = checkfield(md, 'fieldname', 'smb.accumulation', 'size', [md.mesh.numberofvertices + 1],
-                'message', 'accumulation must have md.mesh.numberofvertices+1 rows in order to force a climatology')
-            md = checkfield(md, 'fieldname', 'smb.runoff', 'size', [md.mesh.numberofvertices + 1], 'message', 'runoff must have md.mesh.numberofvertices+1 rows in order to force a climatology')
-            md = checkfield(md, 'fieldname', 'smb.evaporation', 'size', [md.mesh.numberofvertices + 1], 'message', 'evaporation must have md.mesh.numberofvertices+1 rows in order to force a climatology')
         return md
     # }}}
@@ -107,9 +99,4 @@
             outputs = outputscopy
         WriteData(fid, prefix, 'data', outputs, 'name', 'md.smb.requested_outputs', 'format', 'StringArray')
-        WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'isclimatology', 'format', 'Boolean')
-        if (self.isclimatology > 0):
-            md = checkfield(md, 'fieldname', 'smb.accumulation', 'size', [md.mesh.numberofvertices + 1], 'message', 'accumulation must have md.mesh.numberofvertices + 1 rows in order to force a climatology')
-            md = checkfield(md, 'fieldname', 'smb.runoff', 'size', [md.mesh.numberofvertices + 1], 'message', 'runoff must have md.mesh.numberofvertices + 1 rows in order to force a climatology')
-            md = checkfield(md, 'fieldname', 'smb.evaporation', 'size', [md.mesh.numberofvertices + 1], 'message', 'evaporation must have md.mesh.numberofvertices + 1 rows in order to force a climatology')
 
     # }}}
Index: /issm/trunk-jpl/src/m/classes/SMBforcing.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/SMBforcing.m	(revision 26207)
+++ /issm/trunk-jpl/src/m/classes/SMBforcing.m	(revision 26208)
@@ -6,5 +6,4 @@
 classdef SMBforcing
 	properties (SetAccess=public)
-		isclimatology     = 0;
 		mass_balance      = NaN;
 		steps_per_step    = 1;
@@ -55,15 +54,9 @@
 			md = checkfield(md,'fieldname','smb.steps_per_step','>=',1,'numel',[1]);
 			md = checkfield(md,'fieldname','smb.requested_outputs','stringrow',1);
-			md = checkfield(md,'fieldname','smb.isclimatology','values',[0 1]);
 			md = checkfield(md, 'fieldname', 'smb.averaging', 'numel', [1], 'values', [0, 1, 2]);
-			if (self.isclimatology)
-				md = checkfield(md,'fieldname', 'smb.mass_balance', 'size',[md.mesh.numberofvertices+1],...
-						'message',['mass_balance must have md.mesh.numberofvertices+1 rows in order to force a climatology']);
-			end
 		end % }}}
 		function disp(self) % {{{
 			disp(sprintf('   surface forcings parameters:'));
 			fielddisplay(self,'mass_balance','surface mass balance [m/yr ice eq]');
-			fielddisplay(self,'isclimatology','repeat all forcings when past last forcing time (default false)');
 			fielddisplay(self, 'steps_per_step', 'number of smb steps per time step');
 			fielddisplay(self,'requested_outputs','additional outputs requested');
@@ -90,5 +83,4 @@
 			end
 			WriteData(fid,prefix,'data',outputs,'name','md.smb.requested_outputs','format','StringArray');
-			WriteData(fid,prefix,'object',self,'class','smb','fieldname','isclimatology','format','Boolean');
 
 		end % }}}
@@ -97,5 +89,4 @@
 			writejs1Darray(fid,[modelname '.smb.mass_balance'],self.mass_balance);
 			writejscellstring(fid,[modelname '.smb.requested_outputs'],self.requested_outputs);
-			writejs1Darray(fid,[modelname '.smb.isclimatology'],self.isclimatology);
 
 		end % }}}
Index: /issm/trunk-jpl/src/m/classes/SMBforcing.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/SMBforcing.py	(revision 26207)
+++ /issm/trunk-jpl/src/m/classes/SMBforcing.py	(revision 26208)
@@ -15,5 +15,4 @@
 
     def __init__(self, *args):  # {{{
-        self.isclimatology = 0
         self.mass_balance = np.nan
         self.steps_per_step = 1
@@ -31,5 +30,4 @@
         s = '   surface forcings parameters:\n'
         s += '{}\n'.format(fielddisplay(self, 'mass_balance', 'surface mass balance [m/yr ice eq]'))
-        s += '{}\n'.format(fielddisplay(self, 'isclimatology', 'repeat all forcings when past last forcing time (default false)'))
         s += '{}\n'.format(fielddisplay(self, 'steps_per_step', 'number of smb steps per time step'))
         s += '{}\n'.format(fielddisplay(self, 'averaging', 'averaging methods from short to long steps'))
@@ -67,7 +65,4 @@
         md = checkfield(md, 'fieldname', 'smb.averaging', 'numel', [1], 'values', [0, 1, 2])
         md = checkfield(md, 'fieldname', 'masstransport.requested_outputs', 'stringrow', 1)
-        md = checkfield(md, 'fieldname', 'smb.isclimatology', 'values', [0, 1])
-        if self.isclimatology:
-            md = checkfield(md, 'fieldname', 'smb.mass_balance', 'size', [md.mesh.numberofvertices + 1], 'message', 'mass_balance must have md.mesh.numberofvertices + 1 rows in order to force a climatology')
         return md
     # }}}
@@ -87,4 +82,3 @@
             outputs = outputscopy
         WriteData(fid, prefix, 'data', outputs, 'name', 'md.smb.requested_outputs', 'format', 'StringArray')
-        WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'isclimatology', 'format', 'Boolean')
     # }}}
Index: /issm/trunk-jpl/src/m/classes/SMBgemb.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/SMBgemb.m	(revision 26207)
+++ /issm/trunk-jpl/src/m/classes/SMBgemb.m	(revision 26208)
@@ -22,5 +22,4 @@
 		isdensification;
 		isturbulentflux;
-		isclimatology;
 		isconstrainsurfaceT;
 
@@ -65,5 +64,5 @@
 		% 4: exponential time decay & wetness [Bougamont & Bamber, 2005]
 
-		swIdx  = NaN; % apply all SW to top grid cell (0) or allow SW to penetrate surface (1) (default 1, with snow density (taken from Bassford, 2004))
+		swIdx  = NaN; % apply all SW to top grid cell (0) or allow SW to penetrate surface (1) (default 1, if aIdx=2 function of effective radius (Brun et al., 1992) or else dependent on snow density (taken from Bassford, 2002))
 
 		denIdx = NaN; %densification model to use (default is 2):
@@ -79,5 +78,5 @@
 		% 0 = Original GEMB value, 150 kg/m^3
 		% 1 = Antarctica value of fresh snow density, 350 kg/m^3
-		% 2 = Greenland value of fresh snow density, 315 kg/m^3, Fausto et al. (2008)
+		% 2 = Greenland value of fresh snow density, 315 kg/m^3, Fausto et al. (2018)
 		% 3 = Antarctica model of Kaspers et al. (2004)
 		% 4 = Greenland model of Kuipers Munneke et al. (2015)
@@ -217,5 +216,4 @@
 			self.isdensification=1;
 			self.isturbulentflux=1;
-			self.isclimatology=0;
 			self.isconstrainsurfaceT=0;
 
@@ -280,5 +278,4 @@
 			md = checkfield(md,'fieldname','smb.isdensification','values',[0 1]);
 			md = checkfield(md,'fieldname','smb.isturbulentflux','values',[0 1]);
-			md = checkfield(md,'fieldname','smb.isclimatology','values',[0 1]);
 			md = checkfield(md,'fieldname','smb.isconstrainsurfaceT','values',[0 1]);
 
@@ -290,19 +287,4 @@
 			md = checkfield(md,'fieldname','smb.P','timeseries',1,'NaN',1,'Inf',1,'>=',0,'<=',200,'size',size(self.Ta));
 			md = checkfield(md,'fieldname','smb.eAir','timeseries',1,'NaN',1,'Inf',1,'size',size(self.Ta));
-
-			if (self.isclimatology)
-				md = checkfield(md,'fieldname', 'smb.Ta', 'size',[md.mesh.numberofelements+1],...
-					'message',['Ta must have md.mesh.numberofelements+1 rows in order to force a climatology']);
-				md = checkfield(md,'fieldname', 'smb.V', 'size',[md.mesh.numberofelements+1],...
-					'message',['V must have md.mesh.numberofelements+1 rows in order to force a climatology']);
-				md = checkfield(md,'fieldname', 'smb.dswrf', 'size',[md.mesh.numberofelements+1],...
-					'message',['dswrf must have md.mesh.numberofelements+1 rows in order to force a climatology']);
-				md = checkfield(md,'fieldname', 'smb.dlwrf', 'size',[md.mesh.numberofelements+1],...
-					'message',['dlwrf must have md.mesh.numberofelements+1 rows in order to force a climatology']);
-				md = checkfield(md,'fieldname', 'smb.P', 'size',[md.mesh.numberofelements+1],...
-					'message',['P must have md.mesh.numberofelements+1 rows in order to force a climatology']);
-				md = checkfield(md,'fieldname', 'smb.eAir', 'size',[md.mesh.numberofelements+1],...
-					'message',['eAir must have md.mesh.numberofelements+1 rows in order to force a climatology']);
-			end
 
 			md = checkfield(md,'fieldname','smb.Tmean','size',[md.mesh.numberofelements 1],'NaN',1,'Inf',1,'>',273-100,'<',273+100); %-100/100 celsius min/max value
@@ -371,5 +353,4 @@
 			fielddisplay(self,'isturbulentflux','run turbulant heat fluxes module (default true)');
 			fielddisplay(self,'isconstrainsurfaceT','constrain surface temperatures to air temperature, turn off EC and surface flux contribution to surface temperature change');
-			fielddisplay(self,'isclimatology','repeat all forcings when past last forcing time (default false)');
 			fielddisplay(self,'Ta','2 m air temperature, in Kelvin');
 			fielddisplay(self,'V','wind speed (m s-1)');
@@ -437,5 +418,5 @@
 			end
 
-			fielddisplay(self,'swIdx','apply all SW to top grid cell (0) or allow SW to penetrate surface (1) [default 1, with snow density (taken from Bassford, 2004)]');
+			fielddisplay(self,'swIdx','apply all SW to top grid cell (0) or allow SW to penetrate surface (1) [default 1, if aIdx=2 function of effective radius (Brun et al., 1992) or else dependent on snow density (taken from Bassford, 2002)]');
 			fielddisplay(self,'denIdx',{'densification model to use (default is 2):',...
 				'1 = emperical model of Herron and Langway (1980)',...
@@ -449,5 +430,5 @@
 				'0 = Original GEMB value, 150 kg/m^3',...
 				'1 = Antarctica value of fresh snow density, 350 kg/m^3',...
-				'2 = Greenland value of fresh snow density, 315 kg/m^3, Fausto et al. (2008)',...
+				'2 = Greenland value of fresh snow density, 315 kg/m^3, Fausto et al. (2018)',...
 				'3 = Antarctica model of Kaspers et al. (2004), Make sure to set Vmean accurately',...
 				'4 = Greenland model of Kuipers Munneke et al. (2015)'});
@@ -476,5 +457,4 @@
 			WriteData(fid,prefix,'object',self,'class','smb','fieldname','isdensification','format','Boolean');
 			WriteData(fid,prefix,'object',self,'class','smb','fieldname','isturbulentflux','format','Boolean');
-			WriteData(fid,prefix,'object',self,'class','smb','fieldname','isclimatology','format','Boolean');
 			WriteData(fid,prefix,'object',self,'class','smb','fieldname','isconstrainsurfaceT','format','Boolean');
 
Index: /issm/trunk-jpl/src/m/classes/SMBgemb.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/SMBgemb.py	(revision 26207)
+++ /issm/trunk-jpl/src/m/classes/SMBgemb.py	(revision 26208)
@@ -71,5 +71,5 @@
             # 4: exponential time decay & wetness [Bougamont & Bamber, 2005]
 
-        self.swIdx                  = np.nan    # apply all SW to top grid cell (0) or allow SW to penetrate surface (1) (default 1, with snow density (taken from Bassford, 2004))
+        self.swIdx                  = np.nan    # apply all SW to top grid cell (0) or allow SW to penetrate surface (1) (default 1, if aIdx=2 function of effective radius (Brun et al., 1992) or else dependent on snow density (taken from Bassford, 2002)) 
         self.denIdx                 = np.nan    # densification model to use (default is 2):
             # 1 = emperical model of Herron and Langway (1980)
@@ -84,5 +84,5 @@
             # 0 = Original GEMB value, 150 kg/m^3
             # 1 = Antarctica value of fresh snow density, 350 kg/m^3
-            # 2 = Greenland value of fresh snow density, 315 kg/m^3, Fausto et al. (2008)
+            # 2 = Greenland value of fresh snow density, 315 kg/m^3, Fausto et al. (2018)
             # 3 = Antarctica model of Kaspers et al. (2004)
             # 4 = Greenland model of Kuipers Munneke et al. (2015)
@@ -156,5 +156,4 @@
         string = "%s\n%s" % (string, fielddisplay(self, 'isturbulentflux', 'run turbulant heat fluxes module (default true)'))
         string = "%s\n%s" % (string, fielddisplay(self, 'isconstrainsurfaceT', 'constrain surface temperatures to air temperature, turn off EC and surface flux contribution to surface temperature change'))
-        string = "%s\n%s" % (string, fielddisplay(self, 'isclimatology', 'repeat all forcings when past last forcing time (default false)'))
         string = "%s\n%s" % (string, fielddisplay(self, 'Ta', '2 m air temperature, in Kelvin'))
         string = "%s\n%s" % (string, fielddisplay(self, 'V', 'wind speed (m s-1)'))
@@ -218,5 +217,5 @@
             string = "%s\n%s" % (string, fielddisplay(self, 'K', 'time scale temperature coef. (7) [d]'))
 
-        string = "%s\n%s" % (string, fielddisplay(self, 'swIdx', 'apply all SW to top grid cell (0) or allow SW to penetrate surface (1) [default 1, with snow density (taken from Bassford, 2004)]'))
+        string = "%s\n%s" % (string, fielddisplay(self, 'swIdx', 'apply all SW to top grid cell (0) or allow SW to penetrate surface (1) [default 1, if aIdx=2 function of effective radius (Brun et al., 1992) or else dependent on snow density (taken from Bassford, 2002)]'))
         string = "%s\n%s" % (string, fielddisplay(self, 'denIdx', ['densification model to use (default is 2):',
                                                                    '1 = emperical model of Herron and Langway (1980)',
@@ -230,5 +229,5 @@
                                                                      '0 = Original GEMB value, 150 kg/m^3',
                                                                      '1 = Antarctica value of fresh snow density, 350 kg/m^3',
-                                                                     '2 = Greenland value of fresh snow density, 315 kg/m^3, Fausto et al. (2008)',
+                                                                     '2 = Greenland value of fresh snow density, 315 kg/m^3, Fausto et al. (2018)',
                                                                      '3 = Antarctica model of Kaspers et al. (2004), Make sure to set Vmean accurately',
                                                                      '4 = Greenland model of Kuipers Munneke et al. (2015)']))
@@ -304,5 +303,4 @@
         self.isdensification = 1
         self.isturbulentflux = 1
-        self.isclimatology = 0
         self.isconstrainsurfaceT = 0
 
@@ -368,5 +366,4 @@
         md = checkfield(md, 'fieldname', 'smb.isdensification', 'values', [0, 1])
         md = checkfield(md, 'fieldname', 'smb.isturbulentflux', 'values', [0, 1])
-        md = checkfield(md, 'fieldname', 'smb.isclimatology', 'values', [0, 1])
         md = checkfield(md, 'fieldname', 'smb.isconstrainsurfaceT', 'values', [0, 1])
 
@@ -378,12 +375,4 @@
         md = checkfield(md, 'fieldname', 'smb.P', 'timeseries', 1, 'NaN', 1, 'Inf', 1, '> = ', 0, '< = ', 200, 'size', np.shape(self.Ta))
         md = checkfield(md, 'fieldname', 'smb.eAir', 'timeseries', 1, 'NaN', 1, 'Inf', 1, 'size', np.shape(self.Ta))
-
-        if (self.isclimatology > 0):
-            md = checkfield(md, 'fieldname', 'smb.Ta', 'size', [md.mesh.numberofelements + 1], 'message', 'Ta must have md.mesh.numberofelements+1 rows in order to force a climatology')
-            md = checkfield(md, 'fieldname', 'smb.V', 'size', [md.mesh.numberofelements + 1], 'message', 'V must have md.mesh.numberofelements+1 rows in order to force a climatology')
-            md = checkfield(md, 'fieldname', 'smb.dswrf', 'size', [md.mesh.numberofelements + 1], 'message', 'dswrf must have md.mesh.numberofelements+1 rows in order to force a climatology')
-            md = checkfield(md, 'fieldname', 'smb.dlwrf', 'size', [md.mesh.numberofelements + 1], 'message', 'dlwrf must have md.mesh.numberofelements+1 rows in order to force a climatology')
-            md = checkfield(md, 'fieldname', 'smb.P', 'size', [md.mesh.numberofelements + 1], 'message', 'P must have md.mesh.numberofelements+1 rows in order to force a climatology')
-            md = checkfield(md, 'fieldname', 'smb.eAir', 'size', [md.mesh.numberofelements + 1], 'message', 'eAir must have md.mesh.numberofelements+1 rows in order to force a climatology')
 
         md = checkfield(md, 'fieldname', 'smb.Tmean', 'size', [md.mesh.numberofelements], 'NaN', 1, 'Inf', 1, '>', 273 - 100, '<', 273 + 100)  #-100/100 celsius min/max value
@@ -451,5 +440,4 @@
         WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'isdensification', 'format', 'Boolean')
         WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'isturbulentflux', 'format', 'Boolean')
-        WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'isclimatology', 'format', 'Boolean')
         WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'isconstrainsurfaceT', 'format', 'Boolean')
         WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'Ta', 'format', 'DoubleMat', 'mattype', 2, 'timeserieslength', md.mesh.numberofelements + 1, 'yts', yts)
Index: /issm/trunk-jpl/src/m/classes/SMBmeltcomponents.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/SMBmeltcomponents.m	(revision 26207)
+++ /issm/trunk-jpl/src/m/classes/SMBmeltcomponents.m	(revision 26208)
@@ -6,5 +6,4 @@
 classdef SMBmeltcomponents
 	properties (SetAccess=public)
-		isclimatology = 0;
 		accumulation = NaN;
 		evaporation = NaN;
@@ -71,15 +70,4 @@
 			md = checkfield(md,'fieldname','smb.averaging','numel',[1],'values',[0 1 2]);
 			md = checkfield(md,'fieldname','smb.requested_outputs','stringrow',1);
-			md = checkfield(md,'fieldname','smb.isclimatology','values',[0 1]);
-			if (self.isclimatology)
-				md = checkfield(md,'fieldname', 'smb.accumulation', 'size',[md.mesh.numberofvertices+1],...
-						'message',['accumulation must have md.mesh.numberofvertices+1 rows in order to force a climatology']);
-				md = checkfield(md,'fieldname', 'smb.melt', 'size',[md.mesh.numberofvertices+1],...
-						'message',['melt must have md.mesh.numberofvertices+1 rows in order to force a climatology']);
-				md = checkfield(md,'fieldname', 'smb.refreeze', 'size',[md.mesh.numberofvertices+1],...
-						'message',['refreeze must have md.mesh.numberofvertices+1 rows in order to force a climatology']);
-				md = checkfield(md,'fieldname', 'smb.evaporation', 'size',[md.mesh.numberofvertices+1],...
-						'message',['evaporation must have md.mesh.numberofvertices+1 rows in order to force a climatology']);
-			end
 		end % }}}
 		function disp(self) % {{{
@@ -89,5 +77,4 @@
 			fielddisplay(self,'melt','amount of ice melt in ice column [m/yr ice eq]');
 			fielddisplay(self,'refreeze','amount of ice melt refrozen in ice column [m/yr ice eq]');
-			fielddisplay(self,'isclimatology','repeat all forcings when past last forcing time (default false)');
 			fielddisplay(self, 'steps_per_step', 'number of smb steps per time step');
 			fielddisplay(self, 'averaging', 'averaging methods from short to long steps');
@@ -117,5 +104,4 @@
 			end
 			WriteData(fid,prefix,'data',outputs,'name','md.smb.requested_outputs','format','StringArray');
-			WriteData(fid,prefix,'object',self,'class','smb','fieldname','isclimatology','format','Boolean');
 
 		end % }}}
Index: /issm/trunk-jpl/src/m/classes/SMBmeltcomponents.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/SMBmeltcomponents.py	(revision 26207)
+++ /issm/trunk-jpl/src/m/classes/SMBmeltcomponents.py	(revision 26208)
@@ -17,5 +17,4 @@
         self.runoff = float('NaN')
         self.evaporation = float('NaN')
-        self.isclimatology = 0
         self.steps_per_step = 1
         self.averaging = 0
@@ -29,5 +28,4 @@
         string = "%s\n%s" % (string, fielddisplay(self, 'melt', 'amount of ice melt in the ice column [m/yr ice eq]'))
         string = "%s\n%s" % (string, fielddisplay(self, 'refreeze', 'amount of ice melt refrozen in the ice column [m/yr ice eq]'))
-        string = "%s\n%s" % (string, fielddisplay(self, 'isclimatology', 'repeat all forcings when past last forcing time (default false)'))
         string = "%s\n%s" % (string, fielddisplay(self, 'steps_per_step', 'number of smb steps per time step'))
         string = "%s\n%s" % (string, fielddisplay(self, 'averaging', 'averaging methods from short to long steps'))
@@ -87,5 +85,4 @@
         md = checkfield(md, 'fieldname', 'smb.averaging', 'numel', [1], 'values', [0, 1, 2])
         md = checkfield(md, 'fieldname', 'masstransport.requested_outputs', 'stringrow', 1)
-        md = checkfield(md, 'fieldname', 'smb.isclimatology', 'values', [0, 1])
         return md
     # }}}
@@ -109,10 +106,4 @@
             outputs = outputscopy
         WriteData(fid, prefix, 'data', outputs, 'name', 'md.smb.requested_outputs', 'format', 'StringArray')
-        WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'isclimatology', 'format', 'Boolean')
-        if (self.isclimatology > 0):
-            md = checkfield(md, 'fieldname', 'smb.accumulation', 'size', [md.mesh.numberofvertices + 1], 'message', 'accumulation must have md.mesh.numberofvertices+1 rows in order to force a climatology')
-            md = checkfield(md, 'fieldname', 'smb.melt', 'size', [md.mesh.numberofvertices + 1], 'message', 'melt must have md.mesh.numberofvertices+1 rows in order to force a climatology')
-            md = checkfield(md, 'fieldname', 'smb.refreeze', 'size', [md.mesh.numberofvertices + 1], 'message', 'refreeze must have md.mesh.numberofvertices+1 rows in order to force a climatology')
-            md = checkfield(md, 'fieldname', 'smb.evaporation', 'size', [md.mesh.numberofvertices + 1], 'message', 'evaporation must have md.mesh.numberofvertices+1 rows in order to force a climatology')
 
     # }}}
Index: /issm/trunk-jpl/src/m/classes/model.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/model.m	(revision 26207)
+++ /issm/trunk-jpl/src/m/classes/model.m	(revision 26208)
@@ -166,5 +166,5 @@
 				end
 			end
-			%2019 Mar 28
+			%2019 Mar 28, updated 2021 April 23
 			if isa(md.smb,'SMBcomponents') | isa(md.smb,'SMBmeltcomponents') | isa(md.smb,'SMBforcing') | isa(md.smb,'SMBgemb') 
 				if isa(md.smb.isclimatology,'double')
@@ -172,4 +172,5 @@
 						md.smb.isclimatology = 0;
 					end
+					md.timestepping.cycle_forcing=md.smb.isclimatology;
 				end
 			end
Index: /issm/trunk-jpl/src/m/classes/timestepping.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/timestepping.m	(revision 26207)
+++ /issm/trunk-jpl/src/m/classes/timestepping.m	(revision 26208)
@@ -9,5 +9,5 @@
 		final_time      = 0.;
 		time_step       = 0.;
-		interp_forcings = 1;
+		interp_forcing  = 1;
 		cycle_forcing   = 0;
 		coupling_time   = 0.;
@@ -32,6 +32,6 @@
 			self.final_time=10.*self.time_step;
 
-			%should we interpolate forcings between timesteps?
-			self.interp_forcings=1;
+			%should we interpolate forcing between timesteps?
+			self.interp_forcing=1;
 			self.cycle_forcing=0;
 		end % }}}
@@ -41,5 +41,5 @@
 			md = checkfield(md,'fieldname','timestepping.final_time','numel',[1],'NaN',1,'Inf',1);
 			md = checkfield(md,'fieldname','timestepping.time_step','numel',[1],'>=',0,'NaN',1,'Inf',1);
-			md = checkfield(md,'fieldname','timestepping.interp_forcings','numel',[1],'values',[0 1]);
+			md = checkfield(md,'fieldname','timestepping.interp_forcing','numel',[1],'values',[0 1]);
 			md = checkfield(md,'fieldname','timestepping.cycle_forcing','numel',[1],'values',[0 1]);
 			if self.final_time-self.start_time<0,
@@ -58,5 +58,5 @@
 			fielddisplay(self,'final_time',['final time to stop the simulation [' unit ']']);
 			fielddisplay(self,'time_step',['length of time steps [' unit ']']);
-			fielddisplay(self,'interp_forcings','interpolate in time between requested forcing values ? (0 or 1)');
+			fielddisplay(self,'interp_forcing','interpolate in time between requested forcing values ? (0 or 1)');
 			fielddisplay(self,'cycle_forcing','cycle through forcing ? (0 or 1)');
 			fielddisplay(self,'coupling_time',['length of coupling time step with ocean model  [' unit ']']);
@@ -70,5 +70,5 @@
 			WriteData(fid,prefix,'object',self,'fieldname','final_time','format','Double','scale',scale);
 			WriteData(fid,prefix,'object',self,'fieldname','time_step','format','Double','scale',scale);
-			WriteData(fid,prefix,'object',self,'fieldname','interp_forcings','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','interp_forcing','format','Boolean');
 			WriteData(fid,prefix,'object',self,'fieldname','cycle_forcing','format','Boolean');
 			WriteData(fid,prefix,'object',self,'fieldname','coupling_time','format','Double','scale',scale);
@@ -79,5 +79,5 @@
 			writejsdouble(fid,[modelname '.timestepping.final_time'],self.final_time);
 			writejsdouble(fid,[modelname '.timestepping.time_step'],self.time_step);
-			writejsdouble(fid,[modelname '.timestepping.interp_forcings'],self.interp_forcings);
+			writejsdouble(fid,[modelname '.timestepping.interp_forcing'],self.interp_forcing);
 			writejsdouble(fid,[modelname '.timestepping.cycle_forcing'],self.cycle_forcing);
 
Index: /issm/trunk-jpl/src/m/classes/timestepping.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/timestepping.py	(revision 26207)
+++ /issm/trunk-jpl/src/m/classes/timestepping.py	(revision 26208)
@@ -16,5 +16,5 @@
         self.final_time = 0.
         self.time_step = 0.
-        self.interp_forcings = 1
+        self.interp_forcing = 1
         self.cycle_forcing = 0
         self.coupling_time = 0.
@@ -30,5 +30,5 @@
         string = "%s\n%s" % (string, fielddisplay(self, "final_time", "final time to stop the simulation [yr]"))
         string = "%s\n%s" % (string, fielddisplay(self, "time_step", "length of time steps [yr]"))
-        string = "%s\n%s" % (string, fielddisplay(self, "interp_forcings", "interpolate in time between requested forcing values ? (0 or 1)"))
+        string = "%s\n%s" % (string, fielddisplay(self, "interp_forcing", "interpolate in time between requested forcing values ? (0 or 1)"))
         string = "%s\n%s" % (string, fielddisplay(self, "cycle_forcing", "cycle through forcing ? (0 or 1)"))
         string = "%s\n%s" % (string, fielddisplay(self, "coupling_time", "length of coupling time steps with ocean model [yr]"))
@@ -41,6 +41,6 @@
         #final time
         self.final_time = 10. * self.time_step
-        #should we interpolate forcings between timesteps?
-        self.interp_forcings = 1
+        #should we interpolate forcing between timesteps?
+        self.interp_forcing = 1
         self.cycle_forcing = 0
 
@@ -56,5 +56,5 @@
             md.checkmessage("timestepping.final_time should be larger than timestepping.start_time")
             md = checkfield(md, 'fieldname', 'timestepping.coupling_time', 'numel', [1], '>=', 0, 'NaN', 1, 'Inf', 1)
-        md = checkfield(md, 'fieldname', 'timestepping.interp_forcings', 'numel', [1], 'values', [0, 1])
+        md = checkfield(md, 'fieldname', 'timestepping.interp_forcing', 'numel', [1], 'values', [0, 1])
         md = checkfield(md, 'fieldname', 'timestepping.cycle_forcing', 'numel', [1], 'values', [0, 1])
 
@@ -69,5 +69,5 @@
         WriteData(fid, prefix, 'object', self, 'fieldname', 'final_time', 'format', 'Double', 'scale', yts)
         WriteData(fid, prefix, 'object', self, 'fieldname', 'time_step', 'format', 'Double', 'scale', yts)
-        WriteData(fid, prefix, 'object', self, 'fieldname', 'interp_forcings', 'format', 'Boolean')
+        WriteData(fid, prefix, 'object', self, 'fieldname', 'interp_forcing', 'format', 'Boolean')
         WriteData(fid, prefix, 'object', self, 'fieldname', 'cycle_forcing', 'format', 'Boolean')
         WriteData(fid, prefix, 'object', self, 'fieldname', 'coupling_time', 'format', 'Double', 'scale', yts)
Index: /issm/trunk-jpl/src/m/classes/timesteppingadaptive.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/timesteppingadaptive.m	(revision 26207)
+++ /issm/trunk-jpl/src/m/classes/timesteppingadaptive.m	(revision 26208)
@@ -11,5 +11,5 @@
 		time_step_max   = 0.;
 		cfl_coefficient = 0.;
-		interp_forcings = 1;
+		interp_forcing = 1;
 		cycle_forcing = 1;
 		coupling_time   = 0.;
@@ -38,6 +38,6 @@
 			self.cfl_coefficient=0.5;
 
-			%should we interpolate forcings between timesteps?
-			self.interp_forcings=1;
+			%should we interpolate forcing between timesteps?
+			self.interp_forcing=1;
 			self.cycle_forcing=0;
 		end % }}}
@@ -49,5 +49,5 @@
 			md = checkfield(md,'fieldname','timestepping.time_step_max','numel',[1],'>=',md.timestepping.time_step_min,'NaN',1,'Inf',1);
 			md = checkfield(md,'fieldname','timestepping.cfl_coefficient','numel',[1],'>',0,'<=',1);
-			md = checkfield(md,'fieldname','timestepping.interp_forcings','numel',[1],'values',[0 1]);
+			md = checkfield(md,'fieldname','timestepping.interp_forcing','numel',[1],'values',[0 1]);
 			md = checkfield(md,'fieldname','timestepping.cycle_forcing','numel',[1],'values',[0 1]);
 			md = checkfield(md,'fieldname','timestepping.coupling_time','numel',[1],'>=',md.timestepping.coupling_time,'NaN',1,'Inf',1);
@@ -65,5 +65,5 @@
 			fielddisplay(self,'time_step_max',['maximum length of time step [' unit ']']);
 			fielddisplay(self,'cfl_coefficient','coefficient applied to cfl condition');
-			fielddisplay(self,'interp_forcings','interpolate in time between requested forcing values ? (0 or 1)');
+			fielddisplay(self,'interp_forcing','interpolate in time between requested forcing values ? (0 or 1)');
 			fielddisplay(self,'cycle_forcing','cycle through forcing ? (0 or 1)');
 			fielddisplay(self,'coupling_time',['coupling time step with ocean model [' unit ']']);
@@ -79,5 +79,5 @@
 			WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','time_step_max','format','Double','scale',scale);
 			WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','cfl_coefficient','format','Double');
-			WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','interp_forcings','format','Boolean');
+			WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','interp_forcing','format','Boolean');
 			WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','cycle_forcing','format','Boolean');
 			WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','coupling_time','format','Double','scale',scale);
@@ -90,5 +90,5 @@
 			writejsdouble(fid,[modelname '.timesteppingadaptive.time_step_max'],self.time_step_max);
 			writejsdouble(fid,[modelname '.timesteppingadaptive.cfl_coefficient'],self.cfl_coefficient);
-			writejsdouble(fid,[modelname '.timesteppingadaptive.interp_forcings'],self.interp_forcings);
+			writejsdouble(fid,[modelname '.timesteppingadaptive.interp_forcing'],self.interp_forcing);
 			writejsdouble(fid,[modelname '.timesteppingadaptive.cycle_forcing'],self.cycle_forcing);
 			writejsdouble(fid,[modelname '.timesteppingadaptive.coupling_time'],self.time_step_max);
Index: /issm/trunk-jpl/src/m/classes/timesteppingadaptive.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/timesteppingadaptive.py	(revision 26207)
+++ /issm/trunk-jpl/src/m/classes/timesteppingadaptive.py	(revision 26208)
@@ -19,5 +19,5 @@
             self.time_step_max = 0.
             self.cfl_coefficient = 0.
-            self.interp_forcings = 1
+            self.interp_forcing = 1
             self.cycle_forcing = 0
             self.coupling_time = 0.
@@ -32,5 +32,5 @@
             self.start_time = old.start_time
             self.final_time = old.final_time
-            self.interp_forcings = old.interp_forcings
+            self.interp_forcing = old.interp_forcing
             self.cycle_forcing = old.cycle_forcing
             self.coupling_time = old.coupling_time
@@ -47,5 +47,5 @@
         string = "%s\n%s" % (string, fielddisplay(self, "time_step_max", "maximum length of time steps [yr]"))
         string = "%s\n%s" % (string, fielddisplay(self, "cfl_coefficient", "coefficient applied to cfl condition"))
-        string = "%s\n%s" % (string, fielddisplay(self, "interp_forcings", "interpolate in time between requested forcing values ? (0 or 1)"))
+        string = "%s\n%s" % (string, fielddisplay(self, "interp_forcing", "interpolate in time between requested forcing values ? (0 or 1)"))
         string = "%s\n%s" % (string, fielddisplay(self, "cycle_forcing", "cycle through forcing ? (0 or 1)"))
         string = "%s\n%s" % (string, fielddisplay(self, "coupling_time", "coupling time steps with ocean model [yr]"))
@@ -61,6 +61,6 @@
         #time adaptation?
         self.cfl_coefficient = 0.5
-        #should we interpolate forcings between timesteps?
-        self.interp_forcings = 1
+        #should we interpolate forcing between timesteps?
+        self.interp_forcing = 1
         self.cycle_forcing   = 0
         return self
@@ -75,5 +75,5 @@
         if self.final_time - self.start_time < 0:
             md.checkmessage("timestepping.final_time should be larger than timestepping.start_time")
-        md = checkfield(md, 'fieldname', 'timestepping.interp_forcings', 'numel', [1], 'values', [0, 1])
+        md = checkfield(md, 'fieldname', 'timestepping.interp_forcing', 'numel', [1], 'values', [0, 1])
         md = checkfield(md, 'fieldname', 'timestepping.cycle_forcing', 'numel', [1], 'values', [0, 1])
         md = checkfield(md, 'fieldname', 'timestepping.coupling_time', 'numel', [1], '>=', 0, 'NaN', 1, 'Inf', 1)
@@ -90,5 +90,5 @@
         WriteData(fid, prefix, 'object', self, 'class', 'timestepping', 'fieldname', 'time_step_max', 'format', 'Double', 'scale', yts)
         WriteData(fid, prefix, 'object', self, 'class', 'timestepping', 'fieldname', 'cfl_coefficient', 'format', 'Double')
-        WriteData(fid, prefix, 'object', self, 'class', 'timestepping', 'fieldname', 'interp_forcings', 'format', 'Boolean')
+        WriteData(fid, prefix, 'object', self, 'class', 'timestepping', 'fieldname', 'interp_forcing', 'format', 'Boolean')
         WriteData(fid, prefix, 'object', self, 'class', 'timestepping', 'fieldname', 'cycle_forcing', 'format', 'Boolean')
         WriteData(fid, prefix, 'object', self, 'class', 'timestepping', 'fieldname', 'coupling_time', 'format', 'Double', 'scale', yts)
Index: /issm/trunk-jpl/test/NightlyRun/test240.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test240.m	(revision 26207)
+++ /issm/trunk-jpl/test/NightlyRun/test240.m	(revision 26208)
@@ -39,5 +39,5 @@
 md.settings.output_frequency=1;
 md.timestepping.final_time=2;
-md.timestepping.interp_forcings=0;
+md.timestepping.interp_forcing=0;
 
 md=setflowequation(md,'SSA','all');
Index: /issm/trunk-jpl/test/NightlyRun/test240.py
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test240.py	(revision 26207)
+++ /issm/trunk-jpl/test/NightlyRun/test240.py	(revision 26208)
@@ -45,5 +45,5 @@
 md.settings.output_frequency = 1
 md.timestepping.final_time = 2
-md.timestepping.interp_forcings = 0
+md.timestepping.interp_forcing = 0
 
 md = setflowequation(md, 'SSA', 'all')
Index: /issm/trunk-jpl/test/NightlyRun/test241.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test241.m	(revision 26207)
+++ /issm/trunk-jpl/test/NightlyRun/test241.m	(revision 26208)
@@ -9,5 +9,5 @@
 md.settings.output_frequency=1;
 md.timestepping.final_time=4.;
-md.timestepping.interp_forcings=0;
+md.timestepping.interp_forcing=0;
 
 %Set up transient
Index: /issm/trunk-jpl/test/NightlyRun/test241.py
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test241.py	(revision 26207)
+++ /issm/trunk-jpl/test/NightlyRun/test241.py	(revision 26208)
@@ -19,5 +19,5 @@
 md.settings.output_frequency = 1
 md.timestepping.final_time = 4.
-md.timestepping.interp_forcings = False
+md.timestepping.interp_forcing = False
 
 #Set up transient
Index: /issm/trunk-jpl/test/NightlyRun/test242.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test242.m	(revision 26207)
+++ /issm/trunk-jpl/test/NightlyRun/test242.m	(revision 26208)
@@ -10,5 +10,5 @@
 md.settings.output_frequency=1;
 md.timestepping.final_time=4;
-md.timestepping.interp_forcings=0;
+md.timestepping.interp_forcing=0;
 
 %Set up transient
Index: /issm/trunk-jpl/test/NightlyRun/test242.py
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test242.py	(revision 26207)
+++ /issm/trunk-jpl/test/NightlyRun/test242.py	(revision 26208)
@@ -20,5 +20,5 @@
 md.settings.output_frequency = 1
 md.timestepping.final_time = 4.
-md.timestepping.interp_forcings = False
+md.timestepping.interp_forcing = False
 
 #Set up transient
Index: /issm/trunk-jpl/test/NightlyRun/test243.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test243.m	(revision 26207)
+++ /issm/trunk-jpl/test/NightlyRun/test243.m	(revision 26208)
@@ -42,5 +42,5 @@
 md.timestepping.final_time=1966;
 md.timestepping.time_step=1/365.0;
-md.timestepping.interp_forcings=0;
+md.timestepping.interp_forcing=0;
 
 %Run transient
Index: /issm/trunk-jpl/test/NightlyRun/test243.py
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test243.py	(revision 26207)
+++ /issm/trunk-jpl/test/NightlyRun/test243.py	(revision 26208)
@@ -60,5 +60,5 @@
 md.timestepping.final_time = 1966.
 md.timestepping.time_step = 1.0 / 365
-md.timestepping.interp_forcings = 0.
+md.timestepping.interp_forcing = 0.
 
 #Run transient
Index: /issm/trunk-jpl/test/NightlyRun/test244.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test244.m	(revision 26207)
+++ /issm/trunk-jpl/test/NightlyRun/test244.m	(revision 26208)
@@ -40,5 +40,5 @@
 md.timestepping.final_time=1965.75;
 md.timestepping.time_step=1/365.0;
-md.timestepping.interp_forcings=0;
+md.timestepping.interp_forcing=0;
 
 %dakota version
Index: /issm/trunk-jpl/test/NightlyRun/test244.py
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test244.py	(revision 26207)
+++ /issm/trunk-jpl/test/NightlyRun/test244.py	(revision 26208)
@@ -60,5 +60,5 @@
 md.timestepping.final_time = 1965.75
 md.timestepping.time_step = 1. / 365.0
-md.timestepping.interp_forcings = 0.
+md.timestepping.interp_forcing = 0.
 
 #dakota version
Index: /issm/trunk-jpl/test/NightlyRun/test247.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test247.m	(revision 26207)
+++ /issm/trunk-jpl/test/NightlyRun/test247.m	(revision 26208)
@@ -99,5 +99,5 @@
 md.settings.output_frequency=1;
 md.timestepping.final_time=2;
-md.timestepping.interp_forcings=0;
+md.timestepping.interp_forcing=0;
 
 %md.transient.requested_outputs={'default','IceVolumeAboveFloatation','IceVolume','TemperaturePDD','SmbMonthlytemperatures','SmbPrecipitation'};
Index: /issm/trunk-jpl/test/NightlyRun/test247.py
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test247.py	(revision 26207)
+++ /issm/trunk-jpl/test/NightlyRun/test247.py	(revision 26208)
@@ -113,5 +113,5 @@
 md.settings.output_frequency = 1
 md.timestepping.final_time = 2
-md.timestepping.interp_forcings = 0
+md.timestepping.interp_forcing = 0
 
 md.transient.requested_outputs = ['default', 'IceVolumeAboveFloatation','IceVolume','TemperaturePDD']
Index: /issm/trunk-jpl/test/NightlyRun/test252.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test252.m	(revision 26207)
+++ /issm/trunk-jpl/test/NightlyRun/test252.m	(revision 26208)
@@ -35,5 +35,5 @@
 md.smb.pAir=md.smb.pAir(:,1:365*8);
 
-md.smb.isclimatology=1;
+md.timestepping.cycle_forcing=1;
 
 %smb settings
@@ -49,5 +49,5 @@
 md.timestepping.final_time=1966.6;
 md.timestepping.time_step=1/365.0;
-md.timestepping.interp_forcings=0;
+md.timestepping.interp_forcing=0;
 
 %Run transient
Index: /issm/trunk-jpl/test/NightlyRun/test252.py
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test252.py	(revision 26207)
+++ /issm/trunk-jpl/test/NightlyRun/test252.py	(revision 26208)
@@ -51,5 +51,5 @@
 md.smb.pAir = md.smb.pAir[:, 0:365 * 8]
 
-md.smb.isclimatology = 1
+md.timestepping.cycle_forcing = 1
 
 #smb settings
@@ -65,5 +65,5 @@
 md.timestepping.final_time = 1966.6
 md.timestepping.time_step = 1. / 365.0
-md.timestepping.interp_forcings = 0.
+md.timestepping.interp_forcing = 0.
 
 #Run transient
Index: /issm/trunk-jpl/test/NightlyRun/test253.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test253.m	(revision 26207)
+++ /issm/trunk-jpl/test/NightlyRun/test253.m	(revision 26208)
@@ -37,5 +37,5 @@
 md.smb.pAir=md.smb.pAir(:,1:365*8);
 
-md.smb.isclimatology=1;
+md.timestepping.cycle_forcing=1;
 md.smb.isconstrainsurfaceT=1;
 
@@ -52,5 +52,5 @@
 md.timestepping.final_time=1966.6;
 md.timestepping.time_step=1/365.0;
-md.timestepping.interp_forcings=0;
+md.timestepping.interp_forcing=0;
 
 %Run transient
Index: /issm/trunk-jpl/test/NightlyRun/test253.py
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test253.py	(revision 26207)
+++ /issm/trunk-jpl/test/NightlyRun/test253.py	(revision 26208)
@@ -51,5 +51,5 @@
 md.smb.pAir = md.smb.pAir[:, 0:365 * 8]
 
-md.smb.isclimatology = 1
+md.timestepping.cycle_forcing = 1
 md.smb.isconstrainsurfaceT = 1
 
@@ -66,5 +66,5 @@
 md.timestepping.final_time = 1966.6
 md.timestepping.time_step = 1. / 365.0
-md.timestepping.interp_forcings = 0.
+md.timestepping.interp_forcing = 0.
 
 #Run transient
Index: /issm/trunk-jpl/test/NightlyRun/test292.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test292.m	(revision 26207)
+++ /issm/trunk-jpl/test/NightlyRun/test292.m	(revision 26208)
@@ -7,5 +7,5 @@
 md.basalforcings=linearbasalforcings(md.basalforcings);
 md.basalforcings.deepwater_melting_rate=[50 100;0 5];
-md.timestepping.interp_forcings=0;
+md.timestepping.interp_forcing=0;
 md=solve(md,'Transient');
 
Index: /issm/trunk-jpl/test/NightlyRun/test292.py
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test292.py	(revision 26207)
+++ /issm/trunk-jpl/test/NightlyRun/test292.py	(revision 26208)
@@ -19,5 +19,5 @@
 md.basalforcings = linearbasalforcings(md.basalforcings)
 md.basalforcings.deepwater_melting_rate = np.array([[50., 100.], [0., 5.]])
-md.timestepping.interp_forcings = 0
+md.timestepping.interp_forcing = 0
 md = solve(md, 'Transient')
 
Index: /issm/trunk-jpl/test/NightlyRun/test3201.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test3201.m	(revision 26207)
+++ /issm/trunk-jpl/test/NightlyRun/test3201.m	(revision 26208)
@@ -10,5 +10,5 @@
 
 %Create real time series for B
-md.timestepping.interp_forcings = 0;
+md.timestepping.interp_forcing = 0;
 md.timestepping.final_time = 2*md.timestepping.time_step;
 md.materials.rheology_B = 1.8e8*ones(md.mesh.numberofelements,2);
Index: /issm/trunk-jpl/test/NightlyRun/test3202.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test3202.m	(revision 26207)
+++ /issm/trunk-jpl/test/NightlyRun/test3202.m	(revision 26208)
@@ -10,5 +10,5 @@
 
 %Create real time series for B
-md.timestepping.interp_forcings = 0;
+md.timestepping.interp_forcing = 0;
 md.timestepping.final_time = 2*md.timestepping.time_step;
 md.materials.rheology_B = 1.8e8*ones(md.mesh.numberofvertices,2);
Index: /issm/trunk-jpl/test/NightlyRun/test3480.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test3480.m	(revision 26207)
+++ /issm/trunk-jpl/test/NightlyRun/test3480.m	(revision 26208)
@@ -38,5 +38,5 @@
 	'datatime',0.75);
 
-md.timestepping.interp_forcings=0;
+md.timestepping.interp_forcing=0;
 md.timestepping.time_step=0.5;
 md.timestepping.final_time=1.5;
Index: /issm/trunk-jpl/test/NightlyRun/test3481.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test3481.m	(revision 26207)
+++ /issm/trunk-jpl/test/NightlyRun/test3481.m	(revision 26208)
@@ -45,5 +45,5 @@
 	'datatime',0.75);
 
-md.timestepping.interp_forcings=1;
+md.timestepping.interp_forcing=1;
 md.timestepping.time_step=0.5;
 md.timestepping.final_time=1.5;
Index: /issm/trunk-jpl/test/NightlyRun/test352.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test352.m	(revision 26207)
+++ /issm/trunk-jpl/test/NightlyRun/test352.m	(revision 26208)
@@ -16,5 +16,5 @@
 md.transient.isthermal=0;
 
-md.smb.isclimatology=1;
+md.timestepping.cycle_forcing=1;
 
 md=solve(md,'Transient');
Index: /issm/trunk-jpl/test/NightlyRun/test352.py
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test352.py	(revision 26207)
+++ /issm/trunk-jpl/test/NightlyRun/test352.py	(revision 26208)
@@ -26,5 +26,5 @@
 md.transient.isthermal = False
 
-md.smb.isclimatology = 1
+md.timestepping.cycle_forcing = 1
 
 md = solve(md, 'Transient')
Index: /issm/trunk-jpl/test/NightlyRun/test353.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test353.m	(revision 26207)
+++ /issm/trunk-jpl/test/NightlyRun/test353.m	(revision 26208)
@@ -20,5 +20,5 @@
 md.transient.isthermal=0;
 
-md.smb.isclimatology=1;
+md.timestepping.cycle_forcing=1;
 
 md=solve(md,'Transient');
Index: /issm/trunk-jpl/test/NightlyRun/test353.py
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test353.py	(revision 26207)
+++ /issm/trunk-jpl/test/NightlyRun/test353.py	(revision 26208)
@@ -30,5 +30,5 @@
 md.transient.isthermal = False
 
-md.smb.isclimatology = 1
+md.timestepping.cycle_forcing = 1
 
 md = solve(md, 'Transient')
Index: /issm/trunk-jpl/test/NightlyRun/test354.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test354.m	(revision 26207)
+++ /issm/trunk-jpl/test/NightlyRun/test354.m	(revision 26208)
@@ -21,5 +21,5 @@
 md.transient.isthermal=0;
 
-md.smb.isclimatology=1;
+md.timestepping.cycle_forcing=1;
 
 md=solve(md,'Transient');
Index: /issm/trunk-jpl/test/NightlyRun/test354.py
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test354.py	(revision 26207)
+++ /issm/trunk-jpl/test/NightlyRun/test354.py	(revision 26208)
@@ -31,5 +31,5 @@
 md.transient.isthermal = False
 
-md.smb.isclimatology = 1
+md.timestepping.cycle_forcing = 1
 
 md = solve(md, 'Transient')
