Index: /issm/trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp	(revision 25117)
+++ /issm/trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp	(revision 25118)
@@ -32,5 +32,5 @@
 	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.surface",SurfaceEnum);
 	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.slr.sealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(inputs2,elements,"md.solidearth.sealevel",SealevelEnum,0);
 	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
 	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vx",VxEnum);
Index: /issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.cpp	(revision 25117)
+++ /issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.cpp	(revision 25118)
@@ -99,5 +99,5 @@
 	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.surface",SurfaceEnum);
 	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.slr.sealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(inputs2,elements,"md.solidearth.sealevel",SealevelEnum,0);
 	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
 	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vx",VxEnum);
Index: /issm/trunk-jpl/src/c/analyses/BalancevelocityAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/BalancevelocityAnalysis.cpp	(revision 25117)
+++ /issm/trunk-jpl/src/c/analyses/BalancevelocityAnalysis.cpp	(revision 25118)
@@ -41,5 +41,5 @@
 	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.surface",SurfaceEnum);
 	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.slr.sealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(inputs2,elements,"md.solidearth.sealevel",SealevelEnum,0);
 	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
 	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vx",VxEnum);
Index: /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 25117)
+++ /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 25118)
@@ -136,5 +136,5 @@
 	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.thickness",ThicknessEnum);
 	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.surface",SurfaceEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.slr.sealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(inputs2,elements,"md.solidearth.sealevel",SealevelEnum,0);
 	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum);
 	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
Index: /issm/trunk-jpl/src/c/analyses/EsaAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/EsaAnalysis.cpp	(revision 25117)
+++ /issm/trunk-jpl/src/c/analyses/EsaAnalysis.cpp	(revision 25118)
@@ -61,14 +61,14 @@
 	/*some constant parameters: */
 	parameters->AddObject(iomodel->CopyConstantObject("md.esa.hemisphere",EsaHemisphereEnum));
-	parameters->AddObject(iomodel->CopyConstantObject("md.slr.rigid",SealevelriseRigidEnum));
-	parameters->AddObject(iomodel->CopyConstantObject("md.slr.horiz",SealevelriseHorizEnum));
-	parameters->AddObject(iomodel->CopyConstantObject("md.slr.elastic",SealevelriseElasticEnum));
-	parameters->AddObject(iomodel->CopyConstantObject("md.slr.rotation",SealevelriseRotationEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.settings.rigid",SolidearthSettingsRigidEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.settings.horiz",SolidearthSettingsHorizEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.settings.elastic",SolidearthSettingsElasticEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.settings.rotation",SolidearthSettingsRotationEnum));
 
 	/*deal with planet radius and area: */
-	parameters->AddObject(iomodel->CopyConstantObject("md.slr.planetradius",SealevelPlanetRadiusEnum));
-	iomodel->FetchData(&planetradius,"md.slr.planetradius");
+	parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.planetradius",SolidearthPlanetRadiusEnum));
+	iomodel->FetchData(&planetradius,"md.solidearth.planetradius");
 	planetarea=4*PI*planetradius*planetradius;
-	parameters->AddObject(new DoubleParam(SealevelPlanetAreaEnum,planetarea));
+	parameters->AddObject(new DoubleParam(SolidearthPlanetAreaEnum,planetarea));
 
 	/*love numbers: */
Index: /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp	(revision 25117)
+++ /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp	(revision 25118)
@@ -74,5 +74,5 @@
 
 	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.surface",SurfaceEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.slr.sealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(inputs2,elements,"md.solidearth.sealevel",SealevelEnum,0);
 	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
 	iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum,0.);
Index: /issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.cpp	(revision 25117)
+++ /issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.cpp	(revision 25118)
@@ -77,5 +77,5 @@
 
 	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.surface",SurfaceEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.slr.sealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(inputs2,elements,"md.solidearth.sealevel",SealevelEnum,0);
 	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
 	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vx",VxEnum);
Index: /issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.cpp	(revision 25117)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.cpp	(revision 25118)
@@ -58,5 +58,5 @@
 	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.surface",SurfaceEnum);
 	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.slr.sealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(inputs2,elements,"md.solidearth.sealevel",SealevelEnum,0);
 	if(iomodel->domaintype!=Domain2DhorizontalEnum){
 		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
Index: /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp	(revision 25117)
+++ /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp	(revision 25118)
@@ -42,5 +42,5 @@
 	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.surface",SurfaceEnum);
    iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.slr.sealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(inputs2,elements,"md.solidearth.sealevel",SealevelEnum,0);
 	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
 	if(iomodel->domaintype!=Domain2DhorizontalEnum & iomodel->domaintype!=Domain3DsurfaceEnum){
Index: /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 25117)
+++ /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 25118)
@@ -148,5 +148,5 @@
 	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.surface",SurfaceEnum);
 	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.slr.sealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(inputs2,elements,"md.solidearth.sealevel",SealevelEnum,0);
 	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
 	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ocean_levelset",MaskOceanLevelsetEnum);
@@ -907,5 +907,5 @@
 	element->AddBasalInput2(BaseEnum,newbase,P1Enum);
 	element->AddBasalInput2(SealevelriseCumDeltathicknessEnum,cumdeltathickness,P1Enum);
-	element->AddBasalInput2(SealevelriseDeltathicknessEnum,deltathickness,P1Enum);
+	element->AddBasalInput2(SurfaceloadIceThicknessChangeEnum,deltathickness,P1Enum);
 
 	/*Free ressources:*/
Index: /issm/trunk-jpl/src/c/analyses/MeltingAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/MeltingAnalysis.cpp	(revision 25117)
+++ /issm/trunk-jpl/src/c/analyses/MeltingAnalysis.cpp	(revision 25118)
@@ -56,5 +56,5 @@
 	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.surface",SurfaceEnum);
 	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.slr.sealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(inputs2,elements,"md.solidearth.sealevel",SealevelEnum,0);
 	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
 	if(iomodel->domaintype!=Domain2DhorizontalEnum){
Index: /issm/trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp	(revision 25117)
+++ /issm/trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp	(revision 25118)
@@ -38,10 +38,9 @@
 	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ocean_levelset",MaskOceanLevelsetEnum);
 	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
-	iomodel->FetchData(&geodetic,"md.slr.geodetic");
-	iomodel->FetchDataToInput(inputs2,elements,"md.slr.deltathickness",SealevelriseDeltathicknessEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.slr.spcthickness",SealevelriseSpcthicknessEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.slr.sealevel",SealevelEnum,0);
+	iomodel->FetchData(&geodetic,"md.solidearth.settings.computesealevelchange");
+	iomodel->FetchDataToInput(inputs2,elements,"md.solidearth.surfaceload.icethicknesschange",SurfaceloadIceThicknessChangeEnum);
+	iomodel->FetchDataToInput(inputs2,elements,"md.solidearth.sealevel",SealevelEnum,0);
 	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.bed",BedEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.slr.hydro_rate",SealevelriseHydroRateEnum);
+	iomodel->FetchDataToInput(inputs2,elements,"md.solidearth.surfaceload.waterheightchange",SurfaceloadWaterHeightChangeEnum);
 		
 	/*dynamic sea level: */
@@ -278,4 +277,5 @@
 
 	int         nl;
+	int         lovemodel=1;
 	IssmDouble* love_h=NULL;
 	IssmDouble* love_k=NULL;
@@ -307,26 +307,23 @@
 	/*some constant parameters: */
 	parameters->AddObject(iomodel->CopyConstantObject("md.dsl.model",DslModelEnum));
-	parameters->AddObject(iomodel->CopyConstantObject("md.slr.geodetic_run_frequency",SealevelriseGeodeticRunFrequencyEnum));
-	parameters->AddObject(iomodel->CopyConstantObject("md.slr.reltol",SealevelriseReltolEnum));
-	parameters->AddObject(iomodel->CopyConstantObject("md.slr.abstol",SealevelriseAbstolEnum));
-	parameters->AddObject(iomodel->CopyConstantObject("md.slr.maxiter",SealevelriseMaxiterEnum));
-	parameters->AddObject(iomodel->CopyConstantObject("md.slr.rigid",SealevelriseRigidEnum));
-	parameters->AddObject(iomodel->CopyConstantObject("md.slr.horiz",SealevelriseHorizEnum));
-	parameters->AddObject(iomodel->CopyConstantObject("md.slr.elastic",SealevelriseElasticEnum));
-	parameters->AddObject(iomodel->CopyConstantObject("md.slr.rotation",SealevelriseRotationEnum));
-	parameters->AddObject(iomodel->CopyConstantObject("md.slr.tide_love_h",SealevelriseTidalLoveHEnum));
-	parameters->AddObject(iomodel->CopyConstantObject("md.slr.tide_love_k",SealevelriseTidalLoveKEnum));
-	parameters->AddObject(iomodel->CopyConstantObject("md.slr.fluid_love",SealevelriseFluidLoveEnum));
-	parameters->AddObject(iomodel->CopyConstantObject("md.slr.equatorial_moi",SealevelriseEquatorialMoiEnum));
-	parameters->AddObject(iomodel->CopyConstantObject("md.slr.polar_moi",SealevelrisePolarMoiEnum));
-	parameters->AddObject(iomodel->CopyConstantObject("md.slr.angular_velocity",SealevelriseAngularVelocityEnum));
-	parameters->AddObject(iomodel->CopyConstantObject("md.slr.ocean_area_scaling",SealevelriseOceanAreaScalingEnum));
-	parameters->AddObject(iomodel->CopyConstantObject("md.slr.geodetic",SealevelriseGeodeticEnum));
-	parameters->AddObject(iomodel->CopyConstantObject("md.slr.planetradius",SealevelPlanetRadiusEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.settings.runfrequency",SolidearthSettingsRunFrequencyEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.settings.reltol",SolidearthSettingsReltolEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.settings.abstol",SolidearthSettingsAbstolEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.settings.maxiter",SolidearthSettingsMaxiterEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.settings.rigid",SolidearthSettingsRigidEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.settings.horiz",SolidearthSettingsHorizEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.settings.elastic",SolidearthSettingsElasticEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.settings.rotation",SolidearthSettingsRotationEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.rotational.equatorialmoi",RotationalEquatorialMoiEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.rotational.polarmoi",RotationalPolarMoiEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.rotational.angularvelocity",RotationalAngularVelocityEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.settings.ocean_area_scaling",SolidearthSettingsOceanAreaScalingEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.settings.computesealevelchange",SolidearthSettingsComputesealevelchangeEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.planetradius",SolidearthPlanetRadiusEnum));
 
 	/*compute planet area and plug into parameters:*/
