Index: /issm/trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp	(revision 24468)
+++ /issm/trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp	(revision 24469)
@@ -21,4 +21,5 @@
 
 	int geodetic=0;
+	int dslmodel=0;
 
 	/*Update elements: */
@@ -52,7 +53,14 @@
 	iomodel->FetchDataToInput(inputs2,elements,"md.slr.Ngia",SealevelNGiaRateEnum);
 	iomodel->FetchDataToInput(inputs2,elements,"md.slr.Ugia",SealevelUGiaRateEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.slr.steric_rate",SealevelriseStericRateEnum);
 	iomodel->FetchDataToInput(inputs2,elements,"md.slr.hydro_rate",SealevelriseHydroRateEnum);
-
+		
+	/*dynamic sea level: */
+	iomodel->FetchData(&dslmodel,"md.dsl.model");
+	if (dslmodel==1){
+		iomodel->FetchDataToInput(inputs2,elements,"md.dsl.sea_surface_height_change_above_geoid", DslSeaSurfaceHeightChangeAboveGeoidEnum);
+		iomodel->FetchDataToInput(inputs2,elements,"md.dsl.sea_water_pressure_change_at_sea_floor", DslSeaWaterPressureChangeAtSeaFloor);
+	}
+	else _error_("Dsl model " << dslmodel << " not implemented yet!");
+			
 	/*Initialize cumdeltalthickness and sealevel rise rate input*/
 	InputUpdateFromConstantx(inputs2,elements,0.,SealevelriseCumDeltathicknessEnum);
@@ -70,4 +78,5 @@
 	IssmDouble* love_k=NULL;
 	IssmDouble* love_l=NULL;
+	int         dslmodel=0;
 
 	bool elastic=false;
@@ -109,4 +118,17 @@
 	parameters->AddObject(iomodel->CopyConstantObject("md.slr.geodetic",SealevelriseGeodeticEnum));
 
+	/*dsl model: */
+	iomodel->FetchData(&dslmodel,"md.dsl.model");
+	if (dslmodel==1){
+		IssmDouble* temp=NULL; 
+		int M,N;
+		bool interp;
+		iomodel->FindConstant(&interp,"md.timestepping.interp_forcings");
+		iomodel->FetchData(&temp,&N,&M,"md.dsl.global_average_thermosteric_sea_level_change"); _assert_(N==2);
+		parameters->AddObject(new TransientParam(DslGlobalAverageThermostericSeaLevelChangeEnum,&temp[0],&temp[M],interp,M));
+		iomodel->DeleteData(temp,"md.dsl.global_average_thermosteric_sea_level_change");
+	}
+	else _error_("dslmodel " << dslmodel << " not supported yet");
+
 	iomodel->FetchData(&elastic,"md.slr.elastic");
 	if(elastic){
Index: /issm/trunk-jpl/src/c/classes/Elements/Element.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 24468)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 24469)
@@ -372,5 +372,6 @@
 		#endif
 		#ifdef _HAVE_SEALEVELRISE_
-		virtual void UpdateStericRate(int steric_rate_model)=0;
+		virtual void UpdateStericRate(int dslmodel)=0;
+		virtual void UpdateDynamicRate(int dslmodel)=0;
 		virtual IssmDouble    GetArea3D(void)=0;
 		virtual IssmDouble    GetAreaSpherical(void)=0;
Index: /issm/trunk-jpl/src/c/classes/Elements/Penta.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Penta.h	(revision 24468)
+++ /issm/trunk-jpl/src/c/classes/Elements/Penta.h	(revision 24469)
@@ -210,5 +210,6 @@
 		#endif
 		#ifdef _HAVE_SEALEVELRISE_
-		void UpdateStericRate(int steric_rate_model){_error_("not implemented yet!");};
+		void UpdateDynamicRate(int dslmodel){_error_("not implemented yet!");};
+		void UpdateStericRate(int dslmodel){_error_("not implemented yet!");};
 		IssmDouble    OceanArea(void){_error_("not implemented yet!");};
 		IssmDouble    OceanAverage(IssmDouble* Sg){_error_("not implemented yet!");};
Index: /issm/trunk-jpl/src/c/classes/Elements/Seg.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Seg.h	(revision 24468)
+++ /issm/trunk-jpl/src/c/classes/Elements/Seg.h	(revision 24469)
@@ -171,5 +171,6 @@
 #endif
 #ifdef _HAVE_SEALEVELRISE_
-		void UpdateStericRate(int steric_rate_model){_error_("not implemented yet!");};
+		void UpdateDynamicRate(int dslmodel){_error_("not implemented yet!");};
+		void UpdateStericRate(int dslmodel){_error_("not implemented yet!");};
 		void    SealevelriseMomentOfInertia(IssmDouble* dI_list,IssmDouble* Sg_old,IssmDouble eartharea){_error_("not implemented yet!");};
 		void    SealevelriseEustatic(Vector<IssmDouble>* pSgi,IssmDouble* peustatic,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea,IssmDouble eartharea){_error_("not implemented yet!");};
Index: /issm/trunk-jpl/src/c/classes/Elements/Tetra.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 24468)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 24469)
@@ -177,5 +177,6 @@
 #endif
 #ifdef _HAVE_SEALEVELRISE_
-		void UpdateStericRate(int steric_rate_model){_error_("not implemented yet!");};
+		void UpdateDynamicRate(int dslmodel){_error_("not implemented yet!");};
+		void UpdateStericRate(int dslmodel){_error_("not implemented yet!");};
 		void    SealevelriseMomentOfInertia(IssmDouble* dI_list,IssmDouble* Sg_old,IssmDouble eartharea){_error_("not implemented yet!");};
 		void    SealevelriseEustatic(Vector<IssmDouble>* pSgi,IssmDouble* peustatic,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea,IssmDouble eartharea){_error_("not implemented yet!");};
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 24468)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 24469)
@@ -5436,11 +5436,13 @@
 #endif
 #ifdef _HAVE_SEALEVELRISE_
-void    Tria::UpdateStericRate(int steric_rate_model){ /*{{{*/
-
-	if (steric_rate_model==0){
-		//do nothing
-	}
-	else if (steric_rate_model==1){
-		IssmDouble eof1[3],eof2[3],eof3[3],eof4[3];
+void    Tria::UpdateDynamicRate(int dslmodel){ /*{{{*/
+
+	if (dslmodel==1){
+		//do nothing for now
+		IssmDouble dslrate[3]={0,0,0};
+		this->AddInput2(DslDynamicRateEnum,&dslrate[0],P1Enum);
+	}
+	else if (dslmodel==2){
+		/*IssmDouble eof1[3],eof2[3],eof3[3],eof4[3];
 		IssmDouble steric_rate[3];
 		IssmDouble pc1,pc2,pc3,pc4;
@@ -5458,10 +5460,47 @@
 		for (int i=0;i<4;i++)steric_rate[i]=pc1*eof1[i]+pc2*eof2[i]+pc3*eof3[i]+pc4*eof4[i];
 
-		/*upate input: */
+		//upate input: 
 		this->AddInput2(SealevelriseStericRateEnum,&steric_rate[0],P1Enum);
+		*/
 
 	}
 	else{
-		_error_("not supported??");
+		_error_("dslmodel " << dslmodel  << " not supported yet!");
+	}
+}
+/*}}}*/
+void    Tria::UpdateStericRate(int dslmodel){ /*{{{*/
+
+	IssmDouble dslrate = 0;
+	IssmDouble time;
+	if (dslmodel==1){
+		//grab value of GlobalAverageThermostericSeaLevelChange directly: 
+		this->parameters->FindParam(&time,TimeEnum);
+		this->parameters->FindParam(&dslrate,DslGlobalAverageThermostericSeaLevelChangeEnum,time);
+		this->AddInput2(DslStericRateEnum,&dslrate,P0Enum);
+	}
+	else if (dslmodel==2){
+		/*IssmDouble eof1[3],eof2[3],eof3[3],eof4[3];
+		IssmDouble steric_rate[3];
+		IssmDouble pc1,pc2,pc3,pc4;
+
+		Element::GetInputListOnVertices(&eof1[0],SealevelriseModeleoftrendEof1Enum);
+		Element::GetInputListOnVertices(&eof2[0],SealevelriseModeleoftrendEof2Enum);
+		Element::GetInputListOnVertices(&eof3[0],SealevelriseModeleoftrendEof3Enum);
+		Element::GetInputListOnVertices(&eof4[0],SealevelriseModeleoftrendEof4Enum);
+
+		Element::GetInputValue(&pc1,SealevelriseModeleoftrendPc1Enum);
+		Element::GetInputValue(&pc2,SealevelriseModeleoftrendPc2Enum);
+		Element::GetInputValue(&pc3,SealevelriseModeleoftrendPc3Enum);
+		Element::GetInputValue(&pc4,SealevelriseModeleoftrendPc4Enum);
+
+		for (int i=0;i<4;i++)steric_rate[i]=pc1*eof1[i]+pc2*eof2[i]+pc3*eof3[i]+pc4*eof4[i];
+
+		//upate input:
+		this->AddInput2(SealevelriseStericRateEnum,&steric_rate[0],P1Enum);
+		*/
+	}
+	else{
+		_error_("dslmodel " << dslmodel  << " not supported yet!");
 	}
 }
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.h	(revision 24468)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.h	(revision 24469)
@@ -163,5 +163,6 @@
 		#endif
 		#ifdef _HAVE_SEALEVELRISE_
-		void UpdateStericRate(int steric_rate_model);
+		void UpdateDynamicRate(int dslmodel);
+		void UpdateStericRate(int dslmodel);
 		IssmDouble OceanArea(void);
 		IssmDouble OceanAverage(IssmDouble* Sg);
Index: /issm/trunk-jpl/src/c/cores/cores.h
===================================================================
--- /issm/trunk-jpl/src/c/cores/cores.h	(revision 24468)
+++ /issm/trunk-jpl/src/c/cores/cores.h	(revision 24469)
@@ -61,4 +61,6 @@
 void sealevelrise_diagnostics(FemModel* femmodel,Vector<IssmDouble>* RSLg);
 IssmDouble objectivefunction(IssmDouble search_scalar,FemModel* femmodel);
+void GetStericRate(Vector<IssmDouble> ** psteric_rate_g, FemModel* femmodel);
+void GetDynamicRate(Vector<IssmDouble> ** pdynamic_rate_g, FemModel* femmodel);
 
 //optimization
Index: /issm/trunk-jpl/src/c/cores/sealevelrise_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/sealevelrise_core.cpp	(revision 24468)
+++ /issm/trunk-jpl/src/c/cores/sealevelrise_core.cpp	(revision 24469)
@@ -9,4 +9,5 @@
 #include "../modules/modules.h"
 #include "../solutionsequences/solutionsequences.h"
+
 
 /*cores:*/
@@ -225,4 +226,5 @@
 	Vector<IssmDouble> *SL  = NULL; 
 	Vector<IssmDouble> *steric_rate_g  = NULL; 
+	Vector<IssmDouble> *dynamic_rate_g = NULL;
 	Vector<IssmDouble> *hydro_rate_g  = NULL; 
 	Vector<IssmDouble> *U_esa_rate= NULL;
@@ -255,5 +257,6 @@
 	GetVectorFromInputsx(&bedrock,femmodel,BedEnum,VertexSIdEnum);
 	GetVectorFromInputsx(&SL,femmodel,SealevelEnum,VertexSIdEnum);
-	GetVectorFromInputsx(&steric_rate_g,femmodel,SealevelriseStericRateEnum,VertexSIdEnum);
+	GetStericRate(&steric_rate_g,femmodel);
+	GetDynamicRate(&dynamic_rate_g,femmodel);
 	GetVectorFromInputsx(&hydro_rate_g,femmodel,SealevelriseHydroRateEnum,VertexSIdEnum);
 	if(geodetic){
@@ -264,5 +267,5 @@
 	}
 
-	/*compute: sea level change = initial sea level + (N_gia_rate+N_esa_rate)  * dt + steric_rate + hydro_rate* dt*/
+	/*compute: sea level change = initial sea level + (N_gia_rate+N_esa_rate)  * dt + steric_rate + dynamic_rate + hydro_rate* dt*/
 	if(geodetic){
 		SL->AXPY(N_gia_rate,dt);
@@ -270,4 +273,5 @@
 	}
 	SL->AXPY(steric_rate_g,dt);
+	SL->AXPY(dynamic_rate_g,dt);
 	SL->AXPY(hydro_rate_g,dt);
 
@@ -286,4 +290,5 @@
 	delete SL;
 	delete steric_rate_g;
+	delete dynamic_rate_g;
 	delete hydro_rate_g;
 	if(geodetic){
@@ -558,4 +563,41 @@
 }
 /*}}}*/
+void GetDynamicRate(Vector<IssmDouble> ** pdynamic_rate_g, FemModel* femmodel){ /*{{{*/
+
+	int dslmodel=0;
+
+	/*variables:*/
+	Vector<IssmDouble> *dynamic_rate_g  = NULL; 
+
+	/*Update dynamic rates before retrieving them on Vertex SID set:*/
+	femmodel->parameters->FindParam(&dslmodel,DslModelEnum);
+
+	for(int el=0;el<femmodel->elements->Size();el++){
+		Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(el));
+		element->UpdateDynamicRate(dslmodel);
+	}
+
+	GetVectorFromInputsx(&dynamic_rate_g,femmodel,DslDynamicRateEnum,VertexSIdEnum);
+	*pdynamic_rate_g=dynamic_rate_g;
+}
+/*}}}*/
+void GetStericRate(Vector<IssmDouble> ** psteric_rate_g, FemModel* femmodel){ /*{{{*/
+
+	int dslmodel=-1;
+
+	/*variables:*/
+	Vector<IssmDouble> *steric_rate_g  = NULL; 
+
+	/*Update steric rates before retrieving them on Vertex SID set:*/
+	femmodel->parameters->FindParam(&dslmodel,DslModelEnum);
+
+	for(int el=0;el<femmodel->elements->Size();el++){
+		Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(el));
+		element->UpdateStericRate(dslmodel);
+	}
+	GetVectorFromInputsx(&steric_rate_g,femmodel,DslStericRateEnum,VertexSIdEnum);
+	*psteric_rate_g=steric_rate_g;
+}
+/*}}}*/
 
 /*support routines:*/
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 24468)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 24469)
@@ -62,4 +62,5 @@
 	parameters->AddObject(iomodel->CopyConstantObject("md.inversion.type",InversionTypeEnum));
 	parameters->AddObject(iomodel->CopyConstantObject("md.calving.law",CalvingLawEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.dsl.model",DslModelEnum));
 	parameters->AddObject(iomodel->CopyConstantObject("md.frontalforcings.parameterization",FrontalForcingsParamEnum));
 	parameters->AddObject(new IntParam(SealevelriseRunCountEnum,1));  
Index: /issm/trunk-jpl/src/c/shared/Enum/Enum.vim
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 24468)
+++ /issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 24469)
@@ -130,4 +130,6 @@
 syn keyword cConstant DomainDimensionEnum
 syn keyword cConstant DomainTypeEnum