-	iomodel->FetchData(&planetradius,"md.slr.planetradius");
+	iomodel->FetchData(&planetradius,"md.solidearth.planetradius");
 	planetarea=4*PI*planetradius*planetradius;
-	parameters->AddObject(new DoubleParam(SealevelPlanetAreaEnum,planetarea));
+	parameters->AddObject(new DoubleParam(SolidearthPlanetAreaEnum,planetarea));
 
 	/*Deal with dsl multi-model ensembles: {{{*/
@@ -348,10 +345,21 @@
 	/*Deal with elasticity {{{*/
 	/*love numbers: */
-	iomodel->FetchData(&love_h,&nl,NULL,"md.slr.love_h");
-	iomodel->FetchData(&love_k,&nl,NULL,"md.slr.love_k");
-	iomodel->FetchData(&love_l,&nl,NULL,"md.slr.love_l");
+	iomodel->FetchData(&lovemodel,"md.solidearth.love.model");
+	if(lovemodel==1){
+		iomodel->FetchData(&love_h,&nl,NULL,"md.solidearth.love.h");
+		iomodel->FetchData(&love_k,&nl,NULL,"md.solidearth.love.k");
+		iomodel->FetchData(&love_l,&nl,NULL,"md.solidearth.love.l");
+		parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.love.th",TidalLoveHEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.love.tk",TidalLoveKEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.love.tk2secular",TidalLoveK2SecularEnum));
+	}
+	else{
+		parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.love.h",TidalLoveHEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.love.k",TidalLoveKEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.love.k2secular",TidalLoveK2SecularEnum));
+	}
 
 	/*compute elastic green function for a range of angles*/
-	iomodel->FetchData(&degacc,"md.slr.degacc");
+	iomodel->FetchData(&degacc,"md.solidearth.settings.degacc");
 	M=reCast<int,IssmDouble>(180./degacc+1.);
 
@@ -480,5 +488,5 @@
 /*}}}*/
 	/*Transitions:{{{ */
-	iomodel->FetchData(&transitions,&transitions_M,&transitions_N,&ntransitions,"md.slr.transitions");
+	iomodel->FetchData(&transitions,&transitions_M,&transitions_N,&ntransitions,"md.solidearth.transitions");
 	if(transitions){
 		parameters->AddObject(new DoubleMatArrayParam(SealevelriseTransitionsEnum,transitions,ntransitions,transitions_M,transitions_N));
@@ -493,7 +501,7 @@
 	} /*}}}*/
 	/*Requested outputs {{{*/
-	iomodel->FindConstant(&requestedoutputs,&numoutputs,"md.slr.requested_outputs");
+	iomodel->FindConstant(&requestedoutputs,&numoutputs,"md.solidearth.requested_outputs");
 	if(numoutputs)parameters->AddObject(new StringArrayParam(SealevelriseRequestedOutputsEnum,requestedoutputs,numoutputs));
-	iomodel->DeleteData(&requestedoutputs,numoutputs,"md.slr.requested_outputs");
+	iomodel->DeleteData(&requestedoutputs,numoutputs,"md.solidearth.requested_outputs");
 	/*}}}*/
 
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 25117)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 25118)
@@ -756,5 +756,5 @@
 	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.surface",SurfaceEnum);
 	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.slr.sealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(inputs2,elements,"md.solidearth.sealevel",SealevelEnum,0);
 	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
 	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ocean_levelset",MaskOceanLevelsetEnum);
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp	(revision 25117)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp	(revision 25118)
@@ -104,5 +104,5 @@
 	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.surface",SurfaceEnum);
 	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.slr.sealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(inputs2,elements,"md.solidearth.sealevel",SealevelEnum,0);
 	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
 	if(iomodel->domaintype!=Domain2DhorizontalEnum){
Index: /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 25117)
+++ /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 25118)
@@ -133,5 +133,5 @@
 	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.surface",SurfaceEnum);
 	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.slr.sealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(inputs2,elements,"md.solidearth.sealevel",SealevelEnum,0);
 	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
 	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ocean_levelset",MaskOceanLevelsetEnum);
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 25117)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 25118)
@@ -5233,5 +5233,5 @@
 
 	/*recover earth area: */
-	this->parameters->FindParam(&planetarea,SealevelPlanetAreaEnum);
+	this->parameters->FindParam(&planetarea,SolidearthPlanetAreaEnum);
 
 	/*how many dofs are we working with here? */
@@ -5387,5 +5387,5 @@
 
 	/*recover earth area: */
-	this->parameters->FindParam(&planetarea,SealevelPlanetAreaEnum);
+	this->parameters->FindParam(&planetarea,SolidearthPlanetAreaEnum);
 
 	/*Compute lat,long,radius of elemental centroid: */
@@ -5456,5 +5456,5 @@
 
 		/*Compute ice thickness change: */
-		Input2* deltathickness_input=this->GetInput2(SealevelriseDeltathicknessEnum);
+		Input2* deltathickness_input=this->GetInput2(SurfaceloadIceThicknessChangeEnum);
 		if (!deltathickness_input)_error_("delta thickness input needed to compute sea level rise!");
 		deltathickness_input->GetInputAverage(&I);
@@ -5530,10 +5530,10 @@
 	/*recover parameters: */
 	rho_earth=FindParam(MaterialsEarthDensityEnum);
-	this->parameters->FindParam(&computerigid,SealevelriseRigidEnum);
-	this->parameters->FindParam(&computeelastic,SealevelriseElasticEnum);
+	this->parameters->FindParam(&computerigid,SolidearthSettingsRigidEnum);
+	this->parameters->FindParam(&computeelastic,SolidearthSettingsElasticEnum);
 	this->parameters->FindParam(&gsize,MeshNumberofverticesEnum);
-	this->parameters->FindParam(&planetarea,SealevelPlanetAreaEnum);
-	this->parameters->FindParam(&planetradius,SealevelPlanetRadiusEnum);
-	this->parameters->FindParam(&horiz,SealevelriseHorizEnum);
+	this->parameters->FindParam(&planetarea,SolidearthPlanetAreaEnum);
+	this->parameters->FindParam(&planetradius,SolidearthPlanetRadiusEnum);
+	this->parameters->FindParam(&horiz,SolidearthSettingsHorizEnum);
 
 	/*recover precomputed green function kernels:*/
@@ -5719,5 +5719,5 @@
 
 	/*recover ocean area scaling: */
-	this->parameters->FindParam(&scaleoceanarea,SealevelriseOceanAreaScalingEnum);
+	this->parameters->FindParam(&scaleoceanarea,SolidearthSettingsOceanAreaScalingEnum);
 
 	/*retrieve precomputed G:*/
@@ -5737,5 +5737,5 @@
 
 	/*Retrieve ice thickness at vertices: */
-	Input2* deltathickness_input=this->GetInput2(SealevelriseDeltathicknessEnum);
+	Input2* deltathickness_input=this->GetInput2(SurfaceloadIceThicknessChangeEnum);
 	if (!deltathickness_input)_error_("delta thickness input needed to compute sea level rise!");
 
@@ -5894,6 +5894,6 @@
 
 	/*recover parameters:*/
-	this->parameters->FindParam(&computeelastic,SealevelriseElasticEnum);
-	this->parameters->FindParam(&horiz,SealevelriseHorizEnum);
+	this->parameters->FindParam(&computeelastic,SolidearthSettingsElasticEnum);
+	this->parameters->FindParam(&horiz,SolidearthSettingsHorizEnum);
 	this->parameters->FindParam(&bp_compute_fingerprints,DslComputeFingerprintsEnum);
 
@@ -5931,5 +5931,5 @@
 
 		/*Compute ice thickness change: */
-		Input2* deltathickness_input=this->GetInput2(SealevelriseDeltathicknessEnum);
+		Input2* deltathickness_input=this->GetInput2(SurfaceloadIceThicknessChangeEnum);
 		if (!deltathickness_input)_error_("delta thickness input needed to compute sea level rise!");
 		deltathickness_input->GetInputAverage(&I);
Index: /issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 25117)
+++ /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 25118)
@@ -4760,6 +4760,6 @@
 
 	/*recover computational flags: */
-	this->parameters->FindParam(&computerigid,SealevelriseRigidEnum);
-	this->parameters->FindParam(&computeelastic,SealevelriseElasticEnum);
+	this->parameters->FindParam(&computerigid,SolidearthSettingsRigidEnum);
+	this->parameters->FindParam(&computeelastic,SolidearthSettingsElasticEnum);
 
 	/*Initialize temporary vector that will be used to sum eustatic components on all local elements, prior
@@ -4824,10 +4824,10 @@
 
 	/*pull out some useful parameters: */
-	parameters->FindParam(&tide_love_h,SealevelriseTidalLoveHEnum);
-	parameters->FindParam(&tide_love_k,SealevelriseTidalLoveKEnum);
-	parameters->FindParam(&fluid_love,SealevelriseFluidLoveEnum);
-	parameters->FindParam(&moi_e,SealevelriseEquatorialMoiEnum);
-	parameters->FindParam(&moi_p,SealevelrisePolarMoiEnum);
-	parameters->FindParam(&omega,SealevelriseAngularVelocityEnum);
+	parameters->FindParam(&tide_love_h,TidalLoveHEnum);
+	parameters->FindParam(&tide_love_k,TidalLoveKEnum);
+	parameters->FindParam(&fluid_love,TidalLoveK2SecularEnum);
+	parameters->FindParam(&moi_e,RotationalEquatorialMoiEnum);
+	parameters->FindParam(&moi_p,RotationalPolarMoiEnum);
+	parameters->FindParam(&omega,RotationalAngularVelocityEnum);
 
 	/*compute perturbation terms for angular velocity vector: */
@@ -4888,5 +4888,5 @@
 
 	/*retrieve parameters:*/
-	this->parameters->FindParam(&horiz,SealevelriseHorizEnum);
+	this->parameters->FindParam(&horiz,SolidearthSettingsHorizEnum);
 
 	/*Serialize vectors from previous iteration:*/
Index: /issm/trunk-jpl/src/c/cores/sealevelchange_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/sealevelchange_core.cpp	(revision 25117)
+++ /issm/trunk-jpl/src/c/cores/sealevelchange_core.cpp	(revision 25118)
@@ -110,5 +110,5 @@
 
 	/*Should we even be here?:*/
-	femmodel->parameters->FindParam(&geodetic,SealevelriseGeodeticEnum); if(!geodetic)return;
+	femmodel->parameters->FindParam(&geodetic,SolidearthSettingsComputesealevelchangeEnum); if(!geodetic)return;
 
 	/*Verbose: */
@@ -117,7 +117,7 @@
 	/*retrieve more parameters:*/
 	femmodel->parameters->FindParam(&iscoupler,TransientIscouplerEnum);
-	femmodel->parameters->FindParam(&frequency,SealevelriseGeodeticRunFrequencyEnum);
+	femmodel->parameters->FindParam(&frequency,SolidearthSettingsRunFrequencyEnum);
 	femmodel->parameters->FindParam(&count,SealevelriseRunCountEnum);
-	femmodel->parameters->FindParam(&horiz,SealevelriseHorizEnum);
+	femmodel->parameters->FindParam(&horiz,SolidearthSettingsHorizEnum);
 	femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
@@ -154,5 +154,5 @@
 
 		/*we have accumulated thicknesses, dump them in deltathcikness: */
-		if(modelid==earthid)InputDuplicatex(femmodel,SealevelriseCumDeltathicknessEnum,SealevelriseDeltathicknessEnum);
+		if(modelid==earthid)InputDuplicatex(femmodel,SealevelriseCumDeltathicknessEnum,SurfaceloadIceThicknessChangeEnum);
 	}
 
@@ -274,5 +274,5 @@
 	femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
-	femmodel->parameters->FindParam(&geodetic,SealevelriseGeodeticEnum); 
+	femmodel->parameters->FindParam(&geodetic,SolidearthSettingsComputesealevelchangeEnum); 
 
 	/*in case we are running SealevelriseSolutionEnum, then bypass transient settings:*/
@@ -290,5 +290,5 @@
 	GetStericRate(&steric_rate_g,femmodel);
 	GetDynamicRate(&dynamic_rate_g,femmodel);
-	GetVectorFromInputsx(&hydro_rate_g,femmodel,SealevelriseHydroRateEnum,VertexSIdEnum);
+	GetVectorFromInputsx(&hydro_rate_g,femmodel,SurfaceloadWaterHeightChangeEnum,VertexSIdEnum);
 	if(geodetic){
 		GetVectorFromInputsx(&U_esa_rate,femmodel,SealevelUEsaRateEnum,VertexSIdEnum);
@@ -364,5 +364,5 @@
 		
 	/*retrieve parameters:*/
-	femmodel->parameters->FindParam(&horiz,SealevelriseHorizEnum);
+	femmodel->parameters->FindParam(&horiz,SolidearthSettingsHorizEnum);
 	femmodel->parameters->FindParam(&geometrydone,SealevelriseGeometryDoneEnum);
 
@@ -470,10 +470,10 @@
 
 	/*Recover some parameters: */
-	femmodel->parameters->FindParam(&max_nonlinear_iterations,SealevelriseMaxiterEnum);
-	femmodel->parameters->FindParam(&eps_rel,SealevelriseReltolEnum);
-	femmodel->parameters->FindParam(&eps_abs,SealevelriseAbstolEnum);
+	femmodel->parameters->FindParam(&max_nonlinear_iterations,SolidearthSettingsMaxiterEnum);
+	femmodel->parameters->FindParam(&eps_rel,SolidearthSettingsReltolEnum);
+	femmodel->parameters->FindParam(&eps_abs,SolidearthSettingsAbstolEnum);
 
 	/*computational flag: */
-	femmodel->parameters->FindParam(&rotation,SealevelriseRotationEnum);
+	femmodel->parameters->FindParam(&rotation,SolidearthSettingsRotationEnum);
 
 	/*Figure out size of g-set deflection vector and allocate solution vector: */
@@ -589,5 +589,5 @@
 
 	/*retrieve some parameters:*/
-	femmodel->parameters->FindParam(&horiz,SealevelriseHorizEnum);
+	femmodel->parameters->FindParam(&horiz,SolidearthSettingsHorizEnum);
 
 	/*find size of vectors:*/
@@ -637,5 +637,5 @@
 
 	/*retrieve some parameters:*/
-	femmodel->parameters->FindParam(&frequency,SealevelriseGeodeticRunFrequencyEnum);
+	femmodel->parameters->FindParam(&frequency,SolidearthSettingsRunFrequencyEnum);
 	femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
 
@@ -990,4 +990,9 @@
 	if(VerboseSolution()) _printf0_("              computing earth mass transport\n");
 
+	/*This module has to be recoded! We do not grab spc thicknesses from an earth model 
+	 * anymore! Thicknesses come from a mass transport module applied to each basin! 
+	 * Commeting out for now:*/
+	_error_("EarthMassTransport error message: not supported anymore!");
+
 	/*This mass transport module for the Earth is because we might have thickness variations as spcs 
 	 * specified in the md.slr class, outside of what we will get from the icecaps. That's why we get t
@@ -996,28 +1001,28 @@
 	/*No mass transport module was called, so we are just going to retrieve the geometry thickness 
 	 * at this time step, at prior time step, and plug the difference as deltathickness: */
-	femmodel->parameters->FindParam(&time,TimeEnum);
+	/*femmodel->parameters->FindParam(&time,TimeEnum);
 	femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
 	nv=femmodel->vertices->NumberOfVertices();
 
 	GetVectorFromInputsx(&newthickness,femmodel,SealevelriseSpcthicknessEnum,VertexSIdEnum);
-	GetVectorFromInputsx(&oldthickness,femmodel,SealevelriseSpcthicknessEnum,VertexSIdEnum,time-dt);
+	GetVectorFromInputsx(&oldthickness,femmodel,SealevelriseSpcthicknessEnum,VertexSIdEnum,time-dt);*/
 
 	/*compute deltathickness: */
-	deltathickness = new Vector<IssmDouble>(nv); 
-	newthickness->Copy(deltathickness); deltathickness->AXPY(oldthickness,-1); 
+	/*deltathickness = new Vector<IssmDouble>(nv); 
+	newthickness->Copy(deltathickness); deltathickness->AXPY(oldthickness,-1); */
 
 	/*plug into elements:*/
-	InputUpdateFromVectorx(femmodel,deltathickness,SealevelriseDeltathicknessEnum,VertexSIdEnum);
+//	InputUpdateFromVectorx(femmodel,deltathickness,SurfaceloadIceThicknessChangeEnum,VertexSIdEnum);
 
 	/*add to cumulated delta thickness: */
-	GetVectorFromInputsx(&cumdeltathickness,femmodel,SealevelriseCumDeltathicknessEnum,VertexSIdEnum);
+	/*GetVectorFromInputsx(&cumdeltathickness,femmodel,SealevelriseCumDeltathicknessEnum,VertexSIdEnum);
 	cumdeltathickness->AXPY(deltathickness,1); 
-	InputUpdateFromVectorx(femmodel,cumdeltathickness,SealevelriseCumDeltathicknessEnum,VertexSIdEnum);
+	InputUpdateFromVectorx(femmodel,cumdeltathickness,SealevelriseCumDeltathicknessEnum,VertexSIdEnum);*/
 
 	/*free ressources:*/
-	delete oldthickness;
+	/*delete oldthickness;
 	delete newthickness;
 	delete deltathickness;
-	delete cumdeltathickness;
+	delete cumdeltathickness;*/
 
 } /*}}}*/