+syn keyword cConstant DslGlobalAverageThermostericSeaLevelChangeEnum
+syn keyword cConstant DslModelEnum
 syn keyword cConstant EarthIdEnum
 syn keyword cConstant EplZigZagCounterEnum
@@ -519,4 +521,7 @@
 syn keyword cConstant DrivingStressXEnum
 syn keyword cConstant DrivingStressYEnum
+syn keyword cConstant DslSeaSurfaceHeightChangeAboveGeoidEnum
+syn keyword cConstant DslStericRateEnum
+syn keyword cConstant DslDynamicRateEnum
 syn keyword cConstant DummyEnum
 syn keyword cConstant EffectivePressureEnum
@@ -668,14 +673,5 @@
 syn keyword cConstant SealevelriseDeltathicknessEnum
 syn keyword cConstant SealevelriseSpcthicknessEnum
-syn keyword cConstant SealevelriseStericRateEnum
 syn keyword cConstant SealevelriseHydroRateEnum
-syn keyword cConstant SealevelriseModeleoftrendEof1Enum
-syn keyword cConstant SealevelriseModeleoftrendEof2Enum
-syn keyword cConstant SealevelriseModeleoftrendEof3Enum
-syn keyword cConstant SealevelriseModeleoftrendEof4Enum
-syn keyword cConstant SealevelriseModeleoftrendPc1Enum
-syn keyword cConstant SealevelriseModeleoftrendPc2Enum
-syn keyword cConstant SealevelriseModeleoftrendPc3Enum
-syn keyword cConstant SealevelriseModeleoftrendPc4Enum
 syn keyword cConstant SedimentHeadEnum
 syn keyword cConstant SedimentHeadOldEnum
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 24468)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 24469)
@@ -124,4 +124,6 @@
 	DomainDimensionEnum,
 	DomainTypeEnum,
+	DslGlobalAverageThermostericSeaLevelChangeEnum,
+	DslModelEnum,
 	EarthIdEnum,
 	EplZigZagCounterEnum,
@@ -515,4 +517,8 @@
 	DrivingStressXEnum,
 	DrivingStressYEnum,
+	DslSeaSurfaceHeightChangeAboveGeoidEnum,
+	DslSeaWaterPressureChangeAtSeaFloor,
+	DslStericRateEnum,
+	DslDynamicRateEnum,
 	DummyEnum,
    EffectivePressureEnum,
@@ -664,16 +670,7 @@
 	SealevelriseDeltathicknessEnum,
 	SealevelriseSpcthicknessEnum,
-	SealevelriseStericRateEnum,
 	SealevelriseHydroRateEnum,
-	SealevelriseModeleoftrendEof1Enum,
-	SealevelriseModeleoftrendEof2Enum,
-	SealevelriseModeleoftrendEof3Enum,
-	SealevelriseModeleoftrendEof4Enum,
-	SealevelriseModeleoftrendPc1Enum,
-	SealevelriseModeleoftrendPc2Enum,
-	SealevelriseModeleoftrendPc3Enum,
-	SealevelriseModeleoftrendPc4Enum,
-   SedimentHeadEnum,
-   SedimentHeadOldEnum,
+	SedimentHeadEnum,
+	SedimentHeadOldEnum,
 	SedimentHeadSubstepEnum,
 	SedimentHeadTransientEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 24468)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 24469)
@@ -132,4 +132,6 @@
 		case DomainDimensionEnum : return "DomainDimension";
 		case DomainTypeEnum : return "DomainType";
+		case DslGlobalAverageThermostericSeaLevelChangeEnum : return "DslGlobalAverageThermostericSeaLevelChange";
+		case DslModelEnum : return "DslModel";
 		case EarthIdEnum : return "EarthId";
 		case EplZigZagCounterEnum : return "EplZigZagCounter";
@@ -521,4 +523,7 @@
 		case DrivingStressXEnum : return "DrivingStressX";
 		case DrivingStressYEnum : return "DrivingStressY";
+		case DslSeaSurfaceHeightChangeAboveGeoidEnum : return "DslSeaSurfaceHeightChangeAboveGeoid";
+		case DslStericRateEnum : return "DslStericRate";
+		case DslDynamicRateEnum : return "DslDynamicRate";
 		case DummyEnum : return "Dummy";
 		case EffectivePressureEnum : return "EffectivePressure";
@@ -670,14 +675,5 @@
 		case SealevelriseDeltathicknessEnum : return "SealevelriseDeltathickness";
 		case SealevelriseSpcthicknessEnum : return "SealevelriseSpcthickness";
-		case SealevelriseStericRateEnum : return "SealevelriseStericRate";
 		case SealevelriseHydroRateEnum : return "SealevelriseHydroRate";
-		case SealevelriseModeleoftrendEof1Enum : return "SealevelriseModeleoftrendEof1";
-		case SealevelriseModeleoftrendEof2Enum : return "SealevelriseModeleoftrendEof2";
-		case SealevelriseModeleoftrendEof3Enum : return "SealevelriseModeleoftrendEof3";
-		case SealevelriseModeleoftrendEof4Enum : return "SealevelriseModeleoftrendEof4";
-		case SealevelriseModeleoftrendPc1Enum : return "SealevelriseModeleoftrendPc1";
-		case SealevelriseModeleoftrendPc2Enum : return "SealevelriseModeleoftrendPc2";
-		case SealevelriseModeleoftrendPc3Enum : return "SealevelriseModeleoftrendPc3";
-		case SealevelriseModeleoftrendPc4Enum : return "SealevelriseModeleoftrendPc4";
 		case SedimentHeadEnum : return "SedimentHead";
 		case SedimentHeadOldEnum : return "SedimentHeadOld";
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 24468)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 24469)
@@ -132,13 +132,15 @@
 	      else if (strcmp(name,"DomainDimension")==0) return DomainDimensionEnum;
 	      else if (strcmp(name,"DomainType")==0) return DomainTypeEnum;