Index: /issm/trunk-jpl/src/c/shared/Enum/Enum.vim
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 25117)
+++ /issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 25118)
@@ -307,29 +307,29 @@
 syn keyword cConstant RootPathEnum
 syn keyword cConstant SaveResultsEnum
-syn keyword cConstant SealevelPlanetRadiusEnum
-syn keyword cConstant SealevelPlanetAreaEnum
+syn keyword cConstant SolidearthPlanetRadiusEnum
+syn keyword cConstant SolidearthPlanetAreaEnum
 syn keyword cConstant SealevelEustaticEnum
-syn keyword cConstant SealevelriseAbstolEnum
-syn keyword cConstant SealevelriseAngularVelocityEnum
-syn keyword cConstant SealevelriseElasticEnum
+syn keyword cConstant SolidearthSettingsAbstolEnum
+syn keyword cConstant RotationalAngularVelocityEnum
+syn keyword cConstant SolidearthSettingsElasticEnum
 syn keyword cConstant SealevelriseGeometryDoneEnum
-syn keyword cConstant SealevelriseEquatorialMoiEnum
-syn keyword cConstant SealevelriseFluidLoveEnum
+syn keyword cConstant RotationalEquatorialMoiEnum
+syn keyword cConstant TidalLoveK2SecularEnum
 syn keyword cConstant SealevelriseGRigidEnum
 syn keyword cConstant SealevelriseGElasticEnum
-syn keyword cConstant SealevelriseGeodeticEnum
-syn keyword cConstant SealevelriseGeodeticRunFrequencyEnum
+syn keyword cConstant SolidearthSettingsComputesealevelchangeEnum
+syn keyword cConstant SolidearthSettingsRunFrequencyEnum
 syn keyword cConstant SealevelriseHElasticEnum
-syn keyword cConstant SealevelriseHorizEnum
-syn keyword cConstant SealevelriseMaxiterEnum
-syn keyword cConstant SealevelriseOceanAreaScalingEnum
-syn keyword cConstant SealevelrisePolarMoiEnum
-syn keyword cConstant SealevelriseReltolEnum
+syn keyword cConstant SolidearthSettingsHorizEnum
+syn keyword cConstant SolidearthSettingsMaxiterEnum
+syn keyword cConstant SolidearthSettingsOceanAreaScalingEnum
+syn keyword cConstant RotationalPolarMoiEnum
+syn keyword cConstant SolidearthSettingsReltolEnum
 syn keyword cConstant SealevelriseRequestedOutputsEnum
-syn keyword cConstant SealevelriseRigidEnum
-syn keyword cConstant SealevelriseRotationEnum
+syn keyword cConstant SolidearthSettingsRigidEnum
+syn keyword cConstant SolidearthSettingsRotationEnum
 syn keyword cConstant SealevelriseRunCountEnum
-syn keyword cConstant SealevelriseTidalLoveHEnum
-syn keyword cConstant SealevelriseTidalLoveKEnum
+syn keyword cConstant TidalLoveHEnum
+syn keyword cConstant TidalLoveKEnum
 syn keyword cConstant SealevelriseTransitionsEnum
 syn keyword cConstant SealevelriseUElasticEnum
@@ -687,7 +687,7 @@
 syn keyword cConstant SealevelriseCumDeltathicknessEnum
 syn keyword cConstant SealevelriseCumDeltathicknessOldEnum
-syn keyword cConstant SealevelriseDeltathicknessEnum
-syn keyword cConstant SealevelriseSpcthicknessEnum
-syn keyword cConstant SealevelriseHydroRateEnum
+syn keyword cConstant SurfaceloadOtherEnum
+syn keyword cConstant SurfaceloadIceThicknessChangeEnum
+syn keyword cConstant SurfaceloadWaterHeightChangeEnum
 syn keyword cConstant SealevelriseIndicesEnum
 syn keyword cConstant SealevelriseGEnum
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 25117)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 25118)
@@ -301,29 +301,29 @@
 	RootPathEnum,
 	SaveResultsEnum,
-	SealevelPlanetRadiusEnum,
-	SealevelPlanetAreaEnum,
+	SolidearthPlanetRadiusEnum,
+	SolidearthPlanetAreaEnum,
 	SealevelEustaticEnum,
-	SealevelriseAbstolEnum,
-	SealevelriseAngularVelocityEnum,
-	SealevelriseElasticEnum,
+	SolidearthSettingsAbstolEnum,
+	RotationalAngularVelocityEnum,
+	SolidearthSettingsElasticEnum,
 	SealevelriseGeometryDoneEnum,
-	SealevelriseEquatorialMoiEnum,
-	SealevelriseFluidLoveEnum,
+	RotationalEquatorialMoiEnum,
+	TidalLoveK2SecularEnum,
 	SealevelriseGRigidEnum,
 	SealevelriseGElasticEnum,
-	SealevelriseGeodeticEnum,
-	SealevelriseGeodeticRunFrequencyEnum,
+	SolidearthSettingsComputesealevelchangeEnum,
+	SolidearthSettingsRunFrequencyEnum,
 	SealevelriseHElasticEnum,
-	SealevelriseHorizEnum,
-	SealevelriseMaxiterEnum,
-	SealevelriseOceanAreaScalingEnum,
-	SealevelrisePolarMoiEnum,
-	SealevelriseReltolEnum,
+	SolidearthSettingsHorizEnum,
+	SolidearthSettingsMaxiterEnum,
+	SolidearthSettingsOceanAreaScalingEnum,
+	RotationalPolarMoiEnum,
+	SolidearthSettingsReltolEnum,
 	SealevelriseRequestedOutputsEnum,
-	SealevelriseRigidEnum,
-	SealevelriseRotationEnum,
+	SolidearthSettingsRigidEnum,
+	SolidearthSettingsRotationEnum,
 	SealevelriseRunCountEnum,
-	SealevelriseTidalLoveHEnum,
-	SealevelriseTidalLoveKEnum,
+	TidalLoveHEnum,
+	TidalLoveKEnum,
 	SealevelriseTransitionsEnum,
 	SealevelriseUElasticEnum,
@@ -684,7 +684,7 @@
 	SealevelriseCumDeltathicknessEnum,
 	SealevelriseCumDeltathicknessOldEnum,
-	SealevelriseDeltathicknessEnum,
-	SealevelriseSpcthicknessEnum,
-	SealevelriseHydroRateEnum,
+	SurfaceloadOtherEnum,
+	SurfaceloadIceThicknessChangeEnum,
+	SurfaceloadWaterHeightChangeEnum,
 	SealevelriseIndicesEnum,
 	SealevelriseGEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 25117)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 25118)
@@ -309,29 +309,29 @@
 		case RootPathEnum : return "RootPath";
 		case SaveResultsEnum : return "SaveResults";
-		case SealevelPlanetRadiusEnum : return "SealevelPlanetRadius";
-		case SealevelPlanetAreaEnum : return "SealevelPlanetArea";
+		case SolidearthPlanetRadiusEnum : return "SolidearthPlanetRadius";
+		case SolidearthPlanetAreaEnum : return "SolidearthPlanetArea";
 		case SealevelEustaticEnum : return "SealevelEustatic";
-		case SealevelriseAbstolEnum : return "SealevelriseAbstol";
-		case SealevelriseAngularVelocityEnum : return "SealevelriseAngularVelocity";
-		case SealevelriseElasticEnum : return "SealevelriseElastic";
+		case SolidearthSettingsAbstolEnum : return "SolidearthSettingsAbstol";
+		case RotationalAngularVelocityEnum : return "RotationalAngularVelocity";
+		case SolidearthSettingsElasticEnum : return "SolidearthSettingsElastic";
 		case SealevelriseGeometryDoneEnum : return "SealevelriseGeometryDone";
-		case SealevelriseEquatorialMoiEnum : return "SealevelriseEquatorialMoi";
-		case SealevelriseFluidLoveEnum : return "SealevelriseFluidLove";
+		case RotationalEquatorialMoiEnum : return "RotationalEquatorialMoi";
+		case TidalLoveK2SecularEnum : return "TidalLoveK2Secular";
 		case SealevelriseGRigidEnum : return "SealevelriseGRigid";
 		case SealevelriseGElasticEnum : return "SealevelriseGElastic";
-		case SealevelriseGeodeticEnum : return "SealevelriseGeodetic";
-		case SealevelriseGeodeticRunFrequencyEnum : return "SealevelriseGeodeticRunFrequency";
+		case SolidearthSettingsComputesealevelchangeEnum : return "SolidearthSettingsComputesealevelchange";
+		case SolidearthSettingsRunFrequencyEnum : return "SolidearthSettingsRunFrequency";
 		case SealevelriseHElasticEnum : return "SealevelriseHElastic";
-		case SealevelriseHorizEnum : return "SealevelriseHoriz";
-		case SealevelriseMaxiterEnum : return "SealevelriseMaxiter";
-		case SealevelriseOceanAreaScalingEnum : return "SealevelriseOceanAreaScaling";
-		case SealevelrisePolarMoiEnum : return "SealevelrisePolarMoi";
-		case SealevelriseReltolEnum : return "SealevelriseReltol";
+		case SolidearthSettingsHorizEnum : return "SolidearthSettingsHoriz";
+		case SolidearthSettingsMaxiterEnum : return "SolidearthSettingsMaxiter";
+		case SolidearthSettingsOceanAreaScalingEnum : return "SolidearthSettingsOceanAreaScaling";
+		case RotationalPolarMoiEnum : return "RotationalPolarMoi";
+		case SolidearthSettingsReltolEnum : return "SolidearthSettingsReltol";
 		case SealevelriseRequestedOutputsEnum : return "SealevelriseRequestedOutputs";
-		case SealevelriseRigidEnum : return "SealevelriseRigid";
-		case SealevelriseRotationEnum : return "SealevelriseRotation";
+		case SolidearthSettingsRigidEnum : return "SolidearthSettingsRigid";
+		case SolidearthSettingsRotationEnum : return "SolidearthSettingsRotation";
 		case SealevelriseRunCountEnum : return "SealevelriseRunCount";
-		case SealevelriseTidalLoveHEnum : return "SealevelriseTidalLoveH";
-		case SealevelriseTidalLoveKEnum : return "SealevelriseTidalLoveK";
+		case TidalLoveHEnum : return "TidalLoveH";
+		case TidalLoveKEnum : return "TidalLoveK";
 		case SealevelriseTransitionsEnum : return "SealevelriseTransitions";
 		case SealevelriseUElasticEnum : return "SealevelriseUElastic";
@@ -689,7 +689,7 @@
 		case SealevelriseCumDeltathicknessEnum : return "SealevelriseCumDeltathickness";
 		case SealevelriseCumDeltathicknessOldEnum : return "SealevelriseCumDeltathicknessOld";
-		case SealevelriseDeltathicknessEnum : return "SealevelriseDeltathickness";
-		case SealevelriseSpcthicknessEnum : return "SealevelriseSpcthickness";
-		case SealevelriseHydroRateEnum : return "SealevelriseHydroRate";
+		case SurfaceloadOtherEnum : return "SurfaceloadOther";
+		case SurfaceloadIceThicknessChangeEnum : return "SurfaceloadIceThicknessChange";
+		case SurfaceloadWaterHeightChangeEnum : return "SurfaceloadWaterHeightChange";
 		case SealevelriseIndicesEnum : return "SealevelriseIndices";
 		case SealevelriseGEnum : return "SealevelriseG";
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 25117)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 25118)
@@ -315,29 +315,29 @@
 	      else if (strcmp(name,"RootPath")==0) return RootPathEnum;
 	      else if (strcmp(name,"SaveResults")==0) return SaveResultsEnum;
-	      else if (strcmp(name,"SealevelPlanetRadius")==0) return SealevelPlanetRadiusEnum;
-	      else if (strcmp(name,"SealevelPlanetArea")==0) return SealevelPlanetAreaEnum;
+	      else if (strcmp(name,"SolidearthPlanetRadius")==0) return SolidearthPlanetRadiusEnum;
+	      else if (strcmp(name,"SolidearthPlanetArea")==0) return SolidearthPlanetAreaEnum;
 	      else if (strcmp(name,"SealevelEustatic")==0) return SealevelEustaticEnum;
-	      else if (strcmp(name,"SealevelriseAbstol")==0) return SealevelriseAbstolEnum;
-	      else if (strcmp(name,"SealevelriseAngularVelocity")==0) return SealevelriseAngularVelocityEnum;
-	      else if (strcmp(name,"SealevelriseElastic")==0) return SealevelriseElasticEnum;
+	      else if (strcmp(name,"SolidearthSettingsAbstol")==0) return SolidearthSettingsAbstolEnum;
+	      else if (strcmp(name,"RotationalAngularVelocity")==0) return RotationalAngularVelocityEnum;
+	      else if (strcmp(name,"SolidearthSettingsElastic")==0) return SolidearthSettingsElasticEnum;
 	      else if (strcmp(name,"SealevelriseGeometryDone")==0) return SealevelriseGeometryDoneEnum;
-	      else if (strcmp(name,"SealevelriseEquatorialMoi")==0) return SealevelriseEquatorialMoiEnum;
-	      else if (strcmp(name,"SealevelriseFluidLove")==0) return SealevelriseFluidLoveEnum;
+	      else if (strcmp(name,"RotationalEquatorialMoi")==0) return RotationalEquatorialMoiEnum;
+	      else if (strcmp(name,"TidalLoveK2Secular")==0) return TidalLoveK2SecularEnum;
 	      else if (strcmp(name,"SealevelriseGRigid")==0) return SealevelriseGRigidEnum;
 	      else if (strcmp(name,"SealevelriseGElastic")==0) return SealevelriseGElasticEnum;
-	      else if (strcmp(name,"SealevelriseGeodetic")==0) return SealevelriseGeodeticEnum;
-	      else if (strcmp(name,"SealevelriseGeodeticRunFrequency")==0) return SealevelriseGeodeticRunFrequencyEnum;
+	      else if (strcmp(name,"SolidearthSettingsComputesealevelchange")==0) return SolidearthSettingsComputesealevelchangeEnum;
+	      else if (strcmp(name,"SolidearthSettingsRunFrequency")==0) return SolidearthSettingsRunFrequencyEnum;
 	      else if (strcmp(name,"SealevelriseHElastic")==0) return SealevelriseHElasticEnum;
-	      else if (strcmp(name,"SealevelriseHoriz")==0) return SealevelriseHorizEnum;
-	      else if (strcmp(name,"SealevelriseMaxiter")==0) return SealevelriseMaxiterEnum;
-	      else if (strcmp(name,"SealevelriseOceanAreaScaling")==0) return SealevelriseOceanAreaScalingEnum;
-	      else if (strcmp(name,"SealevelrisePolarMoi")==0) return SealevelrisePolarMoiEnum;
-	      else if (strcmp(name,"SealevelriseReltol")==0) return SealevelriseReltolEnum;
+	      else if (strcmp(name,"SolidearthSettingsHoriz")==0) return SolidearthSettingsHorizEnum;
+	      else if (strcmp(name,"SolidearthSettingsMaxiter")==0) return SolidearthSettingsMaxiterEnum;
+	      else if (strcmp(name,"SolidearthSettingsOceanAreaScaling")==0) return SolidearthSettingsOceanAreaScalingEnum;
+	      else if (strcmp(name,"RotationalPolarMoi")==0) return RotationalPolarMoiEnum;
+	      else if (strcmp(name,"SolidearthSettingsReltol")==0) return SolidearthSettingsReltolEnum;
 	      else if (strcmp(name,"SealevelriseRequestedOutputs")==0) return SealevelriseRequestedOutputsEnum;
-	      else if (strcmp(name,"SealevelriseRigid")==0) return SealevelriseRigidEnum;
-	      else if (strcmp(name,"SealevelriseRotation")==0) return SealevelriseRotationEnum;
+	      else if (strcmp(name,"SolidearthSettingsRigid")==0) return SolidearthSettingsRigidEnum;
+	      else if (strcmp(name,"SolidearthSettingsRotation")==0) return SolidearthSettingsRotationEnum;
 	      else if (strcmp(name,"SealevelriseRunCount")==0) return SealevelriseRunCountEnum;
-	      else if (strcmp(name,"SealevelriseTidalLoveH")==0) return SealevelriseTidalLoveHEnum;
-	      else if (strcmp(name,"SealevelriseTidalLoveK")==0) return SealevelriseTidalLoveKEnum;
+	      else if (strcmp(name,"TidalLoveH")==0) return TidalLoveHEnum;
+	      else if (strcmp(name,"TidalLoveK")==0) return TidalLoveKEnum;
 	      else if (strcmp(name,"SealevelriseTransitions")==0) return SealevelriseTransitionsEnum;
 	      else if (strcmp(name,"SealevelriseUElastic")==0) return SealevelriseUElasticEnum;
@@ -704,7 +704,7 @@
 	      else if (strcmp(name,"SealevelriseCumDeltathickness")==0) return SealevelriseCumDeltathicknessEnum;
 	      else if (strcmp(name,"SealevelriseCumDeltathicknessOld")==0) return SealevelriseCumDeltathicknessOldEnum;