+	      else if (strcmp(name,"DslGlobalAverageThermostericSeaLevelChange")==0) return DslGlobalAverageThermostericSeaLevelChangeEnum;
+	      else if (strcmp(name,"DslModel")==0) return DslModelEnum;
 	      else if (strcmp(name,"EarthId")==0) return EarthIdEnum;
 	      else if (strcmp(name,"EplZigZagCounter")==0) return EplZigZagCounterEnum;
 	      else if (strcmp(name,"EsaHElastic")==0) return EsaHElasticEnum;
-	      else if (strcmp(name,"EsaHemisphere")==0) return EsaHemisphereEnum;
-	      else if (strcmp(name,"EsaRequestedOutputs")==0) return EsaRequestedOutputsEnum;
          else stage=2;
    }
    if(stage==2){
-	      if (strcmp(name,"EsaUElastic")==0) return EsaUElasticEnum;
+	      if (strcmp(name,"EsaHemisphere")==0) return EsaHemisphereEnum;
+	      else if (strcmp(name,"EsaRequestedOutputs")==0) return EsaRequestedOutputsEnum;
+	      else if (strcmp(name,"EsaUElastic")==0) return EsaUElasticEnum;
 	      else if (strcmp(name,"ExtrapolationVariable")==0) return ExtrapolationVariableEnum;
 	      else if (strcmp(name,"FemModelComm")==0) return FemModelCommEnum;
@@ -258,10 +260,10 @@
 	      else if (strcmp(name,"MaterialsLithosphereDensity")==0) return MaterialsLithosphereDensityEnum;
 	      else if (strcmp(name,"MaterialsLithosphereShearModulus")==0) return MaterialsLithosphereShearModulusEnum;
-	      else if (strcmp(name,"MaterialsMantleDensity")==0) return MaterialsMantleDensityEnum;
-	      else if (strcmp(name,"MaterialsMantleShearModulus")==0) return MaterialsMantleShearModulusEnum;
          else stage=3;
    }
    if(stage==3){
-	      if (strcmp(name,"MaterialsMeltingpoint")==0) return MaterialsMeltingpointEnum;
+	      if (strcmp(name,"MaterialsMantleDensity")==0) return MaterialsMantleDensityEnum;
+	      else if (strcmp(name,"MaterialsMantleShearModulus")==0) return MaterialsMantleShearModulusEnum;
+	      else if (strcmp(name,"MaterialsMeltingpoint")==0) return MaterialsMeltingpointEnum;
 	      else if (strcmp(name,"MaterialsMixedLayerCapacity")==0) return MaterialsMixedLayerCapacityEnum;
 	      else if (strcmp(name,"MaterialsMuWater")==0) return MaterialsMuWaterEnum;
@@ -381,10 +383,10 @@
 	      else if (strcmp(name,"SmbRunoffgrad")==0) return SmbRunoffgradEnum;
 	      else if (strcmp(name,"SmbRunoffref")==0) return SmbRunoffrefEnum;
-	      else if (strcmp(name,"SmbSealev")==0) return SmbSealevEnum;
-	      else if (strcmp(name,"SmbStepsPerStep")==0) return SmbStepsPerStepEnum;
          else stage=4;
    }
    if(stage==4){
-	      if (strcmp(name,"SmbSwIdx")==0) return SmbSwIdxEnum;
+	      if (strcmp(name,"SmbSealev")==0) return SmbSealevEnum;
+	      else if (strcmp(name,"SmbStepsPerStep")==0) return SmbStepsPerStepEnum;
+	      else if (strcmp(name,"SmbSwIdx")==0) return SmbSwIdxEnum;
 	      else if (strcmp(name,"SmbT0dry")==0) return SmbT0dryEnum;
 	      else if (strcmp(name,"SmbT0wet")==0) return SmbT0wetEnum;
@@ -504,10 +506,10 @@
 	      else if (strcmp(name,"CalvingFluxLevelset")==0) return CalvingFluxLevelsetEnum;
 	      else if (strcmp(name,"CalvingMeltingFluxLevelset")==0) return CalvingMeltingFluxLevelsetEnum;
-	      else if (strcmp(name,"Converged")==0) return ConvergedEnum;
-	      else if (strcmp(name,"CrevasseDepth")==0) return CrevasseDepthEnum;
          else stage=5;
    }
    if(stage==5){
-	      if (strcmp(name,"DamageD")==0) return DamageDEnum;
+	      if (strcmp(name,"Converged")==0) return ConvergedEnum;
+	      else if (strcmp(name,"CrevasseDepth")==0) return CrevasseDepthEnum;
+	      else if (strcmp(name,"DamageD")==0) return DamageDEnum;
 	      else if (strcmp(name,"DamageDOld")==0) return DamageDOldEnum;
 	      else if (strcmp(name,"DamageDbar")==0) return DamageDbarEnum;
@@ -533,4 +535,7 @@
 	      else if (strcmp(name,"DrivingStressX")==0) return DrivingStressXEnum;
 	      else if (strcmp(name,"DrivingStressY")==0) return DrivingStressYEnum;
+	      else if (strcmp(name,"DslSeaSurfaceHeightChangeAboveGeoid")==0) return DslSeaSurfaceHeightChangeAboveGeoidEnum;
+	      else if (strcmp(name,"DslStericRate")==0) return DslStericRateEnum;
+	      else if (strcmp(name,"DslDynamicRate")==0) return DslDynamicRateEnum;
 	      else if (strcmp(name,"Dummy")==0) return DummyEnum;
 	      else if (strcmp(name,"EffectivePressure")==0) return EffectivePressureEnum;
@@ -624,13 +629,13 @@
 	      else if (strcmp(name,"LoadingforceY")==0) return LoadingforceYEnum;
 	      else if (strcmp(name,"LoadingforceZ")==0) return LoadingforceZEnum;
-	      else if (strcmp(name,"MaskGroundediceLevelset")==0) return MaskGroundediceLevelsetEnum;
+         else stage=6;
+   }
+   if(stage==6){
+	      if (strcmp(name,"MaskGroundediceLevelset")==0) return MaskGroundediceLevelsetEnum;
 	      else if (strcmp(name,"MaskIceLevelset")==0) return MaskIceLevelsetEnum;
 	      else if (strcmp(name,"MaskLandLevelset")==0) return MaskLandLevelsetEnum;
 	      else if (strcmp(name,"MaskOceanLevelset")==0) return MaskOceanLevelsetEnum;
 	      else if (strcmp(name,"MasstransportSpcthickness")==0) return MasstransportSpcthicknessEnum;
-         else stage=6;
-   }
-   if(stage==6){
-	      if (strcmp(name,"MaterialsRheologyB")==0) return MaterialsRheologyBEnum;
+	      else if (strcmp(name,"MaterialsRheologyB")==0) return MaterialsRheologyBEnum;
 	      else if (strcmp(name,"MaterialsRheologyBbar")==0) return MaterialsRheologyBbarEnum;
 	      else if (strcmp(name,"MaterialsRheologyE")==0) return MaterialsRheologyEEnum;
@@ -685,14 +690,5 @@
 	      else if (strcmp(name,"SealevelriseDeltathickness")==0) return SealevelriseDeltathicknessEnum;
 	      else if (strcmp(name,"SealevelriseSpcthickness")==0) return SealevelriseSpcthicknessEnum;
-	      else if (strcmp(name,"SealevelriseStericRate")==0) return SealevelriseStericRateEnum;
 	      else if (strcmp(name,"SealevelriseHydroRate")==0) return SealevelriseHydroRateEnum;
-	      else if (strcmp(name,"SealevelriseModeleoftrendEof1")==0) return SealevelriseModeleoftrendEof1Enum;
-	      else if (strcmp(name,"SealevelriseModeleoftrendEof2")==0) return SealevelriseModeleoftrendEof2Enum;
-	      else if (strcmp(name,"SealevelriseModeleoftrendEof3")==0) return SealevelriseModeleoftrendEof3Enum;
-	      else if (strcmp(name,"SealevelriseModeleoftrendEof4")==0) return SealevelriseModeleoftrendEof4Enum;
-	      else if (strcmp(name,"SealevelriseModeleoftrendPc1")==0) return SealevelriseModeleoftrendPc1Enum;
-	      else if (strcmp(name,"SealevelriseModeleoftrendPc2")==0) return SealevelriseModeleoftrendPc2Enum;
-	      else if (strcmp(name,"SealevelriseModeleoftrendPc3")==0) return SealevelriseModeleoftrendPc3Enum;
-	      else if (strcmp(name,"SealevelriseModeleoftrendPc4")==0) return SealevelriseModeleoftrendPc4Enum;
 	      else if (strcmp(name,"SedimentHead")==0) return SedimentHeadEnum;
 	      else if (strcmp(name,"SedimentHeadOld")==0) return SedimentHeadOldEnum;
@@ -752,12 +748,12 @@
 	      else if (strcmp(name,"SmbMelt")==0) return SmbMeltEnum;
 	      else if (strcmp(name,"SmbMonthlytemperatures")==0) return SmbMonthlytemperaturesEnum;
+	      else if (strcmp(name,"SmbNetLW")==0) return SmbNetLWEnum;
+	      else if (strcmp(name,"SmbNetSW")==0) return SmbNetSWEnum;
+	      else if (strcmp(name,"SmbPAir")==0) return SmbPAirEnum;
+	      else if (strcmp(name,"SmbP")==0) return SmbPEnum;
          else stage=7;
    }
    if(stage==7){
-	      if (strcmp(name,"SmbNetLW")==0) return SmbNetLWEnum;
-	      else if (strcmp(name,"SmbNetSW")==0) return SmbNetSWEnum;
-	      else if (strcmp(name,"SmbPAir")==0) return SmbPAirEnum;
-	      else if (strcmp(name,"SmbP")==0) return SmbPEnum;
-	      else if (strcmp(name,"SmbPddfacIce")==0) return SmbPddfacIceEnum;
+	      if (strcmp(name,"SmbPddfacIce")==0) return SmbPddfacIceEnum;
 	      else if (strcmp(name,"SmbPddfacSnow")==0) return SmbPddfacSnowEnum;
 	      else if (strcmp(name,"SmbPrecipitation")==0) return SmbPrecipitationEnum;
@@ -875,12 +871,12 @@
 	      else if (strcmp(name,"Outputdefinition22")==0) return Outputdefinition22Enum;
 	      else if (strcmp(name,"Outputdefinition23")==0) return Outputdefinition23Enum;
+	      else if (strcmp(name,"Outputdefinition24")==0) return Outputdefinition24Enum;
+	      else if (strcmp(name,"Outputdefinition25")==0) return Outputdefinition25Enum;
+	      else if (strcmp(name,"Outputdefinition26")==0) return Outputdefinition26Enum;
+	      else if (strcmp(name,"Outputdefinition27")==0) return Outputdefinition27Enum;
          else stage=8;
    }
    if(stage==8){
-	      if (strcmp(name,"Outputdefinition24")==0) return Outputdefinition24Enum;
-	      else if (strcmp(name,"Outputdefinition25")==0) return Outputdefinition25Enum;
-	      else if (strcmp(name,"Outputdefinition26")==0) return Outputdefinition26Enum;
-	      else if (strcmp(name,"Outputdefinition27")==0) return Outputdefinition27Enum;
-	      else if (strcmp(name,"Outputdefinition28")==0) return Outputdefinition28Enum;
+	      if (strcmp(name,"Outputdefinition28")==0) return Outputdefinition28Enum;
 	      else if (strcmp(name,"Outputdefinition29")==0) return Outputdefinition29Enum;
 	      else if (strcmp(name,"Outputdefinition2")==0) return Outputdefinition2Enum;
@@ -998,12 +994,12 @@
 	      else if (strcmp(name,"CalvingDev2")==0) return CalvingDev2Enum;
 	      else if (strcmp(name,"CalvingHab")==0) return CalvingHabEnum;
+	      else if (strcmp(name,"CalvingLevermann")==0) return CalvingLevermannEnum;
+	      else if (strcmp(name,"CalvingVonmises")==0) return CalvingVonmisesEnum;
+	      else if (strcmp(name,"Cfdragcoeffabsgrad")==0) return CfdragcoeffabsgradEnum;
+	      else if (strcmp(name,"Cfsurfacelogvel")==0) return CfsurfacelogvelEnum;
          else stage=9;
    }
    if(stage==9){
-	      if (strcmp(name,"CalvingLevermann")==0) return CalvingLevermannEnum;
-	      else if (strcmp(name,"CalvingVonmises")==0) return CalvingVonmisesEnum;
-	      else if (strcmp(name,"Cfdragcoeffabsgrad")==0) return CfdragcoeffabsgradEnum;
-	      else if (strcmp(name,"Cfsurfacelogvel")==0) return CfsurfacelogvelEnum;
-	      else if (strcmp(name,"Cfsurfacesquare")==0) return CfsurfacesquareEnum;
+	      if (strcmp(name,"Cfsurfacesquare")==0) return CfsurfacesquareEnum;
 	      else if (strcmp(name,"Channel")==0) return ChannelEnum;
 	      else if (strcmp(name,"ChannelArea")==0) return ChannelAreaEnum;
@@ -1121,12 +1117,12 @@
 	      else if (strcmp(name,"IntInput")==0) return IntInputEnum;
 	      else if (strcmp(name,"ElementInput2")==0) return ElementInput2Enum;
+	      else if (strcmp(name,"SegInput2")==0) return SegInput2Enum;
+	      else if (strcmp(name,"TriaInput2")==0) return TriaInput2Enum;
+	      else if (strcmp(name,"PentaInput2")==0) return PentaInput2Enum;
+	      else if (strcmp(name,"IntMatExternalResult")==0) return IntMatExternalResultEnum;
          else stage=10;
    }
    if(stage==10){
-	      if (strcmp(name,"SegInput2")==0) return SegInput2Enum;
-	      else if (strcmp(name,"TriaInput2")==0) return TriaInput2Enum;
-	      else if (strcmp(name,"PentaInput2")==0) return PentaInput2Enum;
-	      else 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;
@@ -1244,12 +1240,12 @@
 	      else if (strcmp(name,"SMBcomponents")==0) return SMBcomponentsEnum;
 	      else if (strcmp(name,"SMBd18opdd")==0) return SMBd18opddEnum;
+	      else if (strcmp(name,"SMBforcing")==0) return SMBforcingEnum;
+	      else if (strcmp(name,"SMBgcm")==0) return SMBgcmEnum;
+	      else if (strcmp(name,"SMBgemb")==0) return SMBgembEnum;
+	      else if (strcmp(name,"SMBgradients")==0) return SMBgradientsEnum;
          else stage=11;
    }
    if(stage==11){
-	      if (strcmp(name,"SMBforcing")==0) return SMBforcingEnum;
-	      else if (strcmp(name,"SMBgcm")==0) return SMBgcmEnum;
-	      else if (strcmp(name,"SMBgemb")==0) return SMBgembEnum;
-	      else if (strcmp(name,"SMBgradients")==0) return SMBgradientsEnum;
-	      else if (strcmp(name,"SMBgradientscomponents")==0) return SMBgradientscomponentsEnum;
+	      if (strcmp(name,"SMBgradientscomponents")==0) return SMBgradientscomponentsEnum;
 	      else if (strcmp(name,"SMBgradientsela")==0) return SMBgradientselaEnum;
 	      else if (strcmp(name,"SMBhenning")==0) return SMBhenningEnum;
Index: /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 24468)
+++ /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 24469)
@@ -173,7 +173,7 @@
 		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
 	}