-	      else if (strcmp(name,"SealevelriseDeltathickness")==0) return SealevelriseDeltathicknessEnum;
-	      else if (strcmp(name,"SealevelriseSpcthickness")==0) return SealevelriseSpcthicknessEnum;
-	      else if (strcmp(name,"SealevelriseHydroRate")==0) return SealevelriseHydroRateEnum;
+	      else if (strcmp(name,"SurfaceloadOther")==0) return SurfaceloadOtherEnum;
+	      else if (strcmp(name,"SurfaceloadIceThicknessChange")==0) return SurfaceloadIceThicknessChangeEnum;
+	      else if (strcmp(name,"SurfaceloadWaterHeightChange")==0) return SurfaceloadWaterHeightChangeEnum;
 	      else if (strcmp(name,"SealevelriseIndices")==0) return SealevelriseIndicesEnum;
 	      else if (strcmp(name,"SealevelriseG")==0) return SealevelriseGEnum;
Index: /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 25117)
+++ /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 25118)
@@ -163,7 +163,7 @@
 		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
 	}
-	else if(strcmp(string_in,"SealevelriseDeltathickness")==0){
-		const char* field = "md.slr.deltathickness";
-		input_enum        = SealevelriseDeltathicknessEnum;
+	else if(strcmp(string_in,"SurfaceloadIceThicknessChange")==0){
+		const char* field = "md.solidearth.surfaceload.iceheightchange";
+		input_enum        = SurfaceloadIceThicknessChangeEnum;
 		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
 	}
@@ -178,7 +178,7 @@
 		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
 	}
-	else if(strcmp(string_in,"SealevelriseHydroRate")==0){
-		const char* field = "md.slr.hydro_rate";
-		input_enum        = SealevelriseHydroRateEnum;
+	else if(strcmp(string_in,"SurfaceloadWaterHeightChange")==0){
+		const char* field = "md.solidearth.surfaceload.waterheightchange";
+		input_enum        = SurfaceloadWaterHeightChangeEnum;
 		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
 	}
Index: /issm/trunk-jpl/src/m/classes/loadinglove.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/loadinglove.m	(revision 25118)
+++ /issm/trunk-jpl/src/m/classes/loadinglove.m	(revision 25118)
@@ -0,0 +1,98 @@
+%LOADINGLOVE class definition
+%
+%   Usage:
+%      love=loadinglove();
+
+classdef loadinglove
+	properties (SetAccess=public) 
+		
+		%regular love numbers:
+		h                 = 0; %provided by PREM model
+		k                 = 0; %idem
+		l                 = 0; %idem
+		
+		%tidal love numbers for computing rotational feedback:
+		th          = 0; 
+		tk          = 0; 
+		tk2secular  = 0; 
+
+	end
+	methods
+		function self = loadinglove(varargin) % {{{
+			switch nargin
+				case 0
+					self=setdefaultparameters(self);
+				otherwise
+					error('constructor not supported');
+			end
+		end % }}}
+		function self = setdefaultparameters(self) % {{{
+			
+			%tidal love numbers: 
+			self.th=0.6149; %degree 2
+			self.tk=0.3055; % degree 2
+
+			%secular fluid love number: 
+			self.tk2secular=0.942; 
+
+		end % }}}
+		function md = checkconsistency(self,md,solution,analyses) % {{{
+
+			if ~ismember('SealevelriseAnalysis',analyses) | (strcmp(solution,'TransientSolution') & md.transient.islove==0), 
+				return; 
+			end
+
+			md = checkfield(md,'fieldname','solidearth.love.h','NaN',1,'Inf',1);
+			md = checkfield(md,'fieldname','solidearth.love.k','NaN',1,'Inf',1);
+			md = checkfield(md,'fieldname','solidearth.love.l','NaN',1,'Inf',1);
+			
+			
+			md = checkfield(md,'fieldname','solidearth.love.th','NaN',1,'Inf',1);
+			md = checkfield(md,'fieldname','solidearth.love.tk','NaN',1,'Inf',1);
+			md = checkfield(md,'fieldname','solidearth.love.tk2secular','NaN',1,'Inf',1);
+
+			%check that love numbers are provided at the same level of accuracy: 
+			if (size(self.h,1)~=size(self.k,1) | size(self.h,1)~=size(self.l,1)),
+				error('love error message: love numbers should be provided at the same level of accuracy');
+			end
+
+
+		end % }}}
+		function list=defaultoutputs(self,md) % {{{
+			list = {};
+		end % }}}
+		function disp(self) % {{{
+			disp(sprintf('   loadinglove parameters:'));
+
+			fielddisplay(self,'h','load Love number for radial displacement');
+			fielddisplay(self,'k','load Love number for gravitational potential perturbation');
+			fielddisplay(self,'l','load Love number for horizontal displacements');
+
+			fielddisplay(self,'th','tidal load Love number (deg 2)');
+			fielddisplay(self,'tk','tidal load Love number (deg 2)');
+			fielddisplay(self,'tk2secular','secular fluid Love number');
+
+		end % }}}
+		function marshall(self,prefix,md,fid) % {{{
+			
+			WriteData(fid,prefix,'name','md.solidearth.love.model','data',1,'format','Integer');
+
+			WriteData(fid,prefix,'object',self,'fieldname','h','name','md.solidearth.love.h','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'fieldname','k','name','md.solidearth.love.k','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'fieldname','l','name','md.solidearth.love.l','format','DoubleMat','mattype',1);
+
+			WriteData(fid,prefix,'object',self,'fieldname','th','name','md.solidearth.love.th','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','tk','name','md.solidearth.love.tk','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','tk2secular','name','md.solidearth.love.tk2secular','format','Double');
+
+
+		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+			writejs1Darray(fid,[modelname '.love.h'],self.h);
+			writejs1Darray(fid,[modelname '.love.k'],self.k);
+			writejs1Darray(fid,[modelname '.love.l'],self.l);
+		end % }}}
+		function self = extrude(self,md) % {{{
+		end % }}}
+	end
+end
Index: /issm/trunk-jpl/src/m/classes/model.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/model.m	(revision 25117)
+++ /issm/trunk-jpl/src/m/classes/model.m	(revision 25118)
@@ -23,5 +23,5 @@
 		rifts            = 0;
 		dsl              = 0;
-		slr              = 0;
+		solidearth       = 0;
 
 		debug            = 0;
@@ -126,5 +126,5 @@
 			if isa(md.calving,'double'); md.calving=calving(); end
 			%2016 February 3
-			if isa(md.slr,'double'); md.slr=slr(); end
+			if isa(md.slr,'double'); md.solidearth=solidearth(); end
 			%2016 October 11
 			if isa(md.esa,'double'); md.esa=esa(); end
@@ -888,5 +888,5 @@
 			md.frontalforcings=extrude(md.frontalforcings,md);
 			md.hydrology = extrude(md.hydrology,md);
-			md.slr = extrude(md.slr,md);
+			md.solidearth = extrude(md.solidearth,md);
 			md.dsl = extrude(md.dsl,md);
 
@@ -1209,5 +1209,5 @@
 			md.friction         = friction();
 			md.rifts            = rifts();
-			md.slr              = slr();
+			md.solidearth       = solidearth();
 			md.dsl              = dsl();
 			md.timestepping     = timestepping();
@@ -1390,5 +1390,5 @@
 			disp(sprintf('%19s: %-22s -- %s','initialization'  ,['[1x1 ' class(self.initialization) ']'],'initial guess/state'));
 			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','solidearth'      ,['[1x1 ' class(self.solidearth) ']'],'solidearth inputs and settings'));
 			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)'));
Index: /issm/trunk-jpl/src/m/classes/rotational.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/rotational.m	(revision 25118)
+++ /issm/trunk-jpl/src/m/classes/rotational.m	(revision 25118)
@@ -0,0 +1,68 @@
+%ROTATIONAL class definition
+%
+%   Usage:
+%      rotational=rotational();
+
+classdef rotational
+	properties (SetAccess=public) 
+		equatorialmoi         = 0;
+		polarmoi              = 0;
+		angularvelocity       = 0;
+	end
+	methods
+		function self = rotational(varargin) % {{{
+			switch nargin
+				case 0
+					self=setdefaultparameters(self);
+				otherwise
+					error('constructor not supported');
+			end
+		end % }}}
+		function self = setdefaultparameters(self) % {{{
+		
+		%moment of inertia: 
+		self.equatorialmoi=8.0077*10^37; % [kg m^2] 
+		self.polarmoi		 =8.0345*10^37; % [kg m^2] 
+
+		% mean rotational velocity of earth 
+		self.angularvelocity=7.2921*10^-5; % [s^-1] 
+		end % }}}
+		function md = checkconsistency(self,md,solution,analyses) % {{{
+
+			if ~ismember('SealevelriseAnalysis',analyses) | (strcmp(solution,'TransientSolution') & md.transient.isrotational==0), 
+				return; 
+			end
+
+			md = checkfield(md,'fieldname','solidearth.rotational.equatorialmoi','NaN',1,'Inf',1);
+			md = checkfield(md,'fieldname','solidearth.rotational.polarmoi','NaN',1,'Inf',1);
+			md = checkfield(md,'fieldname','solidearth.rotational.angularvelocity','NaN',1,'Inf',1);
+
+		end % }}}
+		function list=defaultoutputs(self,md) % {{{
+			list = {};
+		end % }}}
+		function disp(self) % {{{
+			disp(sprintf('   rotational parameters:'));
+
+			fielddisplay(self,'equatorialmoi','mean equatorial moment of inertia [kg m^2]');
+			fielddisplay(self,'polarmoi','polar moment of inertia [kg m^2]');
+			fielddisplay(self,'angularvelocity','mean rotational velocity of earth [per second]'); 
+
+		end % }}}
+		function marshall(self,prefix,md,fid) % {{{
+			
+			WriteData(fid,prefix,'object',self,'fieldname','equatorialmoi','name','md.solidearth.rotational.equatorialmoi','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','polarmoi','name','md.solidearth.rotational.polarmoi','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','angularvelocity','name','md.solidearth.rotational.angularvelocity','format','Double');
+
+		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+		
+			writejsdouble(fid,[modelname '.rotational.equatorialmoi'],self.equatorial_moi);
+			writejsdouble(fid,[modelname '.rotational.polarmoi'],self.polar_moi);
+			writejsdouble(fid,[modelname '.rotational.angularvelocity'],self.angular_velocity);
+		end % }}}
+		function self = extrude(self,md) % {{{
+		end % }}}
+	end
+end
Index: /issm/trunk-jpl/src/m/classes/solidearth.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/solidearth.m	(revision 25118)
+++ /issm/trunk-jpl/src/m/classes/solidearth.m	(revision 25118)
@@ -0,0 +1,105 @@
+%SOLIDEARTH class definition
+%
+%   Usage:
+%      solidearth=solidearth();
+
+classdef solidearth
+	properties (SetAccess=public) 
+		sealevel               = NaN;
+		settings               = solidearthsettings(); 
+		surfaceload            = surfaceload();
+		love                   = loadinglove();
+		rotational             = rotational();
+		planetradius           = planetradius('earth');
+		requested_outputs      = {};
+		transitions            = {};
+	end
+	methods
+		function self = solidearth(varargin) % {{{
+			switch nargin
+				case 0
+					self=setdefaultparameters(self);
+				otherwise
+					error('constructor not supported');
+			end
+		end % }}}
+		function self = setdefaultparameters(self) % {{{
+		
+		%output default:
+		self.requested_outputs={'default'};
+
+		%transitions should be a cell array of vectors: 
+		self.transitions={};
+
+		%earth radius
+		self.planetradius= planetradius('earth');
+		
+		end % }}}
+		function md = checkconsistency(self,md,solution,analyses) % {{{
+
+			if ~ismember('SealevelriseAnalysis',analyses) | (strcmp(solution,'TransientSolution') & md.transient.isslr==0), 
+				return; 
+			end
+
+			md = checkfield(md,'fieldname','solidearth.sealevel','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1]);
+			md = checkfield(md,'fieldname','solidearth.requested_outputs','stringrow',1);
+
+			self.settings.checkconsistency(md,solution,analyses);
+			self.surfaceload.checkconsistency(md,solution,analyses);
+			self.love.checkconsistency(md,solution,analyses);
+			self.rotational.checkconsistency(md,solution,analyses);
+
+			
+		end % }}}
+		function list=defaultoutputs(self,md) % {{{
+			list = {'Sealevel'};
+		end % }}}
+		function disp(self) % {{{
+			disp(sprintf('   solidearth inputs, forcings and settings:'));
+
+			fielddisplay(self,'sealevel','current sea level (prior to computation) [m]');
+			fielddisplay(self,'planetradius','planet radius [m]');
+			fielddisplay(self,'transitions','indices into parts of the mesh that will be icecaps');
+			fielddisplay(self,'requested_outputs','additional outputs requested');
+			self.settings.disp();
+			self.surfaceload.disp();
+			self.love.disp();
+			self.rotational.disp();
+
+		end % }}}
+		function marshall(self,prefix,md,fid) % {{{
+			
+			WriteData(fid,prefix,'object',self,'fieldname','sealevel','mattype',1,'format','DoubleMat','timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
+			WriteData(fid,prefix,'object',self,'fieldname','planetradius','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','transitions','format','MatArray');
+
+			self.settings.marshall(prefix,md,fid);
+			self.surfaceload.marshall(prefix,md,fid);
+			self.love.marshall(prefix,md,fid);
+			self.rotational.marshall(prefix,md,fid);
+			
+			%process requested outputs
+			outputs = self.requested_outputs;
+			pos  = find(ismember(outputs,'default'));
+			if ~isempty(pos),
+				outputs(pos) = [];                         %remove 'default' from outputs
+				outputs      = [outputs defaultoutputs(self,md)]; %add defaults
+			end
+			WriteData(fid,prefix,'data',outputs,'name','md.solidearth.requested_outputs','format','StringArray');
+
+		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+		
+			writejs1Darray(fid,[modelname '.solidearth.sealevel'],self.sealevel);
+			self.settings.savemodeljs(fid,modelname);
+			self.surfaceload.savemodeljs(fid,modelname);
+			self.love.savemodeljs(fid,modelname);
+			self.rotational.savemodeljs(fid,modelname);
+			writejscellstring(fid,[modelname '.solidearth.requested_outputs'],self.requested_outputs);
+			writejscellarray(fid,[modelname '.solidearth.transitions'],self.transitions);
+		end % }}}
+		function self = extrude(self,md) % {{{
+			self.sealevel=project3d(md,'vector',self.sealevel,'type','node');
+		end % }}}
+	end
+end
Index: /issm/trunk-jpl/src/m/classes/solidearthsettings.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/solidearthsettings.m	(revision 25118)
+++ /issm/trunk-jpl/src/m/classes/solidearthsettings.m	(revision 25118)
@@ -0,0 +1,122 @@
+%SOLIDEARTHSETTINGS class definition
+%
+%   Usage:
+%      solidearthsettings=solidearthsettings();
+
+classdef solidearthsettings
+	properties (SetAccess=public) 
+		reltol                 = 0;
+		abstol                 = 0;
+		maxiter                = 0;
+		rigid                  = 0;
+		elastic                = 0;
+		rotation               = 0;
+		ocean_area_scaling     = 0;
+		runfrequency           = 1; %how many time steps we skip before we run grd_core
+		computesealevelchange  = 0; %will grd_core compute sea level? 
+		degacc                 = 0; %degree increment for resolution of Green tables
+		horiz                  = 0; %compute horizontal deformation
+	end
+	methods
+		function self = solidearthsettings(varargin) % {{{
+			switch nargin
+				case 0
+					self=setdefaultparameters(self);
+				otherwise
+					error('constructor not supported');
+			end
+		end % }}}
+		function self = setdefaultparameters(self) % {{{
+		
+		%Convergence criterion: absolute, relative and residual
+		self.reltol=0.01; % 1 per cent 
+		self.abstol=NaN;  % default 
+
+		%maximum of non-linear iterations.
+		self.maxiter=5;
+
+		%computational flags: 
+		self.rigid=1;
+		self.elastic=1;
+		self.rotation=1;
+		self.ocean_area_scaling=0;
+		self.computesealevelchange=0;
+
+		%numerical discretization accuracy
+		self.degacc=.01;
+
+		%how many time steps we skip before we run SOLIDEARTHSETTINGS solver during transient
+		self.runfrequency=1;
+	
+		%horizontal displacement?  (not by default)
+		self.horiz=0;
+		end % }}}
+		function md = checkconsistency(self,md,solution,analyses) % {{{
+
+			if ~ismember('SealevelriseAnalysis',analyses) | (strcmp(solution,'TransientSolution') & md.transient.issolidearthsettings==0), 
+				return; 
+			end
+			md = checkfield(md,'fieldname','solidearth.settings.reltol','size',[1 1]);
+			md = checkfield(md,'fieldname','solidearth.settings.abstol','size',[1 1]);
+			md = checkfield(md,'fieldname','solidearth.settings.maxiter','size',[1 1],'>=',1);
+			md = checkfield(md,'fieldname','solidearth.settings.runfrequency','size',[1 1],'>=',1);
+			md = checkfield(md,'fieldname','solidearth.settings.degacc','size',[1 1],'>=',1e-10);
+			md = checkfield(md,'fieldname','solidearth.settings.horiz','NaN',1,'Inf',1,'values',[0 1]);
+
+			%a coupler to a planet model is provided. 
+			if self.computesealevelchange,
+				if md.transient.iscoupler, 
+					%we are good; 
+				else
+					if strcmpi(class(md.mesh),'mesh3dsurface'),
+						%we are good
+					else
+						error('model is requesting sealevel computations without being a mesh3dsurface, or being coupled to one!');
+					end
+				end
+			end
+
+		end % }}}
+		function disp(self) % {{{
+			disp(sprintf('   solidearth settings:'));
+
+			fielddisplay(self,'reltol','sea level rise relative convergence criterion, (default, NaN: not applied)');
+			fielddisplay(self,'abstol','sea level rise absolute convergence criterion, NaN: not applied');
+			fielddisplay(self,'maxiter','maximum number of nonlinear iterations');
+			fielddisplay(self,'ocean_area_scaling','correction for model representation of ocean area [default: No correction]'); 
+			fielddisplay(self,'computesealevelchange','compute sealevel change from GRD in addition to steric?) default 0');
+			fielddisplay(self,'runfrequency','how many time steps we skip before we run SOLIDEARTHSETTINGS solver during transient (default: 1)');
+			fielddisplay(self,'rigid','rigid earth graviational potential perturbation');
+			fielddisplay(self,'elastic','elastic earth graviational potential perturbation');
+			fielddisplay(self,'rotation','earth rotational potential perturbation');
+			fielddisplay(self,'degacc','accuracy (default .01 deg) for numerical discretization of the Green''s functions');
+		end % }}}
+		function marshall(self,prefix,md,fid) % {{{
+			WriteData(fid,prefix,'object',self,'fieldname','reltol','name','md.solidearth.settings.reltol','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','abstol','name','md.solidearth.settings.abstol','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','maxiter','name','md.solidearth.settings.maxiter','format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','rigid','name','md.solidearth.settings.rigid','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','elastic','name','md.solidearth.settings.elastic','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','rotation','name','md.solidearth.settings.rotation','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','ocean_area_scaling','name','md.solidearth.settings.ocean_area_scaling','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','runfrequency','name','md.solidearth.settings.runfrequency','format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','degacc','name','md.solidearth.settings.degacc','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','horiz','name','md.solidearth.settings.horiz','format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','computesealevelchange','name','md.solidearth.settings.computesealevelchange','format','Integer');
+		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+		
+			writejsdouble(fid,[modelname '.slr.settings.maxiter'],self.maxiter);
+			writejsdouble(fid,[modelname '.slr.settings.reltol'],self.reltol);
+			writejsdouble(fid,[modelname '.slr.settings.abstol'],self.abstol);
+			writejsdouble(fid,[modelname '.slr.settings.rigid'],self.rigid);
+			writejsdouble(fid,[modelname '.slr.settings.elastic'],self.elastic);
+			writejsdouble(fid,[modelname '.slr.settings.rotation'],self.rotation);
+			writejsdouble(fid,[modelname '.slr.settings.ocean_area_scaling'],self.ocean_area_scaling);
+			writejsdouble(fid,[modelname '.slr.settings.run_frequency'],self.run_frequency);
+			writejsdouble(fid,[modelname '.slr.settings.degacc'],self.degacc);
+		end % }}}
+		function self = extrude(self,md) % {{{
+		end % }}}
+	end
+end
Index: /issm/trunk-jpl/src/m/classes/surfaceload.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/surfaceload.m	(revision 25118)
+++ /issm/trunk-jpl/src/m/classes/surfaceload.m	(revision 25118)
@@ -0,0 +1,82 @@
+%SURFACELOAD class definition
+%
+%   Usage:
+%      surfaceload=surfaceload();
+
+classdef surfaceload
+	properties (SetAccess=public) 
+		icethicknesschange     = [];
+		waterheightchange      = [];
+		other                  = [];
+	end
+	methods
+		function self = surfaceload(varargin) % {{{
+			switch nargin
+				case 0
+					self=setdefaultparameters(self);
+				otherwise
+					error('constructor not supported');
+			end
+		end % }}}
+		function self = setdefaultparameters(self) % {{{
+		
+			icethicknesschange=[];
+			waterheightchange=[];
+			other=[];
+		
+		end % }}}
+		function md = checkconsistency(self,md,solution,analyses) % {{{
+
+			if ~ismember('SealevelriseAnalysis',analyses) | (strcmp(solution,'TransientSolution') & md.transient.issurfaceload==0), 
+				return; 
+			end
+			if ~isempty(self.icethicknesschange),
+				md = checkfield(md,'fieldname','solidearth.surfaceload.icethicknesschange','timeseries',1,'NaN',1,'Inf',1);
+			end
+			if ~isempty(self.waterheightchange),
+				md = checkfield(md,'fieldname','solidearth.surfaceload.waterheightchange','timeseries',1,'NaN',1,'Inf',1);
+			end
+			if ~isempty(self.other),
+				md = checkfield(md,'fieldname','solidearth.surfaceload.other','timeseries',1,'NaN',1,'Inf',1);
+			end
+
+			%cross check that whereever we have an ice load, the mask is <0 on each vertex:  legacy
+			%pos=find(self.deltathickness);
+			%maskpos=md.mask.ice_levelset(md.mesh.elements(pos,:)); 
+			%[els,vertices]=find(maskpos>0);
+			%if length(els),
+			%	warning('solidearth checkconsistency fail: there are elements with ice loads where some vertices are not on the ice!');
+			%end
+
+		end % }}}
+		function disp(self) % {{{
+			disp(sprintf('   surfaceload:'));
+
+			fielddisplay(self,'icethicknesschange','thickness change: ice height equivalent [mIce/yr]');
+			fielddisplay(self,'waterheightchange','water height change: water height equivalent [mWater/yr]');
+			fielddisplay(self,'other','other loads (sediments) [kg/m^2/yr]');
+
+		end % }}}
+		function marshall(self,prefix,md,fid) % {{{
+
+			if isempty(self.icethicknesschange), self.icethicknesschange=zeros(md.mesh.numberofelements+1,1); end
+			if isempty(self.waterheightchange), self.waterheightchange=zeros(md.mesh.numberofelements+1,1); end
+			if isempty(self.other), self.other=zeros(md.mesh.numberofelements+1,1); end
+			WriteData(fid,prefix,'object',self,'fieldname','icethicknesschange','name','md.solidearth.surfaceload.icethicknesschange',...
+				'format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1,'yts',md.constants.yts);
+			WriteData(fid,prefix,'object',self,'fieldname','waterheightchange','name','md.solidearth.surfaceload.waterheightchange',...
+				'format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1,'yts',md.constants.yts);
+			WriteData(fid,prefix,'object',self,'fieldname','other','name','md.solidearth.surfaceload.other',...
+				'format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1,'yts',md.constants.yts);
+
+		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+		
+			writejs1Darray(fid,[modelname '.surfaceload.icethicknesschange'],self.icethicknesschange);
+			writejs1Darray(fid,[modelname '.surfaceload.waterheightchange'],self.waterheightchange);
+			writejs1Darray(fid,[modelname '.surfaceload.other'],self.other);
+		end % }}}
+		function self = extrude(self,md) % {{{
+		end % }}}
+	end
+end
Index: /issm/trunk-jpl/src/m/classes/tidallove.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/tidallove.m	(revision 25118)
+++ /issm/trunk-jpl/src/m/classes/tidallove.m	(revision 25118)
@@ -0,0 +1,67 @@
+%TIDALLOVE class definition
+%
+%   Usage:
+%      tidallove=tidallove();
+
+classdef tidallove
+	properties (SetAccess=public) 
+		h          = 0; 
+		k          = 0; 
+		k2secular  = 0; 
+	end
+	methods
+		function self = tidallove(varargin) % {{{
+			switch nargin
+				case 0
+					self=setdefaultparameters(self);
+				otherwise
+					error('constructor not supported');
+			end
+		end % }}}
+		function self = setdefaultparameters(self) % {{{
+		
+			%tidal love numbers: 
+			self.h=0.6149; %degree 2
+			self.k=0.3055; % degree 2
+
+			%secular fluid love number: 
+			self.k2secular=0.942; 
+
+		end % }}}
+		function md = checkconsistency(self,md,solution,analyses) % {{{
+
+			if ~ismember('SealevelriseAnalysis',analyses) | (strcmp(solution,'TransientSolution') & md.transient.istidallove==0), 
+				return; 
+			end
+
+			md = checkfield(md,'fieldname','tidallove.h','NaN',1,'Inf',1);
+			md = checkfield(md,'fieldname','tidallove.k','NaN',1,'Inf',1);
+			md = checkfield(md,'fieldname','tidallove.k2secular','NaN',1,'Inf',1);
+
+		end % }}}
+		function list=defaultoutputs(self,md) % {{{
+			list = {};
+		end % }}}
+		function disp(self) % {{{
+			disp(sprintf('   tidallove parameters:'));
+
+			fielddisplay(self,'h','tidal load Love number (deg 2)');
+			fielddisplay(self,'k','tidal load Love number (deg 2)');
+			fielddisplay(self,'k2secular','secular fluid Love number');
+
+		end % }}}
+		function marshall(self,prefix,md,fid) % {{{
+			WriteData(fid,prefix,'name','md.solidearth.love.model','data',2,'format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','h','name','md.solidearth.love.h','format','Double','mattype',1);
+			WriteData(fid,prefix,'object',self,'fieldname','k','name','md.solidearth.love.k','format','Double','mattype',1);
+			WriteData(fid,prefix,'object',self,'fieldname','k2secular','name','md.solidearth.love.k2secular','format','DoubleMat','mattype',1);
+		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+			writejs1Darray(fid,[modelname '.tidallove.h'],self.h);
+			writejs1Darray(fid,[modelname '.tidallove.k'],self.k);
+			writejs1Darray(fid,[modelname '.tidallove.k2secular'],self.k2secular);
+		end % }}}
+		function self = extrude(self,md) % {{{
+		end % }}}
+	end
+end