-	else if(strcmp(string_in,"SealevelriseStericRate")==0){
-		const char* field = "md.slr.steric_rate";
-		input_enum        = SealevelriseStericRateEnum;
+	else if(strcmp(string_in,"DslGlobalAverageThermostericSeaLevelChange")==0){
+		const char* field = "md.dsl.global_average_thermosteric_sea_level_change";
+		input_enum        = DslGlobalAverageThermostericSeaLevelChangeEnum;
 		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
 	}
Index: /issm/trunk-jpl/src/m/classes/dsl.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/dsl.js	(revision 24469)
+++ /issm/trunk-jpl/src/m/classes/dsl.js	(revision 24469)
@@ -0,0 +1,55 @@
+//dsl Class definition
+//
+//   Usage:
+//      dsl=dsl();
+
+function dsl(){
+	//methods
+	this.setdefaultparameters = function(){// {{{
+		this.requested_outputs=['default'];
+	} // }}}
+	this.disp = function(){ // {{{
+		console.log(sprintf('   dsl parameters:'));
+		fielddisplay(this,'global_average_thermosteric_sea_level_change','corresponds to zostoga field in CMIP5 archives. Specified as a temporally variable global rate (mm/yr)');
+		fielddisplay(this,'sea_surface_height_change_above_geoid','corresponds to zos field in CMIP5 archives. Spatial average is 0. Specified as a spatio-temporally variable rate (mm/yr)');
+		fielddisplay(this,'sea_water_pressure_change_at_sea_floor','corresponds to bpo field in CMIP5 archives. Specified as a spatio-temporally variable rate (in Pa/yr)');
+
+
+	} // }}}
+	this.defaultoutputs = function(){ // {{{
+		return '';
+	}//}}}
+    this.classname = function(){ // {{{
+        return "dsl";
+    } // }}}
+    this.extrude = function(md) {//{{{
+        this.sea_surface_height_change_above_geoid=project3d(md,'vector',this.sea_surface_height_change_above_geoid,'type','node');
+        this.sea_water_pressure_change_at_sea_floor=project3d(md,'vector',this.sea_water_pressure_change_at_sea_floor,'type','node');
+        return this;
+    }//}}}
+    this.checkconsistency = function(md,solution,analyses) { //{{{
+
+        if(ArrayAnyEqual(ArrayIsMember('SealevelriseAnalysis',analyses),1)){
+            checkfield(md,'fieldname','dsl.sea_surface_height_change_above_geoid','timeseries',1,'NaN',1,'Inf',1);
+            checkfield(md,'fieldname','dsl.sea_water_pressure_change_at_sea_floor','timeseries',1,'NaN',1,'Inf',1);
+        }
+
+    } // }}}
+    this.marshall=function(md,prefix,fid) { //{{{
+
+        var yts=md.constants.yts;
+
+		WriteData(fid,prefix,'name','md.dsl.model','data',1,'format','Integer');
+		WriteData(fid,prefix,'object',this,'class','dsl','fieldname','global_average_thermosteric_sea_level_change','format','DoubleMat','mattype',1,'timeserieslength',1+1,'yts',md.constants.yts,'scale',1e-3/md.constants.yts);
+			WriteData(fid,prefix,'object',this,'class','dsl','fieldname','sea_water_pressure_change_at_sea_floor','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1e-3/md.constants.yts);
+			WriteData(fid,prefix,'object',this,'class',dsl,'fieldname','sea_surface_height_change_above_geoid','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
+    }//}}}
+    this.fix=function() { //{{{
+    }//}}}
+	//properties 
+    // {{{
+	this.global_average_thermosteric_sea_level_change = NaN;
+	this.sea_surface_height_change_above_geoid = NaN;
+	this.sea_water_pressure_change_at_sea_floor = NaN;
+    // }}}
+}
Index: /issm/trunk-jpl/src/m/classes/dsl.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/dsl.m	(revision 24469)
+++ /issm/trunk-jpl/src/m/classes/dsl.m	(revision 24469)
@@ -0,0 +1,68 @@
+%DSL class definition
+%
+%   Usage:
+%      dsl=dsl(); %dynamic sea level class, based on CMIP5 outputs
+
+classdef dsl
+	properties (SetAccess=public) 
+
+		global_average_thermosteric_sea_level_change; %corresponds to zostoga field in CMIP5 archives. Specified as a temporally variable global rate (mm/yr)
+		sea_surface_height_change_above_geoid; %corresponds to zos field in CMIP5 archives. Spatial average is 0. Specified as a spatio-temporally variable rate (mm/yr)
+		sea_water_pressure_change_at_sea_floor; %corresponds to bpo field in CMIP5 archives. Specified as a spatio-temporally variable rate (in Pa/yr)
+
+	end
+	methods
+		function self = extrude(self,md) % {{{
+			self.sea_surface_height_change_above_geoid=project3d(md,'vector',self.sea_surface_height_change_above_geoid,'type','node','layer',1);
+			self.sea_water_pressure_change_at_sea_floor=project3d(md,'vector',self.sea_water_pressure_change_at_sea_floor,'type','node','layer',1);
+		end % }}}
+		function self = dsl(varargin) % {{{
+			switch nargin
+				case 0
+					self=setdefaultparameters(self);
+				case 1
+					self=structtoobj(dsl(),varargin{1});
+				otherwise
+					error('constructor not supported');
+			end
+		end % }}}
+		function self = setdefaultparameters(self) % {{{
+
+			self.global_average_thermosteric_sea_level_change=0;
+			self.sea_surface_height_change_above_geoid=NaN;
+			self.sea_water_pressure_change_at_sea_floor=NaN;
+
+		end % }}}
+		function md = checkconsistency(self,md,solution,analyses) % {{{
+
+			%Early return
+			if ~ismember('SealevelriseAnalysis',analyses), return; end
+			md = checkfield(md,'fieldname','dsl.sea_surface_height_change_above_geoid','NaN',1,'Inf',1,'timeseries',1);
+			md = checkfield(md,'fieldname','dsl.sea_water_pressure_change_at_sea_floor','NaN',1,'Inf',1,'timeseries',1);
+
+		end % }}}
+		function disp(self) % {{{
+
+			disp(sprintf('   dsl parameters:'));
+			fielddisplay(self,'global_average_thermosteric_sea_level_change','corresponds to zostoga field in CMIP5 archives. Specified as a temporally variable global rate (mm/yr)');
+			fielddisplay(self,'sea_surface_height_change_above_geoid','corresponds to zos field in CMIP5 archives. Spatial average is 0. Specified as a spatio-temporally variable rate (mm/yr)');
+			fielddisplay(self,'sea_water_pressure_change_at_sea_floor','corresponds to bpo field in CMIP5 archives. Specified as a spatio-temporally variable rate (in Pa/yr)');
+
+		end % }}}
+		function marshall(self,prefix,md,fid) % {{{
+
+			WriteData(fid,prefix,'name','md.dsl.model','data',1,'format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','global_average_thermosteric_sea_level_change','format','DoubleMat','mattype',1,'timeserieslength',1+1,'yts',md.constants.yts,'scale',1e-3/md.constants.yts);
+			WriteData(fid,prefix,'object',self,'fieldname','sea_water_pressure_change_at_sea_floor','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1e-3/md.constants.yts);
+			WriteData(fid,prefix,'object',self,'fieldname','sea_surface_height_change_above_geoid','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
+
+		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+		
+			writejs1Darray(fid,[modelname '.dsl.global_average_thermosteric_sea_level_change'],self.global_average_thermosteric_sea_level_change);
+			writejs1Darray(fid,[modelname '.dsl.sea_surface_height_change_above_geoid'],self.sea_surface_height_change_above_geoid);
+			writejs1Darray(fid,[modelname '.dsl.sea_water_pressure_change_at_sea_floor'],self.sea_water_pressure_change_at_sea_floor);
+
+		end % }}}
+	end
+end
Index: /issm/trunk-jpl/src/m/classes/dsl.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/dsl.py	(revision 24469)
+++ /issm/trunk-jpl/src/m/classes/dsl.py	(revision 24469)
@@ -0,0 +1,55 @@
+import numpy as np
+from fielddisplay import fielddisplay
+from checkfield import checkfield
+from WriteData import WriteData
+from project3d import project3d
+
+
+class dsl(object):
+    """
+    dsl Class definition
+
+       Usage:
+          dsl = dsl()
+    """
+
+    def __init__(self):  # {{{
+        self.lobal_average_thermosteric_sea_level_change = float('NaN') #corresponds to zostoga field in CMIP5 archives. Specified as a temporally variable global rate (mm/yr)
+        self.sea_surface_height_change_above_geoid = float('NaN') #corresponds to zos field in CMIP5 archives. Spatial average is 0. Specified as a spatio-temporally variable rate (mm/yr)
+        self.sea_water_pressure_change_at_sea_floor = float('NaN') #corresponds to bpo field in CMIP5 archives. Specified as a spatio-temporally variable rate (in Pa/yr)
+    #}}}
+
+    def __repr__(self):  # {{{
+        string = "   dsl parameters:"
+        string = "%s\n%s" % (string, fielddisplay(self,'global_average_thermosteric_sea_level_change','corresponds to zostoga field in CMIP5 archives. Specified as a temporally variable global rate (mm/yr)'))
+        string = "%s\n%s" % (string, fielddisplay(self,'sea_surface_height_change_above_geoid','corresponds to zos field in CMIP5 archives. Spatial average is 0. Specified as a spatio-temporally variable rate (mm/yr)'))
+        string = "%s\n%s" % (string, fielddisplay(self,'sea_water_pressure_change_at_sea_floor','corresponds to bpo field in CMIP5 archives. Specified as a spatio-temporally variable rate (in Pa/yr)'))
+
+        return string
+    #}}}
+
+    def extrude(self, md):  # {{{
+
+        self.sea_surface_height_change_above_geoid = project3d(md, 'vector', self.sea_surface_height_change_above_geoid, 'type', 'node')
+        self.sea_water_pressure_change_at_sea_floor = project3d(md, 'vector', self.sea_water_pressure_change_at_sea_floor, 'type', 'node')
+        return self
+    #}}}
+
+    def defaultoutputs(self, md):  # {{{
+        return []
+    #}}}
+
+    def checkconsistency(self, md, solution, analyses):  # {{{
+        if 'SealevelriseAnalysis' in analyses:
+            md = checkfield(md, 'fieldname', 'dsl.sea_surface_height_change_above_geoid', 'timeseries', 1, 'NaN', 1, 'Inf', 1)
+            md = checkfield(md, 'fieldname', 'dsl.sea_water_pressure_change_at_sea_floor', 'timeseries', 1, 'NaN', 1, 'Inf', 1)
+        return md
+    # }}}
+
+    def marshall(self, prefix, md, fid):    # {{{
+        yts = md.constants.yts
+        WriteData(fid, prefix, 'name', 'md.dsl.model', 'data', 1, 'format', 'Integer')
+        WriteData(fid,prefix,'object',self,'class','dsl','fieldname','global_average_thermosteric_sea_level_change','format','DoubleMat','mattype',1,'timeserieslength',1+1,'yts',md.constants.yts,'scale',1e-3/md.constants.yts)
+			WriteData(fid,prefix,'object',self,'class','dsl','fieldname','sea_water_pressure_change_at_sea_floor','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1e-3/md.constants.yts)
+			WriteData(fid,prefix,'object',self,'class','dsl','fieldname','sea_surface_height_change_above_geoid','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
+    # }}}
Index: /issm/trunk-jpl/src/m/classes/model.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/model.js	(revision 24468)
+++ /issm/trunk-jpl/src/m/classes/model.js	(revision 24469)
@@ -22,4 +22,5 @@
 			console.log(sprintf("//19s: //-22s -- //s","rifts"           ,"[1x1 " + typeof(this.rifts) + "]","rifts properties"));
 			console.log(sprintf("//19s: //-22s -- //s","slr"             ,"[1x1 " + typeof(this.slr) + "]","slr forcings"));
+			console.log(sprintf("//19s: //-22s -- //s","dsl"             ,"[1x1 " + typeof(this.dsl) + "]","dynamic sea level"));
 			console.log(sprintf("//19s: //-22s -- //s","debug"           ,"[1x1 " + typeof(this.debug) + "]","debugging tools (valgrind, gprof)"));
 			console.log(sprintf("//19s: //-22s -- //s","verbose"         ,"[1x1 " + typeof(this.verbose) + "]","verbosity level in solve"));
@@ -66,4 +67,5 @@
 			this.rifts            = new rifts();
 			this.slr              = new slr();
+			this.dsl              = new dsl();
 
 			this.debug            = new debug();
@@ -739,4 +741,5 @@
 		this.rifts            = 0;
 		this.slr              = 0;
+		this.dsl              = 0;
 
 		this.debug            = 0;
Index: /issm/trunk-jpl/src/m/classes/model.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/model.m	(revision 24468)
+++ /issm/trunk-jpl/src/m/classes/model.m	(revision 24469)
@@ -22,4 +22,5 @@
 		initialization   = 0;
 		rifts            = 0;
+		dsl              = 0;
 		slr              = 0;
 
@@ -871,4 +872,5 @@
 			md.hydrology = extrude(md.hydrology,md);
 			md.slr = extrude(md.slr,md);
+			md.dsl = extrude(md.dsl,md);
 
 			%connectivity
@@ -1191,4 +1193,5 @@
 			md.rifts            = rifts();
 			md.slr              = slr();
+			md.dsl              = dsl();
 			md.timestepping     = timestepping();
 			md.groundingline    = groundingline();
@@ -1371,4 +1374,5 @@
 			disp(sprintf('%19s: %-22s -- %s','rifts'           ,['[1x1 ' class(self.rifts) ']'],'rifts properties'));
 			disp(sprintf('%19s: %-22s -- %s','slr'             ,['[1x1 ' class(self.slr) ']'],'slr forcings'));
+			disp(sprintf('%19s: %-22s -- %s','dsl'             ,['[1x1 ' class(self.dsl) ']'],'dynamic sea-level '));
 			disp(sprintf('%19s: %-22s -- %s','debug'           ,['[1x1 ' class(self.debug) ']'],'debugging tools (valgrind, gprof)'));
 			disp(sprintf('%19s: %-22s -- %s','verbose'         ,['[1x1 ' class(self.verbose) ']'],'verbosity level in solve'));
Index: /issm/trunk-jpl/src/m/classes/model.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/model.py	(revision 24468)
+++ /issm/trunk-jpl/src/m/classes/model.py	(revision 24469)
@@ -30,4 +30,5 @@
 from rifts import rifts
 from slr import slr
+from dsl import dsl
 from debug import debug
 from verbose import verbose
@@ -94,4 +95,5 @@
         self.rifts = rifts()
         self.slr = slr()
+        self.dsl = dsl()
 
         self.debug = debug()
@@ -142,5 +144,6 @@
                 'initialization',
                 'rifts',
-                'slr',
+                'slr', 
+                'dsl',
                 'debug',
                 'verbose',
@@ -189,4 +192,5 @@
         string = "%s\n%s" % (string, "%19s: % - 22s - -  %s" % ("rifts", "[%s, %s]" % ("1x1", obj.rifts.__class__.__name__), "rifts properties"))
         string = "%s\n%s" % (string, "%19s: % - 22s - -  %s" % ("slr", "[%s, %s]" % ("1x1", obj.slr.__class__.__name__), "slr forcings"))
+        string = "%s\n%s" % (string, "%19s: % - 22s - -  %s" % ("dsl", "[%s, %s]" % ("1x1", obj.dsl.__class__.__name__), "dynamic sea level"))
         string = "%s\n%s" % (string, "%19s: % - 22s - -  %s" % ("debug", "[%s, %s]" % ("1x1", obj.debug.__class__.__name__), "debugging tools (valgrind, gprof)"))
         string = "%s\n%s" % (string, "%19s: % - 22s - -  %s" % ("verbose", "[%s, %s]" % ("1x1", obj.verbose.__class__.__name__), "verbosity level in solve"))
Index: /issm/trunk-jpl/src/m/classes/slr.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/slr.m	(revision 24468)
+++ /issm/trunk-jpl/src/m/classes/slr.m	(revision 24469)
@@ -25,5 +25,4 @@
 		rotation               = 0;
 		ocean_area_scaling     = 0;
-		steric_rate            = 0; %rate of ocean expansion from steric effects.
 		hydro_rate             = 0; %rate of steric expansion from hydrological effects.
 		geodetic_run_frequency = 1; %how many time steps we skip before we run the geodetic part of the solver during transient
@@ -34,4 +33,5 @@
 		Ngia                   = NaN;
 		Ugia                   = NaN;
+
 		requested_outputs      = {};
 		transitions            = {};
@@ -80,6 +80,5 @@
 		self.degacc=.01;
 
-		%steric: 
-		self.steric_rate=0;
+		%hydro
 		self.hydro_rate=0;
 	
@@ -116,5 +115,4 @@
 			md = checkfield(md,'fieldname','slr.maxiter','size',[1 1],'>=',1);
 			md = checkfield(md,'fieldname','slr.geodetic_run_frequency','size',[1 1],'>=',1);
-			md = checkfield(md,'fieldname','slr.steric_rate','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1]);
 			md = checkfield(md,'fieldname','slr.hydro_rate','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1]);
 			md = checkfield(md,'fieldname','slr.degacc','size',[1 1],'>=',1e-10);
@@ -176,5 +174,4 @@
 			fielddisplay(self,'angular_velocity','mean rotational velocity of earth [per second]'); 
 			fielddisplay(self,'ocean_area_scaling','correction for model representation of ocean area [default: No correction]'); 
-			fielddisplay(self,'steric_rate','rate of steric ocean expansion (in mm/yr)'); 
 			fielddisplay(self,'hydro_rate','rate of hydrological expansion (in mm/yr)'); 
 			fielddisplay(self,'Ngia','rate of viscous (GIA) geoid expansion (in mm/yr)'); 
@@ -214,5 +211,4 @@
 			WriteData(fid,prefix,'object',self,'fieldname','ocean_area_scaling','format','Boolean');
 			WriteData(fid,prefix,'object',self,'fieldname','geodetic_run_frequency','format','Integer');
-			WriteData(fid,prefix,'object',self,'fieldname','steric_rate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1e-3/md.constants.yts);
 			WriteData(fid,prefix,'object',self,'fieldname','hydro_rate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1e-3/md.constants.yts);
 			WriteData(fid,prefix,'object',self,'fieldname','Ngia','format','DoubleMat','mattype',1,'scale',1e-3/md.constants.yts);
@@ -256,5 +252,4 @@
 			writejsdouble(fid,[modelname '.slr.ocean_area_scaling'],self.ocean_area_scaling);
 			writejsdouble(fid,[modelname '.slr.geodetic_run_frequency'],self.geodetic_run_frequency);
-			writejs1Darray(fid,[modelname '.slr.steric_rate'],self.steric_rate);
 			writejs1Darray(fid,[modelname '.slr.hydro_rate'],self.hydro_rate);
 			writejsdouble(fid,[modelname '.slr.degacc'],self.degacc);
