Index: /issm/trunk-jpl/m4/analyses.m4
===================================================================
--- /issm/trunk-jpl/m4/analyses.m4	(revision 26046)
+++ /issm/trunk-jpl/m4/analyses.m4	(revision 26047)
@@ -304,4 +304,18 @@
 AC_MSG_RESULT($HAVE_HYDROLOGYSHREVE)
 dnl }}}
+dnl with-HydrologyTws{{{
+AC_ARG_WITH([HydrologyTws],
+	AS_HELP_STRING([--with-HydrologyTws = YES], [compile with HydrologyTws capabilities (default is yes)]),
+	[HYDROLOGYTWS=$withval],[HYDROLOGYTWS=yes])
+AC_MSG_CHECKING(for HydrologyTws capability compilation)
+
+HAVE_HYDROLOGYTWS=no 
+if test "x$HYDROLOGYTWS" = "xyes"; then
+	HAVE_HYDROLOGYTWS=yes
+	AC_DEFINE([_HAVE_HYDROLOGYTWS_],[1],[with HydrologyTws capability])
+fi
+AM_CONDITIONAL([HYDROLOGYTWS], [test x$HAVE_HYDROLOGYTWS = xyes])
+AC_MSG_RESULT($HAVE_HYDROLOGYTWS)
+dnl }}}
 dnl with-HydrologyGlaDS{{{
 AC_ARG_WITH([HydrologyGlaDS],
@@ -416,4 +430,18 @@
 AC_MSG_RESULT($HAVE_MASSTRANSPORT)
 dnl }}}
+dnl with-Oceanmasstransport{{{
+AC_ARG_WITH([Oceanmasstransport],
+	AS_HELP_STRING([--with-Oceanmasstransport = YES], [compile with Oceanmasstransport capabilities (default is yes)]),
+	[OCEANMASSTRANSPORT=$withval],[OCEANMASSTRANSPORT=yes])
+AC_MSG_CHECKING(for Oceanmasstransport capability compilation)
+
+HAVE_OCEANMASSTRANSPORT=no 
+if test "x$OCEANMASSTRANSPORT" = "xyes"; then
+	HAVE_OCEANMASSTRANSPORT=yes
+	AC_DEFINE([_HAVE_OCEANMASSTRANSPORT_],[1],[with Oceanmasstransport capability])
+fi
+AM_CONDITIONAL([OCEANMASSTRANSPORT], [test x$HAVE_OCEANMASSTRANSPORT = xyes])
+AC_MSG_RESULT($HAVE_OCEANMASSTRANSPORT)
+dnl }}}
 dnl with-Melting{{{
 AC_ARG_WITH([Melting],
Index: /issm/trunk-jpl/src/c/Makefile.am
===================================================================
--- /issm/trunk-jpl/src/c/Makefile.am	(revision 26046)
+++ /issm/trunk-jpl/src/c/Makefile.am	(revision 26047)
@@ -194,4 +194,5 @@
 	./toolkits/mpi/commops/GetOwnershipBoundariesFromRange.cpp \
 	./toolkits/ToolkitOptions.cpp \
+	./modules/MmeToInputFromIdx/MmeToInputFromIdx.cpp\
 	./modules/ModelProcessorx/ModelProcessorx.cpp \
 	./modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp \
@@ -268,4 +269,5 @@
 	./cores/steadystate_core.cpp \
 	./cores/masstransport_core.cpp \
+	./cores/oceantransport_core.cpp \
 	./cores/depthaverage_core.cpp \
 	./cores/extrudefrombase_core.cpp \
@@ -450,4 +452,8 @@
 issm_sources += ./analyses/HydrologyShreveAnalysis.cpp
 endif
+if HYDROLOGYTWS
+issm_sources += ./analyses/HydrologyTwsAnalysis.cpp
+endif
+
 if HYDROLOGYSHAKTI
 issm_sources += ./analyses/HydrologyShaktiAnalysis.cpp
@@ -473,4 +479,7 @@
 if MASSTRANSPORT
 issm_sources += ./analyses/MasstransportAnalysis.cpp
+endif
+if OCEANMASSTRANSPORT
+issm_sources += ./analyses/OceantransportAnalysis.cpp
 endif
 if SMB
@@ -512,6 +521,4 @@
 if FORTRAN
 issm_sources += \
-	./cores/gia_core.cpp \
-	./analyses/GiaAnalysis.cpp \
 	./modules/GiaDeflectionCorex/GiaDeflectionCorex.cpp \
 	./modules/GiaDeflectionCorex/distme.f \
Index: /issm/trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.cpp	(revision 26047)
@@ -28,4 +28,7 @@
 /*Finite Element Analysis*/
 void           AdjointBalancethickness2Analysis::Core(FemModel* femmodel){/*{{{*/
+	_error_("not implemented");
+}/*}}}*/
+void           AdjointBalancethickness2Analysis::PreCore(FemModel* femmodel){/*{{{*/
 	_error_("not implemented");
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.h	(revision 26047)
@@ -22,4 +22,5 @@
 		/*Finite element Analysis*/
 		void           Core(FemModel* femmodel);
+		void           PreCore(FemModel* femmodel);
 		ElementVector* CreateDVector(Element* element);
 		ElementMatrix* CreateJacobianMatrix(Element* element);
Index: /issm/trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.cpp	(revision 26047)
@@ -28,4 +28,7 @@
 /*Finite Element Analysis*/
 void           AdjointBalancethicknessAnalysis::Core(FemModel* femmodel){/*{{{*/
+	_error_("not implemented");
+}/*}}}*/
+void           AdjointBalancethicknessAnalysis::PreCore(FemModel* femmodel){/*{{{*/
 	_error_("not implemented");
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.h	(revision 26047)
@@ -22,4 +22,5 @@
 		/*Finite element Analysis*/
 		void           Core(FemModel* femmodel);
+		void           PreCore(FemModel* femmodel);
 		ElementVector* CreateDVector(Element* element);
 		ElementMatrix* CreateJacobianMatrix(Element* element);
Index: /issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp	(revision 26047)
@@ -28,4 +28,7 @@
 /*Finite Element Analysis*/
 void AdjointHorizAnalysis::Core(FemModel* femmodel){/*{{{*/
+	_error_("not implemented");
+}/*}}}*/
+void AdjointHorizAnalysis::PreCore(FemModel* femmodel){/*{{{*/
 	_error_("not implemented");
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.h	(revision 26047)
@@ -22,4 +22,5 @@
 		/*Finite element Analysis*/
 		void           Core(FemModel* femmodel);
+		void           PreCore(FemModel* femmodel);
 		ElementVector* CreateDVector(Element* element);
 		ElementMatrix* CreateJacobianMatrix(Element* element);
Index: /issm/trunk-jpl/src/c/analyses/Analysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/Analysis.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/Analysis.h	(revision 26047)
@@ -39,9 +39,10 @@
 		virtual void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false)=0;
 		virtual int  DofsPerNode(int** doflist,int domaintype,int approximation)=0;
-		virtual void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type)=0;
+		virtual void UpdateElements(Elements* elements,Inputs* inputs, IoModel* iomodel,int analysis_counter,int analysis_type)=0;
 		virtual void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum)=0;
 
 		/*Finite element Analysis*/
 		virtual void           Core(FemModel* femmodel)=0;
+		virtual void           PreCore(FemModel* femmodel)=0;
 		virtual ElementVector* CreateDVector(Element* element)=0;
 		virtual ElementMatrix* CreateJacobianMatrix(Element* element)=0;
Index: /issm/trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp	(revision 26047)
@@ -32,5 +32,5 @@
 	iomodel->FetchDataToInput(inputs,elements,"md.geometry.surface",SurfaceEnum);
 	iomodel->FetchDataToInput(inputs,elements,"md.geometry.base",BaseEnum);
-	iomodel->FetchDataToInput(inputs,elements,"md.solidearth.initialsealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.sealevel",SealevelEnum,0);
 	iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
 	iomodel->FetchDataToInput(inputs,elements,"md.initialization.vx",VxEnum);
@@ -57,4 +57,7 @@
 /*Finite Element Analysis*/
 void           Balancethickness2Analysis::Core(FemModel* femmodel){/*{{{*/
+	_error_("not implemented yet");
+}/*}}}*/
+void           Balancethickness2Analysis::PreCore(FemModel* femmodel){/*{{{*/
 	_error_("not implemented yet");
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/Balancethickness2Analysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/Balancethickness2Analysis.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/Balancethickness2Analysis.h	(revision 26047)
@@ -22,4 +22,5 @@
 		/*Finite element Analysis*/
 		void           Core(FemModel* femmodel);
+		void           PreCore(FemModel* femmodel);
 		ElementVector* CreateDVector(Element* element);
 		ElementMatrix* CreateJacobianMatrix(Element* element);
Index: /issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.cpp	(revision 26047)
@@ -99,5 +99,5 @@
 	iomodel->FetchDataToInput(inputs,elements,"md.geometry.surface",SurfaceEnum);
 	iomodel->FetchDataToInput(inputs,elements,"md.geometry.base",BaseEnum);
-	iomodel->FetchDataToInput(inputs,elements,"md.solidearth.initialsealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.sealevel",SealevelEnum,0);
 	iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
 	iomodel->FetchDataToInput(inputs,elements,"md.initialization.vx",VxEnum);
@@ -118,4 +118,7 @@
 /*Finite Element Analysis*/
 void           BalancethicknessAnalysis::Core(FemModel* femmodel){/*{{{*/
+	_error_("not implemented");
+}/*}}}*/
+void           BalancethicknessAnalysis::PreCore(FemModel* femmodel){/*{{{*/
 	_error_("not implemented");
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.h	(revision 26047)
@@ -22,4 +22,5 @@
 		/*Finite element Analysis*/
 		void           Core(FemModel* femmodel);
+		void           PreCore(FemModel* femmodel);
 		ElementVector* CreateDVector(Element* element);
 		ElementMatrix* CreateJacobianMatrix(Element* element);
Index: /issm/trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.cpp	(revision 26047)
@@ -29,4 +29,7 @@
 	_error_("not implemented");
 }/*}}}*/
+void           BalancethicknessSoftAnalysis::PreCore(FemModel* femmodel){/*{{{*/
+	_error_("not implemented");
+}/*}}}*/
 ElementVector* BalancethicknessSoftAnalysis::CreateDVector(Element* element){/*{{{*/
 	/*Default, return NULL*/
Index: /issm/trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.h	(revision 26047)
@@ -22,4 +22,5 @@
 		/*Finite element Analysis*/
 		void           Core(FemModel* femmodel);
+		void           PreCore(FemModel* femmodel);
 		ElementVector* CreateDVector(Element* element);
 		ElementMatrix* CreateJacobianMatrix(Element* element);
Index: /issm/trunk-jpl/src/c/analyses/BalancevelocityAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/BalancevelocityAnalysis.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/BalancevelocityAnalysis.cpp	(revision 26047)
@@ -41,5 +41,5 @@
 	iomodel->FetchDataToInput(inputs,elements,"md.geometry.surface",SurfaceEnum);
 	iomodel->FetchDataToInput(inputs,elements,"md.geometry.base",BaseEnum);
-	iomodel->FetchDataToInput(inputs,elements,"md.solidearth.initialsealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.sealevel",SealevelEnum,0);
 	iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
 	iomodel->FetchDataToInput(inputs,elements,"md.initialization.vx",VxEnum);
@@ -59,4 +59,7 @@
 /*Finite Element Analysis*/
 void           BalancevelocityAnalysis::Core(FemModel* femmodel){/*{{{*/
+	_error_("not implemented");
+}/*}}}*/
+void           BalancevelocityAnalysis::PreCore(FemModel* femmodel){/*{{{*/
 	_error_("not implemented");
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/BalancevelocityAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/BalancevelocityAnalysis.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/BalancevelocityAnalysis.h	(revision 26047)
@@ -22,4 +22,5 @@
 		/*Finite element Analysis*/
 		void           Core(FemModel* femmodel);
+		void           PreCore(FemModel* femmodel);
 		ElementVector* CreateDVector(Element* element);
 		ElementMatrix* CreateJacobianMatrix(Element* element);
Index: /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp	(revision 26047)
@@ -121,4 +121,7 @@
 /*Finite Element Analysis*/
 void           DamageEvolutionAnalysis::Core(FemModel* femmodel){/*{{{*/
+	_error_("not implemented");
+}/*}}}*/
+void           DamageEvolutionAnalysis::PreCore(FemModel* femmodel){/*{{{*/
 	_error_("not implemented");
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.h	(revision 26047)
@@ -22,4 +22,5 @@
 		/*Finite element Analysis*/
 		void           Core(FemModel* femmodel);
+		void           PreCore(FemModel* femmodel);
 		void           CreateDamageFInput(Element* element);
 		void           CreateDamageFInputArctan(Element* element);
Index: /issm/trunk-jpl/src/c/analyses/DepthAverageAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/DepthAverageAnalysis.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/DepthAverageAnalysis.cpp	(revision 26047)
@@ -38,4 +38,7 @@
 /*Finite Element Analysis*/
 void           DepthAverageAnalysis::Core(FemModel* femmodel){/*{{{*/
+	_error_("not implemented");
+}/*}}}*/
+void           DepthAverageAnalysis::PreCore(FemModel* femmodel){/*{{{*/
 	_error_("not implemented");
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/DepthAverageAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/DepthAverageAnalysis.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/DepthAverageAnalysis.h	(revision 26047)
@@ -22,4 +22,5 @@
 		/*Finite element Analysis*/
 		void           Core(FemModel* femmodel);
+		void           PreCore(FemModel* femmodel);
 		ElementVector* CreateDVector(Element* element);
 		ElementMatrix* CreateJacobianMatrix(Element* element);
Index: /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 26047)
@@ -136,5 +136,5 @@
 	iomodel->FetchDataToInput(inputs,elements,"md.geometry.thickness",ThicknessEnum);
 	iomodel->FetchDataToInput(inputs,elements,"md.geometry.surface",SurfaceEnum);
-	iomodel->FetchDataToInput(inputs,elements,"md.solidearth.initialsealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.sealevel",SealevelEnum,0);
 	iomodel->FetchDataToInput(inputs,elements,"md.geometry.base",BaseEnum);
 	iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
@@ -548,4 +548,7 @@
 
 }/*}}}*/
+void           EnthalpyAnalysis::PreCore(FemModel* femmodel){/*{{{*/
+	_error_("not implemented");
+}/*}}}*/
 ElementVector* EnthalpyAnalysis::CreateDVector(Element* element){/*{{{*/
 	/*Default, return NULL*/
Index: /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.h	(revision 26047)
@@ -26,4 +26,5 @@
 		static void       ComputeBasalMeltingrate(Element* element);
 		void              Core(FemModel* femmodel);
+		void              PreCore(FemModel* femmodel);
 		ElementVector*    CreateDVector(Element* element);
 		ElementMatrix*    CreateJacobianMatrix(Element* element);
Index: /issm/trunk-jpl/src/c/analyses/EnumToAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/EnumToAnalysis.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/EnumToAnalysis.cpp	(revision 26047)
@@ -64,7 +64,4 @@
 		#ifdef _HAVE_GLHEIGHTADVECTION_
 		case GLheightadvectionAnalysisEnum : return new GLheightadvectionAnalysis();
-		#endif
-		#ifdef _HAVE_GIA_
-		case GiaAnalysisEnum : return new GiaAnalysis();
 		#endif
 		#ifdef _HAVE_HYDROLOGYDCEFFICIENT_
Index: /issm/trunk-jpl/src/c/analyses/EnumToAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/EnumToAnalysis.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/EnumToAnalysis.h	(revision 26047)
@@ -17,4 +17,5 @@
 		/*Finite element Analysis*/
 		void           Core(FemModel* femmodel);
+		void           PreCore(FemModel* femmodel);
 		ElementVector* CreateDVector(Element* element);
 		ElementMatrix* CreateJacobianMatrix(Element* element);
Index: /issm/trunk-jpl/src/c/analyses/EsaAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/EsaAnalysis.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/EsaAnalysis.cpp	(revision 26047)
@@ -32,5 +32,5 @@
 	/*Create inputs: */
 	iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
-	iomodel->FetchDataToInput(inputs,elements,"md.esa.deltathickness",EsaDeltathicknessEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.esa.deltathickness",DeltaIceThicknessEnum);
 
 }/*}}}*/
@@ -189,4 +189,7 @@
 	_error_("not implemented");
 }/*}}}*/
+void           EsaAnalysis::PreCore(FemModel* femmodel){/*{{{*/
+	_error_("not implemented");
+}/*}}}*/
 ElementVector* EsaAnalysis::CreateDVector(Element* element){/*{{{*/
 	/*Default, return NULL*/
Index: /issm/trunk-jpl/src/c/analyses/EsaAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/EsaAnalysis.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/EsaAnalysis.h	(revision 26047)
@@ -22,4 +22,5 @@
 		/*Finite element Analysis*/
 		void           Core(FemModel* femmodel);
+		void           PreCore(FemModel* femmodel);
 		ElementVector* CreateDVector(Element* element);
 		ElementMatrix* CreateJacobianMatrix(Element* element);
Index: /issm/trunk-jpl/src/c/analyses/ExtrapolationAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ExtrapolationAnalysis.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/ExtrapolationAnalysis.cpp	(revision 26047)
@@ -71,4 +71,7 @@
 		femmodel->RequestedOutputsx(&femmodel->results,&extvar_enum,1);
 	}
+}/*}}}*/
+void           ExtrapolationAnalysis::PreCore(FemModel* femmodel){/*{{{*/
+	_error_("not implemented");
 }/*}}}*/
 ElementVector* ExtrapolationAnalysis::CreateDVector(Element* element){/*{{{*/
Index: /issm/trunk-jpl/src/c/analyses/ExtrapolationAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ExtrapolationAnalysis.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/ExtrapolationAnalysis.h	(revision 26047)
@@ -22,4 +22,5 @@
 	/*Finite element Analysis*/
 	void           Core(FemModel* femmodel);
+	void           PreCore(FemModel* femmodel);
 	ElementVector* CreateDVector(Element* element);
 	ElementMatrix* CreateJacobianMatrix(Element* element);
Index: /issm/trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.cpp	(revision 26047)
@@ -38,4 +38,7 @@
 /*Finite Element Analysis*/
 void           ExtrudeFromBaseAnalysis::Core(FemModel* femmodel){/*{{{*/
+	_error_("not implemented");
+}/*}}}*/
+void           ExtrudeFromBaseAnalysis::PreCore(FemModel* femmodel){/*{{{*/
 	_error_("not implemented");
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.h	(revision 26047)
@@ -22,4 +22,5 @@
 		/*Finite element Analysis*/
 		void           Core(FemModel* femmodel);
+		void           PreCore(FemModel* femmodel);
 		ElementVector* CreateDVector(Element* element);
 		ElementMatrix* CreateJacobianMatrix(Element* element);
Index: /issm/trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.cpp	(revision 26047)
@@ -38,4 +38,7 @@
 /*Finite Element Analysis*/
 void           ExtrudeFromTopAnalysis::Core(FemModel* femmodel){/*{{{*/
+	_error_("not implemented");
+}/*}}}*/
+void           ExtrudeFromTopAnalysis::PreCore(FemModel* femmodel){/*{{{*/
 	_error_("not implemented");
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.h	(revision 26047)
@@ -22,4 +22,5 @@
 		/*Finite element Analysis*/
 		void           Core(FemModel* femmodel);
+		void           PreCore(FemModel* femmodel);
 		ElementVector* CreateDVector(Element* element);
 		ElementMatrix* CreateJacobianMatrix(Element* element);
Index: /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp	(revision 26047)
@@ -74,5 +74,5 @@
 
 	iomodel->FetchDataToInput(inputs,elements,"md.geometry.surface",SurfaceEnum);
-	iomodel->FetchDataToInput(inputs,elements,"md.solidearth.initialsealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.sealevel",SealevelEnum,0);
 	iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
 	iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum,0.);
@@ -127,4 +127,7 @@
 /*Finite Element Analysis*/
 void           FreeSurfaceBaseAnalysis::Core(FemModel* femmodel){/*{{{*/
+	_error_("not implemented");
+}/*}}}*/
+void           FreeSurfaceBaseAnalysis::PreCore(FemModel* femmodel){/*{{{*/
 	_error_("not implemented");
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.h	(revision 26047)
@@ -22,4 +22,5 @@
 		/*Finite element Analysis*/
 		void           Core(FemModel* femmodel);
+		void           PreCore(FemModel* femmodel);
 		ElementVector* CreateDVector(Element* element);
 		ElementMatrix* CreateJacobianMatrix(Element* element);
Index: /issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.cpp	(revision 26047)
@@ -77,5 +77,5 @@
 
 	iomodel->FetchDataToInput(inputs,elements,"md.geometry.surface",SurfaceEnum);
-	iomodel->FetchDataToInput(inputs,elements,"md.solidearth.initialsealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.sealevel",SealevelEnum,0);
 	iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
 	iomodel->FetchDataToInput(inputs,elements,"md.initialization.vx",VxEnum);
@@ -101,4 +101,7 @@
 /*Finite Element Analysis*/
 void           FreeSurfaceTopAnalysis::Core(FemModel* femmodel){/*{{{*/
+	_error_("not implemented");
+}/*}}}*/
+void           FreeSurfaceTopAnalysis::PreCore(FemModel* femmodel){/*{{{*/
 	_error_("not implemented");
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.h	(revision 26047)
@@ -22,4 +22,5 @@
 		/*Finite element Analysis*/
 		void           Core(FemModel* femmodel);
+		void           PreCore(FemModel* femmodel);
 		ElementVector* CreateDVector(Element* element);
 		ElementMatrix* CreateJacobianMatrix(Element* element);
Index: /issm/trunk-jpl/src/c/analyses/GLheightadvectionAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/GLheightadvectionAnalysis.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/GLheightadvectionAnalysis.cpp	(revision 26047)
@@ -47,4 +47,7 @@
 /*Finite Element Analysis*/
 void           GLheightadvectionAnalysis::Core(FemModel* femmodel){/*{{{*/
+	_error_("not implemented");
+}/*}}}*/
+void           GLheightadvectionAnalysis::PreCore(FemModel* femmodel){/*{{{*/
 	_error_("not implemented");
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/GLheightadvectionAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/GLheightadvectionAnalysis.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/GLheightadvectionAnalysis.h	(revision 26047)
@@ -22,4 +22,5 @@
 		/*Finite element Analysis*/
 		void           Core(FemModel* femmodel);
+		void           PreCore(FemModel* femmodel);
 		ElementVector* CreateDVector(Element* element);
 		ElementMatrix* CreateJacobianMatrix(Element* element);
Index: sm/trunk-jpl/src/c/analyses/GiaAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/GiaAnalysis.cpp	(revision 26046)
+++ 	(revision )
@@ -1,117 +1,0 @@
-#include "./GiaAnalysis.h"
-#include "../toolkits/toolkits.h"
-#include "../classes/classes.h"
-#include "../shared/shared.h"
-#include "../modules/modules.h"
-
-/*Model processing*/
-void GiaAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/
-	/*No constraints*/
-}/*}}}*/
-void GiaAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
-	/*No loads*/
-}/*}}}*/
-void GiaAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr){/*{{{*/
-	::CreateNodes(nodes,iomodel,GiaAnalysisEnum,P1Enum);
-}/*}}}*/
-int  GiaAnalysis::DofsPerNode(int** doflist,int domaintype,int approximation){/*{{{*/
-	return 1;
-}/*}}}*/
-void GiaAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
-
-	int giamodel=0;
-	int nummodels=0;
-
-	/*Update elements: */
-	int counter=0;
-	for(int i=0;i<iomodel->numberofelements;i++){
-		if(iomodel->my_elements[i]){
-			Element* element=(Element*)elements->GetObjectByOffset(counter);
-			element->Update(inputs,i,iomodel,analysis_counter,analysis_type,P1Enum);
-			counter++;
-		}
-	}
-
-	/*fetch gia model type: */
-	iomodel->FetchData(&giamodel,"md.gia.model");
-	if(giamodel==1){ //GiaIvins
-		iomodel->FetchDataToInput(inputs,elements,"md.geometry.thickness",ThicknessEnum);
-		iomodel->FetchDataToInput(inputs,elements,"md.gia.mantle_viscosity",GiaMantleViscosityEnum);
-		iomodel->FetchDataToInput(inputs,elements,"md.gia.lithosphere_thickness",GiaLithosphereThicknessEnum);
-		iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
-	}
-	else if(giamodel==2){ //GiaCaron: not implemneted yet
-	}
-	else if(giamodel==3){
-		/*take Ngia and Ugia from the offline models and plug into the element inputs:*/
-		iomodel->FetchDataToDatasetInput(inputs,elements,"md.gia.Ngia",GiaMmeNgiaEnum);
-		iomodel->FetchDataToDatasetInput(inputs,elements,"md.gia.Ugia",GiaMmeUgiaEnum);
-	}
-}/*}}}*/
-void GiaAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
-
-	int                 giamodel;
-	IssmDouble          modelid; 
-	int                 nummodels;
-
-	/*find gia model type: */
-	parameters->AddObject(iomodel->CopyConstantObject("md.gia.model",GiaModelEnum));
-	parameters->FindParam(&giamodel,GiaModelEnum);
-
-	if(giamodel==1){ //GiaIvins
-		parameters->AddObject(iomodel->CopyConstantObject("md.gia.cross_section_shape",GiaCrossSectionShapeEnum));
-		parameters->AddObject(iomodel->CopyConstantObject("md.materials.lithosphere_shear_modulus",MaterialsLithosphereShearModulusEnum));
-		parameters->AddObject(iomodel->CopyConstantObject("md.materials.lithosphere_density",MaterialsLithosphereDensityEnum));
-		parameters->AddObject(iomodel->CopyConstantObject("md.materials.mantle_shear_modulus",MaterialsMantleShearModulusEnum));
-		parameters->AddObject(iomodel->CopyConstantObject("md.materials.mantle_density",MaterialsMantleDensityEnum));
-	}
-	else if(giamodel==2){ //GiaCaron
-	}
-	else if(giamodel==3){ //GiaMme
-		
-		parameters->AddObject(iomodel->CopyConstantObject("md.gia.nummodels",GiaNummodelsEnum));
-		parameters->FindParam(&nummodels,GiaNummodelsEnum);
-
-		/*create double param, not int param, because Dakota will be updating it as 
-		 * a double potentially: */
-		iomodel->FetchData(&modelid,"md.gia.modelid");
-		parameters->AddObject(new DoubleParam(GiaModelidEnum,modelid));
-
-		/*quick checks: */
-		if(nummodels<=0)_error_("giamme object in  md.gia field should contain at least 1 ensemble model!");
-		if(modelid<=0 || modelid>nummodels)_error_("modelid field in giamme object of md.gia field should be between 1 and the number of ensemble runs!");
-	} 
-
-
-}/*}}}*/
-
-/*Finite Element Analysis*/
-void           GiaAnalysis::Core(FemModel* femmodel){/*{{{*/
-	_error_("not implemented");
-}/*}}}*/
-ElementVector* GiaAnalysis::CreateDVector(Element* element){/*{{{*/
-	/*Default, return NULL*/
-	return NULL;
-}/*}}}*/
-ElementMatrix* GiaAnalysis::CreateJacobianMatrix(Element* element){/*{{{*/
-_error_("Not implemented");
-}/*}}}*/
-ElementMatrix* GiaAnalysis::CreateKMatrix(Element* element){/*{{{*/
-	_error_("not implemented yet");
-}/*}}}*/
-ElementVector* GiaAnalysis::CreatePVector(Element* element){/*{{{*/
-_error_("not implemented yet");
-}/*}}}*/
-void           GiaAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
-	   _error_("not implemented yet");
-}/*}}}*/
-void           GiaAnalysis::GradientJ(Vector<IssmDouble>* gradient,Element*  element,int control_type,int control_interp,int control_index){/*{{{*/
-	_error_("Not implemented yet");
-}/*}}}*/
-void           GiaAnalysis::InputUpdateFromSolution(IssmDouble* solution,Element* element){/*{{{*/
-	_error_("not implemented yet");
-}/*}}}*/
-void           GiaAnalysis::UpdateConstraints(FemModel* femmodel){/*{{{*/
-	/*Default, do nothing*/
-	return;
-}/*}}}*/
Index: sm/trunk-jpl/src/c/analyses/GiaAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/GiaAnalysis.h	(revision 26046)
+++ 	(revision )
@@ -1,33 +1,0 @@
-/*! \file GiaAnalysis.h 
- *  \brief: header file for generic external result object
- */
-
-#ifndef _GiaAnalysis_
-#define _GiaAnalysis_
-
-/*Headers*/
-#include "./Analysis.h"
-
-class GiaAnalysis: public Analysis{
-
-	public:
-		/*Model processing*/
-		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
-		void CreateLoads(Loads* loads, IoModel* iomodel);
-		void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
-		int  DofsPerNode(int** doflist,int domaintype,int approximation);
-		void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
-		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
-
-		/*Finite element Analysis*/
-		void           Core(FemModel* femmodel);
-		ElementVector* CreateDVector(Element* element);
-		ElementMatrix* CreateJacobianMatrix(Element* element);
-		ElementMatrix* CreateKMatrix(Element* element);
-		ElementVector* CreatePVector(Element* element);
-		void           GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element);
-		void           GradientJ(Vector<IssmDouble>* gradient,Element*  element,int control_type,int control_interp,int control_index);
-		void           InputUpdateFromSolution(IssmDouble* solution,Element* element);
-		void           UpdateConstraints(FemModel* femmodel);
-};
-#endif
Index: /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp	(revision 26047)
@@ -154,4 +154,7 @@
 /*Finite Element Analysis*/
 void HydrologyDCEfficientAnalysis::Core(FemModel* femmodel){/*{{{*/
+	_error_("not implemented");
+}/*}}}*/
+void HydrologyDCEfficientAnalysis::PreCore(FemModel* femmodel){/*{{{*/
 	_error_("not implemented");
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.h	(revision 26047)
@@ -25,4 +25,5 @@
 		/*Finite element Analysis*/
 		void           Core(FemModel* femmodel);
+		void           PreCore(FemModel* femmodel);
 		ElementVector* CreateDVector(Element* element);
 		ElementMatrix* CreateJacobianMatrix(Element* element);
Index: /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp	(revision 26047)
@@ -178,4 +178,7 @@
 	_error_("not implemented");
 }/*}}}*/
+void           HydrologyDCInefficientAnalysis::PreCore(FemModel* femmodel){/*{{{*/
+	_error_("not implemented");
+}/*}}}*/
 ElementVector* HydrologyDCInefficientAnalysis::CreateDVector(Element* element){/*{{{*/
 	/*Default, return NULL*/
Index: /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.h	(revision 26047)
@@ -23,4 +23,5 @@
 		/*Finite element Analysis*/
 		void           Core(FemModel* femmodel);
+		void           PreCore(FemModel* femmodel);
 		ElementVector* CreateDVector(Element* element);
 		ElementMatrix* CreateJacobianMatrix(Element* element);
Index: /issm/trunk-jpl/src/c/analyses/HydrologyGlaDSAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyGlaDSAnalysis.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyGlaDSAnalysis.cpp	(revision 26047)
@@ -129,5 +129,5 @@
 	iomodel->FetchDataToInput(inputs,elements,"md.geometry.base",BaseEnum);
 	iomodel->FetchDataToInput(inputs,elements,"md.geometry.bed",BedEnum);
-	iomodel->FetchDataToInput(inputs,elements,"md.solidearth.initialsealevel",SealevelEnum,0); /*Needed for friction*/
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.sealevel",SealevelEnum,0);
 	iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.geothermalflux",BasalforcingsGeothermalfluxEnum);
 	iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
@@ -213,4 +213,7 @@
 /*Finite Element Analysis*/
 void           HydrologyGlaDSAnalysis::Core(FemModel* femmodel){/*{{{*/
+	_error_("not implemented");
+}/*}}}*/
+void           HydrologyGlaDSAnalysis::PreCore(FemModel* femmodel){/*{{{*/
 	_error_("not implemented");
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/HydrologyGlaDSAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyGlaDSAnalysis.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyGlaDSAnalysis.h	(revision 26047)
@@ -22,4 +22,5 @@
 		/*Finite element Analysis*/
 		void           Core(FemModel* femmodel);
+		void           PreCore(FemModel* femmodel);
 		ElementVector* CreateDVector(Element* element);
 		ElementMatrix* CreateJacobianMatrix(Element* element);
Index: /issm/trunk-jpl/src/c/analyses/HydrologyPismAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyPismAnalysis.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyPismAnalysis.cpp	(revision 26047)
@@ -62,4 +62,7 @@
 /*Finite Element Analysis*/
 void           HydrologyPismAnalysis::Core(FemModel* femmodel){/*{{{*/
+	_error_("not implemented");
+}/*}}}*/
+void           HydrologyPismAnalysis::PreCore(FemModel* femmodel){/*{{{*/
 	_error_("not implemented");
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/HydrologyPismAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyPismAnalysis.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyPismAnalysis.h	(revision 26047)
@@ -22,4 +22,5 @@
 		/*Finite element Analysis*/
 		void           Core(FemModel* femmodel);
+		void           PreCore(FemModel* femmodel);
 		ElementVector* CreateDVector(Element* element);
 		ElementMatrix* CreateJacobianMatrix(Element* element);
Index: /issm/trunk-jpl/src/c/analyses/HydrologyShaktiAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyShaktiAnalysis.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyShaktiAnalysis.cpp	(revision 26047)
@@ -160,4 +160,7 @@
 /*Finite Element Analysis*/
 void           HydrologyShaktiAnalysis::Core(FemModel* femmodel){/*{{{*/
+	_error_("not implemented");
+}/*}}}*/
+void           HydrologyShaktiAnalysis::PreCore(FemModel* femmodel){/*{{{*/
 	_error_("not implemented");
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/HydrologyShaktiAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyShaktiAnalysis.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyShaktiAnalysis.h	(revision 26047)
@@ -22,4 +22,5 @@
 		/*Finite element Analysis*/
 		void           Core(FemModel* femmodel);
+		void           PreCore(FemModel* femmodel);
 		ElementVector* CreateDVector(Element* element);
 		ElementMatrix* CreateJacobianMatrix(Element* element);
Index: /issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.cpp	(revision 26047)
@@ -58,5 +58,5 @@
 	iomodel->FetchDataToInput(inputs,elements,"md.geometry.surface",SurfaceEnum);
 	iomodel->FetchDataToInput(inputs,elements,"md.geometry.base",BaseEnum);
-	iomodel->FetchDataToInput(inputs,elements,"md.solidearth.initialsealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.sealevel",SealevelEnum,0);
 	if(iomodel->domaintype!=Domain2DhorizontalEnum){
 		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
@@ -93,4 +93,7 @@
 /*Finite Element Analysis*/
 void           HydrologyShreveAnalysis::Core(FemModel* femmodel){/*{{{*/
+	_error_("not implemented");
+}/*}}}*/
+void           HydrologyShreveAnalysis::PreCore(FemModel* femmodel){/*{{{*/
 	_error_("not implemented");
 }/*}}}*/
@@ -292,19 +295,33 @@
 	/*Fetch dof list and allocate solution vector*/
 	element->GetDofListLocal(&doflist,NoneApproximationEnum,GsetEnum);
-	IssmDouble* values = xNew<IssmDouble>(numnodes);
+	IssmDouble* watercolumn = xNew<IssmDouble>(numnodes);
 
 	/*Use the dof list to index into the solution vector: */
 	for(int i=0;i<numnodes;i++){
-		values[i]=solution[doflist[i]];
-		if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in solution vector");
-		if(xIsInf<IssmDouble>(values[i])) _error_("Inf found in solution vector");
-		if (values[i]<10e-10) values[i]=10e-10; //correcting the water column to positive values
+		watercolumn[i]=solution[doflist[i]];
+		if(xIsNan<IssmDouble>(watercolumn[i])) _error_("NaN found in solution vector");
+		if(xIsInf<IssmDouble>(watercolumn[i])) _error_("Inf found in solution vector");
+		if (watercolumn[i]<10e-10) watercolumn[i]=10e-10; //correcting the water column to positive watercolumn
 	}
 
 	/*Add input to the element: */
-	element->AddInput(WatercolumnEnum,values,element->GetElementType());
+	element->AddInput(WatercolumnEnum,watercolumn,element->GetElementType());
+	
+	/*Also update the hydrological loads for the sealevel core: */
+	IssmDouble* oldwatercolumn      = xNew<IssmDouble>(numnodes);
+	IssmDouble* deltawatercolumn = xNew<IssmDouble>(numnodes);
+
+	element->GetInputListOnVertices(&watercolumn[0],WatercolumnEnum);
+	element->GetInputListOnVertices(&oldwatercolumn[0],WaterColumnOldEnum);
+	element->GetInputListOnVertices(&deltawatercolumn[0],AccumulatedDeltaTwsEnum);
+	for(int i=0;i<numnodes;i++){
+		deltawatercolumn[i] += watercolumn[i]-oldwatercolumn[i];
+	}
+	element->AddInput(AccumulatedDeltaTwsEnum,deltawatercolumn,P1Enum);
 
 	/*Free ressources:*/
-	xDelete<IssmDouble>(values);
+	xDelete<IssmDouble>(oldwatercolumn);
+	xDelete<IssmDouble>(deltawatercolumn);
+	xDelete<IssmDouble>(watercolumn);
 	xDelete<int>(doflist);
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.h	(revision 26047)
@@ -22,4 +22,5 @@
 		/*Finite element Analysis*/
 		void           Core(FemModel* femmodel);
+		void           PreCore(FemModel* femmodel);
 		ElementVector* CreateDVector(Element* element);
 		void           CreateHydrologyWaterVelocityInput(Element* element);
Index: /issm/trunk-jpl/src/c/analyses/HydrologyTwsAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyTwsAnalysis.cpp	(revision 26047)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyTwsAnalysis.cpp	(revision 26047)
@@ -0,0 +1,158 @@
+#include "./HydrologyTwsAnalysis.h"
+#include <math.h>
+#include "../toolkits/toolkits.h"
+#include "../classes/classes.h"
+#include "../classes/Inputs/TransientInput.h"
+#include "../shared/shared.h"
+#include "../modules/modules.h"
+
+/*Model processing*/
+void HydrologyTwsAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/
+	/*No constraints*/
+}/*}}}*/
+void HydrologyTwsAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
+	/*No loads*/
+}/*}}}*/
+void HydrologyTwsAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr){/*{{{*/
+	::CreateNodes(nodes,iomodel,HydrologyTwsAnalysisEnum,P1Enum);
+}/*}}}*/
+int  HydrologyTwsAnalysis::DofsPerNode(int** doflist,int domaintype,int approximation){/*{{{*/
+	return 1;
+}/*}}}*/
+void HydrologyTwsAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+
+	int nature=0;
+
+	/*Update elements: */
+	int counter=0;
+	for(int i=0;i<iomodel->numberofelements;i++){
+		if(iomodel->my_elements[i]){
+			Element* element=(Element*)elements->GetObjectByOffset(counter);
+			element->Update(inputs,i,iomodel,analysis_counter,analysis_type,P1Enum);
+			counter++;
+		}
+	}
+
+	/*Plug inputs into element:*/
+	iomodel->FetchDataToInput(inputs,elements,"md.hydrology.spcwatercolum", HydrologyTwsSpcEnum);
+
+	/*Initialize sea level cumulated sea level loads :*/
+	InputUpdateFromConstantx(inputs,elements,0.,AccumulatedDeltaTwsEnum);
+	InputUpdateFromConstantx(inputs,elements,0.,OldAccumulatedDeltaTwsEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.watercolumn",WatercolumnEnum);
+
+
+}/*}}}*/
+void HydrologyTwsAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
+
+}/*}}}*/
+
+/*Finite Element Analysis*/
+void           HydrologyTwsAnalysis::Core(FemModel* femmodel){/*{{{*/
+	_error_("not implemented");
+}/*}}}*/
+void           HydrologyTwsAnalysis::PreCore(FemModel* femmodel){/*{{{*/
+	_error_("not implemented");
+}/*}}}*/
+ElementVector* HydrologyTwsAnalysis::CreateDVector(Element* element){/*{{{*/
+	/*Default, return NULL*/
+	return NULL;
+}/*}}}*/
+ElementMatrix* HydrologyTwsAnalysis::CreateJacobianMatrix(Element* element){/*{{{*/
+_error_("Not implemented");
+}/*}}}*/
+ElementMatrix* HydrologyTwsAnalysis::CreateKMatrix(Element* element){/*{{{*/
+	_error_("not implemented yet");
+}/*}}}*/
+ElementVector* HydrologyTwsAnalysis::CreatePVector(Element* element){/*{{{*/
+_error_("not implemented yet");
+}/*}}}*/
+void           HydrologyTwsAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
+	   _error_("not implemented yet");
+}/*}}}*/
+void           HydrologyTwsAnalysis::GradientJ(Vector<IssmDouble>* gradient,Element*  element,int control_type,int control_interp,int control_index){/*{{{*/
+	_error_("Not implemented yet");
+}/*}}}*/
+void           HydrologyTwsAnalysis::InputUpdateFromSolution(IssmDouble* solution,Element* element){/*{{{*/
+
+	/*Only update if on base*/
+	if(!element->IsOnBase()) return;
+
+	/*deal with logic of accumulating thickness if we are coupled to a 
+	 * sea level core:*/
+	int frequency,count,isgrd;
+	element->FindParam(&isgrd,SolidearthSettingsGRDEnum);
+	if(isgrd){
+		element->FindParam(&frequency,SolidearthSettingsRunFrequencyEnum);
+		element->FindParam(&count,SealevelchangeRunCountEnum);
+	}	
+	/*Fetch dof list and allocate solution vector*/
+	int *doflist = NULL;
+	element->GetDofListLocal(&doflist,NoneApproximationEnum,GsetEnum);
+
+	int numnodes = element->GetNumberOfNodes();
+	IssmDouble* watercolumn = xNew<IssmDouble>(numnodes);
+	
+	/*Use the dof list to index into the solution vector: */
+	for(int i=0;i<numnodes;i++){
+		watercolumn[i]=solution[doflist[i]];
+		/*Check solution*/
+		if(xIsNan<IssmDouble>(watercolumn[i])) _error_("NaN found in solution vector");
+		if(xIsInf<IssmDouble>(watercolumn[i])) _error_("Inf found in solution vector");
+	}
+	element->AddBasalInput(WatercolumnEnum,watercolumn,element->GetElementType());
+
+	xDelete<int>(doflist);
+	xDelete<IssmDouble>(watercolumn);
+
+	/*Get basal element*/
+	int domaintype; element->FindParam(&domaintype,DomainTypeEnum);
+	Element* basalelement=element;
+	if(domaintype!=Domain2DhorizontalEnum) basalelement = element->SpawnBasalElement();
+
+	/*Fetch number of nodes and dof for this finite element*/
+	int numvertices = basalelement->GetNumberOfVertices();
+
+	/*Now, we need to do some "processing"*/
+	watercolumn  = xNew<IssmDouble>(numvertices);
+	IssmDouble* oldwatercolumn      = xNew<IssmDouble>(numvertices);
+	IssmDouble* cumdeltawatercolumn = xNew<IssmDouble>(numvertices);
+	IssmDouble* oldcumdeltawatercolumn = xNew<IssmDouble>(numvertices);
+	IssmDouble* deltawatercolumn = xNew<IssmDouble>(numvertices);
+
+	/*Get previous base, tws, surfac and current sealevel and bed:*/
+	basalelement->GetInputListOnVertices(&watercolumn[0],WatercolumnEnum);
+	basalelement->GetInputListOnVertices(&oldwatercolumn[0],WaterColumnOldEnum);
+	basalelement->GetInputListOnVertices(&cumdeltawatercolumn[0],AccumulatedDeltaTwsEnum);
+
+	/*What is the delta tws forcing the sea-level change core: cumulated over time, hence the +=:*/
+	if(isgrd){
+		for(int i=0;i<numvertices;i++){
+			cumdeltawatercolumn[i] += watercolumn[i]-oldwatercolumn[i];
+		}
+	}
+
+	/*Add input to the element: */
+	if(isgrd){
+		element->AddBasalInput(AccumulatedDeltaTwsEnum,cumdeltawatercolumn,P1Enum);
+		if(count==frequency){
+			basalelement->GetInputListOnVertices(&oldcumdeltawatercolumn[0],OldAccumulatedDeltaTwsEnum);
+			element->AddBasalInput(OldAccumulatedDeltaTwsEnum,cumdeltawatercolumn,P1Enum);
+			for(int i=0;i<numvertices;i++)deltawatercolumn[i]=cumdeltawatercolumn[i]-oldcumdeltawatercolumn[i];
+			element->AddBasalInput(DeltaTwsEnum,deltawatercolumn,P1Enum);
+		}
+	}
+
+	/*Free ressources:*/
+	xDelete<IssmDouble>(watercolumn);
+	xDelete<IssmDouble>(deltawatercolumn);
+	xDelete<IssmDouble>(cumdeltawatercolumn);
+	xDelete<IssmDouble>(oldcumdeltawatercolumn);
+	xDelete<IssmDouble>(oldwatercolumn);
+	xDelete<int>(doflist);
+	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+}/*}}}*/
+void           HydrologyTwsAnalysis::UpdateConstraints(FemModel* femmodel){/*{{{*/
+	/*Default, do nothing*/
+	return;
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/HydrologyTwsAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyTwsAnalysis.h	(revision 26047)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyTwsAnalysis.h	(revision 26047)
@@ -0,0 +1,34 @@
+/*! \file HydrologyTwsAnalysis.h 
+ *  \brief: header file for generic external result object
+ */
+
+#ifndef _HydrologyTwsAnalysis_
+#define _HydrologyTwsAnalysis_
+
+/*Headers*/
+#include "./Analysis.h"
+
+class HydrologyTwsAnalysis: public Analysis{
+
+	public:
+		/*Model processing*/
+		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
+		void CreateLoads(Loads* loads, IoModel* iomodel);
+		void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
+		int  DofsPerNode(int** doflist,int domaintype,int approximation);
+		void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
+		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
+
+		/*Finite element Analysis*/
+		void           Core(FemModel* femmodel);
+		void           PreCore(FemModel* femmodel);
+		ElementVector* CreateDVector(Element* element);
+		ElementMatrix* CreateJacobianMatrix(Element* element);
+		ElementMatrix* CreateKMatrix(Element* element);
+		ElementVector* CreatePVector(Element* element);
+		void           GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element);
+		void           GradientJ(Vector<IssmDouble>* gradient,Element*  element,int control_type,int control_interp,int control_index);
+		void           InputUpdateFromSolution(IssmDouble* solution,Element* element);
+		void           UpdateConstraints(FemModel* femmodel);
+};
+#endif
Index: /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp	(revision 26047)
@@ -41,6 +41,6 @@
 
 	iomodel->FetchDataToInput(inputs,elements,"md.geometry.surface",SurfaceEnum);
-   iomodel->FetchDataToInput(inputs,elements,"md.geometry.base",BaseEnum);
-	iomodel->FetchDataToInput(inputs,elements,"md.solidearth.initialsealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.base",BaseEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.sealevel",SealevelEnum,0);
 	iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
 	if(iomodel->domaintype!=Domain2DhorizontalEnum & iomodel->domaintype!=Domain3DsurfaceEnum){
@@ -54,4 +54,7 @@
 /*Finite Element Analysis*/
 void           L2ProjectionBaseAnalysis::Core(FemModel* femmodel){/*{{{*/
+	_error_("not implemented");
+}/*}}}*/
+void           L2ProjectionBaseAnalysis::PreCore(FemModel* femmodel){/*{{{*/
 	_error_("not implemented");
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.h	(revision 26047)
@@ -22,4 +22,5 @@
 		/*Finite element Analysis*/
 		void           Core(FemModel* femmodel);
+		void           PreCore(FemModel* femmodel);
 		ElementVector* CreateDVector(Element* element);
 		ElementMatrix* CreateJacobianMatrix(Element* element);
Index: /issm/trunk-jpl/src/c/analyses/L2ProjectionEPLAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/L2ProjectionEPLAnalysis.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/L2ProjectionEPLAnalysis.cpp	(revision 26047)
@@ -74,4 +74,7 @@
 	_error_("not implemented");
 }/*}}}*/
+void           L2ProjectionEPLAnalysis::PreCore(FemModel* femmodel){/*{{{*/
+	_error_("not implemented");
+}/*}}}*/
 ElementVector* L2ProjectionEPLAnalysis::CreateDVector(Element* element){/*{{{*/
 	/*Default, return NULL*/
Index: /issm/trunk-jpl/src/c/analyses/L2ProjectionEPLAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/L2ProjectionEPLAnalysis.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/L2ProjectionEPLAnalysis.h	(revision 26047)
@@ -22,4 +22,5 @@
 		/*Finite element Analysis*/
 		void           Core(FemModel* femmodel);
+		void           PreCore(FemModel* femmodel);
 		ElementVector* CreateDVector(Element* element);
 		ElementMatrix* CreateJacobianMatrix(Element* element);
Index: /issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp	(revision 26047)
@@ -171,4 +171,7 @@
 		femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],1);
 	}
+}/*}}}*/
+void           LevelsetAnalysis::PreCore(FemModel* femmodel){/*{{{*/
+	_error_("not implemented");
 }/*}}}*/
 ElementVector* LevelsetAnalysis::CreateDVector(Element* element){/*{{{*/
Index: /issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.h	(revision 26047)
@@ -22,4 +22,5 @@
 		/*Finite element Analysis*/
 		void           Core(FemModel* femmodel);
+		void           PreCore(FemModel* femmodel);
 		ElementVector* CreateDVector(Element* element);
 		ElementMatrix* CreateJacobianMatrix(Element* element);
Index: /issm/trunk-jpl/src/c/analyses/LoveAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/LoveAnalysis.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/LoveAnalysis.cpp	(revision 26047)
@@ -46,4 +46,7 @@
 	_error_(" not needed!");
 }/*}}}*/
+void           LoveAnalysis::PreCore(FemModel* femmodel){/*{{{*/
+	_error_(" not needed!");
+}/*}}}*/
 ElementVector* LoveAnalysis::CreateDVector(Element* element){/*{{{*/
 	_error_(" not needed!");
Index: /issm/trunk-jpl/src/c/analyses/LoveAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/LoveAnalysis.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/LoveAnalysis.h	(revision 26047)
@@ -22,4 +22,5 @@
 		/*Finite element Analysis*/
 		void           Core(FemModel* femmodel);
+		void           PreCore(FemModel* femmodel);
 		ElementVector* CreateDVector(Element* element);
 		ElementMatrix* CreateJacobianMatrix(Element* element);
Index: /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 26047)
@@ -4,4 +4,5 @@
 #include "../shared/shared.h"
 #include "../modules/modules.h"
+#include "../classes/Inputs/TransientInput.h"
 
 #define FINITEELEMENT P1Enum
@@ -119,4 +120,5 @@
 	bool   isoceancoupling;
 	bool   issmb;
+	int    grdmodel;
 
 	/*Fetch data needed: */
@@ -148,5 +150,5 @@
 	iomodel->FetchDataToInput(inputs,elements,"md.geometry.surface",SurfaceEnum);
 	iomodel->FetchDataToInput(inputs,elements,"md.geometry.base",BaseEnum);
-	iomodel->FetchDataToInput(inputs,elements,"md.solidearth.initialsealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.sealevel",SealevelEnum,0);
 	iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
 	iomodel->FetchDataToInput(inputs,elements,"md.mask.ocean_levelset",MaskOceanLevelsetEnum);
@@ -155,6 +157,4 @@
 	iomodel->FetchDataToInput(inputs,elements,"md.initialization.vy",VyEnum);
 	if(isgroundingline) 	iomodel->FetchDataToInput(inputs,elements,"md.geometry.bed",BedEnum);
-	/*Initialize cumdeltalthickness input*/
-	InputUpdateFromConstantx(inputs,elements,0.,SealevelchangeCumDeltathicknessEnum);
 	/*Initialize ThicknessResidual input*/
 	InputUpdateFromConstantx(inputs,elements,0.,ThicknessResidualEnum);
@@ -226,4 +226,13 @@
 	}
 
+	/*Initialize sea level cumulated sea level loads :*/
+	InputUpdateFromConstantx(inputs,elements,0.,AccumulatedDeltaIceThicknessEnum);
+	InputUpdateFromConstantx(inputs,elements,0.,OldAccumulatedDeltaIceThicknessEnum);
+
+	/*for Ivins deformation model, initialize history of ice thickness changes:*/
+	iomodel->FindConstant(&grdmodel,"md.solidearth.settings.grdmodel");
+	if(grdmodel==IvinsEnum) inputs->SetTransientInput(TransientAccumulatedDeltaIceThicknessEnum,NULL,0);
+
+
 }/*}}}*/
 void MasstransportAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
@@ -248,4 +257,7 @@
 /*Finite Element Analysis*/
 void           MasstransportAnalysis::Core(FemModel* femmodel){/*{{{*/
+	_error_("not implemented");
+}/*}}}*/
+void           MasstransportAnalysis::PreCore(FemModel* femmodel){/*{{{*/
 	_error_("not implemented");
 }/*}}}*/
@@ -795,8 +807,16 @@
 void           MasstransportAnalysis::InputUpdateFromSolution(IssmDouble* solution,Element* element){/*{{{*/
 
-
 	/*Only update if on base*/
 	if(!element->IsOnBase()) return;
-	
+
+	/*deal with logic of accumulating thickness if we are coupled to a 
+	 * sea level core:*/
+	int frequency,count,isgrd;
+	element->FindParam(&isgrd,SolidearthSettingsGRDEnum);
+	if(isgrd){
+		element->FindParam(&frequency,SolidearthSettingsRunFrequencyEnum);
+		element->FindParam(&count,SealevelchangeRunCountEnum);
+	}
+		
 	/*Fetch dof list and allocate solution vector*/
 	int *doflist = NULL;
@@ -806,7 +826,4 @@
 	IssmDouble* newthickness = xNew<IssmDouble>(numnodes);
 	IssmDouble* thicknessresidual = xNew<IssmDouble>(numnodes);
-	
-	/*recover time step:*/
-	IssmDouble dt = element->FindParam(TimesteppingTimeStepEnum);
 
 	/*Use the dof list to index into the solution vector: */
@@ -844,5 +861,5 @@
 	IssmDouble* oldthickness      = xNew<IssmDouble>(numvertices);
 	IssmDouble* cumdeltathickness = xNew<IssmDouble>(numvertices);
-	IssmDouble* icethicknessrate    = xNew<IssmDouble>(numvertices);
+	IssmDouble* deltathickness = xNew<IssmDouble>(numvertices);
 	IssmDouble* newbase           = xNew<IssmDouble>(numvertices);
 	IssmDouble* bed               = xNew<IssmDouble>(numvertices);
@@ -860,5 +877,5 @@
 	basalelement->GetInputListOnVertices(&phi[0],MaskOceanLevelsetEnum);
 	basalelement->GetInputListOnVertices(&sealevel[0],SealevelEnum);
-	basalelement->GetInputListOnVertices(&cumdeltathickness[0],SealevelchangeCumDeltathicknessOldEnum);
+	if(isgrd)basalelement->GetInputListOnVertices(&cumdeltathickness[0],AccumulatedDeltaIceThicknessEnum);
 
 	/*Do we do grounding line migration?*/
@@ -868,7 +885,8 @@
 
 	/*What is the delta thickness forcing the sea-level change core: cumulated over time, hence the +=:*/
-	for(int i=0;i<numvertices;i++){
-		cumdeltathickness[i] += newthickness[i]-oldthickness[i];
-		icethicknessrate[i]     = (newthickness[i]-oldthickness[i])/dt;
+	if(isgrd){
+		for(int i=0;i<numvertices;i++){
+			cumdeltathickness[i] += newthickness[i]-oldthickness[i];
+		}
 	}
 
@@ -906,6 +924,48 @@
 	element->AddBasalInput(SurfaceEnum,newsurface,P1Enum);
 	element->AddBasalInput(BaseEnum,newbase,P1Enum);
-	element->AddBasalInput(SealevelchangeCumDeltathicknessEnum,cumdeltathickness,P1Enum);
-	element->AddBasalInput(SurfaceloadIceThicknessRateEnum,icethicknessrate,P1Enum);
+	if(isgrd){
+		int grdmodel;
+
+		/*accumulate ice thickness changes: */
+		element->AddBasalInput(AccumulatedDeltaIceThicknessEnum,cumdeltathickness,P1Enum);
+
+		/*for Ivins deformation model, keep history of ice thickness changes:*/
+		element->FindParam(&grdmodel,GrdModelEnum);
+		if(grdmodel==IvinsEnum){
+			int *vertexlids = NULL;
+			int *vertexsids= NULL;
+			IssmDouble time;
+
+			TransientInput* transientinput = basalelement->inputs->GetTransientInput(TransientAccumulatedDeltaIceThicknessEnum);
+
+			/*Get values and lid list and recover vertices ids needed to initialize inputs*/
+			vertexlids      = xNew<int>(numvertices);
+			vertexsids      = xNew<int>(numvertices);
+			element->FindParam(&time,TimeEnum);
+			element->GetVerticesLidList(&vertexlids[0]);
+			element->GetVerticesSidList(&vertexsids[0]);
+
+			/*Add the current time cumdeltathickness to the existing time series: */
+			switch(element->ObjectEnum()){
+				case TriaEnum:  transientinput->AddTriaTimeInput( time,numvertices,vertexlids,cumdeltathickness,P1Enum); break;
+				default: _error_("Not implemented yet");
+			}
+			xDelete<int>(vertexlids);
+			xDelete<int>(vertexsids);
+		}
+			
+		/*compute total ice thickness change between two sea-level solver time steps, ie. every frequency*dt:*/
+		if(count==frequency){
+			IssmDouble* oldcumdeltathickness = xNew<IssmDouble>(numvertices);
+
+			basalelement->GetInputListOnVertices(&oldcumdeltathickness[0],OldAccumulatedDeltaIceThicknessEnum);
+			element->AddBasalInput(OldAccumulatedDeltaIceThicknessEnum,cumdeltathickness,P1Enum);
+			for(int i=0;i<numvertices;i++)deltathickness[i]=cumdeltathickness[i]-oldcumdeltathickness[i];
+			element->AddBasalInput(DeltaIceThicknessEnum,deltathickness,P1Enum);
+
+			xDelete<IssmDouble>(oldcumdeltathickness);
+		}
+
+	}
 
 	/*Free ressources:*/
@@ -915,5 +975,4 @@
 	xDelete<IssmDouble>(newsurface);
 	xDelete<IssmDouble>(oldthickness);
-	xDelete<IssmDouble>(icethicknessrate);
 	xDelete<IssmDouble>(oldbase);
 	xDelete<IssmDouble>(oldsurface);
Index: /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.h	(revision 26047)
@@ -22,4 +22,5 @@
 		/*Finite element Analysis*/
 		void           Core(FemModel* femmodel);
+		void           PreCore(FemModel* femmodel);
 		ElementVector* CreateDVector(Element* element);
 		ElementMatrix* CreateJacobianMatrix(Element* element);
Index: /issm/trunk-jpl/src/c/analyses/MeltingAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/MeltingAnalysis.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/MeltingAnalysis.cpp	(revision 26047)
@@ -56,5 +56,5 @@
 	iomodel->FetchDataToInput(inputs,elements,"md.geometry.surface",SurfaceEnum);
 	iomodel->FetchDataToInput(inputs,elements,"md.geometry.base",BaseEnum);
-	iomodel->FetchDataToInput(inputs,elements,"md.solidearth.initialsealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.sealevel",SealevelEnum,0);
 	iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
 	if(iomodel->domaintype!=Domain2DhorizontalEnum){
@@ -69,4 +69,7 @@
 /*Finite Element Analysis*/
 void           MeltingAnalysis::Core(FemModel* femmodel){/*{{{*/
+	_error_("not implemented");
+}/*}}}*/
+void           MeltingAnalysis::PreCore(FemModel* femmodel){/*{{{*/
 	_error_("not implemented");
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/MeltingAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/MeltingAnalysis.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/MeltingAnalysis.h	(revision 26047)
@@ -22,4 +22,5 @@
 		/*Finite element Analysis*/
 		void           Core(FemModel* femmodel);
+		void           PreCore(FemModel* femmodel);
 		ElementVector* CreateDVector(Element* element);
 		ElementMatrix* CreateJacobianMatrix(Element* element);
Index: /issm/trunk-jpl/src/c/analyses/OceantransportAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/OceantransportAnalysis.cpp	(revision 26047)
+++ /issm/trunk-jpl/src/c/analyses/OceantransportAnalysis.cpp	(revision 26047)
@@ -0,0 +1,259 @@
+#include "./OceantransportAnalysis.h"
+#include <math.h>
+#include "../toolkits/toolkits.h"
+#include "../classes/classes.h"
+#include "../classes/Inputs/TransientInput.h"
+#include "../shared/shared.h"
+#include "../modules/modules.h"
+
+/*Model processing*/
+void OceantransportAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/
+	/*No constraints*/
+}/*}}}*/
+void OceantransportAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
+	/*No loads*/
+}/*}}}*/
+void OceantransportAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr){/*{{{*/
+	::CreateNodes(nodes,iomodel,OceantransportAnalysisEnum,P1Enum);
+}/*}}}*/
+int  OceantransportAnalysis::DofsPerNode(int** doflist,int domaintype,int approximation){/*{{{*/
+	return 1;
+}/*}}}*/
+void OceantransportAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+
+	int  nature=0;
+	bool isdakota=0;
+
+	/*Update elements: */
+	int counter=0;
+	for(int i=0;i<iomodel->numberofelements;i++){
+		if(iomodel->my_elements[i]){
+			Element* element=(Element*)elements->GetObjectByOffset(counter);
+			element->Update(inputs,i,iomodel,analysis_counter,analysis_type,P1Enum);
+			counter++;
+		}
+	}
+
+	/*Plug inputs into element:*/
+	iomodel->FetchDataToInput(inputs,elements,"md.dsl.sea_water_pressure_at_sea_floor", OceantransportSpcbottompressureEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.dsl.sea_surface_height_above_geoid",  OceantransportSpcdslEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.dsl.global_average_thermosteric_sea_level",OceantransportSpcstrEnum);
+
+	/*Resolve mmes if we not running Dakota. Otherwise, Dakota will provide a modelid, which will be use to resolve Mme, 
+	 *but it will be done in InputUpdateFromDakota:*/
+	iomodel->FetchData(&isdakota,"md.qmu.isdakota");
+	if (inputs->GetInputObjectEnum(OceantransportSpcbottompressureEnum)==DatasetInputEnum && isdakota){
+		int modelid;
+
+		/*retrieve model id: */
+		iomodel->FetchData(&modelid,"md.dsl.modelid");
+
+		/*replace dataset of forcings with only one, the modelid'th:*/
+		MmeToInputFromIdx(inputs,elements,modelid,OceantransportSpcbottompressureEnum, P1Enum);
+		MmeToInputFromIdx(inputs,elements,modelid,OceantransportSpcdslEnum, P1Enum);
+		MmeToInputFromIdx(inputs,elements,modelid,OceantransportSpcstrEnum, P0Enum);
+	}
+
+	/*Initialize sea level cumulated sea level loads :*/
+	InputUpdateFromConstantx(inputs,elements,0.,AccumulatedDeltaBottomPressureEnum);
+	InputUpdateFromConstantx(inputs,elements,0.,OldAccumulatedDeltaBottomPressureEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.bottompressure",BottomPressureEnum);
+
+
+}/*}}}*/
+void OceantransportAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
+
+	int dslmodel=0;
+	int     numoutputs;
+	char**  requestedoutputs = NULL;
+
+	/*Deal with dsl multi-model ensembles: {{{*/
+	iomodel->FetchData(&dslmodel,"md.dsl.model");
+	if(dslmodel==2){
+		IssmDouble modelid; 
+		int nummodels;
+		
+		/*create double param, not int param, because Dakota will be updating it as 
+		 * a double potentially: */
+		iomodel->FetchData(&modelid,"md.dsl.modelid");
+		parameters->AddObject(new DoubleParam(DslModelidEnum,modelid));
+		parameters->AddObject(iomodel->CopyConstantObject("md.dsl.nummodels",DslNummodelsEnum));
+		iomodel->FetchData(&nummodels,"md.dsl.nummodels");
+
+		/*quick checks: */
+		if(nummodels<=0)_error_("dslmme object in  md.dsl field should contain at least 1 ensemble model!");
+		if(modelid<=0 || modelid>nummodels)_error_("modelid field in dslmme object of md.dsl field should be between 1 and the number of ensemble runs!");
+	} /*}}}*/
+	/*Requested outputs {{{*/
+	iomodel->FindConstant(&requestedoutputs,&numoutputs,"md.solidearth.requested_outputs");
+	if(numoutputs)parameters->AddObject(new StringArrayParam(SealevelchangeRequestedOutputsEnum,requestedoutputs,numoutputs));
+	iomodel->DeleteData(&requestedoutputs,numoutputs,"md.solidearth.requested_outputs");
+	/*}}}*/
+
+}/*}}}*/
+
+/*Finite Element Analysis*/
+void           OceantransportAnalysis::Core(FemModel* femmodel){/*{{{*/
+	_error_("not implemented");
+}/*}}}*/
+void           OceantransportAnalysis::PreCore(FemModel* femmodel){/*{{{*/
+	_error_("not implemented");
+}/*}}}*/
+ElementVector* OceantransportAnalysis::CreateDVector(Element* element){/*{{{*/
+	/*Default, return NULL*/
+	return NULL;
+}/*}}}*/
+ElementMatrix* OceantransportAnalysis::CreateJacobianMatrix(Element* element){/*{{{*/
+_error_("Not implemented");
+}/*}}}*/
+ElementMatrix* OceantransportAnalysis::CreateKMatrix(Element* element){/*{{{*/
+	_error_("not implemented yet");
+}/*}}}*/
+ElementVector* OceantransportAnalysis::CreatePVector(Element* element){/*{{{*/
+_error_("not implemented yet");
+}/*}}}*/
+void           OceantransportAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
+
+	/*retrieve bottom pressure, dsl and str from the spcs in our element:*/
+
+	IssmDouble bp,dsl,str;
+	int       *doflist = NULL;
+
+	/*Fetch number of nodes and initialize values*/
+	int         numnodes = element->GetNumberOfNodes();
+	int         numdof   = numnodes*3;
+	IssmDouble* values   = xNew<IssmDouble>(numdof);
+
+	/*Get dof list and inputs */
+	element->GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
+	Input* bp_input=element->GetInput(OceantransportSpcbottompressureEnum); _assert_(bp_input);
+	Input* dsl_input=element->GetInput(OceantransportSpcdslEnum); _assert_(dsl_input);
+	Input* str_input=element->GetInput(OceantransportSpcstrEnum); _assert_(str_input);
+
+	/*Ok, we have the velocities in inputs, fill in solution */
+	Gauss* gauss=element->NewGauss();
+	for(int i=0;i<numnodes;i++){
+		gauss->GaussVertex(i);
+		bp_input->GetInputValue(&bp,gauss);
+		dsl_input->GetInputValue(&dsl,gauss);
+		str_input->GetInputValue(&str,gauss);
+		values[i*3+0]=bp;
+		values[i*3+1]=dsl;
+		values[i*3+2]=str;
+	}
+
+	/*Add value to global vector*/
+	solution->SetValues(numdof,doflist,values,INS_VAL);
+
+	/*Free ressources:*/
+	delete gauss;
+	xDelete<int>(doflist);
+	xDelete<IssmDouble>(values);
+}/*}}}*/
+void           OceantransportAnalysis::GradientJ(Vector<IssmDouble>* gradient,Element*  element,int control_type,int control_interp,int control_index){/*{{{*/
+	_error_("Not implemented yet");
+}/*}}}*/
+void           OceantransportAnalysis::InputUpdateFromSolution(IssmDouble* solution,Element* element){/*{{{*/
+
+	int         i,domaintype;
+	int*        doflist=NULL;
+	int         isgrd=0;
+	int         frequency,count;
+
+	/*Fetch number of nodes and dof for this finite element*/
+	int numnodes = element->GetNumberOfNodes();
+	int numdof   = numnodes*3;
+
+	/*Fetch dof list and allocate solution vectors*/
+	element->GetDofListLocal(&doflist,NoneApproximationEnum,GsetEnum);
+	IssmDouble* values    = xNew<IssmDouble>(numdof);
+	IssmDouble* bp        = xNew<IssmDouble>(numnodes);
+	IssmDouble* dsl        = xNew<IssmDouble>(numnodes);
+	IssmDouble* str        = xNew<IssmDouble>(numnodes);
+	IssmDouble  strmean;
+
+	/*Use the dof list to index into the solution vector: */
+	for(i=0;i<numdof;i++) values[i]=solution[doflist[i]];
+
+	/*Retrieve bp,dsl and str:*/
+	strmean=0;
+	for(i=0;i<numnodes;i++){
+		bp[i]=values[i*3+0];
+		dsl[i]=values[i*3+1];
+		str[i]=values[i*3+2];
+		strmean+=str[i]/numnodes;
+
+		/*Check solution*/
+		if(xIsNan<IssmDouble>(bp[i])) _error_("NaN found in bottom pressure solution vector");
+		if(xIsInf<IssmDouble>(bp[i])) _error_("Inf found in bottom pressure  solution vector");
+		if(xIsNan<IssmDouble>(dsl[i])) _error_("NaN found in dsl solution vector");
+		if(xIsInf<IssmDouble>(dsl[i])) _error_("Inf found in dsl solution vector");
+		if(xIsNan<IssmDouble>(str[i])) _error_("NaN found in str solution vector");
+		if(xIsInf<IssmDouble>(str[i])) _error_("Inf found in str solution vector");
+	}
+
+	/*Add bp, dsl and str as inputs to the tria element: */
+	element->AddInput(BottomPressureEnum,bp,P1Enum);
+	element->AddInput(DslEnum,dsl,P1Enum);
+	element->AddInput(StrEnum,&strmean,P0Enum); 
+
+	/*Now, we need to do some "processing"*/
+	IssmDouble* oldbp      = xNew<IssmDouble>(numnodes);
+	IssmDouble* cumdeltabp = xNew<IssmDouble>(numnodes);
+	IssmDouble* oldcumdeltabp = xNew<IssmDouble>(numnodes);
+	IssmDouble* deltabp = xNew<IssmDouble>(numnodes);
+	IssmDouble* olddsl      = xNew<IssmDouble>(numnodes);
+	IssmDouble* deltadsl      = xNew<IssmDouble>(numnodes);
+	IssmDouble  oldstr,deltastr;
+
+	/*Deal with bottom pressure first. First get previous bottom pressure:*/
+	element->GetInputListOnVertices(&oldbp[0],BottomPressureOldEnum);
+	element->FindParam(&isgrd,SolidearthSettingsGRDEnum);
+	if(isgrd)element->GetInputListOnVertices(&cumdeltabp[0],AccumulatedDeltaBottomPressureEnum);
+
+	/*What is the delta bottompressure forcing the sea-level change core: cumulated over time, hence the +=:*/
+	if(isgrd){
+		for(int i=0;i<numnodes;i++){
+			cumdeltabp[i] += bp[i]-oldbp[i];
+		}
+	}
+
+	/*Add input to the element: */
+	if(isgrd){
+		element->FindParam(&frequency,SolidearthSettingsRunFrequencyEnum);
+		element->FindParam(&count,SealevelchangeRunCountEnum);
+		element->AddInput(AccumulatedDeltaBottomPressureEnum,cumdeltabp,P1Enum);
+		if(count==frequency){
+			element->GetInputListOnVertices(&oldcumdeltabp[0],OldAccumulatedDeltaBottomPressureEnum);
+			element->AddInput(OldAccumulatedDeltaBottomPressureEnum,cumdeltabp,P1Enum);
+			for(int i=0;i<numnodes;i++)deltabp[i]=cumdeltabp[i]-oldcumdeltabp[i];
+			element->AddInput(DeltaBottomPressureEnum,deltabp,P1Enum);
+
+		}
+	}
+
+	/*Deal with dsl and str:*/
+	element->GetInputListOnVertices(&olddsl[0],DslOldEnum);
+	element->GetInputValue(&oldstr,StrOldEnum);
+	for (int i=0;i<numnodes;i++) deltadsl[i]=dsl[i]-olddsl[i];
+	deltastr=strmean-oldstr;
+	element->AddInput(DeltaDslEnum,deltadsl,P1Enum);
+	element->AddInput(DeltaStrEnum,&deltastr,P0Enum);
+
+	/*Free ressources:*/
+	xDelete<IssmDouble>(bp);
+	xDelete<IssmDouble>(deltabp);
+	xDelete<IssmDouble>(cumdeltabp);
+	xDelete<IssmDouble>(oldcumdeltabp);
+	xDelete<IssmDouble>(oldbp);
+	xDelete<IssmDouble>(dsl);
+	xDelete<IssmDouble>(olddsl);
+	xDelete<IssmDouble>(deltadsl);
+	xDelete<IssmDouble>(values);
+	xDelete<int>(doflist);
+
+}/*}}}*/
+void           OceantransportAnalysis::UpdateConstraints(FemModel* femmodel){/*{{{*/
+	/*Default, do nothing*/
+	return;
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/OceantransportAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/OceantransportAnalysis.h	(revision 26047)
+++ /issm/trunk-jpl/src/c/analyses/OceantransportAnalysis.h	(revision 26047)
@@ -0,0 +1,34 @@
+/*! \file OceantransportAnalysis.h 
+ *  \brief: header file for generic external result object
+ */
+
+#ifndef _OceantransportAnalysis_
+#define _OceantransportAnalysis_
+
+/*Headers*/
+#include "./Analysis.h"
+
+class OceantransportAnalysis: public Analysis{
+
+	public:
+		/*Model processing*/
+		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
+		void CreateLoads(Loads* loads, IoModel* iomodel);
+		void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
+		int  DofsPerNode(int** doflist,int domaintype,int approximation);
+		void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
+		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
+
+		/*Finite element Analysis*/
+		void           Core(FemModel* femmodel);
+		void           PreCore(FemModel* femmodel);
+		ElementVector* CreateDVector(Element* element);
+		ElementMatrix* CreateJacobianMatrix(Element* element);
+		ElementMatrix* CreateKMatrix(Element* element);
+		ElementVector* CreatePVector(Element* element);
+		void           GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element);
+		void           GradientJ(Vector<IssmDouble>* gradient,Element*  element,int control_type,int control_interp,int control_index);
+		void           InputUpdateFromSolution(IssmDouble* solution,Element* element);
+		void           UpdateConstraints(FemModel* femmodel);
+};
+#endif
Index: /issm/trunk-jpl/src/c/analyses/SamplingAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/SamplingAnalysis.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/SamplingAnalysis.cpp	(revision 26047)
@@ -101,4 +101,7 @@
 	_error_("not implemented");
 }/*}}}*/
+void           SamplingAnalysis::PreCore(FemModel* femmodel){/*{{{*/
+	_error_("not implemented");
+}/*}}}*/
 ElementVector* SamplingAnalysis::CreateDVector(Element* element){/*{{{*/
 	/*Default, return NULL*/
Index: /issm/trunk-jpl/src/c/analyses/SamplingAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/SamplingAnalysis.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/SamplingAnalysis.h	(revision 26047)
@@ -22,4 +22,5 @@
 		/*Finite element Analysis*/
 		void           Core(FemModel* femmodel);
+		void           PreCore(FemModel* femmodel);
 		ElementVector* CreateDVector(Element* element);
 		ElementMatrix* CreateJacobianMatrix(Element* element);
Index: /issm/trunk-jpl/src/c/analyses/SealevelchangeAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/SealevelchangeAnalysis.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/SealevelchangeAnalysis.cpp	(revision 26047)
@@ -6,4 +6,5 @@
 #include "../shared/shared.h"
 #include "../modules/modules.h"
+#include "../cores/cores.h"
 
 /*Model processing*/
@@ -22,6 +23,4 @@
 void SealevelchangeAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
 
-	int geodetic=0;
-	int dslmodel=0;
 	int isexternal=0;
 
@@ -39,108 +38,6 @@
 	iomodel->FetchDataToInput(inputs,elements,"md.mask.ocean_levelset",MaskOceanLevelsetEnum);
 	iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
-	iomodel->FetchData(&geodetic,"md.solidearth.settings.computesealevelchange");
-	iomodel->FetchDataToInput(inputs,elements,"md.solidearth.initialsealevel",SealevelEnum,0);
 	iomodel->FetchDataToInput(inputs,elements,"md.geometry.bed",BedEnum);
-	iomodel->FetchDataToInput(inputs,elements,"md.solidearth.surfaceload.icethicknesschange",SurfaceloadIceThicknessRateEnum,0.);
-	iomodel->FetchDataToInput(inputs,elements,"md.solidearth.surfaceload.waterheightchange",SurfaceloadWaterHeightRateEnum);
-	iomodel->FetchDataToInput(inputs,elements,"md.solidearth.surfaceload.otherchange",SurfaceloadOtherRateEnum);
-		
-	/*dynamic sea level: */
-	iomodel->FetchData(&dslmodel,"md.dsl.model");
-	if (dslmodel==1){ /*standard dsl model:{{{*/
-
-		/*deal with global mean steric rate: */
-		IssmDouble* str=NULL; 
-		IssmDouble* times = NULL;
-		int M,N;
-
-		/*fetch str vector:*/
-		iomodel->FetchData(&str,&M,&N,"md.dsl.global_average_thermosteric_sea_level_change"); _assert_(M==2);
-		
-		//recover time vector: 
-		times=xNew<IssmDouble>(N);
-		for(int t=0;t<N;t++) times[t] = str[N+t];
-
-		/*create transient input: */
-		inputs->SetTransientInput(DslGlobalAverageThermostericSeaLevelChangeEnum,times,N);
-		TransientInput* transientinput = inputs->GetTransientInput(DslGlobalAverageThermostericSeaLevelChangeEnum);
-		
-			
-		for(Object* & object : elements->objects){
-			Element* element=xDynamicCast<Element*>(object);
-
-			for(int t=0;t<N;t++){
-				switch(element->ObjectEnum()){
-					case TriaEnum:  transientinput->AddTriaTimeInput( t,1,&element->lid,&str[t],P0Enum); break;
-					case PentaEnum: transientinput->AddPentaTimeInput(t,1,&element->lid,&str[t],P0Enum); break;
-					default: _error_("Not implemented yet");
-				}
-			}
-		}
-
-		/*cleanup:*/
-		xDelete<IssmDouble>(times);
-		iomodel->DeleteData(str,"md.dsl.global_average_thermosteric_sea_level_change");
-
-		/*deal with dynamic sea level fields: */
-		iomodel->FetchDataToInput(inputs,elements,"md.dsl.sea_surface_height_change_above_geoid", DslSeaSurfaceHeightChangeAboveGeoidEnum);
-		iomodel->FetchDataToInput(inputs,elements,"md.dsl.sea_water_pressure_change_at_sea_floor", DslSeaWaterPressureChangeAtSeaFloorEnum);
-		
-	} /*}}}*/
-	else if (dslmodel==2){ /*multi-model ensemble dsl model:{{{*/
-	
-		/*variables:*/
-		int nummodels;
-		IssmDouble** pstr=NULL; 
-		IssmDouble*  str=NULL;
-		IssmDouble*  times = NULL;
-		int* pM = NULL;
-		int* pN = NULL;
-		int M,N;
-
-		/*deal with dsl.global_average_thermosteric_sea_level_change {{{*/
-		iomodel->FetchData(&pstr,&pM,&pN,&nummodels,"md.dsl.global_average_thermosteric_sea_level_change");
-
-		/*go through the mat array and create a dataset of transient inputs:*/
-		for (int i=0;i<nummodels;i++){
-
-			M=pM[i];
-			N=pN[i];
-			str=pstr[i];
-
-			//recover time vector: 
-			times=xNew<IssmDouble>(N);
-			for(int t=0;t<N;t++) times[t] = str[(M-1)*N+t];
-
-			TransientInput* transientinput=inputs->SetDatasetTransientInput(DslGlobalAverageThermostericSeaLevelChangeEnum,i, times,N);
-			
-			for(Object* & object : elements->objects){
-				Element* element=xDynamicCast<Element*>(object);
-
-				for(int t=0;t<N;t++){
-					switch(element->ObjectEnum()){
-						case TriaEnum:  transientinput->AddTriaTimeInput( t,1,&element->lid,&str[t],P0Enum); break;
-						case PentaEnum: transientinput->AddPentaTimeInput(t,1,&element->lid,&str[t],P0Enum); break;
-						default: _error_("Not implemented yet");
-					}
-				}
-			}
-			xDelete<IssmDouble>(times);
-		}
-		/*Delete data:*/
-		for(int i=0;i<nummodels;i++){
-			IssmDouble* str=pstr[i];
-			xDelete<IssmDouble>(str);
-		}
-		xDelete<IssmDouble*>(pstr);
-		xDelete<int>(pM);
-		xDelete<int>(pN);
-		/*}}}*/
-		iomodel->FetchDataToInput(inputs,elements,"md.dsl.sea_surface_height_change_above_geoid",DslSeaSurfaceHeightChangeAboveGeoidEnum);
-		iomodel->FetchDataToInput(inputs,elements,"md.dsl.sea_water_pressure_change_at_sea_floor",DslSeaWaterPressureChangeAtSeaFloorEnum);
-
-	} /*}}}*/
-	else _error_("Dsl model " << dslmodel << " not implemented yet!");
-	
+
 	/*external solidearthsolution: solid-Earth model*/
 	iomodel->FetchData(&isexternal,"md.solidearth.isexternal");
@@ -151,10 +48,25 @@
 		iomodel->FetchDataToInput(inputs,elements,"md.solidearth.external.geoid",SolidearthExternalGeoidRateEnum);
 		iomodel->FetchDataToInput(inputs,elements,"md.solidearth.external.barystaticsealevel",SolidearthExternalBarystaticSeaLevelRateEnum);
-	}
-
-	/*Initialize cumdeltalthickness, bedrockeast and bedrocknorth  to 0 at time step 0:*/
+
+		/*Resolve Mmes using the modelid, if necessary:*/
+		if (inputs->GetInputObjectEnum(SolidearthExternalDisplacementEastRateEnum)==DatasetInputEnum){
+			int modelid;
+			
+			/*retrieve model id: */
+			iomodel->FetchData(&modelid,"md.solidearth.external.modelid");
+		
+			/*replace dataset of forcings with only one, the modelid'th:*/
+			MmeToInputFromIdx(inputs,elements,modelid,SolidearthExternalDisplacementNorthRateEnum, P1Enum);
+			MmeToInputFromIdx(inputs,elements,modelid,SolidearthExternalDisplacementEastRateEnum, P1Enum);
+			MmeToInputFromIdx(inputs,elements,modelid,SolidearthExternalDisplacementUpRateEnum, P1Enum);
+			MmeToInputFromIdx(inputs,elements,modelid,SolidearthExternalGeoidRateEnum, P1Enum);
+			MmeToInputFromIdx(inputs,elements,modelid,SolidearthExternalBarystaticSeaLevelRateEnum, P1Enum);
+		}
+	}
+
+	/*Initialize solid earth motion and sea level: */
 	InputUpdateFromConstantx(inputs,elements,0.,BedEastEnum);
 	InputUpdateFromConstantx(inputs,elements,0.,BedNorthEnum);
-	InputUpdateFromConstantx(inputs,elements,0.,SealevelchangeCumDeltathicknessEnum);
+    iomodel->FetchDataToInput(inputs,elements,"md.initialization.sealevel",SealevelEnum);
 
 
@@ -169,5 +81,4 @@
 	IssmDouble* love_tk=NULL;
 	IssmDouble* love_tl=NULL;
-	int         dslmodel=0;
 	int         externalnature=0;
 	int         isexternal=0;
@@ -223,6 +134,8 @@
 	parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.settings.computesealevelchange",SolidearthSettingsComputesealevelchangeEnum));
 	parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.settings.isgrd",SolidearthSettingsGRDEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.settings.compute_bp_grd",SolidearthSettingsComputeBpGrdEnum));
 	parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.planetradius",SolidearthPlanetRadiusEnum));
 	parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.settings.glfraction",SolidearthSettingsGlfractionEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.settings.cross_section_shape",SolidearthSettingsCrossSectionShapeEnum));
 	parameters->AddObject(new DoubleParam(CumBslcEnum,0.0));
 	parameters->AddObject(new DoubleParam(CumBslcIceEnum,0.0));
@@ -257,22 +170,5 @@
 	}
 
-	/*Deal with dsl multi-model ensembles: {{{*/
-	iomodel->FetchData(&dslmodel,"md.dsl.model");
-	parameters->AddObject(iomodel->CopyConstantObject("md.dsl.compute_fingerprints",DslComputeFingerprintsEnum));
-	if(dslmodel==2){
-		IssmDouble modelid; 
-		int nummodels;
-		
-		/*create double param, not int param, because Dakota will be updating it as 
-		 * a double potentially: */
-		iomodel->FetchData(&modelid,"md.dsl.modelid");
-		parameters->AddObject(new DoubleParam(DslModelidEnum,modelid));
-		parameters->AddObject(iomodel->CopyConstantObject("md.dsl.nummodels",DslNummodelsEnum));
-		iomodel->FetchData(&nummodels,"md.dsl.nummodels");
-
-		/*quick checks: */
-		if(nummodels<=0)_error_("dslmme object in  md.dsl field should contain at least 1 ensemble model!");
-		if(modelid<=0 || modelid>nummodels)_error_("modelid field in dslmme object of md.dsl field should be between 1 and the number of ensemble runs!");
-	} /*}}}*/
+	
 	/*Deal with external multi-model ensembles: {{{*/
 	if(isexternal){
@@ -508,4 +404,10 @@
 	_error_("not implemented");
 }/*}}}*/
+void           SealevelchangeAnalysis::PreCore(FemModel* femmodel){/*{{{*/
+
+	/*run sea level change core geometry only once, after the Model Processor is done:*/
+	sealevelchange_geometry(femmodel);
+
+}/*}}}*/
 ElementVector* SealevelchangeAnalysis::CreateDVector(Element* element){/*{{{*/
 	/*Default, return NULL*/
Index: /issm/trunk-jpl/src/c/analyses/SealevelchangeAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/SealevelchangeAnalysis.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/SealevelchangeAnalysis.h	(revision 26047)
@@ -22,4 +22,5 @@
 		/*Finite element Analysis*/
 		void           Core(FemModel* femmodel);
+		void           PreCore(FemModel* femmodel);
 		ElementVector* CreateDVector(Element* element);
 		ElementMatrix* CreateJacobianMatrix(Element* element);
Index: /issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp	(revision 26047)
@@ -503,4 +503,7 @@
 
 }/*}}}*/
+void           SmbAnalysis::PreCore(FemModel* femmodel){/*{{{*/
+	_error_("not implemented");
+}/*}}}*/
 ElementVector* SmbAnalysis::CreateDVector(Element* element){/*{{{*/
 	_error_("not implemented");
Index: /issm/trunk-jpl/src/c/analyses/SmbAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/SmbAnalysis.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/SmbAnalysis.h	(revision 26047)
@@ -22,4 +22,5 @@
 		/*Finite element Analysis*/
 		void           Core(FemModel* femmodel);
+		void           PreCore(FemModel* femmodel);
 		ElementVector* CreateDVector(Element* element);
 		ElementMatrix* CreateJacobianMatrix(Element* element);
Index: /issm/trunk-jpl/src/c/analyses/SmoothAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/SmoothAnalysis.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/SmoothAnalysis.cpp	(revision 26047)
@@ -35,4 +35,7 @@
 /*Finite Element Analysis*/
 void           SmoothAnalysis::Core(FemModel* femmodel){/*{{{*/
+	_error_("not implemented");
+}/*}}}*/
+void           SmoothAnalysis::PreCore(FemModel* femmodel){/*{{{*/
 	_error_("not implemented");
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/SmoothAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/SmoothAnalysis.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/SmoothAnalysis.h	(revision 26047)
@@ -22,4 +22,5 @@
 		/*Finite element Analysis*/
 		void           Core(FemModel* femmodel);
+		void           PreCore(FemModel* femmodel);
 		ElementVector* CreateDVector(Element* element);
 		ElementMatrix* CreateJacobianMatrix(Element* element);
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 26047)
@@ -768,5 +768,5 @@
 	iomodel->FetchDataToInput(inputs,elements,"md.geometry.surface",SurfaceEnum);
 	iomodel->FetchDataToInput(inputs,elements,"md.geometry.base",BaseEnum);
-	iomodel->FetchDataToInput(inputs,elements,"md.solidearth.initialsealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.sealevel",SealevelEnum,0);
 	iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
 	iomodel->FetchDataToInput(inputs,elements,"md.mask.ocean_levelset",MaskOceanLevelsetEnum);
@@ -1112,4 +1112,7 @@
 	}
 
+}/*}}}*/
+void           StressbalanceAnalysis::PreCore(FemModel* femmodel){/*{{{*/
+	_error_("not implemented");
 }/*}}}*/
 ElementVector* StressbalanceAnalysis::CreateDVector(Element* element){/*{{{*/
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.h	(revision 26047)
@@ -22,4 +22,5 @@
 		/*Finite element Analysis*/
 		void           Core(FemModel* femmodel);
+		void           PreCore(FemModel* femmodel);
 		ElementVector* CreateDVector(Element* element);
 		ElementMatrix* CreateJacobianMatrix(Element* element);
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp	(revision 26047)
@@ -181,4 +181,7 @@
 		femmodel->SetCurrentConfiguration(StressbalanceSIAAnalysisEnum);
 		solutionsequence_linear(femmodel);
+}/*}}}*/
+void           StressbalanceSIAAnalysis::PreCore(FemModel* femmodel){/*{{{*/
+_error_("not implemented");
 }/*}}}*/
 ElementVector* StressbalanceSIAAnalysis::CreateDVector(Element* element){/*{{{*/
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.h	(revision 26047)
@@ -22,4 +22,5 @@
 		/*Finite element Analysis*/
 		void           Core(FemModel* femmodel);
+		void           PreCore(FemModel* femmodel);
 		ElementVector* CreateDVector(Element* element);
 		ElementMatrix* CreateJacobianMatrix(Element* element);
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp	(revision 26047)
@@ -107,5 +107,5 @@
 	iomodel->FetchDataToInput(inputs,elements,"md.geometry.surface",SurfaceEnum);
 	iomodel->FetchDataToInput(inputs,elements,"md.geometry.base",BaseEnum);
-	iomodel->FetchDataToInput(inputs,elements,"md.solidearth.initialsealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.sealevel",SealevelEnum,0);
 	iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
 	if(iomodel->domaintype!=Domain2DhorizontalEnum){
@@ -167,4 +167,7 @@
 		femmodel->SetCurrentConfiguration(StressbalanceVerticalAnalysisEnum);
 		solutionsequence_linear(femmodel);
+}/*}}}*/
+void           StressbalanceVerticalAnalysis::PreCore(FemModel* femmodel){/*{{{*/
+	_error_("not implemented");
 }/*}}}*/
 ElementVector* StressbalanceVerticalAnalysis::CreateDVector(Element* element){/*{{{*/
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.h	(revision 26047)
@@ -22,4 +22,5 @@
 		/*Finite element Analysis*/
 		void           Core(FemModel* femmodel);
+		void           PreCore(FemModel* femmodel);
 		ElementVector* CreateDVector(Element* element);
 		ElementMatrix* CreateJacobianMatrix(Element* element);
Index: /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 26047)
@@ -133,5 +133,5 @@
 	iomodel->FetchDataToInput(inputs,elements,"md.geometry.surface",SurfaceEnum);
 	iomodel->FetchDataToInput(inputs,elements,"md.geometry.base",BaseEnum);
-	iomodel->FetchDataToInput(inputs,elements,"md.solidearth.initialsealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.sealevel",SealevelEnum,0);
 	iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
 	iomodel->FetchDataToInput(inputs,elements,"md.mask.ocean_levelset",MaskOceanLevelsetEnum);
@@ -297,4 +297,7 @@
 /*Finite Element Analysis*/
 void           ThermalAnalysis::Core(FemModel* femmodel){/*{{{*/
+	_error_("not implemented");
+}/*}}}*/
+void           ThermalAnalysis::PreCore(FemModel* femmodel){/*{{{*/
 	_error_("not implemented");
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.h	(revision 26047)
@@ -22,4 +22,5 @@
 		/*Finite element Analysis*/
 		void           Core(FemModel* femmodel);
+		void           PreCore(FemModel* femmodel);
 		ElementVector* CreateDVector(Element* element);
 		ElementMatrix* CreateJacobianMatrix(Element* element);
Index: /issm/trunk-jpl/src/c/analyses/UzawaPressureAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/UzawaPressureAnalysis.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/UzawaPressureAnalysis.cpp	(revision 26047)
@@ -61,4 +61,7 @@
 /*Finite Element Analysis*/
 void           UzawaPressureAnalysis::Core(FemModel* femmodel){/*{{{*/
+	_error_("not implemented");
+}/*}}}*/
+void           UzawaPressureAnalysis::PreCore(FemModel* femmodel){/*{{{*/
 	_error_("not implemented");
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/UzawaPressureAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/UzawaPressureAnalysis.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/UzawaPressureAnalysis.h	(revision 26047)
@@ -22,4 +22,5 @@
 		/*Finite element Analysis*/
 		void           Core(FemModel* femmodel);
+		void           PreCore(FemModel* femmodel);
 		ElementVector* CreateDVector(Element* element);
 		ElementMatrix* CreateJacobianMatrix(Element* element);
Index: /issm/trunk-jpl/src/c/analyses/analyses.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/analyses.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/analyses/analyses.h	(revision 26047)
@@ -23,5 +23,4 @@
 #include "./FreeSurfaceBaseAnalysis.h"
 #include "./FreeSurfaceTopAnalysis.h"
-#include "./GiaAnalysis.h"
 #include "./GLheightadvectionAnalysis.h"
 #include "./LoveAnalysis.h"
@@ -30,4 +29,5 @@
 #include "./HydrologyDCInefficientAnalysis.h"
 #include "./HydrologyShreveAnalysis.h"
+#include "./HydrologyTwsAnalysis.h"
 #include "./HydrologyGlaDSAnalysis.h"
 #include "./HydrologyShaktiAnalysis.h"
@@ -35,4 +35,5 @@
 #include "./LevelsetAnalysis.h"
 #include "./MasstransportAnalysis.h"
+#include "./OceantransportAnalysis.h"
 #include "./SamplingAnalysis.h"
 #include "./SmbAnalysis.h"
Index: /issm/trunk-jpl/src/c/classes/Elements/Element.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 26047)
@@ -1666,4 +1666,23 @@
 			for(int t=0;t<N;t++){
 				value=vector[N*this->Sid()+t];
+				switch(this->ObjectEnum()){
+					case TriaEnum:  transientinput->AddTriaTimeInput( t,1,&(this->lid),&value,P0Enum); break;
+					case PentaEnum: transientinput->AddPentaTimeInput(t,1,&(this->lid),&value,P0Enum); break;
+					default: _error_("Not implemented yet");
+				}
+			}
+			xDelete<IssmDouble>(times);
+		}
+		else if(M==1 || M==2){
+			/*create transient input: */
+			IssmDouble* times = xNew<IssmDouble>(N);
+			if(M==1)times[0]=0;
+			if(M==2)for(int t=0;t<N;t++) times[t] = vector[(M-1)*N+t];
+			
+			inputs->SetTransientInput(vector_enum,times,N);
+			TransientInput* transientinput = inputs->GetTransientInput(vector_enum);
+		
+			for(int t=0;t<N;t++){
+				value=vector[t]; //values are on the first line, times are on the second line
 				switch(this->ObjectEnum()){
 					case TriaEnum:  transientinput->AddTriaTimeInput( t,1,&(this->lid),&value,P0Enum); break;
Index: /issm/trunk-jpl/src/c/classes/Elements/Element.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 26047)
@@ -23,4 +23,5 @@
 class Materials;
 class Material;
+class Matlitho;
 class Inputs;
 class Inputs;
@@ -366,5 +367,5 @@
 
 		#ifdef _HAVE_GIA_
-		virtual void       GiaDeflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt,IssmDouble* x,IssmDouble* y)=0;
+		virtual void       GiaDeflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt,Matlitho* litho, IssmDouble* x,IssmDouble* y)=0;
 		#endif
 		#ifdef _HAVE_ESA_
Index: /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 26047)
@@ -4851,11 +4851,4 @@
 /*}}}*/
 
-#ifdef _HAVE_GIA_
-void       Penta::GiaDeflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt,IssmDouble* x,IssmDouble* y){/*{{{*/
-	_error_("GIA deflection not implemented yet!");
-}
-/*}}}*/
-#endif
-
 #ifdef _HAVE_DAKOTA_
 void       Penta::InputScaleFromDakota(IssmDouble* distributed_values, IssmDouble* partition, int npart, int nt, int name){/*{{{*/
Index: /issm/trunk-jpl/src/c/classes/Elements/Penta.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Penta.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/classes/Elements/Penta.h	(revision 26047)
@@ -19,4 +19,5 @@
 class Node;
 class Material;
+class Matlitho;
 class Tria;
 class ElementMatrix;
@@ -207,5 +208,5 @@
 
 		#ifdef _HAVE_GIA_
-		void           GiaDeflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt,IssmDouble* x,IssmDouble* y);
+		void           GiaDeflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt,Matlitho* litho, IssmDouble* x,IssmDouble* y){_error_("not implemented yet");};
 		#endif
 		#ifdef _HAVE_ESA_
Index: /issm/trunk-jpl/src/c/classes/Elements/Seg.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Seg.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/classes/Elements/Seg.h	(revision 26047)
@@ -17,4 +17,5 @@
 class Node;
 class Material;
+class Matlitho;
 class ElementMatrix;
 class ElementVector;
@@ -163,5 +164,5 @@
 
 #ifdef _HAVE_GIA_
-		void        GiaDeflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt,IssmDouble* x,IssmDouble* y){_error_("not implemented yet");};
+		void        GiaDeflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt,Matlitho* litho, IssmDouble* x,IssmDouble* y){_error_("not implemented yet");};
 #endif
 #ifdef _HAVE_ESA_
Index: /issm/trunk-jpl/src/c/classes/Elements/Tetra.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 26047)
@@ -17,4 +17,5 @@
 class Node;
 class Material;
+class Matlitho;
 class ElementMatrix;
 class ElementVector;
@@ -169,5 +170,5 @@
 
 #ifdef _HAVE_GIA_
-		void        GiaDeflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt,IssmDouble* x,IssmDouble* y){_error_("not implemented yet");};
+		void        GiaDeflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt, Matlitho* litho, IssmDouble* x,IssmDouble* y){_error_("not implemented yet");};
 #endif
 #ifdef _HAVE_ESA_
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 26047)
@@ -5089,10 +5089,10 @@
 
 #ifdef _HAVE_GIA_
-void       Tria::GiaDeflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt,IssmDouble* x, IssmDouble* y){/*{{{*/
+void    Tria::GiaDeflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt, Matlitho* litho, IssmDouble* x, IssmDouble* y){/*{{{*/
 
 	IssmDouble xyz_list[NUMVERTICES][3];
 
 	/*gia solution parameters:*/
-	IssmDouble lithosphere_thickness,mantle_viscosity,ice_mask;
+	IssmDouble ice_mask;
 
 	/*output: */
@@ -5111,5 +5111,5 @@
 	/*recover gia solution parameters: */
 	int cross_section_shape;
-	this->parameters->FindParam(&cross_section_shape,GiaCrossSectionShapeEnum);
+	this->parameters->FindParam(&cross_section_shape,SolidearthSettingsCrossSectionShapeEnum);
 
 	/*what time is it? :*/
@@ -5118,9 +5118,17 @@
 
 	/*recover material parameters: */
-	IssmDouble lithosphere_shear_modulus = FindParam(MaterialsLithosphereShearModulusEnum);
-	IssmDouble lithosphere_density       = FindParam(MaterialsLithosphereDensityEnum);
-	IssmDouble mantle_shear_modulus      = FindParam(MaterialsMantleShearModulusEnum);
-	IssmDouble mantle_density            = FindParam(MaterialsMantleDensityEnum);
 	IssmDouble rho_ice                   = FindParam(MaterialsRhoIceEnum);
+	
+	/*recover mantle and lithosphere material properties:*/
+	int numlayers=litho->numlayers;
+
+	/*lithosphere is the last layer, mantle is the penultimate layer. Watch out, radius represents the layers 
+	 *from center to surface of the Earth:*/
+	IssmDouble lithosphere_thickness = litho->radius[numlayers] - litho->radius[numlayers-1];
+	IssmDouble lithosphere_shear_modulus = litho->lame_mu[numlayers-1];
+	IssmDouble lithosphere_density = litho->density[numlayers-1];
+	IssmDouble mantle_shear_modulus = litho->lame_mu[numlayers-2];
+	IssmDouble mantle_density = litho->density[numlayers-2];
+	IssmDouble mantle_viscosity = litho->viscosity[numlayers-2];
 
 	/*early return if we are NOT on an icy element:*/
@@ -5131,15 +5139,10 @@
 	IssmDouble *times    = NULL;
 	int         numtimes;
-	this->GetInputAveragesUpToCurrentTime(ThicknessEnum,&hes,&times,&numtimes,currenttime);
-
-	/*recover mantle viscosity: */
-	Input* mantle_viscosity_input=this->GetInput(GiaMantleViscosityEnum);
-	if (!mantle_viscosity_input)_error_("mantle viscosity input needed to compute gia deflection!");
-	mantle_viscosity_input->GetInputAverage(&mantle_viscosity);
-
-	/*recover lithosphere thickness: */
-	Input* lithosphere_thickness_input=this->GetInput(GiaLithosphereThicknessEnum);
-	if (!lithosphere_thickness_input)_error_("lithosphere thickness input needed to compute gia deflection!");
-	lithosphere_thickness_input->GetInputAverage(&lithosphere_thickness);
+	this->GetInputAveragesUpToCurrentTime(TransientAccumulatedDeltaIceThicknessEnum,&hes,&times,&numtimes,currenttime);
+
+	if(this->Id()==1){
+		_printf_("numtimes: " << numtimes << "\n");
+		for (int i=0;i<numtimes;i++)_printf_(times[i] << " " << hes[i] << "\n");
+	}
 
 	/*pull area of this Tria: */
@@ -5223,5 +5226,5 @@
 
 	/*Compute ice thickness change: */
-	Input* deltathickness_input=this->GetInput(EsaDeltathicknessEnum);
+	Input* deltathickness_input=this->GetInput(DeltaIceThicknessEnum);
 	if (!deltathickness_input)_error_("delta thickness input needed to compute elastic adjustment!");
 	deltathickness_input->GetInputAverage(&I);
@@ -5361,5 +5364,5 @@
 
 	/*Compute ice thickness change: */
-	Input* deltathickness_input=this->GetInput(EsaDeltathicknessEnum);
+	Input* deltathickness_input=this->GetInput(DeltaIceThicknessEnum);
 	if (!deltathickness_input)_error_("delta thickness input needed to compute elastic adjustment!");
 	deltathickness_input->GetInputAverage(&I);
@@ -5514,6 +5517,4 @@
 /*}}}*/
 void	Tria::SealevelchangeMomentOfInertia(IssmDouble* dI_list,IssmDouble* Sg_old, SealevelMasks* masks){/*{{{*/
-
-
 	/*early return if we are not on an ice cap OR ocean:*/
 	if(!masks->isiceonly[this->lid] && !masks->isoceanin[this->lid]){
@@ -5592,20 +5593,17 @@
 	}
 	else if(masks->isiceonly[this->lid]){
-		IssmDouble rho_ice, dIdt, dt;
-		
-
-		/*recover parameters: */
+		IssmDouble rho_ice, I;
+
+		/*recover material parameters: */
 		rho_ice=FindParam(MaterialsRhoIceEnum);
-		dt=FindParam(TimesteppingTimeStepEnum);
 
 		/*Compute ice thickness change: */
-		Input* deltathickness_input=this->GetInput(SurfaceloadIceThicknessRateEnum);
-		if (!deltathickness_input)_error_("delta thickness input needed to compute sea level change!");
-		deltathickness_input->GetInputAverage(&dIdt);
-
-
-		dI_list[0] = -4*PI*(rho_ice*dIdt*dt*area)*pow(re,4)*(sin(late)*cos(late)*cos(longe))/planetarea;
-		dI_list[1] = -4*PI*(rho_ice*dIdt*dt*area)*pow(re,4)*(sin(late)*cos(late)*sin(longe))/planetarea;
-		dI_list[2] = +4*PI*(rho_ice*dIdt*dt*area)*pow(re,4)*(1-pow(sin(late),2))/planetarea;
+		Input* deltathickness_input=this->GetInput(DeltaIceThicknessEnum);
+		if (!deltathickness_input)_error_("DeltaIceThicknessEnum delta ice thickness input needed to compute sea level change!");
+		deltathickness_input->GetInputAverage(&I);
+
+		dI_list[0] = -4*PI*(rho_ice*I*area)*pow(re,4)*(sin(late)*cos(late)*cos(longe))/planetarea;
+		dI_list[1] = -4*PI*(rho_ice*I*area)*pow(re,4)*(sin(late)*cos(late)*sin(longe))/planetarea;
+		dI_list[2] = +4*PI*(rho_ice*I*area)*pow(re,4)*(1-pow(sin(late),2))/planetarea;
 	}
 
@@ -5815,10 +5813,9 @@
 	IssmDouble area;
 	IssmDouble phi=1.0; //WARNING: do not touch this, default is entire elemnt contributes barystatic
-	IssmDouble Idot;  //ice thickness rate (Farrel and Clarke, Equ. 4)
+	IssmDouble I;  //change in ice thickness or water level(Farrel and Clarke, Equ. 4)
 	bool notfullygrounded=false;
 	bool scaleoceanarea= false;
 	bool computerigid= false;
 	int  glfraction=1;
-	IssmDouble dt=0;
 
 	/*output: */
@@ -5865,5 +5862,4 @@
 	rho_ice=FindParam(MaterialsRhoIceEnum);
 	rho_water=FindParam(MaterialsRhoSeawaterEnum);
-	dt=FindParam(TimesteppingTimeStepEnum);
 	this->parameters->FindParam(&computerigid,SolidearthSettingsRigidEnum);
 	this->parameters->FindParam(&scaleoceanarea,SolidearthSettingsOceanAreaScalingEnum);
@@ -5889,10 +5885,10 @@
 	else phi=1.0;
 
-	/*Retrieve ice thickness at vertices: */
-	Input* deltathickness_input=this->GetInput(SurfaceloadIceThicknessRateEnum);
+	/*Retrieve surface load for ice: */
+	Input* deltathickness_input=this->GetInput(DeltaIceThicknessEnum);
 	if (!deltathickness_input)_error_("delta thickness input needed to compute sea level change!");
 
 	/*/Average ice thickness over grounded area of the element only: {{{*/
-	if(!notfullygrounded)deltathickness_input->GetInputAverage(&Idot);
+	if(!notfullygrounded)deltathickness_input->GetInputAverage(&I);
 	else{
 		IssmDouble total_weight=0;
@@ -5907,12 +5903,12 @@
 		/* Start  looping on the number of gaussian points and average over these gaussian points: */
 		total_weight=0;
-		Idot=0;
+		I=0;
 		while(gauss->next()){
-			IssmDouble Idotg=0;
-			deltathickness_input->GetInputValue(&Idotg,gauss);
-			Idot+=Idotg*gauss->weight;
+			IssmDouble Ig=0;
+			deltathickness_input->GetInputValue(&Ig,gauss);
+			I+=Ig*gauss->weight;
 			total_weight+=gauss->weight;
 		}
-		Idot=Idot/total_weight;
+		I=I/total_weight;
 		delete gauss;
 	}
@@ -5922,13 +5918,13 @@
 	_assert_(oceanarea>0.);
 	if(scaleoceanarea) oceanarea=3.619e+14; // use true ocean area, m^2
-	bslcice = rho_ice*area*phi*Idot*dt/(oceanarea*rho_water);
+	bslcice = rho_ice*area*phi*I/(oceanarea*rho_water);
 	_assert_(!xIsNan<IssmDouble>(bslcice));
 
 	if(computerigid){
 		/*convert from m to kg/m^2:*/
-		Idot=Idot*rho_ice*phi;
+		I=I*rho_ice*phi;
 
 		/*convolve:*/
-		for(int i=0;i<gsize;i++) Sgi[i]+=G[i]*Idot*dt;
+		for(int i=0;i<gsize;i++) Sgi[i]+=G[i]*I;
 	}
 
@@ -5948,6 +5944,5 @@
 	IssmDouble area;
 	IssmDouble phi=1.0; //WARNING: do not touch this, default is entire elemnt contributes barystatic
-	IssmDouble Wdot;  //change in water height thickness (Farrel and Clarke, Equ. 4)
-	IssmDouble dt=0;
+	IssmDouble W;  //change in water height thickness (Farrel and Clarke, Equ. 4)
 	bool notfullygrounded=false;
 	bool scaleoceanarea= false;
@@ -5982,5 +5977,4 @@
 	rho_water=FindParam(MaterialsRhoSeawaterEnum);
 	rho_freshwater=FindParam(MaterialsRhoFreshwaterEnum);
-	dt=FindParam(TimesteppingTimeStepEnum);
 	this->parameters->FindParam(&computeelastic,SolidearthSettingsElasticEnum);
 	this->parameters->FindParam(&scaleoceanarea,SolidearthSettingsOceanAreaScalingEnum);
@@ -5993,20 +5987,20 @@
 
 	/*Retrieve water height at vertices: */
-	Input* deltathickness_input=this->GetInput(SurfaceloadWaterHeightRateEnum);
-	if (!deltathickness_input)_error_("SurfaceloadWaterHeightRateEnum input needed to compute sea level change!");
-	deltathickness_input->GetInputAverage(&Wdot);
+	Input* deltathickness_input=this->GetInput(DeltaTwsEnum);
+	if (!deltathickness_input)_error_("DeltaTwsEnum input needed to compute sea level change!");
+	deltathickness_input->GetInputAverage(&W);
 
 	/*Compute barystatic component:*/
 	_assert_(oceanarea>0.);
 	if(scaleoceanarea) oceanarea=3.619e+14; // use true ocean area, m^2
-	bslchydro = rho_freshwater*area*phi*Wdot*dt/(oceanarea*rho_water);
+	bslchydro = rho_freshwater*area*phi*W/(oceanarea*rho_water);
 	_assert_(!xIsNan<IssmDouble>(bslchydro));
 
 	if(computeelastic){
 		/*convert from m to kg/m^2:*/
-		Wdot=Wdot*rho_freshwater*phi;
+		W=W*rho_freshwater*phi;
 
 		/*convolve:*/
-		for(int i=0;i<gsize;i++) Sgi[i]+=G[i]*Wdot*dt;
+		for(int i=0;i<gsize;i++) Sgi[i]+=G[i]*W;
 	}
 
@@ -6057,6 +6051,6 @@
 
 	/*Retrieve bottom pressure change and average over the element: */
-	Input* bottompressure_change_input=this->GetInput(DslSeaWaterPressureChangeAtSeaFloorEnum);
-	if (!bottompressure_change_input)_error_("bottom pressure input needed to compute sea level change fingerprint!");
+	Input* bottompressure_change_input=this->GetInput(DeltaBottomPressureEnum);
+	if (!bottompressure_change_input)_error_("DeltaBottomPressureEnum pressure input needed to compute sea level change fingerprint!");
 	bottompressure_change_input->GetInputAverage(&BP);
 
@@ -6078,8 +6072,6 @@
 	IssmDouble rho_water;
 	IssmDouble* G=NULL;
-	int  bp_compute_fingerprints= 0;
 
 	/*retrieve parameters:*/
-	this->parameters->FindParam(&bp_compute_fingerprints,DslComputeFingerprintsEnum);
 	rho_water=FindParam(MaterialsRhoSeawaterEnum);
 
@@ -6118,5 +6110,5 @@
 	/*diverse:*/
 	int gsize;
-	IssmDouble Idot, S, BP;		//change in relative ice thickness and sea level
+	IssmDouble I, S, BP;		//change in relative ice thickness and sea level
 	IssmDouble rho_ice,rho_water;
 	int horiz;
@@ -6137,5 +6129,5 @@
 	this->parameters->FindParam(&computeelastic,SolidearthSettingsElasticEnum);
 	this->parameters->FindParam(&horiz,SolidearthSettingsHorizEnum);
-	this->parameters->FindParam(&bp_compute_fingerprints,DslComputeFingerprintsEnum);
+	this->parameters->FindParam(&bp_compute_fingerprints,SolidearthSettingsComputeBpGrdEnum);
 
 	/*early return if elastic not requested:*/
@@ -6163,5 +6155,5 @@
 		/*If bottom pressures are available, retrieve them to load the bedrock:*/
 		if(bp_compute_fingerprints){
-			Input* bottompressure_change_input=this->GetInput(DslSeaWaterPressureChangeAtSeaFloorEnum);
+			Input* bottompressure_change_input=this->GetInput(DeltaBottomPressureEnum);
 			if (!bottompressure_change_input)_error_("bottom pressure input needed to compute sea level change fingerprint!");
 			bottompressure_change_input->GetInputAverage(&BP);
@@ -6182,20 +6174,18 @@
 	}
 	else if (masks->isiceonly[this->lid]){
-		IssmDouble dt=0;
-		dt=FindParam(TimesteppingTimeStepEnum);
 
 		/*Compute ice thickness change: */
-		Input* deltathickness_input=this->GetInput(SurfaceloadIceThicknessRateEnum);
-		if (!deltathickness_input)_error_("delta thickness input needed to compute sea level change!");
-		deltathickness_input->GetInputAverage(&Idot);
+		Input* deltathickness_input=this->GetInput(DeltaIceThicknessEnum);
+		if (!deltathickness_input)_error_("DeltaIceThicknessEnum delta thickness input needed to compute sea level change!");
+		deltathickness_input->GetInputAverage(&I);
 
 		/*convert to kg/m^2*/
-		Idot=Idot*rho_ice;
+		I=I*rho_ice;
 
 		for(int i=0;i<gsize;i++){
-			Up[i]+=Idot*dt*GU[i];
+			Up[i]+=I*GU[i];
 			if(horiz){
-				North[i]+=Idot*dt*GN[i];
-				East[i]+=Idot*dt*GE[i];
+				North[i]+=I*GN[i];
+				East[i]+=I*GE[i];
 			}
 		}
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.h	(revision 26047)
@@ -17,4 +17,5 @@
 class Node;
 class Material;
+class Matlitho;
 class Seg;
 class ElementMatrix;
@@ -154,5 +155,5 @@
 
 		#ifdef _HAVE_GIA_
-		void   GiaDeflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt,IssmDouble* x,IssmDouble* y);
+		void   GiaDeflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt,Matlitho* litho, IssmDouble* x,IssmDouble* y);
 		#endif
 		#ifdef _HAVE_ESA_
Index: /issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 26047)
@@ -822,8 +822,4 @@
 			break;
 
-		case GiaSolutionEnum:
-			analyses_temp[numanalyses++]=GiaAnalysisEnum;
-			break;
-
 		case LoveSolutionEnum:
 			analyses_temp[numanalyses++]=LoveAnalysisEnum;
@@ -838,9 +834,4 @@
 			break;
 
-		case SealevelchangeSolutionEnum:
-			analyses_temp[numanalyses++]=SealevelchangeAnalysisEnum;
-			analyses_temp[numanalyses++]=GiaAnalysisEnum;
-			break;
-
 		case SmbSolutionEnum:
 			analyses_temp[numanalyses++]=SmbAnalysisEnum;
@@ -853,5 +844,5 @@
 		case TransientSolutionEnum:{
 			/*We have multiple analyses here, process one by one*/
-			bool isSIA,isFS,isthermal,isenthalpy,ismasstransport,isgroundingline,isstressbalance,ismovingfront,ishydrology,isdamage,issmb,isslc,isesa,isgia,issampling;
+			bool isSIA,isFS,isthermal,isenthalpy,ismasstransport,isgroundingline,isstressbalance,ismovingfront,ishydrology,isdamage,issmb,isslc,isesa,issampling;
 			iomodel->FindConstant(&isthermal,"md.transient.isthermal");
 			iomodel->FindConstant(&ismovingfront,"md.transient.ismovingfront");
@@ -864,5 +855,4 @@
 			iomodel->FindConstant(&isslc,"md.transient.isslc");
 			iomodel->FindConstant(&isesa,"md.transient.isesa");
-			iomodel->FindConstant(&isgia,"md.transient.isgia");
 			iomodel->FindConstant(&issampling,"md.transient.issampling");
       int* analyses_iter     = NULL;
@@ -904,12 +894,8 @@
 			}
 			if(isslc){
-				analyses_temp[numanalyses++]=GiaAnalysisEnum;
 				analyses_temp[numanalyses++]=SealevelchangeAnalysisEnum;
 			}
 			if(isesa){
 				analyses_temp[numanalyses++]=EsaAnalysisEnum;
-			}
-			if(isgia){
-				analyses_temp[numanalyses++]=GiaAnalysisEnum;
 			}
 			if(issampling){
@@ -2123,56 +2109,6 @@
 void FemModel::MmeToInputFromId(int id, int rootenum, int interpolationenum){ /*{{{*/
 
-	TransientInput* transientinput  = NULL;
-	TransientInput* transientinput2 = NULL;
-	Tria* element                    = NULL;
-	IssmDouble value;
-	IssmDouble* values               = NULL;
-	IssmDouble* times                = NULL;
-	int N;
-
-	/*find thickness dataset: */
-	DatasetInput* datasetinput = this->inputs->GetDatasetInput(rootenum);
-
-	/*Initialize new transient input: */
-	transientinput = datasetinput->GetTransientInputByOffset(0); _assert_(transientinput);
-	transientinput->GetAllTimes(&times,&N);
-	this->inputs->SetTransientInput(DummyEnum,times,N);
-	transientinput2 = this->inputs->GetTransientInput(DummyEnum);
-
-	for(Object* & object : this->elements->objects){
-		Tria*   element=xDynamicCast<Tria*>(object);
-
-		/*recover the right field from the mme: */
-		transientinput = datasetinput->GetTransientInputByOffset(id); _assert_(transientinput);
-
-		/*copy values from the transientinput to the final transientinput2: */
-		for (int j=0;j<N;j++){
-			TriaInput* tria_input=transientinput->GetTriaInput(j);
-			element->InputServe(tria_input);
-			if(interpolationenum==P0Enum){
-				value=tria_input->element_values[0];
-				transientinput2->AddTriaTimeInput( j,1,&(element->lid),&value,P0Enum);
-			}
-			else if(interpolationenum==P1Enum){
-
-				/*Get values and lid list*/
-				const int   numvertices     = element->GetNumberOfVertices();
-				int        *vertexlids      = xNew<int>(numvertices);
-				int        *vertexsids      = xNew<int>(numvertices);
-
-				/*Recover vertices ids needed to initialize inputs*/
-				element->GetVerticesLidList(&vertexlids[0]);
-				element->GetVerticesSidList(&vertexsids[0]);
-				values=tria_input->element_values;
-				transientinput2->AddTriaTimeInput( j,numvertices,vertexlids,values,P1Enum);
-			}
-		}
-	}
-
-	/*wipe out existing SurfaceloadIceThicknessChangeEnum dataset:*/
-	this->inputs->ChangeEnum(DummyEnum,rootenum);
-
-	//reconfigure:
-	transientinput2->Configure(this->parameters);
+	MmeToInputFromIdx(this->inputs,this->elements,id,rootenum,interpolationenum);
+
 }	//}}}
 void FemModel::OmegaAbsGradientx( IssmDouble* pJ){/*{{{*/
@@ -4732,10 +4668,22 @@
 #endif
 #ifdef _HAVE_GIA_
-void FemModel::Deflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt, IssmDouble* x, IssmDouble* y){ /*{{{*/
+void FemModel::IvinsDeformation(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt, IssmDouble* x, IssmDouble* y){ /*{{{*/
+
+	/*Find the litho material to be used by all the elements:*/
+	Matlitho* matlitho=NULL;
+	for (Object* & object: this->materials->objects){
+		Material* material=xDynamicCast<Material*>(object);
+		if(material->ObjectEnum()==MatlithoEnum){
+			matlitho=xDynamicCast<Matlitho*>(material);
+			break;
+		}
+	}
+	_assert_(matlitho);
+
 
 	/*Go through elements, and add contribution from each element to the deflection vector wg:*/
 	for(Object* & object : this->elements->objects){
 		Element* element = xDynamicCast<Element*>(object);
-		element->GiaDeflection(wg,dwgdt, x,y);
+		element->GiaDeflection(wg,dwgdt, matlitho, x,y);
 	}
 }
@@ -4842,4 +4790,5 @@
 	IssmDouble* partitionhydro=NULL;
 	int nparthydro;
+	int istws=0;
 
 
@@ -4885,12 +4834,15 @@
 
 	/*Call the barystatic sea level change core for hydro: */
-	bslchydro_cpu=0;
-	for(int i=0;i<elements->Size();i++){
-		Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
-		bslchydro_cpu+=element->SealevelchangeBarystaticHydro(RSLgi,masks, bslchydro_partition,partitionhydro,oceanarea);
+	bslchydro_cpu=0; //make sure to initialize this, so we have a total barystatic contribution computed at 0.
+	this->parameters->FindParam(&istws,TransientIshydrologyEnum);
+	if(istws){
+		for(int i=0;i<elements->Size();i++){
+			Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
+			bslchydro_cpu+=element->SealevelchangeBarystaticHydro(RSLgi,masks, bslchydro_partition,partitionhydro,oceanarea);
+		}
 	}
 
 	/*Call the barystatic sea level change core for bottom pressures: */
-	this->parameters->FindParam(&bp_compute_fingerprints,DslComputeFingerprintsEnum);
+	this->parameters->FindParam(&bp_compute_fingerprints,SolidearthSettingsComputeBpGrdEnum);
 	if(bp_compute_fingerprints){
 		for(int i=0;i<elements->Size();i++){
Index: /issm/trunk-jpl/src/c/classes/FemModel.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/classes/FemModel.h	(revision 26047)
@@ -160,5 +160,5 @@
 		void ThicknessPositivex(IssmDouble* pJ);
 		#ifdef _HAVE_GIA_
-		void Deflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt, IssmDouble* x, IssmDouble* y);
+		void IvinsDeformation(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt, IssmDouble* x, IssmDouble* y);
 		#endif
 		#ifdef _HAVE_ESA_
Index: /issm/trunk-jpl/src/c/classes/Inputs/Inputs.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/Inputs.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/classes/Inputs/Inputs.cpp	(revision 26047)
@@ -234,4 +234,27 @@
 }
 /*}}}*/
+void Inputs::AXPY(IssmDouble alpha, int xenum, int yenum, int zenum){/*{{{*/
+
+	_assert_(this);
+
+	/*Get indices from enums*/
+	int index_x = EnumToIndex(xenum);
+	int index_y = EnumToIndex(yenum);
+	int index_z = EnumToIndex(zenum);
+
+	/*Delete output if it already exists*/
+	if(this->inputs[index_z]) delete this->inputs[index_z];
+
+	/*Make sure that old one exists*/
+	if(!this->inputs[index_x]) _error_("Input "<<EnumToStringx(xenum)<<" not found");
+	if(!this->inputs[index_y]) _error_("Input "<<EnumToStringx(yenum)<<" not found");
+
+	/*Make a copy*/
+	Input* z=this->inputs[index_y]->copy();
+
+	/*AXPY: */
+	this->inputs[index_z]->AXPY(this->inputs[index_x],alpha);
+}
+/*}}}*/
 int  Inputs::EnumToIndex(int enum_in){/*{{{*/
 
Index: /issm/trunk-jpl/src/c/classes/Inputs/Inputs.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/Inputs.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/classes/Inputs/Inputs.h	(revision 26047)
@@ -46,4 +46,5 @@
 		int      DeleteInput(int enum_type);
 		void     DuplicateInput(int original_enum,int new_enum);
+		void     AXPY(IssmDouble alpha, int xenum, int yenum, int zenum);
 		void     DeepEcho(void);
 		void     Echo(void);
Index: /issm/trunk-jpl/src/c/classes/IoModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/IoModel.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/classes/IoModel.cpp	(revision 26047)
@@ -656,4 +656,5 @@
 					if(strcmp(record_name,"md.timestepping.type")==0) integer = IoCodeToEnumTimestepping(integer);
 					if(strcmp(record_name,"md.amr.type")==0) integer = IoCodeToEnumAmr(integer);
+					if(strcmp(record_name,"md.solidearth.settings.grdmodel")==0) integer = IoCodeToEnumGrd(integer);
 
 					/*Broadcast to other cpus*/
@@ -1822,8 +1823,5 @@
 				matrix=array[i];
 
-				//recover time vector: 
-				times=xNew<IssmDouble>(N);
-				for(int t=0;t<N;t++) times[t] = matrix[(M-1)*N+t];
-
+				
 				//initialize transient input dataset:
 				TransientInput* transientinput=inputs->SetDatasetTransientInput(input_enum,i, times,N);
@@ -1847,4 +1845,9 @@
 
 					if(M==this->numberofvertices || M==(this->numberofvertices+1)){
+
+						//recover time vector: 
+						times=xNew<IssmDouble>(N);
+						if(M==this->numberofvertices) times[0] = matrix[M-1];
+						if(M==this->numberofvertices+1) for(int t=0;t<N;t++) times[t] = matrix[(M-1)*N+t];
 
 						IssmDouble* values=xNew<IssmDouble>(numvertices);
@@ -1865,8 +1868,12 @@
 						IssmDouble value;
 
+						//recover time vector: 
+						times=xNew<IssmDouble>(N);
+						if(M==this->numberofelements) times[0] = matrix[M-1];
+						if(M==this->numberofelements+1) for(int t=0;t<N;t++) times[t] = matrix[(M-1)*N+t];
+
 						for(int t=0;t<N;t++){ 
 
 							value=matrix[N*element->Sid()+t];
-							//if(element->Sid()==188 && t==0)_printf_("value: " << value << "\n");
 							switch(element->ObjectEnum()){
 								case TriaEnum:  transientinput->AddTriaTimeInput( t,1,&element->lid,&value,P0Enum); break;
@@ -1875,4 +1882,23 @@
 							}
 						}
+					}
+					else if(M==2 || M==1){
+						IssmDouble value;
+
+						//recover time vector: 
+						times=xNew<IssmDouble>(N);
+						if(M==1) times[0] = 0;
+						if(M==2) for(int t=0;t<N;t++) times[t] = matrix[(M-1)*N+t];
+
+						for(int t=0;t<N;t++){ 
+
+							value=matrix[t];
+							switch(element->ObjectEnum()){
+								case TriaEnum:  transientinput->AddTriaTimeInput( t,1,&element->lid,&value,P0Enum); break;
+								case PentaEnum:  transientinput->AddPentaTimeInput( t,1,&element->lid,&value,P0Enum); break;
+								default: _error_("Not implemented yet");
+							}
+						}
+
 					}
 					else _error_("FetchDataToInput error message: row size of MatArray elements should be either numberofelements (+1) or numberofvertices (+1)");
Index: /issm/trunk-jpl/src/c/classes/Profiler.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Profiler.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/classes/Profiler.h	(revision 26047)
@@ -22,19 +22,20 @@
 #define MOVINGFRONTCORE		9 /*Profiling MOVINGFRONT */
 #define MASSTRANSPORTCORE	10 /*Profiling MASSTRANSPORT */
-#define SMBCORE				11 /*Profiling SMB */
-#define GROUNDINGLINECORE	12 /*Profiling GROUDINGLINE MIGRATION */
-#define GIACORE				13 /*Profiling GIA */
-#define ESACORE				14 /*Profiling ESA */
-#define SLRCORE				15 /*Profiling SLR */
-#define SAMPLINGCORE	16 /*Profiling SAMPLING */
-#define MPISERIAL				17 /*Profiling MPISerial */
-#define SEDLOOP				18 /*Profiling MPISerial */
-#define SEDMatrix				19 /*Profiling MPISerial */
-#define SEDUpdate				20 /*Profiling MPISerial */
-#define EPLLOOP				21 /*Profiling MPISerial */
-#define EPLMasking			22 /*Profiling MPISerial */
-#define EPLMatrices			23 /*Profiling MPISerial */
-#define EPLUpdate				24 /*Profiling MPISerial */
-#define MAXPROFSIZE			25 /*Used to initialize static arrays*/
+#define OCEANTRANSPORTCORE	11 /*Profiling OCEANTRANSPORT */
+#define SMBCORE				12 /*Profiling SMB */
+#define GROUNDINGLINECORE	13 /*Profiling GROUDINGLINE MIGRATION */
+#define GIACORE				14 /*Profiling GIA */
+#define ESACORE				15 /*Profiling ESA */
+#define SLRCORE				16 /*Profiling SLR */
+#define SAMPLINGCORE	17 /*Profiling SAMPLING */
+#define MPISERIAL				18 /*Profiling MPISerial */
+#define SEDLOOP				19 /*Profiling MPISerial */
+#define SEDMatrix				20 /*Profiling MPISerial */
+#define SEDUpdate				21 /*Profiling MPISerial */
+#define EPLLOOP				22 /*Profiling MPISerial */
+#define EPLMasking			23 /*Profiling MPISerial */
+#define EPLMatrices			24 /*Profiling MPISerial */
+#define EPLUpdate				25 /*Profiling MPISerial */
+#define MAXPROFSIZE			26 /*Used to initialize static arrays*/
 
 
Index: /issm/trunk-jpl/src/c/cores/CorePointerFromSolutionEnum.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/CorePointerFromSolutionEnum.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/cores/CorePointerFromSolutionEnum.cpp	(revision 26047)
@@ -59,16 +59,9 @@
 			solutioncore=&masstransport_core;
 			break;
-		case SealevelchangeSolutionEnum:
-			solutioncore=&sealevelchange_core;
+		case OceantransportSolutionEnum:
+			solutioncore=&oceantransport_core;
 			break;
 		case EsaSolutionEnum:
 			solutioncore=&esa_core;
-			break;
-		case GiaSolutionEnum:
-			#if _HAVE_GIA_
-			solutioncore=&gia_core;
-			#else
-			_error_("ISSM not compiled with Gia capability");
-			#endif
 			break;
 		case DamageEvolutionSolutionEnum:
Index: /issm/trunk-jpl/src/c/cores/cores.h
===================================================================
--- /issm/trunk-jpl/src/c/cores/cores.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/cores/cores.h	(revision 26047)
@@ -35,4 +35,5 @@
 void controlvalidation_core(FemModel* femmodel);
 void masstransport_core(FemModel* femmodel);
+void oceantransport_core(FemModel* femmodel);
 void depthaverage_core(FemModel* femmodel);
 void extrudefrombase_core(FemModel* femmodel);
@@ -66,7 +67,7 @@
 Vector<IssmDouble>* sealevelchange_core_sal(FemModel* femmodel,SealevelMasks* masks, Vector<IssmDouble>* RSLg_barystatic,IssmDouble oceanarea);
 void sealevelchange_core_deformation(Vector<IssmDouble>** pN_radial, Vector<IssmDouble>** pU_radial, Vector<IssmDouble>** pU_north,Vector<IssmDouble>** pU_east,FemModel* femmodel,Vector<IssmDouble>* RSLg, SealevelMasks* masks);
-void GetStericRate(Vector<IssmDouble> ** psteric_rate_g, FemModel* femmodel);
-void GetDynamicRate(Vector<IssmDouble> ** pdynamic_rate_g, FemModel* femmodel);
-void SetBottomPressure(FemModel* femmodel);
+void couplerinput_core(FemModel* femmodel);
+void coupleroutput_core(FemModel* femmodel);
+
 
 //optimization
Index: /issm/trunk-jpl/src/c/cores/esa_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/esa_core.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/cores/esa_core.cpp	(revision 26047)
@@ -41,5 +41,5 @@
 	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
 	femmodel->parameters->FindParam(&isesa,TransientIsesaEnum);
-	femmodel->parameters->FindParam(&iscoupler,TransientIscouplerEnum);
+	femmodel->parameters->FindParam(&iscoupler,IsSlcCouplingEnum);
 
 	/* recover coordinates of vertices: */
Index: sm/trunk-jpl/src/c/cores/gia_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/gia_core.cpp	(revision 26046)
+++ 	(revision )
@@ -1,94 +1,0 @@
-/*!\file: gia_core.cpp
- * \brief: core of the GIA solution 
- */ 
-
-#include "./cores.h"
-#include "../toolkits/toolkits.h"
-#include "../classes/classes.h"
-#include "../classes/Inputs/TriaInput.h"
-#include "../classes/Inputs/DatasetInput.h"
-#include "../shared/shared.h"
-#include "../modules/modules.h"
-#include "../solutionsequences/solutionsequences.h"
-void gia_core(FemModel* femmodel){
-
-	Vector<IssmDouble> *wg    = NULL;
-	Vector<IssmDouble> *dwdtg = NULL;
-	IssmDouble          *x    = NULL;
-	IssmDouble          *y    = NULL;
-	int nummodels,giamodel;
-	IssmDouble modelid; 
-
-	/*parameters: */
-	bool save_results;
-	int  gsize;
-	
-	/*Start profiler*/
-	femmodel->profiler->Start(GIACORE);
-
-	/*Recover some parameters: */
-	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
-
-	if(VerboseSolution()) _printf0_("   computing GIA\n");
-
-	/*Call on core computations: */
-	femmodel->SetCurrentConfiguration(GiaAnalysisEnum);
-
-	/*Figure out type of gia model:*/
-	femmodel->parameters->FindParam(&giamodel,GiaModelEnum);
-
-	if(giamodel==1){ //GiaIvins
-		/*Figure out size of g-set deflection vector and allocate solution vector: */
-		gsize      = femmodel->nodes->NumberOfDofs(GsetEnum);
-		wg = new Vector<IssmDouble>(gsize);
-		dwdtg = new Vector<IssmDouble>(gsize);
-
-		/*first, recover x and y vectors from vertices: */
-		VertexCoordinatesx(&x,&y,NULL,femmodel->vertices); //no need for z coordinate
-
-		/*call the main module: */
-		femmodel->Deflection(wg,dwdtg,x,y);
-
-		/*assemble vector: */
-		wg->Assemble();
-		dwdtg->Assemble();
-
-		InputUpdateFromVectorx(femmodel,wg,UGiaEnum,VertexSIdEnum);
-		InputUpdateFromVectorx(femmodel,dwdtg,UGiaRateEnum,VertexSIdEnum);
-
-		if(save_results){
-			int outputs[2] = {UGiaEnum,UGiaRateEnum};
-			femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],2);
-		}
-
-		xDelete<IssmDouble>(x);
-		xDelete<IssmDouble>(y);
-	}
-	else if(giamodel==2){ //GiaCaron
-		/*not implemneted yet*/
-	}
-	else if(giamodel==3){ //GiaMme
-		
-		/*Go grab the values for Ngia and Ugia in the offline GiaMme class:*/ 
-		femmodel->parameters->FindParam(&modelid,GiaModelidEnum); 
-		modelid--; //from matlab
-
-		/*find the Ngia and Ugia dataset:*/
-		DatasetInput* dataset_input_ngia=femmodel->inputs->GetDatasetInput(GiaMmeNgiaEnum);
-		DatasetInput* dataset_input_ugia=femmodel->inputs->GetDatasetInput(GiaMmeUgiaEnum);
-		/*Go find the modelid'th input:*/
-		TriaInput* tria_input_ngia=dataset_input_ngia->GetTriaInputByOffset(modelid);
-		TriaInput* tria_input_ugia=dataset_input_ugia->GetTriaInputByOffset(modelid);
-
-		/*Plug into SealevelUGiaRate and SealevelNGiaRate inputs:*/
-		Input* tria_input_copy_ngia=tria_input_ngia->copy();
-		Input* tria_input_copy_ugia=tria_input_ugia->copy();
-		tria_input_copy_ngia->ChangeEnum(NGiaRateEnum);
-		tria_input_copy_ugia->ChangeEnum(UGiaRateEnum);
-		femmodel->inputs->AddInput(tria_input_copy_ngia);
-		femmodel->inputs->AddInput(tria_input_copy_ugia);
-	}
-	
-	/*End profiler*/
-	femmodel->profiler->Stop(GIACORE);
-}
Index: /issm/trunk-jpl/src/c/cores/hydrology_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/hydrology_core.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/cores/hydrology_core.cpp	(revision 26047)
@@ -44,4 +44,21 @@
 		InputDuplicatex(femmodel,WatercolumnEnum,WaterColumnOldEnum);
 
+	}
+	/*Using the Tws based Model*/
+	if (hydrology_model==HydrologyTwsEnum){
+		if(VerboseSolution()) _printf0_("   computing water column\n");
+	
+		femmodel->SetCurrentConfiguration(HydrologyTwsAnalysisEnum);
+		
+		/*save current tws  before updating:*/
+		InputDuplicatex(femmodel,WatercolumnEnum,WaterColumnOldEnum);
+	
+		/*grab tws from the hydrology.spcwatercolumn field input and update 
+		 * the solution with it:*/
+		Vector<IssmDouble>*  ug  = NULL;
+		GetVectorFromInputsx(&ug,femmodel,HydrologyTwsSpcEnum,VertexPIdEnum);
+		InputUpdateFromSolutionx(femmodel,ug); 
+		delete ug;
+	
 	}
 
Index: /issm/trunk-jpl/src/c/cores/masstransport_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/masstransport_core.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/cores/masstransport_core.cpp	(revision 26047)
@@ -64,5 +64,4 @@
 		InputDuplicatex(femmodel,BaseEnum,BaseOldEnum);
 		InputDuplicatex(femmodel,SurfaceEnum,SurfaceOldEnum);
-		InputDuplicatex(femmodel,SealevelchangeCumDeltathicknessEnum,SealevelchangeCumDeltathicknessOldEnum);
 		if(stabilization==4){
 			solutionsequence_fct(femmodel);
Index: /issm/trunk-jpl/src/c/cores/oceantransport_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/oceantransport_core.cpp	(revision 26047)
+++ /issm/trunk-jpl/src/c/cores/oceantransport_core.cpp	(revision 26047)
@@ -0,0 +1,52 @@
+/*!\file: oceantransport_core.cpp
+ * \brief: core of the oceantransport solution 
+ */ 
+
+#include "./cores.h"
+#include "../toolkits/toolkits.h"
+#include "../classes/classes.h"
+#include "../shared/shared.h"
+#include "../modules/modules.h"
+#include "../solutionsequences/solutionsequences.h"
+
+void oceantransport_core(FemModel* femmodel){
+
+	/*Start profiler*/
+	femmodel->profiler->Start(OCEANTRANSPORTCORE);
+
+	/*parameters: */
+	int    numoutputs;
+	bool   save_results;
+	bool   dakota_analysis;
+	int    solution_type;
+
+	/*activate configuration*/
+	femmodel->SetCurrentConfiguration(OceantransportAnalysisEnum);
+
+	/*recover parameters: */
+	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
+	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
+
+	if(VerboseSolution()) _printf0_("   computing ocean mass transport\n");
+
+	femmodel->SetCurrentConfiguration(OceantransportAnalysisEnum);
+
+	/*save current bottom pressures before updating:*/
+	InputDuplicatex(femmodel,BottomPressureEnum,BottomPressureOldEnum);
+	InputDuplicatex(femmodel,DslEnum,DslOldEnum);
+	InputDuplicatex(femmodel,StrEnum,StrOldEnum);
+
+	/*grab bottom pressures, dsl and str from OceantransportSpcbottompressure, OceantransportSpcdslEnum 
+	 * and OceantransportSpcstrEnum  inputs in each element, assemble into a vector and feed to 
+	 * InputUpdateFromSolutionx which will deal with accumulating such inputs:*/
+	Vector<IssmDouble>*  ug  = NULL;
+	GetSolutionFromInputsx(&ug,femmodel); 
+	InputUpdateFromSolutionx(femmodel,ug); 
+
+	delete ug;
+
+	if(solution_type==OceantransportSolutionEnum)femmodel->RequestedDependentsx();
+
+	/*profiler*/
+	femmodel->profiler->Stop(OCEANTRANSPORTCORE);
+}
Index: /issm/trunk-jpl/src/c/cores/sealevelchange_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/sealevelchange_core.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/cores/sealevelchange_core.cpp	(revision 26047)
@@ -22,40 +22,11 @@
 	/*Parameters, variables:*/
 	bool save_results;
-	bool isslc=0;
-	bool isgia=0;
-	int  grd=0;
-	int  isexternal=0;
-	bool iscoupler=0;
-	int solution_type;
 
 	/*Retrieve parameters:*/
-	femmodel->parameters->FindParam(&isslc,TransientIsslcEnum);
-	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
 	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
-	femmodel->parameters->FindParam(&grd,SolidearthSettingsGRDEnum); 
-	femmodel->parameters->FindParam(&isexternal,SolidearthIsExternalEnum); 
-	femmodel->parameters->FindParam(&iscoupler,TransientIscouplerEnum);
-
-	/*in case we are running SealevelchangeSolutionEnum, then bypass transient settings:*/
-	if(solution_type==SealevelchangeSolutionEnum){
-		isslc=1;
-		isgia=1;
-	}
-
-	/*Should we be here?:*/
-	if(!isslc)return;
-
+	
 	/*Verbose: */
 	if(VerboseSolution()) _printf0_("   computing sea level change\n");
 
-	/*Run gia core: */
-	if(isgia){
-		#ifdef _HAVE_GIA_
-		gia_core(femmodel);
-		#else
-		_error_("ISSM was not compiled with gia capabilities. Exiting");
-		#endif
-	}
-
 	/*set SLR configuration: */
 	femmodel->SetCurrentConfiguration(SealevelchangeAnalysisEnum);
@@ -63,23 +34,19 @@
 	/*run geometry core: */
 	sealevelchange_geometry(femmodel);
-
+	
 	/*any external forcings?:*/
-	if(isexternal)solidearthexternal_core(femmodel);
+	solidearthexternal_core(femmodel);
+
+	/*Run coupler input transfer:*/
+	couplerinput_core(femmodel);
 
 	/*Run geodetic:*/
-	//if(modelid==earthid)  //not sure how we proceed yet on coupling.
-	if(grd)grd_core(femmodel);
+	grd_core(femmodel);
 
 	/*Run steric core for sure:*/
 	dynstr_core(femmodel);
 
-	if(iscoupler){
-		/*transfer sea level back to ice caps:*/
-		TransferSealevel(femmodel,SealevelEnum);
-		TransferSealevel(femmodel,BedEnum);
-
-		//reset cumdeltathickness  to 0: 
-		InputUpdateFromConstantx(femmodel->inputs,femmodel->elements,0.,SealevelchangeCumDeltathicknessEnum);
-	}
+	/*Run coupler output transfer: */
+	coupleroutput_core(femmodel);
 
 	/*Save results: */
@@ -93,11 +60,9 @@
 	}
 
-	/*requested dependents: */
-	if(solution_type==SealevelchangeSolutionEnum)femmodel->RequestedDependentsx();
-	
 	/*End profiler*/
 	femmodel->profiler->Stop(SLRCORE);
 }
 /*}}}*/
+
 void solidearthexternal_core(FemModel* femmodel){ /*{{{*/
 
@@ -113,21 +78,16 @@
 	int horiz=0;
 	int modelid=-1;
-   
+	int  isexternal=0;
+ 
 	/*parameters: */
-	bool isslc=0;
-	int  solution_type;
 	IssmDouble          dt;
 
 	/*Retrieve parameters:*/
-	femmodel->parameters->FindParam(&isslc,TransientIsslcEnum);
 	femmodel->parameters->FindParam(&horiz,SolidearthSettingsHorizEnum);
 	femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
-	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
-
-	/*in case we are running SealevelchangeSolutionEnum, then bypass transient settings:*/
-	if(solution_type==SealevelchangeSolutionEnum)isslc=1;
-
-	/*Should we be here?:*/
-	if(!isslc)return;
+	femmodel->parameters->FindParam(&isexternal,SolidearthIsExternalEnum); 
+	
+	/*Early return:*/
+	if (!isexternal)return;
 
 	/*Verbose: */
@@ -141,15 +101,4 @@
 		GetVectorFromInputsx(&bedrocknorth,femmodel,BedNorthEnum,VertexSIdEnum);
 	}
-	/*Deal with Mme: */
-	if (femmodel->inputs->GetInputObjectEnum(SolidearthExternalDisplacementEastRateEnum)==DatasetInputEnum){
-		/*retrieve model id: */
-		femmodel->parameters->FindParam(&modelid,SolidearthExternalModelidEnum);
-		/*replace dataset of forcings with only one, the modelid'th:*/
-		femmodel->MmeToInputFromId(modelid,SolidearthExternalDisplacementNorthRateEnum, P1Enum);
-		femmodel->MmeToInputFromId(modelid,SolidearthExternalDisplacementEastRateEnum, P1Enum);
-		femmodel->MmeToInputFromId(modelid,SolidearthExternalDisplacementUpRateEnum, P1Enum);
-		femmodel->MmeToInputFromId(modelid,SolidearthExternalGeoidRateEnum, P1Enum);
-		femmodel->MmeToInputFromId(modelid,SolidearthExternalBarystaticSeaLevelRateEnum, P1Enum);
-	}
 	
 	GetVectorFromInputsx(&geoid_rate,femmodel,SolidearthExternalGeoidRateEnum,VertexSIdEnum);
@@ -185,4 +134,67 @@
 }
 /*}}}*/
+void couplerinput_core(FemModel* femmodel){  /*{{{*/
+
+	/*Be very careful here, everything is well thought through, do not remove 
+	 * without taking big risks:*/
+	
+	/*parameters:*/
+	int  iscoupling;
+	int  modelid,earthid;
+	int  count,frequency;
+	int  horiz;
+
+	/*retrieve more parameters:*/
+	femmodel->parameters->FindParam(&iscoupling,IsSlcCouplingEnum);
+	femmodel->parameters->FindParam(&frequency,SolidearthSettingsRunFrequencyEnum);
+	femmodel->parameters->FindParam(&count,SealevelchangeRunCountEnum);
+
+	if(iscoupling){
+		femmodel->parameters->FindParam(&modelid,ModelIdEnum);
+		femmodel->parameters->FindParam(&earthid,EarthIdEnum);
+	}
+	else{
+		/* we are here, we are not running in a coupler, so we will indeed compute SLR,
+		 * so make sure we are identified as being the Earth.:*/
+		modelid=1; earthid=1; 
+	}
+
+	/*if we are carrying loads but are not yet computing grd core, accumulate them and skip 
+	 * the rest: */
+	if (count<frequency){
+		count++; 
+		femmodel->parameters->SetParam(count,SealevelchangeRunCountEnum); 
+		return;
+	}
+
+	/*Basins are supposed to accumulate loads and hand them over to the Earth
+	  for slr computations every "frequency" time steps. If we are here, we
+	  have reached the "frequency"'th time step, and we are going to pick up
+	  the old loads, the current loads, and send them to the Earth for slr
+	  computations.  So the Earth is never supposed to compute loads. Except,
+	  when we are running the Earth as a giant basin (ex: running a
+	  Peltier-style GIA model, or running a "Snow Ball" Earth) which only
+	  happens when we are not coupled, at which point we are sending these
+	  loads to ourselves (hence the convoluted condition).
+	  */
+
+	/*transer loads from basins to Earth for grd core computations. :*/
+	if(iscoupling){
+	
+		/*transfer ice thickness change load from basins to earth: */
+		TransferForcing(femmodel,DeltaIceThicknessEnum);
+		TransferForcing(femmodel,DeltaBottomPressureEnum);
+		TransferForcing(femmodel,DeltaTwsEnum);
+
+		/*transfer external forcings back to Earth:*/
+		TransferSealevel(femmodel,BedEnum);
+		TransferSealevel(femmodel,SealevelEnum);
+		if(horiz){
+			TransferSealevel(femmodel,BedEastEnum);
+			TransferSealevel(femmodel,BedNorthEnum);
+		}
+	}
+	
+}; /*}}}*/
 void grd_core(FemModel* femmodel){ /*{{{*/
 
@@ -203,102 +215,65 @@
 
 	/*parameters:*/
-	bool iscoupler;
-	int  solution_type;
 	int  modelid,earthid;
-	bool istransientmasstransport;
-	int  frequency,count;
 	int  horiz;
-	IssmDouble dt;
 	IssmDouble oceanarea;
-	int bp_compute_fingerprints=0;
+	int  count,frequency,iscoupling;
+	int  grd=0;
 
 	/*Verbose: */
 	if(VerboseSolution()) _printf0_("	  computing GRD sea level patterns\n");
-
-	/*retrieve more parameters:*/
-	femmodel->parameters->FindParam(&iscoupler,TransientIscouplerEnum);
+	
+	/*retrieve parameters:*/
+	femmodel->parameters->FindParam(&grd,SolidearthSettingsGRDEnum); 
 	femmodel->parameters->FindParam(&frequency,SolidearthSettingsRunFrequencyEnum);
 	femmodel->parameters->FindParam(&count,SealevelchangeRunCountEnum);
-	femmodel->parameters->FindParam(&horiz,SolidearthSettingsHorizEnum);
-	femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
-	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
-
-	if(iscoupler){
+
+	/*only run if grd was requested, if we are the earth, and we have reached
+	 * the necessary number of time steps dictated by :*/
+	if(!grd)            return;
+	if(count!=frequency)return;
+	femmodel->parameters->FindParam(&iscoupling,IsSlcCouplingEnum);
+	if(iscoupling){
 		femmodel->parameters->FindParam(&modelid,ModelIdEnum);
 		femmodel->parameters->FindParam(&earthid,EarthIdEnum);
-		femmodel->parameters->FindParam(&istransientmasstransport,TransientIsmasstransportEnum);
-	}
-	else{
-		/* we are here, we are not running in a coupler, so we will indeed compute SLR,
-		 * so make sure we are identified as being the Earth.:*/
-		modelid=1; earthid=1; 
-		/* in addition, if we are running solution_type SealevelchangeSolutionEnum, make sure we 
-		 * run, irresepective of the time settings:*/
-		count=frequency;
-	}
-
-	/*If we are running in coupled mode, the Earth model needs to run its own mass transport (if 
-	 * not already done by the mass trasnport module. For ice caps, they rely on the transient mass 
-	 * transport module exclusively:*/
-	if(iscoupler) if(modelid==earthid) if(!istransientmasstransport) EarthMassTransport(femmodel);
-
-	/*increment counter, or call solution core if count==frequency:*/
-	if (count<frequency){
-		count++; femmodel->parameters->SetParam(count,SealevelchangeRunCountEnum); 
-		return;
-	}
-
-	/*call sea-level change sub cores:*/
-	if(iscoupler){
-		/*transfer cumulated deltathickness forcing from ice caps to earth model: */
-		TransferForcing(femmodel,SealevelchangeCumDeltathicknessEnum);
-
-		/*we have accumulated thicknesses, dump them in deltathcikness: */
-		if(modelid==earthid)InputDuplicatex(femmodel,SealevelchangeCumDeltathicknessEnum,SurfaceloadIceThicknessRateEnum);
-	}
-
-	/*run cores:*/
-	if(modelid==earthid){
-
-		/*call masks core: */
-		masks=sealevel_masks(femmodel);
-
-		/*set bottom pressures:*/
-		SetBottomPressure(femmodel);
-
-		/*call barystatic core  (generalized eustatic - Farrel and Clark, Eq 4, 1st, 3rd and 4rd terms on the RHS) */
-		RSLg_barystatic=sealevelchange_core_barystatic(femmodel,masks,&oceanarea); 
-
-		/*call self attraction and loading module (ocean loading tems  - 2nd and 5th terms on the RHS of Farrel and Clark) */
-		RSLg=sealevelchange_core_sal(femmodel,masks,RSLg_barystatic,oceanarea); 
-
-		/*compute bedrock motion and derive geoid: */
-		sealevelchange_core_deformation(&N_grd,&U_grd,&U_north_grd,&U_east_grd,femmodel,RSLg,masks);
-
-		/*Update bedrock motion and geoid:*/
-		GetVectorFromInputsx(&geoid,femmodel,SealevelEnum,VertexSIdEnum);
-		GetVectorFromInputsx(&bedrock,femmodel,BedEnum,VertexSIdEnum);
-		if(horiz){
-			GetVectorFromInputsx(&bedrockeast,femmodel,BedEastEnum,VertexSIdEnum);
-			GetVectorFromInputsx(&bedrocknorth,femmodel,BedNorthEnum,VertexSIdEnum);
-		}
-		
-		geoid->AXPY(N_grd,1);
-		bedrock->AXPY(U_grd,1);
-		if(horiz){
-			bedrockeast->AXPY(U_east_grd,1);
-			bedrocknorth->AXPY(U_north_grd,1);
-		}
-
-		/*get some of the updates into elements:*/
-		InputUpdateFromVectorx(femmodel,U_grd,SealevelUEsaEnum,VertexSIdEnum); 
-		InputUpdateFromVectorx(femmodel,N_grd,SealevelNEsaEnum,VertexSIdEnum); 
-		InputUpdateFromVectorx(femmodel,RSLg,SealevelRSLEnum,VertexSIdEnum); 
-		InputUpdateFromVectorx(femmodel,RSLg_barystatic,SealevelRSLBarystaticEnum,VertexSIdEnum); 
-		if (horiz){
-			InputUpdateFromVectorx(femmodel,U_north_grd,SealevelUNorthEsaEnum,VertexSIdEnum);	
-			InputUpdateFromVectorx(femmodel,U_east_grd,SealevelUEastEsaEnum,VertexSIdEnum);	
-		} 
-	}
+		if(modelid!=earthid)return;
+	}
+
+	/*call masks core: */
+	masks=sealevel_masks(femmodel);
+
+	/*call barystatic core  (generalized eustatic - Farrel and Clark, Eq 4, 1st, 3rd and 4rd terms on the RHS) */
+	RSLg_barystatic=sealevelchange_core_barystatic(femmodel,masks,&oceanarea); 
+
+	/*call self attraction and loading module (ocean loading tems  - 2nd and 5th terms on the RHS of Farrel and Clark) */
+	RSLg=sealevelchange_core_sal(femmodel,masks,RSLg_barystatic,oceanarea); 
+
+	/*compute bedrock motion and derive geoid: */
+	sealevelchange_core_deformation(&N_grd,&U_grd,&U_north_grd,&U_east_grd,femmodel,RSLg,masks);
+
+	/*Update bedrock motion and geoid:*/
+	GetVectorFromInputsx(&geoid,femmodel,SealevelEnum,VertexSIdEnum);
+	GetVectorFromInputsx(&bedrock,femmodel,BedEnum,VertexSIdEnum);
+	if(horiz){
+		GetVectorFromInputsx(&bedrockeast,femmodel,BedEastEnum,VertexSIdEnum);
+		GetVectorFromInputsx(&bedrocknorth,femmodel,BedNorthEnum,VertexSIdEnum);
+	}
+
+	geoid->AXPY(N_grd,1);
+	bedrock->AXPY(U_grd,1);
+	if(horiz){
+		bedrockeast->AXPY(U_east_grd,1);
+		bedrocknorth->AXPY(U_north_grd,1);
+	}
+
+	/*get some of the updates into elements:*/
+	InputUpdateFromVectorx(femmodel,U_grd,SealevelUGrdEnum,VertexSIdEnum); 
+	InputUpdateFromVectorx(femmodel,N_grd,SealevelNGrdEnum,VertexSIdEnum); 
+	if(RSLg)InputUpdateFromVectorx(femmodel,RSLg,SealevelRSLEnum,VertexSIdEnum); 
+	if(RSLg_barystatic)InputUpdateFromVectorx(femmodel,RSLg_barystatic,SealevelRSLBarystaticEnum,VertexSIdEnum); 
+	if (horiz){
+		InputUpdateFromVectorx(femmodel,U_north_grd,SealevelUNorthEsaEnum,VertexSIdEnum);	
+		InputUpdateFromVectorx(femmodel,U_east_grd,SealevelUEastEsaEnum,VertexSIdEnum);	
+	} 
 
 	/*reset counter to 1:*/
@@ -327,12 +302,10 @@
 	/*variables:*/
 	Vector<IssmDouble> *sealevel  = NULL; 
-	Vector<IssmDouble> *steric_rate_g  = NULL; 
-	Vector<IssmDouble> *dynamic_rate_g = NULL;
+	Vector<IssmDouble> *deltadsl  = NULL; 
+	Vector<IssmDouble> *deltastr = NULL;
 
 	/*parameters: */
-	bool isslc=0;
-	int  solution_type;
-	IssmDouble          dt;
 	int  step;
+	int computesealevel=0;
 	IssmDouble time;
 
@@ -342,26 +315,19 @@
 	IssmDouble gmtslc=0;
 
-	/*Retrieve parameters:*/
-	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
-	femmodel->parameters->FindParam(&isslc,TransientIsslcEnum);
-	
-	/*in case we are running SealevelchangeSolutionEnum, then bypass transient settings:*/
-	if(solution_type==SealevelchangeSolutionEnum)isslc=1;
-
-	/*Should we be here?:*/
-	if(!isslc)return;
-
+	/*early return if we are not computing sea level, but rather deformation: */
+	femmodel->parameters->FindParam(&computesealevel,SolidearthSettingsComputesealevelchangeEnum);
+	if (!computesealevel)return;
+	
 	/*Verbose: */
-	if(VerboseSolution()) _printf0_("	  computing steric sea level change\n");
+	if(VerboseSolution()) _printf0_("	  computing steric and dynamic sea level change\n");
 
 	/*Retrieve sealevel and add steric + dynamic rates:*/
 	GetVectorFromInputsx(&sealevel,femmodel,SealevelEnum,VertexSIdEnum);
-	GetStericRate(&steric_rate_g,femmodel);
-	GetDynamicRate(&dynamic_rate_g,femmodel);
-
-	/*compute: sea level change = initial sea level + (N_gia_rate+N_esa_rate)  * dt + steric_rate + dynamic_rate dt*/
-	femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
-	sealevel->AXPY(steric_rate_g,dt);
-	sealevel->AXPY(dynamic_rate_g,dt);
+	GetVectorFromInputsx(&deltadsl,femmodel,DeltaDslEnum,VertexSIdEnum);
+	GetVectorFromInputsx(&deltastr,femmodel,DeltaStrEnum,VertexSIdEnum);
+
+	/*compute: sea level change = initial sea level + steric + dynamic*/
+	sealevel->AXPY(deltadsl,1);
+	sealevel->AXPY(deltastr,1);
 
 	/*cumulate thermal steric rate:*/
@@ -369,5 +335,5 @@
 	femmodel->parameters->FindParam(&cumbslc,CumBslcEnum); 
 
-	gmtslc=steric_rate_g->Max()*dt;
+	gmtslc=deltastr->Norm(NORM_TWO);
 	cumgmtslc+=gmtslc;
 	cumgmslc=cumbslc+cumgmtslc;
@@ -389,8 +355,28 @@
 	/*Free ressources:*/	
 	delete sealevel;
-	delete steric_rate_g;
-	delete dynamic_rate_g;
+	delete deltadsl;
+	delete deltastr;
 }
 /*}}}*/
+void coupleroutput_core(FemModel* femmodel){  /*{{{*/
+	
+	/*parameters:*/
+	int iscoupling;
+	int horiz=0;
+
+	/*retrieve more parameters:*/
+	femmodel->parameters->FindParam(&iscoupling,IsSlcCouplingEnum);
+	femmodel->parameters->FindParam(&horiz,SolidearthSettingsHorizEnum);
+		
+	if(iscoupling){
+		/*transfer sea level back to ice caps:*/
+		TransferSealevel(femmodel,SealevelEnum);
+		TransferSealevel(femmodel,BedEnum);
+		if(horiz){
+			TransferSealevel(femmodel,BedNorthEnum);
+			TransferSealevel(femmodel,BedEastEnum);
+		}
+	}
+}; /*}}}*/
 
 //Geometry:
@@ -492,4 +478,9 @@
 	IssmDouble* cumbslchydro_partition=NULL;
 	int nparthydro;
+	int computesealevel=0;
+
+	/*early return if we are not computing sea level, but rather deformation: */
+	femmodel->parameters->FindParam(&computesealevel,SolidearthSettingsComputesealevelchangeEnum);
+	if (!computesealevel)return NULL;
 	
 	if(VerboseSolution()) _printf0_("	  computing bslc components on ice\n");
@@ -581,4 +572,9 @@
 	IssmDouble           eps_abs;
 	IssmDouble			Ixz, Iyz, Izz; 
+	int computesealevel=0;
+
+	/*early return if we are not computing sea level, but rather deformation: */
+	femmodel->parameters->FindParam(&computesealevel,SolidearthSettingsComputesealevelchangeEnum);
+	if (!computesealevel)return NULL;
 	
 	if(VerboseSolution()) _printf0_("	  converging on ocean components\n");
@@ -677,4 +673,5 @@
 
 	Vector<IssmDouble> *U_grd  = NULL; 
+	Vector<IssmDouble> *dUdt_grd  = NULL; 
 	Vector<IssmDouble> *N_grd  = NULL; 
 	Vector<IssmDouble> *U_north_grd   = NULL; 
@@ -692,4 +689,5 @@
 	IssmDouble          *zz     = NULL;
 	int  horiz;
+	int  grdmodel; 
 	
 	if(VerboseSolution()) _printf0_("	  computing vertical and horizontal geodetic signatures\n");
@@ -697,4 +695,5 @@
 	/*retrieve some parameters:*/
 	femmodel->parameters->FindParam(&horiz,SolidearthSettingsHorizEnum);
+	femmodel->parameters->FindParam(&grdmodel,GrdModelEnum);
 
 	/*find size of vectors:*/
@@ -703,4 +702,5 @@
 	/*intialize vectors:*/
 	U_grd = new Vector<IssmDouble>(gsize);
+	if(grdmodel==IvinsEnum) dUdt_grd = new Vector<IssmDouble>(gsize);
 	N_grd = new Vector<IssmDouble>(gsize);
 	if (horiz){
@@ -713,6 +713,18 @@
 	VertexCoordinatesx(&xx,&yy,&zz,femmodel->vertices); 
 
-	/*call the elastic main modlule:*/ 
-	femmodel->SealevelchangeDeformation(N_grd, U_grd,U_north_grd,U_east_grd,RSLg, masks);
+	/*call the deformation module: */
+	switch(grdmodel){
+		case NoneEnum: 
+			//do nothing: 
+			break;
+		case IvinsEnum:
+			femmodel->IvinsDeformation(U_grd,dUdt_grd,xx,yy);
+			break;
+		case ElasticEnum:
+			femmodel->SealevelchangeDeformation(N_grd, U_grd,U_north_grd,U_east_grd,RSLg, masks);
+			break;
+		default:
+			_error_("Grd model " << EnumToStringx(grdmodel) << " not supported yet");
+	}
 
 	/*Assign output pointers:*/
@@ -731,125 +743,5 @@
 	xDelete<IssmDouble>(zz);
 	xDelete<IssmDouble>(radius);
-}
-/*}}}*/
-
-//Ocean:
-void GetDynamicRate(Vector<IssmDouble> ** pdynamic_rate_g, FemModel* femmodel){ /*{{{*/
-
-	int dslmodel=-1;
-	IssmDouble time;
-
-	/*variables:*/
-	Vector<IssmDouble> *dynamic_rate_g  = NULL; 
-
-	/*Update steric rates before retrieving them on Vertex SID set:*/
-	femmodel->parameters->FindParam(&dslmodel,DslModelEnum);
-	femmodel->parameters->FindParam(&time,TimeEnum);
-	if(dslmodel==1){
-		TransientInput* transient_input  = femmodel->inputs->GetTransientInput(DslSeaSurfaceHeightChangeAboveGeoidEnum);
-		TriaInput* tria_input=transient_input->GetTriaInput(time);
-		Input* tria_input_copy=tria_input->copy();
-		tria_input_copy->ChangeEnum(DslDynamicRateEnum);
-		femmodel->inputs->AddInput(tria_input_copy);
-	}
-	else if(dslmodel==2){
-	
-		IssmDouble modelid;
-		
-		/*Recover modelid:*/
-		femmodel->parameters->FindParam(&modelid,DslModelidEnum);
-		modelid--; //from matlab. 
-		
-		/*find the DslSeaSurfaceHeightChangeAboveGeoidEnum dataset of transient inputs:*/
-		DatasetInput* dataset_input=femmodel->inputs->GetDatasetInput(DslSeaSurfaceHeightChangeAboveGeoidEnum);
-		
-		/*Go find the modelid'th transient input:*/
-		TriaInput* tria_input=dataset_input->GetTriaInputByOffset(reCast<int, IssmDouble>(modelid));
-		
-		/*Plug into DslDynamicRate input: */
-		Input* tria_input_copy=tria_input->copy();
-		tria_input_copy->ChangeEnum(DslDynamicRateEnum);
-		femmodel->inputs->AddInput(tria_input_copy);
-	}
-	else _error_("not implemented yet");
-
-	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;
-	IssmDouble time;
-
-	/*variables:*/
-	Vector<IssmDouble> *steric_rate_g  = NULL; 
-
-	/*Update steric rates before retrieving them on Vertex SID set:*/
-	femmodel->parameters->FindParam(&dslmodel,DslModelEnum);
-	femmodel->parameters->FindParam(&time,TimeEnum);
-	if(dslmodel==1){
-		TransientInput* transient_input  = femmodel->inputs->GetTransientInput(DslGlobalAverageThermostericSeaLevelChangeEnum);
-		TriaInput* tria_input=transient_input->GetTriaInput(time);
-		Input* tria_input_copy=tria_input->copy();
-		tria_input_copy->ChangeEnum(DslStericRateEnum);
-		femmodel->inputs->AddInput(tria_input_copy);
-	}
-	else if (dslmodel==2){
-		IssmDouble modelid;
-		
-		/*Recover modelid:*/
-		femmodel->parameters->FindParam(&modelid,DslModelidEnum);
-		
-		modelid--; //from matlab. 
-		
-		/*find the DslGlobalAverageThermostericSeaLevelChangeEnum dataset of transient inputs:*/
-		DatasetInput* dataset_input=femmodel->inputs->GetDatasetInput(DslGlobalAverageThermostericSeaLevelChangeEnum);
-		
-		/*Go find the modelid'th transient input:*/
-		TriaInput* tria_input=dataset_input->GetTriaInputByOffset(reCast<int, IssmDouble>(modelid));
-		
-		/*Plug into DslStericRate input: */
-		Input* tria_input_copy=tria_input->copy();
-		tria_input_copy->ChangeEnum(DslStericRateEnum);
-		femmodel->inputs->AddInput(tria_input_copy);
-	}
-	else _error_("not implemented yet");
-
-	GetVectorFromInputsx(&steric_rate_g,femmodel,DslStericRateEnum,VertexSIdEnum);
-	*psteric_rate_g=steric_rate_g;
-}
-/*}}}*/
-void SetBottomPressure(FemModel* femmodel){ /*{{{*/
-
-	int dslmodel=-1;
-	int type;
-
-	/*If we are running a dsl mme model, we need to update the bottom pressure first: */
-	femmodel->parameters->FindParam(&dslmodel,DslModelEnum);
-	if(dslmodel==2){
-	
-		IssmDouble modelid;
-		/*figure out the type of DslSeaWaterPressureChangeAtSeaFloor input:*/
-		type=femmodel->inputs->GetInputObjectEnum(DslSeaWaterPressureChangeAtSeaFloorEnum);
-
-		if(type==DatasetInputEnum){
-		
-			/*find the DslSeaWaterPressureChangeAtSeaFloor dataset of transient inputs:*/
-			DatasetInput* dataset_input=femmodel->inputs->GetDatasetInput(DslSeaWaterPressureChangeAtSeaFloorEnum);
-		
-			/*Recover modelid:*/
-			femmodel->parameters->FindParam(&modelid,DslModelidEnum);
-			modelid--; //from matlab. 
-		
-			/*Go find the modelid'th transient input:*/
-			TransientInput* transient_input=dataset_input->GetTransientInputByOffset(reCast<int, IssmDouble>(modelid));
-
-			/*Plug into DslSeaWaterPressureChangeAtSeaFloor input: */
-			Input* transient_input_copy=transient_input->copy();
-			transient_input_copy->ChangeEnum(DslSeaWaterPressureChangeAtSeaFloorEnum);
-			femmodel->inputs->AddInput(transient_input_copy);
-		}
-	}
+	if(grdmodel==IvinsEnum)delete dUdt_grd;
 }
 /*}}}*/
@@ -870,4 +762,5 @@
 	int*         transitions_n=NULL;
 	int          nv;
+	int          existforcing=0;         
 
 	/*communicators:*/
@@ -900,5 +793,6 @@
 	if(modelid!=earthid){
 		nv=femmodel->vertices->NumberOfVertices();
-		GetVectorFromInputsx(&forcing,femmodel,forcingenum,VertexSIdEnum);
+		existforcing=reCast<int>(femmodel->inputs->Exist(forcingenum));
+		if(existforcing)GetVectorFromInputsx(&forcing,femmodel,forcingenum,VertexSIdEnum);
 	}
 
@@ -909,13 +803,22 @@
 			nvs=xNew<int>(nummodels-1);
 			for(int i=0;i<earthid;i++){
-				ISSM_MPI_Recv(nvs+i, 1, ISSM_MPI_INT, 0,i, fromcomms[i], &status);
-				forcings[i]=xNew<IssmDouble>(nvs[i]);
-				ISSM_MPI_Recv(forcings[i], nvs[i], ISSM_MPI_DOUBLE, 0,i, fromcomms[i], &status);
+				ISSM_MPI_Recv(&existforcing, 1, ISSM_MPI_INT, 0,i, fromcomms[i], &status);
+				if(existforcing){
+					ISSM_MPI_Recv(nvs+i, 1, ISSM_MPI_INT, 0,i, fromcomms[i], &status);
+					forcings[i]=xNew<IssmDouble>(nvs[i]);
+					ISSM_MPI_Recv(forcings[i], nvs[i], ISSM_MPI_DOUBLE, 0,i, fromcomms[i], &status);
+				}
+				else{
+					forcings[i]=NULL;
+				}
 			}
 
 		}
 		else{
-			ISSM_MPI_Send(&nv, 1, ISSM_MPI_INT, 0, modelid, tocomm);
-			ISSM_MPI_Send(forcing, nv, ISSM_MPI_DOUBLE, 0, modelid, tocomm);
+			ISSM_MPI_Send(&existforcing, 1, ISSM_MPI_INT, 0, modelid, tocomm);
+			if(existforcing){
+				ISSM_MPI_Send(&nv, 1, ISSM_MPI_INT, 0, modelid, tocomm);
+				ISSM_MPI_Send(forcing, nv, ISSM_MPI_DOUBLE, 0, modelid, tocomm);
+			}
 		}
 	}
@@ -940,14 +843,16 @@
 
 				IssmDouble* forcingfromcap= forcings[i]; //careful, this only exists on rank 0 of the earth model!
-				IssmDouble* transition=transitions[i];
-				int         M=transitions_m[i];
-
-				/*build index to plug values: */
-				int*        index=xNew<int>(M); for(int i=0;i<M;i++)index[i]=reCast<int>(transition[i])-1; //matlab indexing!
-
-				/*We are going to plug this vector into the earth model, at the right vertices corresponding to this particular 
-				 * ice cap: */
-				forcingglobal->SetValues(M,index,forcingfromcap,ADD_VAL);
-				xDelete<int>(index);
+				if(forcingfromcap){
+					IssmDouble* transition=transitions[i];
+					int         M=transitions_m[i];
+
+					/*build index to plug values: */
+					int*        index=xNew<int>(M); for(int i=0;i<M;i++)index[i]=reCast<int>(transition[i])-1; //matlab indexing!
+
+					/*We are going to plug this vector into the earth model, at the right vertices corresponding to this particular 
+					 * ice cap: */
+					forcingglobal->SetValues(M,index,forcingfromcap,ADD_VAL);
+					xDelete<int>(index);
+				}
 			}
 		}
@@ -964,5 +869,6 @@
 	if(forcings){
 		for(int i=0;i<nummodels-1;i++){
-			IssmDouble* temp=forcings[i]; xDelete<IssmDouble>(temp);
+			IssmDouble* temp=forcings[i]; 
+			if(temp)xDelete<IssmDouble>(temp);
 		}
 		xDelete<IssmDouble*>(forcings);
@@ -1039,5 +945,5 @@
 			femmodel->parameters->FindParam(&transitions,&ntransitions,&transitions_m,&transitions_n,SealevelchangeTransitionsEnum);
 
-			if(ntransitions!=earthid)_error_("TransferSeaLevel error message: number of transition vectors is not equal to the number of icecaps!");
+			if(ntransitions!=earthid)_error_("TransferSealevel error message: number of transition vectors is not equal to the number of icecaps!");
 
 			for(int i=0;i<earthid;i++){
@@ -1087,52 +993,4 @@
 
 } /*}}}*/
-void EarthMassTransport(FemModel* femmodel){ /*{{{*/
-
-	IssmDouble time,dt;
-	Vector<IssmDouble> *oldthickness    = NULL;
-	Vector<IssmDouble> *newthickness    = NULL;
-	Vector<IssmDouble> *deltathickness    = NULL;
-	Vector<IssmDouble> *cumdeltathickness    = NULL;
-	int nv;
-
-	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.solidearth class, outside of what we will get from the icecaps. That's why we get t
-	 * the thickness variations from SealevelchangeSpcthicknessEnum.*/
-
-	/*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(&dt,TimesteppingTimeStepEnum);
-	nv=femmodel->vertices->NumberOfVertices();
-
-	GetVectorFromInputsx(&newthickness,femmodel,SealevelchangeSpcthicknessEnum,VertexSIdEnum);
-	GetVectorFromInputsx(&oldthickness,femmodel,SealevelchangeSpcthicknessEnum,VertexSIdEnum,time-dt);*/
-
-	/*compute deltathickness: */
-	/*deltathickness = new Vector<IssmDouble>(nv); 
-	newthickness->Copy(deltathickness); deltathickness->AXPY(oldthickness,-1); */
-
-	/*plug into elements:*/
-//	InputUpdateFromVectorx(femmodel,deltathickness,SurfaceloadIceThicknessChangeEnum,VertexSIdEnum);
-
-	/*add to cumulated delta thickness: */
-	/*GetVectorFromInputsx(&cumdeltathickness,femmodel,SealevelchangeCumDeltathicknessEnum,VertexSIdEnum);
-	cumdeltathickness->AXPY(deltathickness,1); 
-	InputUpdateFromVectorx(femmodel,cumdeltathickness,SealevelchangeCumDeltathicknessEnum,VertexSIdEnum);*/
-
-	/*free ressources:*/
-	/*delete oldthickness;
-	delete newthickness;
-	delete deltathickness;
-	delete cumdeltathickness;*/
-
-} /*}}}*/
 void slcconvergence(bool* pconverged, Vector<IssmDouble>* RSLg,Vector<IssmDouble>* RSLg_old,IssmDouble eps_rel,IssmDouble eps_abs){ /*{{{*/
 
Index: /issm/trunk-jpl/src/c/cores/transient_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/transient_core.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/cores/transient_core.cpp	(revision 26047)
@@ -62,6 +62,4 @@
 	#endif
 
-	if(isslc) sealevelchange_geometry(femmodel);
-
 	while(time < finaltime - (yts*DBL_EPSILON)){ //make sure we run up to finaltime.
 
@@ -138,5 +136,5 @@
 
 	/*parameters: */
-	bool isstressbalance,ismasstransport,issmb,isthermal,isgroundingline,isgia,isesa,issampling;;
+	bool isstressbalance,ismasstransport,isoceantransport,issmb,isthermal,isgroundingline,isesa,issampling;;
 	bool isslc,ismovingfront,isdamageevolution,ishydrology,isoceancoupling,save_results;
 	int  step,sb_coupling_frequency;
@@ -150,7 +148,7 @@
 	femmodel->parameters->FindParam(&isstressbalance,TransientIsstressbalanceEnum);
 	femmodel->parameters->FindParam(&ismasstransport,TransientIsmasstransportEnum);
+	femmodel->parameters->FindParam(&isoceantransport,TransientIsoceantransportEnum);
 	femmodel->parameters->FindParam(&issmb,TransientIssmbEnum);
 	femmodel->parameters->FindParam(&isthermal,TransientIsthermalEnum);
-	femmodel->parameters->FindParam(&isgia,TransientIsgiaEnum);
 	femmodel->parameters->FindParam(&isesa,TransientIsesaEnum);
 	femmodel->parameters->FindParam(&isslc,TransientIsslcEnum);
@@ -221,24 +219,17 @@
 	}
 
+	if(isoceantransport){
+		oceantransport_core(femmodel);
+	}
+
 	if(isgroundingline){
 		groundingline_core(femmodel);
 	}
 
-	if(isgia){
-		#ifdef _HAVE_GIA_
-		gia_core(femmodel);
-		#else
-		_error_("ISSM was not compiled with gia capabilities. Exiting");
-		#endif
-	}
-
 	/*esa: */
 	if(isesa) esa_core(femmodel);
 
 	/*Sea level change: */
-	if(isslc){
-		if(VerboseSolution()) _printf0_("   computing sea level change\n");
-		sealevelchange_core(femmodel);
-	}
+	if(isslc) sealevelchange_core(femmodel);
 
 	/*Sampling: */
Index: /issm/trunk-jpl/src/c/main/issm.cpp
===================================================================
--- /issm/trunk-jpl/src/c/main/issm.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/main/issm.cpp	(revision 26047)
@@ -15,4 +15,7 @@
 	/*Initialize femmodel from arguments provided command line: */
 	FemModel *femmodel = new FemModel(argc,argv,comm_init);
+	
+	/*Need to know we are firing up from ISSM main, not a coupler driver like issm_slcp or issm_ocean:*/
+	femmodel->parameters->AddObject(new IntParam(IsSlcCouplingEnum,0));
 
 	/*Solve: */
Index: /issm/trunk-jpl/src/c/main/issm_slc.cpp
===================================================================
--- /issm/trunk-jpl/src/c/main/issm_slc.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/main/issm_slc.cpp	(revision 26047)
@@ -100,4 +100,5 @@
 	femmodel->parameters->AddObject(new IntParam(ModelIdEnum,modelid));
 	femmodel->parameters->AddObject(new IntParam(EarthIdEnum,earthid));
+	femmodel->parameters->AddObject(new IntParam(IsSlcCouplingEnum,1));
 	if(modelid==earthid) femmodel->parameters->AddObject(new GenericParam<ISSM_MPI_Comm*>(fromicecomms,IcecapToEarthCommEnum));
 	else femmodel->parameters->AddObject(new GenericParam<ISSM_MPI_Comm>(toearthcomm,IcecapToEarthCommEnum));
Index: /issm/trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp	(revision 26047)
@@ -38,5 +38,4 @@
 	femmodel->parameters->FindParam(&variable_partitions_nt,NULL,NULL,QmuVariablePartitionsNtEnum);
 
-
 	/*Go through all dakota descriptors, ex: "rho_ice","thermal_conductivity","thickness1","thickness2", etc ..., and
 	 * for each descriptor, take the variable value and plug it into the inputs (more or less :)):
@@ -169,6 +168,6 @@
 
 
-		if (femmodel->inputs->GetInputObjectEnum(SurfaceloadIceThicknessRateEnum)==DatasetInputEnum)
-			MmeToInput(femmodel,distributed_values,variable_partition,npart,SurfaceloadIceThicknessRateEnum, P0Enum);
+		if (femmodel->inputs->GetInputObjectEnum(MasstransportSpcthicknessEnum)==DatasetInputEnum)
+			MmeToInput(femmodel,distributed_values,variable_partition,npart,MasstransportSpcthicknessEnum, P0Enum);
 
 		if (femmodel->inputs->GetInputObjectEnum(MaskIceLevelsetEnum)==DatasetInputEnum)
Index: /issm/trunk-jpl/src/c/modules/MmeToInputFromIdx/MmeToInputFromIdx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/MmeToInputFromIdx/MmeToInputFromIdx.cpp	(revision 26047)
+++ /issm/trunk-jpl/src/c/modules/MmeToInputFromIdx/MmeToInputFromIdx.cpp	(revision 26047)
@@ -0,0 +1,71 @@
+/*!\file MmeToInputFromId
+ * \brief: compute damage
+ */
+#ifdef HAVE_CONFIG_H
+	#include <config.h>
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+
+#include "../../shared/shared.h"
+#include "../../toolkits/toolkits.h"
+#include "../../classes/classes.h"
+#include "../../classes/Inputs/DataSetInput.h"
+#include "../../classes/Inputs/TransientInput.h"
+#include "../../classes/Inputs/TriaInput.h"
+#include "./MmeToInputFromIdx.h"
+
+void MmeToInputFromIdx(Inputs* inputs, Elements* elements, int id, int rootenum, int interpolationenum){
+
+	TransientInput* transientinput  = NULL;
+	TransientInput* transientinput2 = NULL;
+	Tria* element                    = NULL;
+	IssmDouble value;
+	IssmDouble* values               = NULL;
+	IssmDouble* times                = NULL;
+	int N;
+
+	/*find thickness dataset: */
+	DatasetInput* datasetinput = inputs->GetDatasetInput(rootenum);
+
+	/*Initialize new transient input: */
+	transientinput = datasetinput->GetTransientInputByOffset(0); _assert_(transientinput);
+	transientinput->GetAllTimes(&times,&N);
+	inputs->SetTransientInput(DummyEnum,times,N);
+	transientinput2 = inputs->GetTransientInput(DummyEnum);
+
+	for(Object* & object : elements->objects){
+		Tria*   element=xDynamicCast<Tria*>(object);
+
+		/*recover the right field from the mme: */
+		transientinput = datasetinput->GetTransientInputByOffset(id); _assert_(transientinput);
+
+		/*copy values from the transientinput to the final transientinput2: */
+		for (int j=0;j<N;j++){
+			TriaInput* tria_input=transientinput->GetTriaInput(j);
+			element->InputServe(tria_input);
+			if(interpolationenum==P0Enum){
+				value=tria_input->element_values[0];
+				transientinput2->AddTriaTimeInput( j,1,&(element->lid),&value,P0Enum);
+			}
+			else if(interpolationenum==P1Enum){
+
+				/*Get values and lid list*/
+				const int   numvertices     = element->GetNumberOfVertices();
+				int        *vertexlids      = xNew<int>(numvertices);
+				int        *vertexsids      = xNew<int>(numvertices);
+
+				/*Recover vertices ids needed to initialize inputs*/
+				element->GetVerticesLidList(&vertexlids[0]);
+				element->GetVerticesSidList(&vertexsids[0]);
+				values=tria_input->element_values;
+				transientinput2->AddTriaTimeInput( j,numvertices,vertexlids,values,P1Enum);
+			}
+		}
+	}
+
+	/*wipe out existing SurfaceloadIceThicknessChangeEnum dataset:*/
+	inputs->ChangeEnum(DummyEnum,rootenum);
+
+}
Index: /issm/trunk-jpl/src/c/modules/MmeToInputFromIdx/MmeToInputFromIdx.h
===================================================================
--- /issm/trunk-jpl/src/c/modules/MmeToInputFromIdx/MmeToInputFromIdx.h	(revision 26047)
+++ /issm/trunk-jpl/src/c/modules/MmeToInputFromIdx/MmeToInputFromIdx.h	(revision 26047)
@@ -0,0 +1,11 @@
+#ifndef _MMETOINPUTFROMIDX_H
+#define _MMETOINPUTFROMIDX_H
+
+class Inputs; 
+class Elements; 
+class Parameters;
+
+/* local prototypes: */
+void  MmeToInputFromIdx(Inputs* inputs, Elements* elements, int id, int rootenum, int interpolationenum);
+
+#endif
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 26047)
@@ -179,28 +179,33 @@
 
 			//go through list of materials, and create them: 
-			for(int i=0;i<nnat;i++){ 
-				switch(IoCodeToEnumNature(nature[i])){ //{{{
-					case MaticeEnum:
-						iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_B",MaterialsRheologyBEnum);
-						iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_n",MaterialsRheologyNEnum);
-						for (i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matice(i+1,i,iomodel));
-						switch(iomodel->domaindim){
-							case 2:
-								inputs->DuplicateInput(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum);
-								break;
-							case 3:
-								break;
-							default:
-								_error_("Mesh not supported yet");
-						}
+			for(int i=0;i<nnat;i++){
+				switch(IoCodeToEnumNature(nature[i])){ 
+					case MaticeEnum:{ /*{{{*/
+							iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_B",MaterialsRheologyBEnum);
+							iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_n",MaterialsRheologyNEnum);
+							for (int k=0;k<iomodel->numberofelements;k++) if(iomodel->my_elements[k]) materials->AddObject(new Matice(k+1,k,MaticeEnum));
+							switch(iomodel->domaindim){
+								case 2:
+									inputs->DuplicateInput(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum);
+									break;
+								case 3:
+									break;
+								default:
+									_error_("Mesh not supported yet");
+							}
+							_printf_("Matice " << nnat << "\n");
+						} /*}}}*/
 						break;
 					case MatlithoEnum:
-						iomodel->FetchData(9,"md.materials.radius","md.materials.viscosity","md.materials.lame_lambda","md.materials.lame_mu","md.materials.burgers_viscosity","md.materials.burgers_mu","md.materials.isburgers","md.materials.issolid","md.materials.density");
-						materials->AddObject(new Matlitho(materials->Size()+1,iomodel));
-						iomodel->DeleteData(9,"md.materials.radius","md.materials.viscosity","md.materials.lame_lambda","md.materials.lame_mu","md.materials.burgers_viscosity","md.materials.burgers_mu","md.materials.isburgers","md.materials.issolid","md.materials.density");
+						{ /*{{{*/
+							iomodel->FetchData(9,"md.materials.radius","md.materials.viscosity","md.materials.lame_lambda","md.materials.lame_mu","md.materials.burgers_viscosity","md.materials.burgers_mu","md.materials.isburgers","md.materials.issolid","md.materials.density");
+							materials->AddObject(new Matlitho(materials->Size()+1,iomodel));
+							iomodel->DeleteData(9,"md.materials.radius","md.materials.viscosity","md.materials.lame_lambda","md.materials.lame_mu","md.materials.burgers_viscosity","md.materials.burgers_mu","md.materials.isburgers","md.materials.issolid","md.materials.density");
+							_printf_("Matlitho " << nnat << "\n");
+						}
+						/*}}}*/
 						break;
-
-					case MathydroEnum:
-						{
+					case MathydroEnum: /*{{{*/
+						{ 
 							/*If we don't have any materials pointed to by elements (meaning, if we are running only litho or hydro), 
 							 * then we need to zero out the hmaterial pointers inside the elements dataset so that it won't error out 
@@ -208,8 +213,8 @@
 							bool isice=false;
 							for (int j=0;j<nnat;j++){
-								if((IoCodeToEnumNature(nature[i])==MaticeEnum)||
-										(IoCodeToEnumNature(nature[i])==MatenhancediceEnum)||
-										(IoCodeToEnumNature(nature[i])==MatestarEnum)||
-										(IoCodeToEnumNature(nature[i])==MatdamageiceEnum)){
+								if((IoCodeToEnumNature(nature[j])==MaticeEnum)||
+										(IoCodeToEnumNature(nature[j])==MatenhancediceEnum)||
+										(IoCodeToEnumNature(nature[j])==MatestarEnum)||
+										(IoCodeToEnumNature(nature[j])==MatdamageiceEnum)){
 									isice=true; break; }
 							}
@@ -230,12 +235,11 @@
 								}
 							}
-						}
+						} /*}}}*/
 						break;
-
-					case MatenhancediceEnum:
+					case MatenhancediceEnum: /*{{{*/
 						iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_B",MaterialsRheologyBEnum);
 						iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_n",MaterialsRheologyNEnum);
 						iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_E",MaterialsRheologyEEnum);
-						for (i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matice(i+1,i,iomodel));
+						for (int i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matice(i+1,i,MatenhancediceEnum));
 						switch(iomodel->domaindim){
 							case 2:
@@ -248,10 +252,11 @@
 								_error_("Mesh not supported yet");
 						}
+						/*}}}*/
 						break;
-					case MatdamageiceEnum:
+					case MatdamageiceEnum: /*{{{*/
 						iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_B",MaterialsRheologyBEnum);
 						iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_n",MaterialsRheologyNEnum);
 						iomodel->FetchDataToInput(inputs,elements,"md.damage.D",DamageDEnum);
-						for (i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matice(i+1,i,iomodel));
+						for (int i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matice(i+1,i,MatdamageiceEnum));
 						switch(iomodel->domaindim){
 							case 2:
@@ -264,10 +269,11 @@
 								_error_("Mesh not supported yet");
 						}
+						/*}}}*/
 						break;
-					case MatestarEnum:
+					case MatestarEnum: /*{{{*/
 						iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_B",MaterialsRheologyBEnum);
 						iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_Ec",MaterialsRheologyEcEnum);
 						iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_Es",MaterialsRheologyEsEnum);
-						for(i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matestar(i+1,i,iomodel));
+						for(int i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matestar(i+1,i,iomodel));
 						switch(iomodel->domaindim){
 							case 2:
@@ -280,11 +286,11 @@
 							default:
 								_error_("Mesh not supported yet");
-						}
-						break;
-
+						} 
+						/*}}}*/
+						break; 
 					default:
 						_error_("Materials nature type "<<EnumToStringx(IoCodeToEnumNature(nature[i]))<<" not supported");
-
-				} //}}}
+						break;
+				}
 			}
 			//Free ressources:
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 26047)
@@ -63,4 +63,7 @@
 	parameters->AddObject(iomodel->CopyConstantObject("md.calving.law",CalvingLawEnum));
 	parameters->AddObject(iomodel->CopyConstantObject("md.frontalforcings.parameterization",FrontalForcingsParamEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.settings.isgrd",SolidearthSettingsGRDEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.settings.grdmodel",GrdModelEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.settings.runfrequency",SolidearthSettingsRunFrequencyEnum));
 	parameters->AddObject(new IntParam(SealevelchangeRunCountEnum,1));
 
@@ -74,8 +77,8 @@
 		parameters->AddObject(iomodel->CopyConstantObject("md.transient.isstressbalance",TransientIsstressbalanceEnum));
 		parameters->AddObject(iomodel->CopyConstantObject("md.transient.ismasstransport",TransientIsmasstransportEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.transient.isoceantransport",TransientIsoceantransportEnum));
 		parameters->AddObject(iomodel->CopyConstantObject("md.transient.issmb",TransientIssmbEnum));
 		parameters->AddObject(iomodel->CopyConstantObject("md.transient.isthermal",TransientIsthermalEnum));
 		parameters->AddObject(iomodel->CopyConstantObject("md.transient.isgroundingline",TransientIsgroundinglineEnum));
-		parameters->AddObject(iomodel->CopyConstantObject("md.transient.isgia",TransientIsgiaEnum));
 		parameters->AddObject(iomodel->CopyConstantObject("md.transient.isesa",TransientIsesaEnum));
 		parameters->AddObject(iomodel->CopyConstantObject("md.transient.isdamageevolution",TransientIsdamageevolutionEnum));
@@ -83,5 +86,4 @@
 		parameters->AddObject(iomodel->CopyConstantObject("md.transient.ismovingfront",TransientIsmovingfrontEnum));
 		parameters->AddObject(iomodel->CopyConstantObject("md.transient.isslc",TransientIsslcEnum));
-		parameters->AddObject(iomodel->CopyConstantObject("md.transient.iscoupler",TransientIscouplerEnum));
 		parameters->AddObject(iomodel->CopyConstantObject("md.transient.isoceancoupling",TransientIsoceancouplingEnum));
 		parameters->AddObject(iomodel->CopyConstantObject("md.transient.amr_frequency",TransientAmrFrequencyEnum));
@@ -356,16 +358,14 @@
 						parameters->AddObject(iomodel->CopyConstantObject("md.constants.g",ConstantsGEnum));
 						parameters->AddObject(iomodel->CopyConstantObject("md.materials.rheology_law",MaterialsRheologyLawEnum));
-
 						/*slc:*/
-						parameters->AddObject(iomodel->CopyConstantObject("md.materials.earth_density",MaterialsEarthDensityEnum));
 						break;
 					case MathydroEnum:
 						parameters->AddObject(iomodel->CopyConstantObject("md.materials.rho_ice",MaterialsRhoIceEnum));
 						parameters->AddObject(iomodel->CopyConstantObject("md.materials.rho_water",MaterialsRhoSeawaterEnum));
-						parameters->AddObject(iomodel->CopyConstantObject("md.materials.earth_density",MaterialsEarthDensityEnum));
 						parameters->AddObject(iomodel->CopyConstantObject("md.materials.rho_freshwater",MaterialsRhoFreshwaterEnum));
 						break;
 				}
 			}
+			parameters->AddObject(iomodel->CopyConstantObject("md.materials.earth_density",MaterialsEarthDensityEnum));
 			/*Free rssources:*/
 			xDelete<int>(nature);
Index: /issm/trunk-jpl/src/c/modules/modules.h
===================================================================
--- /issm/trunk-jpl/src/c/modules/modules.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/modules/modules.h	(revision 26047)
@@ -72,4 +72,5 @@
 #include "./SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.h"
 #include "./ModelProcessorx/ModelProcessorx.h"
+#include "./MmeToInputFromIdx/MmeToInputFromIdx.h"
 #include "./ParseToolkitsOptionsx/ParseToolkitsOptionsx.h"
 #include "./NodalValuex/NodalValuex.h"
Index: /issm/trunk-jpl/src/c/shared/Enum/Enum.vim
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 26046)
+++ /issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 26047)
@@ -142,6 +142,7 @@
 syn keyword cConstant SolidearthExternalModelidEnum
 syn keyword cConstant SolidearthExternalNummodelsEnum
-syn keyword cConstant DslComputeFingerprintsEnum
+syn keyword cConstant SolidearthSettingsComputeBpGrdEnum
 syn keyword cConstant EarthIdEnum
+syn keyword cConstant ElasticEnum
 syn keyword cConstant EplZigZagCounterEnum
 syn keyword cConstant EsaHElasticEnum
@@ -173,8 +174,5 @@
 syn keyword cConstant FrontalForcingsNumberofBasinsEnum
 syn keyword cConstant FrontalForcingsParamEnum
-syn keyword cConstant GiaModelEnum
-syn keyword cConstant GiaModelidEnum
-syn keyword cConstant GiaNummodelsEnum
-syn keyword cConstant GiaCrossSectionShapeEnum
+syn keyword cConstant GrdModelEnum
 syn keyword cConstant GroundinglineFrictionInterpolationEnum
 syn keyword cConstant GroundinglineMeltInterpolationEnum
@@ -247,4 +245,6 @@
 syn keyword cConstant InversionStepThresholdEnum
 syn keyword cConstant InversionTypeEnum
+syn keyword cConstant IvinsEnum
+syn keyword cConstant IsSlcCouplingEnum
 syn keyword cConstant LevelsetKillIcebergsEnum
 syn keyword cConstant LevelsetReinitFrequencyEnum
@@ -275,8 +275,4 @@
 syn keyword cConstant MaterialsHeatcapacityEnum
 syn keyword cConstant MaterialsLatentheatEnum
-syn keyword cConstant MaterialsLithosphereDensityEnum
-syn keyword cConstant MaterialsLithosphereShearModulusEnum
-syn keyword cConstant MaterialsMantleDensityEnum
-syn keyword cConstant MaterialsMantleShearModulusEnum
 syn keyword cConstant MaterialsMeltingpointEnum
 syn keyword cConstant MaterialsMixedLayerCapacityEnum
@@ -347,4 +343,5 @@
 syn keyword cConstant SolidearthPlanetAreaEnum
 syn keyword cConstant SolidearthSettingsAbstolEnum
+syn keyword cConstant SolidearthSettingsCrossSectionShapeEnum
 syn keyword cConstant RotationalAngularVelocityEnum
 syn keyword cConstant SolidearthSettingsElasticEnum
@@ -486,5 +483,4 @@
 syn keyword cConstant ToolkitsTypesEnum
 syn keyword cConstant TransientAmrFrequencyEnum
-syn keyword cConstant TransientIscouplerEnum
 syn keyword cConstant TransientIsdamageevolutionEnum
 syn keyword cConstant TransientIsesaEnum
@@ -493,4 +489,5 @@
 syn keyword cConstant TransientIshydrologyEnum
 syn keyword cConstant TransientIsmasstransportEnum
+syn keyword cConstant TransientIsoceantransportEnum
 syn keyword cConstant TransientIsmovingfrontEnum
 syn keyword cConstant TransientIsoceancouplingEnum
@@ -506,4 +503,7 @@
 syn keyword cConstant ParametersENDEnum
 syn keyword cConstant InputsSTARTEnum
+syn keyword cConstant AccumulatedDeltaBottomPressureEnum
+syn keyword cConstant AccumulatedDeltaIceThicknessEnum
+syn keyword cConstant AccumulatedDeltaTwsEnum
 syn keyword cConstant AdjointEnum
 syn keyword cConstant AdjointpEnum
@@ -548,4 +548,6 @@
 syn keyword cConstant BedSlopeXEnum
 syn keyword cConstant BedSlopeYEnum
+syn keyword cConstant BottomPressureEnum
+syn keyword cConstant BottomPressureOldEnum
 syn keyword cConstant CalvingCalvingrateEnum
 syn keyword cConstant CalvingHabFractionEnum
@@ -569,4 +571,13 @@
 syn keyword cConstant DegreeOfChannelizationEnum
 syn keyword cConstant DepthBelowSurfaceEnum
+syn keyword cConstant DeltaIceThicknessEnum
+syn keyword cConstant DeltaTwsEnum
+syn keyword cConstant DeltaBottomPressureEnum
+syn keyword cConstant DeltaDslEnum
+syn keyword cConstant DslOldEnum
+syn keyword cConstant DslEnum
+syn keyword cConstant DeltaStrEnum
+syn keyword cConstant StrOldEnum
+syn keyword cConstant StrEnum
 syn keyword cConstant DeviatoricStresseffectiveEnum
 syn keyword cConstant DeviatoricStressxxEnum
@@ -586,11 +597,4 @@
 syn keyword cConstant DrivingStressXEnum
 syn keyword cConstant DrivingStressYEnum
-syn keyword cConstant DslGlobalAverageThermostericSeaLevelChangeEnum
-syn keyword cConstant DslSeaSurfaceHeightChangeAboveGeoidEnum
-syn keyword cConstant DslSeaWaterPressureChangeAtSeaFloorEnum
-syn keyword cConstant DslStericRateEnum
-syn keyword cConstant DslDynamicRateEnum
-syn keyword cConstant GiaMmeNgiaEnum
-syn keyword cConstant GiaMmeUgiaEnum
 syn keyword cConstant DummyEnum
 syn keyword cConstant EffectivePressureEnum
@@ -605,5 +609,4 @@
 syn keyword cConstant EplHeadSubstepEnum
 syn keyword cConstant EplHeadTransientEnum
-syn keyword cConstant EsaDeltathicknessEnum
 syn keyword cConstant EsaEmotionEnum
 syn keyword cConstant EsaNmotionEnum
@@ -635,6 +638,4 @@
 syn keyword cConstant FrontalForcingsThermalForcingEnum
 syn keyword cConstant GeometryHydrostaticRatioEnum
-syn keyword cConstant GiaLithosphereThicknessEnum
-syn keyword cConstant GiaMantleViscosityEnum
 syn keyword cConstant NGiaEnum
 syn keyword cConstant NGiaRateEnum
@@ -669,4 +670,7 @@
 syn keyword cConstant HydrologySheetThicknessEnum
 syn keyword cConstant HydrologySheetThicknessOldEnum
+syn keyword cConstant HydrologyTwsEnum
+syn keyword cConstant HydrologyTwsSpcEnum
+syn keyword cConstant HydrologyTwsAnalysisEnum
 syn keyword cConstant HydrologyWatercolumnMaxEnum
 syn keyword cConstant HydrologyWaterVxEnum
@@ -709,4 +713,7 @@
 syn keyword cConstant NodeEnum
 syn keyword cConstant OmegaAbsGradientEnum
+syn keyword cConstant OceantransportSpcbottompressureEnum
+syn keyword cConstant OceantransportSpcstrEnum
+syn keyword cConstant OceantransportSpcdslEnum
 syn keyword cConstant P0Enum
 syn keyword cConstant P1Enum
@@ -739,14 +746,8 @@
 syn keyword cConstant SealevelRSLBarystaticEnum
 syn keyword cConstant SealevelRSLRateEnum
+syn keyword cConstant SealevelUGrdEnum
+syn keyword cConstant SealevelNGrdEnum
 syn keyword cConstant SealevelUEastEsaEnum
-syn keyword cConstant SealevelUEsaEnum
-syn keyword cConstant SealevelUEsaRateEnum
 syn keyword cConstant SealevelUNorthEsaEnum
-syn keyword cConstant SealevelchangeCumDeltathicknessEnum
-syn keyword cConstant SealevelchangeCumDeltathicknessOldEnum
-syn keyword cConstant SurfaceloadRateEnum
-syn keyword cConstant SurfaceloadIceThicknessRateEnum
-syn keyword cConstant SurfaceloadWaterHeightRateEnum
-syn keyword cConstant SurfaceloadOtherRateEnum
 syn keyword cConstant SealevelchangeIndicesEnum
 syn keyword cConstant SealevelchangeGEnum
@@ -917,4 +918,5 @@
 syn keyword cConstant ThicknessPositiveEnum
 syn keyword cConstant ThicknessResidualEnum
+syn keyword cConstant TransientAccumulatedDeltaIceThicknessEnum
 syn keyword cConstant VelEnum
 syn keyword cConstant VxAverageEnum
@@ -938,4 +940,7 @@
 syn keyword cConstant WaterheightEnum
 syn keyword cConstant WeightsSurfaceObservationEnum
+syn keyword cConstant OldAccumulatedDeltaBottomPressureEnum
+syn keyword cConstant OldAccumulatedDeltaIceThicknessEnum
+syn keyword cConstant OldAccumulatedDeltaTwsEnum
 syn keyword cConstant Outputdefinition1Enum
 syn keyword cConstant Outputdefinition10Enum
@@ -1152,6 +1157,4 @@
 syn keyword cConstant GenericParamEnum
 syn keyword cConstant GenericExternalResultEnum
-syn keyword cConstant GiaAnalysisEnum
-syn keyword cConstant GiaSolutionEnum
 syn keyword cConstant Gradient1Enum
 syn keyword cConstant Gradient2Enum
@@ -1273,4 +1276,6 @@
 syn keyword cConstant NyeH2OEnum
 syn keyword cConstant NumericalfluxEnum
+syn keyword cConstant OceantransportAnalysisEnum
+syn keyword cConstant OceantransportSolutionEnum
 syn keyword cConstant OldGradientEnum
 syn keyword cConstant OneLayerP4zEnum
@@ -1335,5 +1340,4 @@
 syn keyword cConstant SealevelUmotionEnum
 syn keyword cConstant SealevelchangeAnalysisEnum
-syn keyword cConstant SealevelchangeSolutionEnum
 syn keyword cConstant SegEnum
 syn keyword cConstant SegInputEnum
@@ -1562,5 +1566,4 @@
 syn keyword cType FreeSurfaceTopAnalysis
 syn keyword cType GLheightadvectionAnalysis
-syn keyword cType GiaAnalysis
 syn keyword cType HydrologyDCEfficientAnalysis
 syn keyword cType HydrologyDCInefficientAnalysis
@@ -1569,4 +1572,5 @@
 syn keyword cType HydrologyShaktiAnalysis
 syn keyword cType HydrologyShreveAnalysis
+syn keyword cType HydrologyTwsAnalysis
 syn keyword cType L2ProjectionBaseAnalysis
 syn keyword cType L2ProjectionEPLAnalysis
@@ -1575,4 +1579,5 @@
 syn keyword cType MasstransportAnalysis
 syn keyword cType MeltingAnalysis
+syn keyword cType OceantransportAnalysis
 syn keyword cType SamplingAnalysis
 syn keyword cType SealevelchangeAnalysis
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 26047)
@@ -136,6 +136,7 @@
 	SolidearthExternalModelidEnum,
 	SolidearthExternalNummodelsEnum,
-	DslComputeFingerprintsEnum,
+	SolidearthSettingsComputeBpGrdEnum,
 	EarthIdEnum,
+	ElasticEnum,
 	EplZigZagCounterEnum,
 	EsaHElasticEnum,
@@ -167,8 +168,5 @@
 	FrontalForcingsNumberofBasinsEnum,
 	FrontalForcingsParamEnum,
-	GiaModelEnum,
-	GiaModelidEnum,
-	GiaNummodelsEnum,
-	GiaCrossSectionShapeEnum,
+	GrdModelEnum,
 	GroundinglineFrictionInterpolationEnum,
 	GroundinglineMeltInterpolationEnum,
@@ -241,4 +239,6 @@
 	InversionStepThresholdEnum,
 	InversionTypeEnum,
+	IvinsEnum,
+	IsSlcCouplingEnum,
 	LevelsetKillIcebergsEnum,
 	LevelsetReinitFrequencyEnum,
@@ -269,8 +269,4 @@
 	MaterialsHeatcapacityEnum,
 	MaterialsLatentheatEnum,
-	MaterialsLithosphereDensityEnum,
-	MaterialsLithosphereShearModulusEnum,
-	MaterialsMantleDensityEnum,
-	MaterialsMantleShearModulusEnum,
 	MaterialsMeltingpointEnum,
 	MaterialsMixedLayerCapacityEnum,
@@ -341,4 +337,5 @@
 	SolidearthPlanetAreaEnum,
 	SolidearthSettingsAbstolEnum,
+	SolidearthSettingsCrossSectionShapeEnum,
 	RotationalAngularVelocityEnum,
 	SolidearthSettingsElasticEnum,
@@ -480,5 +477,4 @@
 	ToolkitsTypesEnum,
 	TransientAmrFrequencyEnum,
-	TransientIscouplerEnum,
 	TransientIsdamageevolutionEnum,
 	TransientIsesaEnum,
@@ -486,5 +482,6 @@
 	TransientIsgroundinglineEnum,
 	TransientIshydrologyEnum,
-	TransientIsmasstransportEnum,
+	TransientIsmasstransportEnum, 
+	TransientIsoceantransportEnum,
 	TransientIsmovingfrontEnum,
 	TransientIsoceancouplingEnum,
@@ -502,4 +499,7 @@
 	InputsSTARTEnum,
 	/*Inputs{{{*/
+	AccumulatedDeltaBottomPressureEnum,
+	AccumulatedDeltaIceThicknessEnum,
+	AccumulatedDeltaTwsEnum,
 	AdjointEnum,
 	AdjointpEnum,
@@ -544,4 +544,6 @@
 	BedSlopeXEnum,
 	BedSlopeYEnum,
+	BottomPressureEnum,
+	BottomPressureOldEnum,
 	CalvingCalvingrateEnum,
 	CalvingHabFractionEnum,
@@ -565,4 +567,13 @@
 	DegreeOfChannelizationEnum,
 	DepthBelowSurfaceEnum,
+	DeltaIceThicknessEnum,
+	DeltaTwsEnum,
+	DeltaBottomPressureEnum,
+	DeltaDslEnum,
+	DslOldEnum,
+	DslEnum,
+	DeltaStrEnum,
+	StrOldEnum,
+	StrEnum,
 	DeviatoricStresseffectiveEnum,
 	DeviatoricStressxxEnum,
@@ -582,11 +593,4 @@
 	DrivingStressXEnum,
 	DrivingStressYEnum,
-	DslGlobalAverageThermostericSeaLevelChangeEnum,
-	DslSeaSurfaceHeightChangeAboveGeoidEnum,
-	DslSeaWaterPressureChangeAtSeaFloorEnum,
-	DslStericRateEnum,
-	DslDynamicRateEnum,
-	GiaMmeNgiaEnum,
-	GiaMmeUgiaEnum,
 	DummyEnum,
    EffectivePressureEnum,
@@ -601,5 +605,4 @@
 	EplHeadSubstepEnum,
    EplHeadTransientEnum,
-	EsaDeltathicknessEnum,
 	EsaEmotionEnum,
 	EsaNmotionEnum,
@@ -631,6 +634,4 @@
 	FrontalForcingsThermalForcingEnum,
 	GeometryHydrostaticRatioEnum,
-	GiaLithosphereThicknessEnum,
-	GiaMantleViscosityEnum,
 	NGiaEnum,
 	NGiaRateEnum,
@@ -665,4 +666,7 @@
 	HydrologySheetThicknessEnum,
 	HydrologySheetThicknessOldEnum,
+	HydrologyTwsEnum,
+	HydrologyTwsSpcEnum,
+	HydrologyTwsAnalysisEnum,
 	HydrologyWatercolumnMaxEnum,
 	HydrologyWaterVxEnum,
@@ -705,4 +709,7 @@
 	NodeEnum,
 	OmegaAbsGradientEnum,
+	OceantransportSpcbottompressureEnum,
+	OceantransportSpcstrEnum,
+	OceantransportSpcdslEnum,
 	P0Enum,
 	P1Enum,
@@ -735,14 +742,8 @@
 	SealevelRSLBarystaticEnum,
 	SealevelRSLRateEnum,
+	SealevelUGrdEnum,
+	SealevelNGrdEnum,
 	SealevelUEastEsaEnum,
-	SealevelUEsaEnum,
-	SealevelUEsaRateEnum,
 	SealevelUNorthEsaEnum,
-	SealevelchangeCumDeltathicknessEnum,
-	SealevelchangeCumDeltathicknessOldEnum,
-	SurfaceloadRateEnum,
-	SurfaceloadIceThicknessRateEnum,
-	SurfaceloadWaterHeightRateEnum,
-	SurfaceloadOtherRateEnum,
 	SealevelchangeIndicesEnum,
 	SealevelchangeGEnum,
@@ -914,4 +915,5 @@
 	ThicknessPositiveEnum,
 	ThicknessResidualEnum,
+	TransientAccumulatedDeltaIceThicknessEnum,
 	VelEnum,
 	VxAverageEnum,
@@ -935,4 +937,7 @@
 	WaterheightEnum,
 	WeightsSurfaceObservationEnum,
+	OldAccumulatedDeltaBottomPressureEnum,
+	OldAccumulatedDeltaIceThicknessEnum,
+	OldAccumulatedDeltaTwsEnum,
 	Outputdefinition1Enum,
 	Outputdefinition10Enum,
@@ -1151,6 +1156,4 @@
 	GenericParamEnum,
 	GenericExternalResultEnum,
-	GiaAnalysisEnum,
-	GiaSolutionEnum,
 	Gradient1Enum,
 	Gradient2Enum,
@@ -1272,4 +1275,6 @@
 	NyeH2OEnum,
 	NumericalfluxEnum,
+	OceantransportAnalysisEnum,
+	OceantransportSolutionEnum,
 	OldGradientEnum,
 	OneLayerP4zEnum,
@@ -1334,5 +1339,4 @@
 	SealevelUmotionEnum,
 	SealevelchangeAnalysisEnum,
-	SealevelchangeSolutionEnum,
 	SegEnum,
 	SegInputEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 26047)
@@ -144,6 +144,7 @@
 		case SolidearthExternalModelidEnum : return "SolidearthExternalModelid";
 		case SolidearthExternalNummodelsEnum : return "SolidearthExternalNummodels";
-		case DslComputeFingerprintsEnum : return "DslComputeFingerprints";
+		case SolidearthSettingsComputeBpGrdEnum : return "SolidearthSettingsComputeBpGrd";
 		case EarthIdEnum : return "EarthId";
+		case ElasticEnum : return "Elastic";
 		case EplZigZagCounterEnum : return "EplZigZagCounter";
 		case EsaHElasticEnum : return "EsaHElastic";
@@ -175,8 +176,5 @@
 		case FrontalForcingsNumberofBasinsEnum : return "FrontalForcingsNumberofBasins";
 		case FrontalForcingsParamEnum : return "FrontalForcingsParam";
-		case GiaModelEnum : return "GiaModel";
-		case GiaModelidEnum : return "GiaModelid";
-		case GiaNummodelsEnum : return "GiaNummodels";
-		case GiaCrossSectionShapeEnum : return "GiaCrossSectionShape";
+		case GrdModelEnum : return "GrdModel";
 		case GroundinglineFrictionInterpolationEnum : return "GroundinglineFrictionInterpolation";
 		case GroundinglineMeltInterpolationEnum : return "GroundinglineMeltInterpolation";
@@ -249,4 +247,6 @@
 		case InversionStepThresholdEnum : return "InversionStepThreshold";
 		case InversionTypeEnum : return "InversionType";
+		case IvinsEnum : return "Ivins";
+		case IsSlcCouplingEnum : return "IsSlcCoupling";
 		case LevelsetKillIcebergsEnum : return "LevelsetKillIcebergs";
 		case LevelsetReinitFrequencyEnum : return "LevelsetReinitFrequency";
@@ -277,8 +277,4 @@
 		case MaterialsHeatcapacityEnum : return "MaterialsHeatcapacity";
 		case MaterialsLatentheatEnum : return "MaterialsLatentheat";
-		case MaterialsLithosphereDensityEnum : return "MaterialsLithosphereDensity";
-		case MaterialsLithosphereShearModulusEnum : return "MaterialsLithosphereShearModulus";
-		case MaterialsMantleDensityEnum : return "MaterialsMantleDensity";
-		case MaterialsMantleShearModulusEnum : return "MaterialsMantleShearModulus";
 		case MaterialsMeltingpointEnum : return "MaterialsMeltingpoint";
 		case MaterialsMixedLayerCapacityEnum : return "MaterialsMixedLayerCapacity";
@@ -349,4 +345,5 @@
 		case SolidearthPlanetAreaEnum : return "SolidearthPlanetArea";
 		case SolidearthSettingsAbstolEnum : return "SolidearthSettingsAbstol";
+		case SolidearthSettingsCrossSectionShapeEnum : return "SolidearthSettingsCrossSectionShape";
 		case RotationalAngularVelocityEnum : return "RotationalAngularVelocity";
 		case SolidearthSettingsElasticEnum : return "SolidearthSettingsElastic";
@@ -488,5 +485,4 @@
 		case ToolkitsTypesEnum : return "ToolkitsTypes";
 		case TransientAmrFrequencyEnum : return "TransientAmrFrequency";
-		case TransientIscouplerEnum : return "TransientIscoupler";
 		case TransientIsdamageevolutionEnum : return "TransientIsdamageevolution";
 		case TransientIsesaEnum : return "TransientIsesa";
@@ -495,4 +491,5 @@
 		case TransientIshydrologyEnum : return "TransientIshydrology";
 		case TransientIsmasstransportEnum : return "TransientIsmasstransport";
+		case TransientIsoceantransportEnum : return "TransientIsoceantransport";
 		case TransientIsmovingfrontEnum : return "TransientIsmovingfront";
 		case TransientIsoceancouplingEnum : return "TransientIsoceancoupling";
@@ -508,4 +505,7 @@
 		case ParametersENDEnum : return "ParametersEND";
 		case InputsSTARTEnum : return "InputsSTART";
+		case AccumulatedDeltaBottomPressureEnum : return "AccumulatedDeltaBottomPressure";
+		case AccumulatedDeltaIceThicknessEnum : return "AccumulatedDeltaIceThickness";
+		case AccumulatedDeltaTwsEnum : return "AccumulatedDeltaTws";
 		case AdjointEnum : return "Adjoint";
 		case AdjointpEnum : return "Adjointp";
@@ -550,4 +550,6 @@
 		case BedSlopeXEnum : return "BedSlopeX";
 		case BedSlopeYEnum : return "BedSlopeY";
+		case BottomPressureEnum : return "BottomPressure";
+		case BottomPressureOldEnum : return "BottomPressureOld";
 		case CalvingCalvingrateEnum : return "CalvingCalvingrate";
 		case CalvingHabFractionEnum : return "CalvingHabFraction";
@@ -571,4 +573,13 @@
 		case DegreeOfChannelizationEnum : return "DegreeOfChannelization";
 		case DepthBelowSurfaceEnum : return "DepthBelowSurface";
+		case DeltaIceThicknessEnum : return "DeltaIceThickness";
+		case DeltaTwsEnum : return "DeltaTws";
+		case DeltaBottomPressureEnum : return "DeltaBottomPressure";
+		case DeltaDslEnum : return "DeltaDsl";
+		case DslOldEnum : return "DslOld";
+		case DslEnum : return "Dsl";
+		case DeltaStrEnum : return "DeltaStr";
+		case StrOldEnum : return "StrOld";
+		case StrEnum : return "Str";
 		case DeviatoricStresseffectiveEnum : return "DeviatoricStresseffective";
 		case DeviatoricStressxxEnum : return "DeviatoricStressxx";
@@ -588,11 +599,4 @@
 		case DrivingStressXEnum : return "DrivingStressX";
 		case DrivingStressYEnum : return "DrivingStressY";
-		case DslGlobalAverageThermostericSeaLevelChangeEnum : return "DslGlobalAverageThermostericSeaLevelChange";
-		case DslSeaSurfaceHeightChangeAboveGeoidEnum : return "DslSeaSurfaceHeightChangeAboveGeoid";
-		case DslSeaWaterPressureChangeAtSeaFloorEnum : return "DslSeaWaterPressureChangeAtSeaFloor";
-		case DslStericRateEnum : return "DslStericRate";
-		case DslDynamicRateEnum : return "DslDynamicRate";
-		case GiaMmeNgiaEnum : return "GiaMmeNgia";
-		case GiaMmeUgiaEnum : return "GiaMmeUgia";
 		case DummyEnum : return "Dummy";
 		case EffectivePressureEnum : return "EffectivePressure";
@@ -607,5 +611,4 @@
 		case EplHeadSubstepEnum : return "EplHeadSubstep";
 		case EplHeadTransientEnum : return "EplHeadTransient";
-		case EsaDeltathicknessEnum : return "EsaDeltathickness";
 		case EsaEmotionEnum : return "EsaEmotion";
 		case EsaNmotionEnum : return "EsaNmotion";
@@ -637,6 +640,4 @@
 		case FrontalForcingsThermalForcingEnum : return "FrontalForcingsThermalForcing";
 		case GeometryHydrostaticRatioEnum : return "GeometryHydrostaticRatio";
-		case GiaLithosphereThicknessEnum : return "GiaLithosphereThickness";
-		case GiaMantleViscosityEnum : return "GiaMantleViscosity";
 		case NGiaEnum : return "NGia";
 		case NGiaRateEnum : return "NGiaRate";
@@ -671,4 +672,7 @@
 		case HydrologySheetThicknessEnum : return "HydrologySheetThickness";
 		case HydrologySheetThicknessOldEnum : return "HydrologySheetThicknessOld";
+		case HydrologyTwsEnum : return "HydrologyTws";
+		case HydrologyTwsSpcEnum : return "HydrologyTwsSpc";
+		case HydrologyTwsAnalysisEnum : return "HydrologyTwsAnalysis";
 		case HydrologyWatercolumnMaxEnum : return "HydrologyWatercolumnMax";
 		case HydrologyWaterVxEnum : return "HydrologyWaterVx";
@@ -711,4 +715,7 @@
 		case NodeEnum : return "Node";
 		case OmegaAbsGradientEnum : return "OmegaAbsGradient";
+		case OceantransportSpcbottompressureEnum : return "OceantransportSpcbottompressure";
+		case OceantransportSpcstrEnum : return "OceantransportSpcstr";
+		case OceantransportSpcdslEnum : return "OceantransportSpcdsl";
 		case P0Enum : return "P0";
 		case P1Enum : return "P1";
@@ -741,14 +748,8 @@
 		case SealevelRSLBarystaticEnum : return "SealevelRSLBarystatic";
 		case SealevelRSLRateEnum : return "SealevelRSLRate";
+		case SealevelUGrdEnum : return "SealevelUGrd";
+		case SealevelNGrdEnum : return "SealevelNGrd";
 		case SealevelUEastEsaEnum : return "SealevelUEastEsa";
-		case SealevelUEsaEnum : return "SealevelUEsa";
-		case SealevelUEsaRateEnum : return "SealevelUEsaRate";
 		case SealevelUNorthEsaEnum : return "SealevelUNorthEsa";
-		case SealevelchangeCumDeltathicknessEnum : return "SealevelchangeCumDeltathickness";
-		case SealevelchangeCumDeltathicknessOldEnum : return "SealevelchangeCumDeltathicknessOld";
-		case SurfaceloadRateEnum : return "SurfaceloadRate";
-		case SurfaceloadIceThicknessRateEnum : return "SurfaceloadIceThicknessRate";
-		case SurfaceloadWaterHeightRateEnum : return "SurfaceloadWaterHeightRate";
-		case SurfaceloadOtherRateEnum : return "SurfaceloadOtherRate";
 		case SealevelchangeIndicesEnum : return "SealevelchangeIndices";
 		case SealevelchangeGEnum : return "SealevelchangeG";
@@ -919,4 +920,5 @@
 		case ThicknessPositiveEnum : return "ThicknessPositive";
 		case ThicknessResidualEnum : return "ThicknessResidual";
+		case TransientAccumulatedDeltaIceThicknessEnum : return "TransientAccumulatedDeltaIceThickness";
 		case VelEnum : return "Vel";
 		case VxAverageEnum : return "VxAverage";
@@ -940,4 +942,7 @@
 		case WaterheightEnum : return "Waterheight";
 		case WeightsSurfaceObservationEnum : return "WeightsSurfaceObservation";
+		case OldAccumulatedDeltaBottomPressureEnum : return "OldAccumulatedDeltaBottomPressure";
+		case OldAccumulatedDeltaIceThicknessEnum : return "OldAccumulatedDeltaIceThickness";
+		case OldAccumulatedDeltaTwsEnum : return "OldAccumulatedDeltaTws";
 		case Outputdefinition1Enum : return "Outputdefinition1";
 		case Outputdefinition10Enum : return "Outputdefinition10";
@@ -1154,6 +1159,4 @@
 		case GenericParamEnum : return "GenericParam";
 		case GenericExternalResultEnum : return "GenericExternalResult";
-		case GiaAnalysisEnum : return "GiaAnalysis";
-		case GiaSolutionEnum : return "GiaSolution";
 		case Gradient1Enum : return "Gradient1";
 		case Gradient2Enum : return "Gradient2";
@@ -1275,4 +1278,6 @@
 		case NyeH2OEnum : return "NyeH2O";
 		case NumericalfluxEnum : return "Numericalflux";
+		case OceantransportAnalysisEnum : return "OceantransportAnalysis";
+		case OceantransportSolutionEnum : return "OceantransportSolution";
 		case OldGradientEnum : return "OldGradient";
 		case OneLayerP4zEnum : return "OneLayerP4z";
@@ -1337,5 +1342,4 @@
 		case SealevelUmotionEnum : return "SealevelUmotion";
 		case SealevelchangeAnalysisEnum : return "SealevelchangeAnalysis";
-		case SealevelchangeSolutionEnum : return "SealevelchangeSolution";
 		case SegEnum : return "Seg";
 		case SegInputEnum : return "SegInput";
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 26047)
@@ -147,6 +147,7 @@
 	      else if (strcmp(name,"SolidearthExternalModelid")==0) return SolidearthExternalModelidEnum;
 	      else if (strcmp(name,"SolidearthExternalNummodels")==0) return SolidearthExternalNummodelsEnum;
-	      else if (strcmp(name,"DslComputeFingerprints")==0) return DslComputeFingerprintsEnum;
+	      else if (strcmp(name,"SolidearthSettingsComputeBpGrd")==0) return SolidearthSettingsComputeBpGrdEnum;
 	      else if (strcmp(name,"EarthId")==0) return EarthIdEnum;
+	      else if (strcmp(name,"Elastic")==0) return ElasticEnum;
 	      else if (strcmp(name,"EplZigZagCounter")==0) return EplZigZagCounterEnum;
 	      else if (strcmp(name,"EsaHElastic")==0) return EsaHElasticEnum;
@@ -178,8 +179,5 @@
 	      else if (strcmp(name,"FrontalForcingsNumberofBasins")==0) return FrontalForcingsNumberofBasinsEnum;
 	      else if (strcmp(name,"FrontalForcingsParam")==0) return FrontalForcingsParamEnum;
-	      else if (strcmp(name,"GiaModel")==0) return GiaModelEnum;
-	      else if (strcmp(name,"GiaModelid")==0) return GiaModelidEnum;
-	      else if (strcmp(name,"GiaNummodels")==0) return GiaNummodelsEnum;
-	      else if (strcmp(name,"GiaCrossSectionShape")==0) return GiaCrossSectionShapeEnum;
+	      else if (strcmp(name,"GrdModel")==0) return GrdModelEnum;
 	      else if (strcmp(name,"GroundinglineFrictionInterpolation")==0) return GroundinglineFrictionInterpolationEnum;
 	      else if (strcmp(name,"GroundinglineMeltInterpolation")==0) return GroundinglineMeltInterpolationEnum;
@@ -252,4 +250,6 @@
 	      else if (strcmp(name,"InversionStepThreshold")==0) return InversionStepThresholdEnum;
 	      else if (strcmp(name,"InversionType")==0) return InversionTypeEnum;
+	      else if (strcmp(name,"Ivins")==0) return IvinsEnum;
+	      else if (strcmp(name,"IsSlcCoupling")==0) return IsSlcCouplingEnum;
 	      else if (strcmp(name,"LevelsetKillIcebergs")==0) return LevelsetKillIcebergsEnum;
 	      else if (strcmp(name,"LevelsetReinitFrequency")==0) return LevelsetReinitFrequencyEnum;
@@ -283,8 +283,4 @@
 	      else if (strcmp(name,"MaterialsHeatcapacity")==0) return MaterialsHeatcapacityEnum;
 	      else if (strcmp(name,"MaterialsLatentheat")==0) return MaterialsLatentheatEnum;
-	      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 if (strcmp(name,"MaterialsMeltingpoint")==0) return MaterialsMeltingpointEnum;
 	      else if (strcmp(name,"MaterialsMixedLayerCapacity")==0) return MaterialsMixedLayerCapacityEnum;
@@ -355,4 +351,5 @@
 	      else if (strcmp(name,"SolidearthPlanetArea")==0) return SolidearthPlanetAreaEnum;
 	      else if (strcmp(name,"SolidearthSettingsAbstol")==0) return SolidearthSettingsAbstolEnum;
+	      else if (strcmp(name,"SolidearthSettingsCrossSectionShape")==0) return SolidearthSettingsCrossSectionShapeEnum;
 	      else if (strcmp(name,"RotationalAngularVelocity")==0) return RotationalAngularVelocityEnum;
 	      else if (strcmp(name,"SolidearthSettingsElastic")==0) return SolidearthSettingsElasticEnum;
@@ -383,11 +380,11 @@
 	      else if (strcmp(name,"SealevelchangeRunCount")==0) return SealevelchangeRunCountEnum;
 	      else if (strcmp(name,"SealevelchangeTransitions")==0) return SealevelchangeTransitionsEnum;
+	      else if (strcmp(name,"SealevelchangeUElastic")==0) return SealevelchangeUElasticEnum;
+	      else if (strcmp(name,"SettingsIoGather")==0) return SettingsIoGatherEnum;
+	      else if (strcmp(name,"SettingsNumResultsOnNodes")==0) return SettingsNumResultsOnNodesEnum;
          else stage=4;
    }
    if(stage==4){
-	      if (strcmp(name,"SealevelchangeUElastic")==0) return SealevelchangeUElasticEnum;
-	      else if (strcmp(name,"SettingsIoGather")==0) return SettingsIoGatherEnum;
-	      else if (strcmp(name,"SettingsNumResultsOnNodes")==0) return SettingsNumResultsOnNodesEnum;
-	      else if (strcmp(name,"SettingsOutputFrequency")==0) return SettingsOutputFrequencyEnum;
+	      if (strcmp(name,"SettingsOutputFrequency")==0) return SettingsOutputFrequencyEnum;
 	      else if (strcmp(name,"SettingsCheckpointFrequency")==0) return SettingsCheckpointFrequencyEnum;
 	      else if (strcmp(name,"SettingsResultsOnNodes")==0) return SettingsResultsOnNodesEnum;
@@ -497,5 +494,4 @@
 	      else if (strcmp(name,"ToolkitsTypes")==0) return ToolkitsTypesEnum;
 	      else if (strcmp(name,"TransientAmrFrequency")==0) return TransientAmrFrequencyEnum;
-	      else if (strcmp(name,"TransientIscoupler")==0) return TransientIscouplerEnum;
 	      else if (strcmp(name,"TransientIsdamageevolution")==0) return TransientIsdamageevolutionEnum;
 	      else if (strcmp(name,"TransientIsesa")==0) return TransientIsesaEnum;
@@ -504,13 +500,14 @@
 	      else if (strcmp(name,"TransientIshydrology")==0) return TransientIshydrologyEnum;
 	      else if (strcmp(name,"TransientIsmasstransport")==0) return TransientIsmasstransportEnum;
+	      else if (strcmp(name,"TransientIsoceantransport")==0) return TransientIsoceantransportEnum;
 	      else if (strcmp(name,"TransientIsmovingfront")==0) return TransientIsmovingfrontEnum;
 	      else if (strcmp(name,"TransientIsoceancoupling")==0) return TransientIsoceancouplingEnum;
+	      else if (strcmp(name,"TransientIssampling")==0) return TransientIssamplingEnum;
+	      else if (strcmp(name,"TransientIsslc")==0) return TransientIsslcEnum;
+	      else if (strcmp(name,"TransientIssmb")==0) return TransientIssmbEnum;
          else stage=5;
    }
    if(stage==5){
-	      if (strcmp(name,"TransientIssampling")==0) return TransientIssamplingEnum;
-	      else if (strcmp(name,"TransientIsslc")==0) return TransientIsslcEnum;
-	      else if (strcmp(name,"TransientIssmb")==0) return TransientIssmbEnum;
-	      else if (strcmp(name,"TransientIsstressbalance")==0) return TransientIsstressbalanceEnum;
+	      if (strcmp(name,"TransientIsstressbalance")==0) return TransientIsstressbalanceEnum;
 	      else if (strcmp(name,"TransientIsthermal")==0) return TransientIsthermalEnum;
 	      else if (strcmp(name,"TransientNumRequestedOutputs")==0) return TransientNumRequestedOutputsEnum;
@@ -520,4 +517,7 @@
 	      else if (strcmp(name,"ParametersEND")==0) return ParametersENDEnum;
 	      else if (strcmp(name,"InputsSTART")==0) return InputsSTARTEnum;
+	      else if (strcmp(name,"AccumulatedDeltaBottomPressure")==0) return AccumulatedDeltaBottomPressureEnum;
+	      else if (strcmp(name,"AccumulatedDeltaIceThickness")==0) return AccumulatedDeltaIceThicknessEnum;
+	      else if (strcmp(name,"AccumulatedDeltaTws")==0) return AccumulatedDeltaTwsEnum;
 	      else if (strcmp(name,"Adjoint")==0) return AdjointEnum;
 	      else if (strcmp(name,"Adjointp")==0) return AdjointpEnum;
@@ -562,4 +562,6 @@
 	      else if (strcmp(name,"BedSlopeX")==0) return BedSlopeXEnum;
 	      else if (strcmp(name,"BedSlopeY")==0) return BedSlopeYEnum;
+	      else if (strcmp(name,"BottomPressure")==0) return BottomPressureEnum;
+	      else if (strcmp(name,"BottomPressureOld")==0) return BottomPressureOldEnum;
 	      else if (strcmp(name,"CalvingCalvingrate")==0) return CalvingCalvingrateEnum;
 	      else if (strcmp(name,"CalvingHabFraction")==0) return CalvingHabFractionEnum;
@@ -583,4 +585,13 @@
 	      else if (strcmp(name,"DegreeOfChannelization")==0) return DegreeOfChannelizationEnum;
 	      else if (strcmp(name,"DepthBelowSurface")==0) return DepthBelowSurfaceEnum;
+	      else if (strcmp(name,"DeltaIceThickness")==0) return DeltaIceThicknessEnum;
+	      else if (strcmp(name,"DeltaTws")==0) return DeltaTwsEnum;
+	      else if (strcmp(name,"DeltaBottomPressure")==0) return DeltaBottomPressureEnum;
+	      else if (strcmp(name,"DeltaDsl")==0) return DeltaDslEnum;
+	      else if (strcmp(name,"DslOld")==0) return DslOldEnum;
+	      else if (strcmp(name,"Dsl")==0) return DslEnum;
+	      else if (strcmp(name,"DeltaStr")==0) return DeltaStrEnum;
+	      else if (strcmp(name,"StrOld")==0) return StrOldEnum;
+	      else if (strcmp(name,"Str")==0) return StrEnum;
 	      else if (strcmp(name,"DeviatoricStresseffective")==0) return DeviatoricStresseffectiveEnum;
 	      else if (strcmp(name,"DeviatoricStressxx")==0) return DeviatoricStressxxEnum;
@@ -600,11 +611,4 @@
 	      else if (strcmp(name,"DrivingStressX")==0) return DrivingStressXEnum;
 	      else if (strcmp(name,"DrivingStressY")==0) return DrivingStressYEnum;
-	      else if (strcmp(name,"DslGlobalAverageThermostericSeaLevelChange")==0) return DslGlobalAverageThermostericSeaLevelChangeEnum;
-	      else if (strcmp(name,"DslSeaSurfaceHeightChangeAboveGeoid")==0) return DslSeaSurfaceHeightChangeAboveGeoidEnum;
-	      else if (strcmp(name,"DslSeaWaterPressureChangeAtSeaFloor")==0) return DslSeaWaterPressureChangeAtSeaFloorEnum;
-	      else if (strcmp(name,"DslStericRate")==0) return DslStericRateEnum;
-	      else if (strcmp(name,"DslDynamicRate")==0) return DslDynamicRateEnum;
-	      else if (strcmp(name,"GiaMmeNgia")==0) return GiaMmeNgiaEnum;
-	      else if (strcmp(name,"GiaMmeUgia")==0) return GiaMmeUgiaEnum;
 	      else if (strcmp(name,"Dummy")==0) return DummyEnum;
 	      else if (strcmp(name,"EffectivePressure")==0) return EffectivePressureEnum;
@@ -619,5 +623,4 @@
 	      else if (strcmp(name,"EplHeadSubstep")==0) return EplHeadSubstepEnum;
 	      else if (strcmp(name,"EplHeadTransient")==0) return EplHeadTransientEnum;
-	      else if (strcmp(name,"EsaDeltathickness")==0) return EsaDeltathicknessEnum;
 	      else if (strcmp(name,"EsaEmotion")==0) return EsaEmotionEnum;
 	      else if (strcmp(name,"EsaNmotion")==0) return EsaNmotionEnum;
@@ -626,11 +629,11 @@
 	      else if (strcmp(name,"EsaStrainratexy")==0) return EsaStrainratexyEnum;
 	      else if (strcmp(name,"EsaStrainrateyy")==0) return EsaStrainrateyyEnum;
-	      else if (strcmp(name,"EsaUmotion")==0) return EsaUmotionEnum;
-	      else if (strcmp(name,"EsaXmotion")==0) return EsaXmotionEnum;
-	      else if (strcmp(name,"EsaYmotion")==0) return EsaYmotionEnum;
          else stage=6;
    }
    if(stage==6){
-	      if (strcmp(name,"EtaDiff")==0) return EtaDiffEnum;
+	      if (strcmp(name,"EsaUmotion")==0) return EsaUmotionEnum;
+	      else if (strcmp(name,"EsaXmotion")==0) return EsaXmotionEnum;
+	      else if (strcmp(name,"EsaYmotion")==0) return EsaYmotionEnum;
+	      else if (strcmp(name,"EtaDiff")==0) return EtaDiffEnum;
 	      else if (strcmp(name,"FlowequationBorderFS")==0) return FlowequationBorderFSEnum;
 	      else if (strcmp(name,"FrictionAs")==0) return FrictionAsEnum;
@@ -652,6 +655,4 @@
 	      else if (strcmp(name,"FrontalForcingsThermalForcing")==0) return FrontalForcingsThermalForcingEnum;
 	      else if (strcmp(name,"GeometryHydrostaticRatio")==0) return GeometryHydrostaticRatioEnum;
-	      else if (strcmp(name,"GiaLithosphereThickness")==0) return GiaLithosphereThicknessEnum;
-	      else if (strcmp(name,"GiaMantleViscosity")==0) return GiaMantleViscosityEnum;
 	      else if (strcmp(name,"NGia")==0) return NGiaEnum;
 	      else if (strcmp(name,"NGiaRate")==0) return NGiaRateEnum;
@@ -686,4 +687,7 @@
 	      else if (strcmp(name,"HydrologySheetThickness")==0) return HydrologySheetThicknessEnum;
 	      else if (strcmp(name,"HydrologySheetThicknessOld")==0) return HydrologySheetThicknessOldEnum;
+	      else if (strcmp(name,"HydrologyTws")==0) return HydrologyTwsEnum;
+	      else if (strcmp(name,"HydrologyTwsSpc")==0) return HydrologyTwsSpcEnum;
+	      else if (strcmp(name,"HydrologyTwsAnalysis")==0) return HydrologyTwsAnalysisEnum;
 	      else if (strcmp(name,"HydrologyWatercolumnMax")==0) return HydrologyWatercolumnMaxEnum;
 	      else if (strcmp(name,"HydrologyWaterVx")==0) return HydrologyWaterVxEnum;
@@ -726,4 +730,7 @@
 	      else if (strcmp(name,"Node")==0) return NodeEnum;
 	      else if (strcmp(name,"OmegaAbsGradient")==0) return OmegaAbsGradientEnum;
+	      else if (strcmp(name,"OceantransportSpcbottompressure")==0) return OceantransportSpcbottompressureEnum;
+	      else if (strcmp(name,"OceantransportSpcstr")==0) return OceantransportSpcstrEnum;
+	      else if (strcmp(name,"OceantransportSpcdsl")==0) return OceantransportSpcdslEnum;
 	      else if (strcmp(name,"P0")==0) return P0Enum;
 	      else if (strcmp(name,"P1")==0) return P1Enum;
@@ -745,5 +752,8 @@
 	      else if (strcmp(name,"Sealevel")==0) return SealevelEnum;
 	      else if (strcmp(name,"SealevelBarystaticMask")==0) return SealevelBarystaticMaskEnum;
-	      else if (strcmp(name,"SealevelBarystaticOceanMask")==0) return SealevelBarystaticOceanMaskEnum;
+         else stage=7;
+   }
+   if(stage==7){
+	      if (strcmp(name,"SealevelBarystaticOceanMask")==0) return SealevelBarystaticOceanMaskEnum;
 	      else if (strcmp(name,"SealevelNEsa")==0) return SealevelNEsaEnum;
 	      else if (strcmp(name,"SealevelNEsaRate")==0) return SealevelNEsaRateEnum;
@@ -752,21 +762,12 @@
 	      else if (strcmp(name,"BslcIce")==0) return BslcIceEnum;
 	      else if (strcmp(name,"BslcHydro")==0) return BslcHydroEnum;
-         else stage=7;
-   }
-   if(stage==7){
-	      if (strcmp(name,"BslcRate")==0) return BslcRateEnum;
+	      else if (strcmp(name,"BslcRate")==0) return BslcRateEnum;
 	      else if (strcmp(name,"Gmtslc")==0) return GmtslcEnum;
 	      else if (strcmp(name,"SealevelRSLBarystatic")==0) return SealevelRSLBarystaticEnum;
 	      else if (strcmp(name,"SealevelRSLRate")==0) return SealevelRSLRateEnum;
+	      else if (strcmp(name,"SealevelUGrd")==0) return SealevelUGrdEnum;
+	      else if (strcmp(name,"SealevelNGrd")==0) return SealevelNGrdEnum;
 	      else if (strcmp(name,"SealevelUEastEsa")==0) return SealevelUEastEsaEnum;
-	      else if (strcmp(name,"SealevelUEsa")==0) return SealevelUEsaEnum;
-	      else if (strcmp(name,"SealevelUEsaRate")==0) return SealevelUEsaRateEnum;
 	      else if (strcmp(name,"SealevelUNorthEsa")==0) return SealevelUNorthEsaEnum;
-	      else if (strcmp(name,"SealevelchangeCumDeltathickness")==0) return SealevelchangeCumDeltathicknessEnum;
-	      else if (strcmp(name,"SealevelchangeCumDeltathicknessOld")==0) return SealevelchangeCumDeltathicknessOldEnum;
-	      else if (strcmp(name,"SurfaceloadRate")==0) return SurfaceloadRateEnum;
-	      else if (strcmp(name,"SurfaceloadIceThicknessRate")==0) return SurfaceloadIceThicknessRateEnum;
-	      else if (strcmp(name,"SurfaceloadWaterHeightRate")==0) return SurfaceloadWaterHeightRateEnum;
-	      else if (strcmp(name,"SurfaceloadOtherRate")==0) return SurfaceloadOtherRateEnum;
 	      else if (strcmp(name,"SealevelchangeIndices")==0) return SealevelchangeIndicesEnum;
 	      else if (strcmp(name,"SealevelchangeG")==0) return SealevelchangeGEnum;
@@ -874,9 +875,9 @@
 	      else if (strcmp(name,"SmbTemperaturesLgm")==0) return SmbTemperaturesLgmEnum;
 	      else if (strcmp(name,"SmbTemperaturesPresentday")==0) return SmbTemperaturesPresentdayEnum;
-	      else if (strcmp(name,"SmbTemperaturesReconstructed")==0) return SmbTemperaturesReconstructedEnum;
          else stage=8;
    }
    if(stage==8){
-	      if (strcmp(name,"SmbTini")==0) return SmbTiniEnum;
+	      if (strcmp(name,"SmbTemperaturesReconstructed")==0) return SmbTemperaturesReconstructedEnum;
+	      else if (strcmp(name,"SmbTini")==0) return SmbTiniEnum;
 	      else if (strcmp(name,"SmbTmean")==0) return SmbTmeanEnum;
 	      else if (strcmp(name,"SmbTz")==0) return SmbTzEnum;
@@ -940,4 +941,5 @@
 	      else if (strcmp(name,"ThicknessPositive")==0) return ThicknessPositiveEnum;
 	      else if (strcmp(name,"ThicknessResidual")==0) return ThicknessResidualEnum;
+	      else if (strcmp(name,"TransientAccumulatedDeltaIceThickness")==0) return TransientAccumulatedDeltaIceThicknessEnum;
 	      else if (strcmp(name,"Vel")==0) return VelEnum;
 	      else if (strcmp(name,"VxAverage")==0) return VxAverageEnum;
@@ -961,4 +963,7 @@
 	      else if (strcmp(name,"Waterheight")==0) return WaterheightEnum;
 	      else if (strcmp(name,"WeightsSurfaceObservation")==0) return WeightsSurfaceObservationEnum;
+	      else if (strcmp(name,"OldAccumulatedDeltaBottomPressure")==0) return OldAccumulatedDeltaBottomPressureEnum;
+	      else if (strcmp(name,"OldAccumulatedDeltaIceThickness")==0) return OldAccumulatedDeltaIceThicknessEnum;
+	      else if (strcmp(name,"OldAccumulatedDeltaTws")==0) return OldAccumulatedDeltaTwsEnum;
 	      else if (strcmp(name,"Outputdefinition1")==0) return Outputdefinition1Enum;
 	      else if (strcmp(name,"Outputdefinition10")==0) return Outputdefinition10Enum;
@@ -993,13 +998,13 @@
 	      else if (strcmp(name,"Outputdefinition38")==0) return Outputdefinition38Enum;
 	      else if (strcmp(name,"Outputdefinition39")==0) return Outputdefinition39Enum;
-	      else if (strcmp(name,"Outputdefinition3")==0) return Outputdefinition3Enum;
+         else stage=9;
+   }
+   if(stage==9){
+	      if (strcmp(name,"Outputdefinition3")==0) return Outputdefinition3Enum;
 	      else if (strcmp(name,"Outputdefinition40")==0) return Outputdefinition40Enum;
 	      else if (strcmp(name,"Outputdefinition41")==0) return Outputdefinition41Enum;
 	      else if (strcmp(name,"Outputdefinition42")==0) return Outputdefinition42Enum;
 	      else if (strcmp(name,"Outputdefinition43")==0) return Outputdefinition43Enum;
-         else stage=9;
-   }
-   if(stage==9){
-	      if (strcmp(name,"Outputdefinition44")==0) return Outputdefinition44Enum;
+	      else if (strcmp(name,"Outputdefinition44")==0) return Outputdefinition44Enum;
 	      else if (strcmp(name,"Outputdefinition45")==0) return Outputdefinition45Enum;
 	      else if (strcmp(name,"Outputdefinition46")==0) return Outputdefinition46Enum;
@@ -1116,13 +1121,13 @@
 	      else if (strcmp(name,"ControlInputGrad")==0) return ControlInputGradEnum;
 	      else if (strcmp(name,"ControlInputMaxs")==0) return ControlInputMaxsEnum;
-	      else if (strcmp(name,"ControlInputMins")==0) return ControlInputMinsEnum;
+         else stage=10;
+   }
+   if(stage==10){
+	      if (strcmp(name,"ControlInputMins")==0) return ControlInputMinsEnum;
 	      else if (strcmp(name,"ControlInputValues")==0) return ControlInputValuesEnum;
 	      else if (strcmp(name,"CrouzeixRaviart")==0) return CrouzeixRaviartEnum;
 	      else if (strcmp(name,"Cuffey")==0) return CuffeyEnum;
 	      else if (strcmp(name,"CuffeyTemperate")==0) return CuffeyTemperateEnum;
-         else stage=10;
-   }
-   if(stage==10){
-	      if (strcmp(name,"DamageEvolutionAnalysis")==0) return DamageEvolutionAnalysisEnum;
+	      else if (strcmp(name,"DamageEvolutionAnalysis")==0) return DamageEvolutionAnalysisEnum;
 	      else if (strcmp(name,"DamageEvolutionSolution")==0) return DamageEvolutionSolutionEnum;
 	      else if (strcmp(name,"DataSet")==0) return DataSetEnum;
@@ -1181,6 +1186,4 @@
 	      else if (strcmp(name,"GenericParam")==0) return GenericParamEnum;
 	      else if (strcmp(name,"GenericExternalResult")==0) return GenericExternalResultEnum;
-	      else if (strcmp(name,"GiaAnalysis")==0) return GiaAnalysisEnum;
-	      else if (strcmp(name,"GiaSolution")==0) return GiaSolutionEnum;
 	      else if (strcmp(name,"Gradient1")==0) return Gradient1Enum;
 	      else if (strcmp(name,"Gradient2")==0) return Gradient2Enum;
@@ -1241,11 +1244,11 @@
 	      else if (strcmp(name,"LliboutryDuval")==0) return LliboutryDuvalEnum;
 	      else if (strcmp(name,"Loads")==0) return LoadsEnum;
-	      else if (strcmp(name,"LoveAnalysis")==0) return LoveAnalysisEnum;
-	      else if (strcmp(name,"LoveHi")==0) return LoveHiEnum;
-	      else if (strcmp(name,"LoveHr")==0) return LoveHrEnum;
          else stage=11;
    }
    if(stage==11){
-	      if (strcmp(name,"LoveKernelsImag")==0) return LoveKernelsImagEnum;
+	      if (strcmp(name,"LoveAnalysis")==0) return LoveAnalysisEnum;
+	      else if (strcmp(name,"LoveHi")==0) return LoveHiEnum;
+	      else if (strcmp(name,"LoveHr")==0) return LoveHrEnum;
+	      else if (strcmp(name,"LoveKernelsImag")==0) return LoveKernelsImagEnum;
 	      else if (strcmp(name,"LoveKernelsReal")==0) return LoveKernelsRealEnum;
 	      else if (strcmp(name,"LoveKi")==0) return LoveKiEnum;
@@ -1305,4 +1308,6 @@
 	      else if (strcmp(name,"NyeH2O")==0) return NyeH2OEnum;
 	      else if (strcmp(name,"Numericalflux")==0) return NumericalfluxEnum;
+	      else if (strcmp(name,"OceantransportAnalysis")==0) return OceantransportAnalysisEnum;
+	      else if (strcmp(name,"OceantransportSolution")==0) return OceantransportSolutionEnum;
 	      else if (strcmp(name,"OldGradient")==0) return OldGradientEnum;
 	      else if (strcmp(name,"OneLayerP4z")==0) return OneLayerP4zEnum;
@@ -1362,13 +1367,12 @@
 	      else if (strcmp(name,"SealevelEmotion")==0) return SealevelEmotionEnum;
 	      else if (strcmp(name,"SealevelInertiaTensorXZ")==0) return SealevelInertiaTensorXZEnum;
-	      else if (strcmp(name,"SealevelInertiaTensorYZ")==0) return SealevelInertiaTensorYZEnum;
+         else stage=12;
+   }
+   if(stage==12){
+	      if (strcmp(name,"SealevelInertiaTensorYZ")==0) return SealevelInertiaTensorYZEnum;
 	      else if (strcmp(name,"SealevelInertiaTensorZZ")==0) return SealevelInertiaTensorZZEnum;
 	      else if (strcmp(name,"SealevelNmotion")==0) return SealevelNmotionEnum;
 	      else if (strcmp(name,"SealevelUmotion")==0) return SealevelUmotionEnum;
 	      else if (strcmp(name,"SealevelchangeAnalysis")==0) return SealevelchangeAnalysisEnum;
-         else stage=12;
-   }
-   if(stage==12){
-	      if (strcmp(name,"SealevelchangeSolution")==0) return SealevelchangeSolutionEnum;
 	      else if (strcmp(name,"Seg")==0) return SegEnum;
 	      else if (strcmp(name,"SegInput")==0) return SegInputEnum;
Index: /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 26046)
+++ /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 26047)
@@ -168,7 +168,7 @@
 		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
 	}
-	else if(strcmp(string_in,"SurfaceloadIceThicknessRate")==0){
-		const char* field = "md.solidearth.surfaceload.icethicknesschange";
-		input_enum        = SurfaceloadIceThicknessRateEnum;
+	else if(strcmp(string_in,"IceLoad")==0){
+		const char* field = "md.masstransport.spcthickness";
+		input_enum        = MasstransportSpcthicknessEnum;
 		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
 	}
@@ -178,12 +178,22 @@
 		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
 	}
-	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));
-	}
-	else if(strcmp(string_in,"SurfaceloadWaterHeightRate")==0){
-		const char* field = "md.solidearth.surfaceload.waterheightchange";
-		input_enum        = SurfaceloadWaterHeightRateEnum;
+	else if(strcmp(string_in,"DslGlobalAverageThermostericSeaLevel")==0){
+		const char* field = "md.dsl.global_average_thermosteric_sea_level";
+		input_enum        = OceantransportSpcstrEnum;
+		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
+	}
+	else if(strcmp(string_in,"DslSeaWaterPressureAtSeaFloor")==0){
+		const char* field = "md.dsl.sea_water_pressure_at_sea_floor";
+		input_enum        = OceantransportSpcbottompressureEnum;
+		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
+	}
+	else if(strcmp(string_in,"DslSeaSurfaceHeightAboveGeoid")==0){
+		const char* field = "md.dsl.sea_surface_height_above_geoid";
+		input_enum        = OceantransportSpcdslEnum;
+		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
+	}
+	else if(strcmp(string_in,"TwsLoad")==0){
+		const char* field = "md.hydrology.spcwatercolumn";
+		input_enum        = HydrologyTwsSpcEnum;
 		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
 	}
@@ -273,4 +283,5 @@
 		case 4: return HydrologypismEnum;
 		case 5: return HydrologyGlaDSEnum;
+		case 6: return HydrologyTwsEnum;
 		default: _error_("Marshalled hydrology code \""<<enum_in<<"\" not supported yet");
 	}
@@ -312,4 +323,12 @@
 		case 2: return AmrNeopzEnum;
 		default: _error_("Marshalled AMR code \""<<enum_in<<"\" not supported yet");
+	}
+}/*}}}*/
+int IoCodeToEnumGrd(int enum_in){/*{{{*/
+	switch(enum_in){
+		case 0: return NoneEnum;
+		case 1: return ElasticEnum;
+		case 2: return IvinsEnum;
+		default: _error_("Marshalled GRD code \""<<enum_in<<"\" not supported yet");
 	}
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.h	(revision 26046)
+++ /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.h	(revision 26047)
@@ -13,4 +13,5 @@
 int IoCodeToEnumTimestepping(int enum_in);
 int IoCodeToEnumAmr(int enum_in);
+int IoCodeToEnumGrd(int enum_in);
 
 int IoCodeToEnumVertexEquation(int enum_in);
Index: /issm/trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.m
===================================================================
--- /issm/trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.m	(revision 26046)
+++ /issm/trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.m	(revision 26047)
@@ -33,4 +33,7 @@
 md.basalforcings   = initialize(md.basalforcings,md);
 
+%Initialize ocean forcings and sealevel
+md.dsl= initialize(md.dsl,md);
+
 %Deal with other boundary conditions
 if isnan(md.balancethickness.thickening_rate),
Index: /issm/trunk-jpl/src/m/classes/dsl.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/dsl.m	(revision 26046)
+++ /issm/trunk-jpl/src/m/classes/dsl.m	(revision 26047)
@@ -7,14 +7,13 @@
 	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 mm/yr equivalent, not in Pa/yr!) for each ensemble
-		compute_fingerprints; %do we use the sea water pressure change to compute fingerprints and correct sea_surface_height_change_above_geoid
+		global_average_thermosteric_sea_level; %corresponds to zostoga field in CMIP5 archives. Specified as a temporally variable quantity (in m)
+		sea_surface_height_above_geoid; %corresponds to zos field in CMIP5 archives. Spatial average is 0. Specified as a spatio-temporally variable (in m)
+		sea_water_pressure_at_sea_floor; %corresponds to bpo field in CMIP5 archives. Specified as a spatio-temporally variable quantity (in m equivalent, not in Pa!) 
 
 	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);
+			self.sea_surface_height_above_geoid=project3d(md,'vector',self.sea_surface_height_above_geoid,'type','node','layer',1);
+			self.sea_water_pressure_at_sea_floor=project3d(md,'vector',self.sea_water_pressure_at_sea_floor,'type','node','layer',1);
 		end % }}}
 		function self = dsl(varargin) % {{{
@@ -30,8 +29,7 @@
 		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;
-			self.compute_fingerprints=0;
+			self.global_average_thermosteric_sea_level=NaN;
+			self.sea_surface_height_above_geoid=NaN;
+			self.sea_water_pressure_at_sea_floor=NaN;
 
 		end % }}}
@@ -41,23 +39,19 @@
 			if ~ismember('SealevelchangeAnalysis',analyses), return; end
 			if (strcmp(solution,'TransientSolution') & md.transient.isslc == 0), return; end
-			md = checkfield(md,'fieldname','dsl.global_average_thermosteric_sea_level_change','NaN',1,'Inf',1);
-			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);
-			md = checkfield(md,'fieldname','dsl.compute_fingerprints','NaN',1,'Inf',1,'values',[0,1]);
-			if self.compute_fingerprints,
-				%check geodetic flag of is on: 
-				if md.solidearth.settings.isgrd==0,
-					error('DSL checkconsistency error message: if bottom pressure fingerprints computations are requested, solidearth class should have grd flag on');
-				end
+			md = checkfield(md,'fieldname','dsl.global_average_thermosteric_sea_level','NaN',1,'Inf',1);
+			md = checkfield(md,'fieldname','dsl.sea_surface_height_above_geoid','NaN',1,'Inf',1,'timeseries',1);
+			md = checkfield(md,'fieldname','dsl.sea_water_pressure_at_sea_floor','NaN',1,'Inf',1,'timeseries',1);
+			
+			if md.solidearth.settings.compute_bp_grd==1, 
+				md = checkfield(md,'fieldname','dsl.sea_water_pressure_at_sea_floor','empty',1);
 			end
-
+			
 		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)');
-			fielddisplay(self,'compute_fingerprints','%do we use the sea water pressure change to compute fingerprints and correct sea_surface_height_change_above_geoid');
+			fielddisplay(self,'global_average_thermosteric_sea_level','corresponds to zostoga field in CMIP5 archives. Specified as a temporally variable quantity (in m)');
+			fielddisplay(self,'sea_surface_height_above_geoid','corresponds to zos field in CMIP5 archives. Spatial average is 0. Specified as a spatio-temporally quantity (in m)');
+			fielddisplay(self,'sea_water_pressure_at_sea_floor','corresponds to bpo field in CMIP5 archives. Specified as a spatio-temporally variable quantity (in m equivalent)');
 
 		end % }}}
@@ -65,18 +59,33 @@
 
 			WriteData(fid,prefix,'name','md.dsl.model','data',1,'format','Integer');
-			WriteData(fid,prefix,'object',self,'fieldname','compute_fingerprints','format','Integer');
-			WriteData(fid,prefix,'object',self,'fieldname','global_average_thermosteric_sea_level_change','format','DoubleMat','mattype',1,'timeseries',1,'timeserieslength',2,'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);
-			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);
+			WriteData(fid,prefix,'object',self,'fieldname','global_average_thermosteric_sea_level','format','DoubleMat','mattype',2,'timeseries',1,'timeserieslength',2,'yts',md.constants.yts); %mattype 2, because we are sending a GMSL value identical everywhere on each element. 
+			WriteData(fid,prefix,'object',self,'fieldname','sea_surface_height_above_geoid','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts); %mattype 1 because we specify DSL at vertex locations.
+			WriteData(fid,prefix,'object',self,'fieldname','sea_water_pressure_at_sea_floor','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts); %mattype 1 because we specify bottom pressure at vertex locations.
 
 		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.compute_fingerprints'],self.compute_fingerprints);
-			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);
+			writejs1Darray(fid,[modelname '.dsl.global_average_thermosteric_sea_level'],self.global_average_thermosteric_sea_level);
+			writejs1Darray(fid,[modelname '.dsl.sea_surface_height_above_geoid'],self.sea_surface_height_above_geoid);
+			writejs1Darray(fid,[modelname '.dsl.sea_water_pressure_at_sea_floor'],self.sea_water_pressure_at_sea_floor);
 
 		end % }}}
+		function self = initialize(self,md) % {{{
+
+			if isnan(self.global_average_thermosteric_sea_level)
+				self.global_average_thermosteric_sea_level=[0;0];
+				disp('      no dsl.global_average_thermosteric_sea_level specified: transient values set at zero');
+			end
+			if isnan(self.sea_surface_height_above_geoid)
+				self.sea_surface_height_above_geoid=[zeros(md.mesh.numberofvertices,1);0];
+				disp('      no dsl.sea_surface_height_above_geoid specified: transient values set at zero');
+			end
+			if isnan(self.sea_water_pressure_at_sea_floor)
+				self.sea_water_pressure_at_sea_floor=[zeros(md.mesh.numberofvertices,1);0];
+				disp('      no dsl.sea_water_pressure_at_sea_floor specified: transient values set at zero');
+			end
+
+		end % }}}
+	
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/dslmme.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/dslmme.m	(revision 26046)
+++ /issm/trunk-jpl/src/m/classes/dslmme.m	(revision 26047)
@@ -8,8 +8,7 @@
 
 		modelid; %index into the multi-model ensemble, determine which field will be used.
-		global_average_thermosteric_sea_level_change; %corresponds to zostoga fields in CMIP5 archives. Specified as a temporally variable global rate (mm/yr) for each ensemble.
-		sea_surface_height_change_above_geoid; %corresponds to zos fields in CMIP5 archives. Spatial average is 0. Specified as a spatio-temporally variable rate (mm/yr) for each ensemble
-		sea_water_pressure_change_at_sea_floor; %corresponds to bpo fields in CMIP5 archives. Specified as a spatio-temporally variable rate (in mm/yr equivalent, not in Pa/yr!) for each ensemble
-		compute_fingerprints; %do we use the sea water pressure change to compute fingerprints and correct sea_surface_height_change_above_geoid
+		global_average_thermosteric_sea_level; %corresponds to zostoga fields in CMIP5 archives. Specified as a temporally quantity (in m) for each ensemble.
+		sea_surface_height_above_geoid; %corresponds to zos fields in CMIP5 archives. Spatial average is 0. Specified as a spatio-temporally quantity (in m) for each ensemble
+		sea_water_pressure_at_sea_floor; %corresponds to bpo field in CMIP5 archives. Specified as a spatio-temporally variable quantity (in m equivalent, not in Pa!)  for each ensemble
 
 	end
@@ -28,8 +27,7 @@
 
 			self.modelid=0;
-			self.global_average_thermosteric_sea_level_change={};
-			self.sea_surface_height_change_above_geoid={};
-			self.sea_water_pressure_change_at_sea_floor={};
-			self.compute_fingerprints=0;
+			self.global_average_thermosteric_sea_level={};
+			self.sea_surface_height_above_geoid={};
+			self.sea_water_pressure_at_sea_floor={};
 
 		end % }}}
@@ -39,17 +37,14 @@
 			if ~ismember('SealevelchangeAnalysis',analyses), return; end
 			if (strcmp(solution,'TransientSolution') & md.transient.isslc == 0), return; end
-			for i=1:length(self.global_average_thermosteric_sea_level_change),
-				md = checkfield(md,'field',self.global_average_thermosteric_sea_level_change{i},'NaN',1,'Inf',1);
-				md = checkfield(md,'field',self.sea_surface_height_change_above_geoid{i},'NaN',1,'Inf',1,'timeseries',1);
-				md = checkfield(md,'field',self.sea_water_pressure_change_at_sea_floor{i},'NaN',1,'Inf',1,'timeseries',1);
+			for i=1:length(self.global_average_thermosteric_sea_level),
+				md = checkfield(md,'field',self.global_average_thermosteric_sea_level{i},'NaN',1,'Inf',1);
+				md = checkfield(md,'field',self.sea_surface_height_above_geoid{i},'NaN',1,'Inf',1,'timeseries',1);
+				md = checkfield(md,'field',self.sea_water_pressure_at_sea_floor{i},'NaN',1,'Inf',1,'timeseries',1);
 			end
-			md = checkfield(md,'field',self.modelid,'NaN',1,'Inf',1,'>=',1,'<=',length(self.global_average_thermosteric_sea_level_change));
-			if self.compute_fingerprints,
-				%check geodetic flag of solidearth is on: 
-				if md.solidearth.settings.isgrd==0,
-					error('DSL checkconsistency error message: if bottom pressure fingerprints computations are requested, solidearth class should have geodetic flag on');
-				end
+			md = checkfield(md,'field',self.modelid,'NaN',1,'Inf',1,'>=',1,'<=',length(self.global_average_thermosteric_sea_level));
+
+			if md.solidearth.settings.compute_bp_grd==1, 
+				md = checkfield(md,'fieldname','dsl.sea_water_pressure_at_sea_floor','empty',1);
 			end
-
 
 		end % }}}
@@ -58,24 +53,22 @@
 			disp(sprintf('   dsl mme parameters:'));
 			fielddisplay(self,'modelid','index into the multi-model ensemble, determine which field will be used.');
-			fielddisplay(self,'global_average_thermosteric_sea_level_change','corresponds to zostoga fields in CMIP5 archives. Specified as a temporally variable global rate (mm/yr) for each ensemble.');
-			fielddisplay(self,'sea_surface_height_change_above_geoid','corresponds to zos fields in CMIP5 archives. Spatial average is 0. Specified as a spatio-temporally variable rate (mm/yr) for each ensemble.');
-			fielddisplay(self,'sea_water_pressure_change_at_sea_floor','corresponds to bpo fields in CMIP5 archives. Specified as a spatio-temporally variable rate (in mm/yr) for each ensemble.');
-			fielddisplay(self,'compute_fingerprints','%do we use the sea water pressure change to compute fingerprints and correct sea_surface_height_change_above_geoid');
+			fielddisplay(self,'global_average_thermosteric_sea_level','corresponds to zostoga fields in CMIP5 archives. Specified as a temporally variable quantity (in m) for each ensemble.');
+			fielddisplay(self,'sea_surface_height_above_geoid','corresponds to zos fields in CMIP5 archives. Spatial average is 0. Specified as a spatio-temporally quantity (in m) for each ensemble.');
+			fielddisplay(self,'sea_water_pressure_at_sea_floor','corresponds to bpo fields in CMIP5 archives. Specified as a spatio-temporally quantity (in m) for each ensemble.');
 		end % }}}
 		function marshall(self,prefix,md,fid) % {{{
 
 			WriteData(fid,prefix,'name','md.dsl.model','data',2,'format','Integer');
-			WriteData(fid,prefix,'object',self,'fieldname','compute_fingerprints','format','Integer');
 			WriteData(fid,prefix,'object',self,'fieldname','modelid','format','Double');
-			WriteData(fid,prefix,'name','md.dsl.nummodels','data',length(self.global_average_thermosteric_sea_level_change),'format','Integer');
-			WriteData(fid,prefix,'object',self,'fieldname','global_average_thermosteric_sea_level_change','format','MatArray','timeseries',1,'timeserieslength',2,'yts',md.constants.yts,'scale',1e-3/md.constants.yts);
-			WriteData(fid,prefix,'object',self,'fieldname','sea_water_pressure_change_at_sea_floor','format','MatArray','timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1e-3);
-			WriteData(fid,prefix,'object',self,'fieldname','sea_surface_height_change_above_geoid','format','MatArray','timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1e-3/md.constants.yts);
+			WriteData(fid,prefix,'name','md.dsl.nummodels','data',length(self.global_average_thermosteric_sea_level),'format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','global_average_thermosteric_sea_level','format','MatArray','timeseries',1,'timeserieslength',2);
+			WriteData(fid,prefix,'object',self,'fieldname','sea_water_pressure_at_sea_floor','format','MatArray','timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'object',self,'fieldname','sea_surface_height_above_geoid','format','MatArray','timeserieslength',md.mesh.numberofvertices+1);
 
 		end % }}}
 		function self = extrude(self,md) % {{{
-			for i=1:length(self.global_average_thermosteric_sea_level_change),
-				self.sea_surface_height_change_above_geoid{i}=project3d(md,'vector',self.sea_surface_height_change_above_geoid{i},'type','node','layer',1);
-				self.sea_water_pressure_change_at_sea_floor{i}=project3d(md,'vector',self.sea_water_pressure_change_at_sea_floor{i},'type','node','layer',1);
+			for i=1:length(self.global_average_thermosteric_sea_level),
+				self.sea_surface_height_above_geoid{i}=project3d(md,'vector',self.sea_surface_height_above_geoid{i},'type','node','layer',1);
+				self.sea_water_pressure_at_sea_floor{i}=project3d(md,'vector',self.sea_water_pressure_at_sea_floor{i},'type','node','layer',1);
 			end
 		end % }}}
@@ -83,8 +76,8 @@
 			
 			writejsdouble(fid,[modelname '.dsl.modelid'],self.modelid);
-			writejscellarray(fid,[modelname '.dsl.global_average_thermosteric_sea_level_change'],self.global_average_thermosteric_sea_level_change);
-			writejscellarray(fid,[modelname '.dsl.sea_surface_height_change_above_geoid'],self.sea_surface_height_change_above_geoid);
+			writejscellarray(fid,[modelname '.dsl.global_average_thermosteric_sea_level'],self.global_average_thermosteric_sea_level);
+			writejscellarray(fid,[modelname '.dsl.sea_surface_height_above_geoid'],self.sea_surface_height_above_geoid);
 			writejs1Darray(fid,[modelname '.dsl.compute_fingerprints'],self.compute_fingerprints);
-			writejscellarray(fid,[modelname '.dsl.sea_water_pressure_change_at_sea_floor'],self.sea_water_pressure_change_at_sea_floor);
+			writejscellarray(fid,[modelname '.dsl.sea_water_pressure_at_sea_floor'],self.sea_water_pressure_at_sea_floor);
 
 		end % }}}
Index: /issm/trunk-jpl/src/m/classes/fourierlove.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/fourierlove.m	(revision 26046)
+++ /issm/trunk-jpl/src/m/classes/fourierlove.m	(revision 26047)
@@ -63,4 +63,6 @@
 		function md = checkconsistency(self,md,solution,analyses) % {{{
 
+			if ~ismember('LoveAnalysis',analyses), return; end
+
 			md = checkfield(md,'fieldname','love.nfreq','NaN',1,'Inf',1,'numel',1,'>',0);
 			md = checkfield(md,'fieldname','love.frequencies','NaN',1,'Inf',1,'numel',md.love.nfreq);
@@ -76,4 +78,14 @@
 				error('Degree 1 not supported for Volumetric Potential forcing. Use sh_min>=2 for this kind of calculation.')
 			end
+
+			%need 'litho' material: 
+			if ~isa(md.materials,'materials')
+				error('Need a ''litho'' material to run a Fourier Love number analysis');
+			else
+				if ~sum(strcmpi(md.materials.nature,'litho')),
+					error('Need a ''litho'' material to run a Fourier Love number analysis');
+				end
+			end
+
 		end % }}}
 		function marshall(self,prefix,md,fid) % {{{
Index: /issm/trunk-jpl/src/m/classes/geometry.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/geometry.m	(revision 26046)
+++ /issm/trunk-jpl/src/m/classes/geometry.m	(revision 26047)
@@ -53,10 +53,5 @@
 		function md = checkconsistency(self,md,solution,analyses) % {{{
 
-			if (strcmp(solution,'TransientSolution') & md.transient.isgia) | strcmp(solution,'GiaSolution'),
-				md = checkfield(md,'fieldname','geometry.thickness','timeseries',1,'NaN',1,'Inf',1);
-			elseif strcmpi(solution,'SealevelchangeSolution'),
-				md = checkfield(md,'fieldname','geometry.bed','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1]);
-				return;
-			elseif strcmpi(solution,'LoveSolution'),
+			if strcmpi(solution,'LoveSolution'),
 				return; 
 			else
@@ -90,6 +85,14 @@
 		end % }}}
 		function marshall(self,prefix,md,fid) % {{{
+			
+			if (size(self.thickness==md.mesh.numberofvertices) | (self.thickness==md.mesh.numberofvertices+1)),
+				WriteData(fid,prefix,'object',self,'fieldname','thickness','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
+			elseif (size(self.thickness==md.mesh.numberofelements) | (self.thickness==md.mesh.numberofelements+1)),
+				WriteData(fid,prefix,'object',self,'fieldname','thickness','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofelements+1,'yts',md.constants.yts);
+			else
+				error('geometry thickness time series should be a vertex or element time series');
+			end
+
 			WriteData(fid,prefix,'object',self,'fieldname','surface','format','DoubleMat','mattype',1);
-			WriteData(fid,prefix,'object',self,'fieldname','thickness','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
 			WriteData(fid,prefix,'object',self,'fieldname','base','format','DoubleMat','mattype',1);
 			WriteData(fid,prefix,'object',self,'fieldname','bed','format','DoubleMat','mattype',1);
Index: sm/trunk-jpl/src/m/classes/giaivins.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/giaivins.js	(revision 26046)
+++ 	(revision )
@@ -1,64 +1,0 @@
-//GIA class definition for Ivins and James model 
-//
-//   Usage:
-//      giaivins=new giaivins();
-
-function giaivins (){
-	//methods
-	this.setdefaultparameters = function(){// {{{
-
-		this.cross_section_shape=1; //square as default (see iedge in GiaDeflectionCorex)
-	
-	}// }}}
-	this.disp= function(){// {{{
-
-		console.log(sprintf('   giaivins parameters:'));
-
-		fielddisplay(this,'mantle_viscosity','mantle viscosity[Pa s]');
-		fielddisplay(this,'lithosphere_thickness','lithosphere thickness (km)');
-		fielddisplay(this,'cross_section_shape','1: square-edged (default). 2: elliptical.  See iedge in GiaDeflectionCore');
-
-	}// }}}
-	this.classname= function(){// {{{
-		return "giaivins";
-	}// }}}
-	this.checkconsistency = function(md,solution,analyses) { // {{{
-
-		if(!ArrayAnyEqual(ArrayIsMember('GiaAnalysis',analyses),1))return;
-
-		checkfield(md,'fieldname','gia.mantle_viscosity','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices,1],'>',0);
-		checkfield(md,'fieldname','gia.lithosphere_thickness','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices,1],'>',0);
-		checkfield(md,'fieldname','gia.cross_section_shape','numel',[1],'values',[1,2]);
-
-		//be sure that if we are running a masstransport ice flow model coupled with giaivins, that thickness forcings 
-		//are not provided into the future.
-		if (solution=='TransientSolution' & md.trans.ismasstransport & md.trans.isgia){
-			//figure out if thickness is a transient forcing: 
-			if (md.geometry.thickness.length == (md.mesh.numberofvertices+1)){
-				//recover the furthest time "in time": 
-				t=md.geometry.thickness[0].length;
-				if(md.geometry.thickness[md.geometry.thickness.length-1][t-1]!=md.timestepping.start_time){
-					md.checkmessage('if ismasstransport is on, transient thickness forcing for the giaivins model should not be provided in the future. Synchronize your start_time to correspond to the most recent transient thickness forcing timestep');
-				}
-			}
-		}
-	} // }}}
-		this.marshall=function(md,prefix,fid) { //{{{
-			WriteData(fid,prefix,'object',this,'fieldname','mantle_viscosity','format','DoubleMat','mattype',1);
-			WriteData(fid,prefix,'object',this,'fieldname','lithosphere_thickness','format','DoubleMat','mattype',1,'scale',Math.pow(10,3)); //from km to m
-			WriteData(fid,prefix,'object',this,'fieldname','cross_section_shape','format','Integer');
-		}//}}}
-		this.fix=function() { //{{{
-			this.mantle_viscosity=NullFix(this.mantle_viscosity,NaN);
-			this.lithosphere_thickness=NullFix(this.lithosphere_thickness,NaN);
-		}//}}}
-	//properties 
-	// {{{
-
-	this.mantle_viscosity              = NaN;
-	this.lithosphere_thickness         = NaN;
-	this.cross_section_shape           = 0;
-
-	this.setdefaultparameters();
-	//}}}
-}
Index: sm/trunk-jpl/src/m/classes/giaivins.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/giaivins.m	(revision 26046)
+++ 	(revision )
@@ -1,73 +1,0 @@
-%GIA class definition for Ivins and James model 
-%
-%   Usage:
-%      giaivins=giaivins();
-
-classdef giaivins
-	properties (SetAccess=public) 
-		mantle_viscosity              = NaN;
-		lithosphere_thickness         = NaN;
-		cross_section_shape           = 0;
-	end
-	methods
-		function self = giaivins(varargin) % {{{
-			switch nargin
-				case 0
-					self=setdefaultparameters(self);
-				otherwise
-					error('constructor not supported');
-			end
-		end % }}}
-		function self = setdefaultparameters(self) % {{{
-		self.cross_section_shape=1; %square as default (see iedge in GiaDeflectionCorex)
-		end % }}}
-		function md = checkconsistency(self,md,solution,analyses) % {{{
-
-			if ~ismember('GiaAnalysis',analyses), return; end
-			md = checkfield(md,'fieldname','gia.mantle_viscosity','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1],'>',0);
-			md = checkfield(md,'fieldname','gia.lithosphere_thickness','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1],'>',0);
-			md = checkfield(md,'fieldname','gia.cross_section_shape','numel',[1],'values',[1,2]);
-
-			%be sure that if we are running a masstransport ice flow model coupled with giaivins, that thickness forcings 
-			%are not provided into the future.
-			if strcmp(solution,'TransientSolution') & md.transient.ismasstransport & md.transient.isgia,
-				%figure out if thickness is a transient forcing: 
-				if size(md.geometry.thickness,1)==md.mesh.numberofvertices+1,
-					%recover the furthest time "in time": 
-					if(md.geometry.thickness(end,end)~=md.timestepping.start_time),
-						md = checkmessage(md,['if ismasstransport is on, transient thickness forcing'...
-							' for the giaivins model should not be provided in the future.'...
-							' Synchronize your start_time to correspond to the most recent transient'...
-							' thickness forcing timestep']);
-					end
-				end
-			end
-
-		end % }}}
-		function disp(self) % {{{
-			disp(sprintf('   giaivins parameters:'));
-
-			fielddisplay(self,'mantle_viscosity','mantle viscosity[Pa s]');
-			fielddisplay(self,'lithosphere_thickness','lithosphere thickness (km)');
-			fielddisplay(self,'cross_section_shape','1: square-edged (default). 2: elliptical.  See iedge in GiaDeflectionCore');
-
-		end % }}}
-		function marshall(self,prefix,md,fid) % {{{
-			WriteData(fid,prefix,'name','md.gia.model','data',1,'format','Integer');
-			WriteData(fid,prefix,'object',self,'fieldname','mantle_viscosity','format','DoubleMat','mattype',1);
-			WriteData(fid,prefix,'object',self,'fieldname','lithosphere_thickness','format','DoubleMat','mattype',1,'scale',10^3); %from km to m
-			WriteData(fid,prefix,'object',self,'fieldname','cross_section_shape','format','Integer');
-		end % }}}
-		function savemodeljs(self,fid,modelname) % {{{
-		
-			writejsdouble(fid,[modelname '.gia.mantle_viscosity'],self.mantle_viscosity);
-			writejsdouble(fid,[modelname '.gia.lithosphere_thickness'],self.lithosphere_thickness);
-			writejsdouble(fid,[modelname '.gia.cross_section_shape'],self.cross_section_shape);
-
-		end % }}}
-		function self = extrude(self,md) % {{{
-			self.mantle_viscosity=project3d(md,'vector',self.mantle_viscosity,'type','node');
-			self.lithosphere_thickness=project3d(md,'vector',self.lithosphere_thickness,'type','node');
-		end % }}}
-	end
-end
Index: sm/trunk-jpl/src/m/classes/giaivins.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/giaivins.py	(revision 26046)
+++ 	(revision )
@@ -1,72 +1,0 @@
-import numpy as np
-
-from checkfield import checkfield
-from fielddisplay import fielddisplay
-from project3d import project3d
-from WriteData import WriteData
-
-
-class giaivins(object):
-    """GIA class definition for Ivins and James model
-
-    Usage:
-        giaivins = giaivins()
-    """
-
-    def __init__(self, *args): #{{{
-        self.mantle_viscosity       = np.nan
-        self.lithosphere_thickness  = np.nan
-        self.cross_section_shape    = 0
-
-        nargin = len(args)
-        if nargin == 0:
-            self.setdefaultparameters()
-        else:
-            raise Exception('constructor not supported')
-    #}}}
-
-    def __repr__(self): #{{{
-        s = '   giaivins parameters:\n'
-        s += '{}\n'.format(fielddisplay(self, 'mantle_viscosity', 'mantle viscosity [Pa s]'))
-        s += '{}\n'.format(fielddisplay(self, 'lithosphere_thickness', 'lithosphere thickness (km)'))
-        s += '{}\n'.format(fielddisplay(self, 'cross_section_shape', "1: square-edged (default). 2: elliptical. See iedge in GiaDeflectionCore"))
-        return s
-    #}}}
-
-    def setdefaultparameters(self): #{{{
-        self.cross_section_shape = 1
-        return self
-    #}}}
-
-    def checkconsistency(self, md, solution, analyses): #{{{
-        if 'GiaAnalysis' not in analyses:
-            return md
-
-        md = checkfield(md, 'fieldname', 'gia.mantle_viscosity', 'NaN', 1, 'Inf', 1, 'size', [md.mesh.numberofvertices], '>', 0)
-        md = checkfield(md, 'fieldname', 'gia.lithosphere_thickness', 'NaN', 1, 'Inf', 1, 'size', [md.mesh.numberofvertices], '>', 0)
-        md = checkfield(md, 'fieldname', 'gia.cross_section_shape', 'numel', [1], 'values', [1, 2])
-
-        # Be sure that if we are running a masstransport ice flow model coupled 
-        # with giaivins, that thickness forcings are not provided into the 
-        # future.
-        if solution == 'TransientSolution' and md.transient.ismasstransport and md.transient.isgia:
-            # Figure out if thickness is a transient forcing
-            if md.geometry.thickness.shape[0] == md.mesh.numberofvertices + 1:
-                # Recover the furthest time "in time"
-                if md.geometry.thickness[-1, -1] != md.timestepping.start_time:
-                    md.checkmessage('if masstransport is on, transient thickness forcing for the giaivins model should not be provided in the future. Synchronize your start_time to correspond to the most recent transient thickness forcing timestep')
-        return md
-    #}}}
-
-    def marshall(self, prefix, md, fid): #{{{
-        WriteData(fid, prefix, 'name', 'md.gia.model', 'data', 1, 'format', 'Integer')
-        WriteData(fid, prefix, 'object', self, 'fieldname', 'mantle_viscosity', 'format', 'DoubleMat', 'mattype', 1)
-        WriteData(fid, prefix, 'object', self, 'fieldname', 'lithosphere_thickness', 'format', 'DoubleMat', 'mattype', 1, 'scale', 10.**3.)
-        WriteData(fid, prefix, 'object', self, 'fieldname', 'cross_section_shape', 'format', 'Integer')
-    #}}}
-
-    def extrude(self, md): #{{{
-        self.mantle_viscosity = project3d(md, 'vector', self.mantle_viscosity, 'type', 'node')
-        self.lithosphere_thickness = project3d(md, 'vector', self.lithosphere_thickness, 'type', 'node')
-        return self
-    #}}}
Index: sm/trunk-jpl/src/m/classes/giamme.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/giamme.m	(revision 26046)
+++ 	(revision )
@@ -1,77 +1,0 @@
-%GIAMME class definition
-%
-%   Usage:
-%      gia=giamme(); %gia class based on a multi-model 
-%                     ensemble  (ex: Caron et al 2017 statistics)
-
-classdef giamme
-	properties (SetAccess=public) 
-
-		modelid; %index into the multi-model ensemble
-		Ngia;  %geoid ensemble
-		Ugia;  %uplift ensemble
-
-	end
-	methods
-		function self = giamme(varargin) % {{{
-			switch nargin
-				case 0
-					self=setdefaultparameters(self);
-				case 1
-					self=structtoobj(gia(),varargin{1});
-				otherwise
-					error('constructor not supported');
-			end
-		end % }}}
-		function self = setdefaultparameters(self) % {{{
-
-			self.modelid=0;
-			self.Ngia=[];
-			self.Ugia=[];
-
-		end % }}}
-		function md = checkconsistency(self,md,solution,analyses) % {{{
-
-			%Early return
-			if ~ismember('SealevelchangeAnalysis',analyses), return; end
-			if (strcmp(solution,'TransientSolution') & md.transient.isslc == 0), return; end
-			md = checkfield(md,'field',self.Ngia,'NaN',1,'Inf',1);
-			md = checkfield(md,'field',self.Ugia,'NaN',1,'Inf',1);
-			md = checkfield(md,'field',self.modelid,'NaN',1,'Inf',1,'>=',0,'<=',length(self.Ngia));
-		end % }}}
-		function disp(self) % {{{
-
-			disp(sprintf('   gia mme parameters:'));
-			fielddisplay(self,'modelid','index into the multi-model ensemble, determines which field will be used.');
-			fielddisplay(self,'Ngia','geoid (mm/yr).');
-			fielddisplay(self,'Ugia','uplift (mm/yr).');
-		end % }}}
-		function marshall(self,prefix,md,fid) % {{{
-			WriteData(fid,prefix,'name','md.gia.model','data',3,'format','Integer');
-			if size(self.Ngia,2)==0,
-				WriteData(fid,prefix,'data',zeros(md.mesh.numberofvertices,1),'format','DoubleMat','mattype',1,'name','md.gia.Ngia');
-				WriteData(fid,prefix,'data',zeros(md.mesh.numberofvertices,1),'format','DoubleMat','mattype',1,'name','md.gia.Ugia');
-				WriteData(fid,prefix,'data',1,'name','md.gia.modelid','format','Double');
-				WriteData(fid,prefix,'name','md.gia.nummodels','data',1,'format','Integer');
-			else
-				WriteData(fid,prefix,'object',self,'fieldname','Ngia','format','DoubleMat','scale',1/1000/md.constants.yts);
-				WriteData(fid,prefix,'object',self,'fieldname','Ugia','format','DoubleMat','scale',1/1000/md.constants.yts);
-				WriteData(fid,prefix,'object',self,'fieldname','modelid','format','Double');
-				WriteData(fid,prefix,'name','md.gia.nummodels','data',size(self.Ngia,2),'format','Integer');
-			end
-		end % }}}
-		function savemodeljs(self,fid,modelname) % {{{
-			
-			writejsdouble(fid,[modelname '.gia.modelid'],self.modelid);
-			writejscellarray(fid,[modelname '.gia.Ngia'],self.Ngia);
-			writejscellarray(fid,[modelname '.gia.Ugia'],self.Ugia);
-
-		end % }}}
-		function self = extrude(self,md) % {{{
-			for i=1:length(self.Ngia),
-				self.Ngia{i}=project3d(md,'vector',self.Ngia{i},'type','node','layer',1);
-				self.Ugia{i}=project3d(md,'vector',self.Ugia{i},'type','node','layer',1);
-			end
-		end % }}}
-	end
-end
Index: sm/trunk-jpl/src/m/classes/giamme.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/giamme.py	(revision 26046)
+++ 	(revision )
@@ -1,72 +1,0 @@
-import numpy as np
-
-from checkfield import checkfield
-from fielddisplay import fielddisplay
-from project3d import project3d
-from WriteData import WriteData
-
-
-class giamme(object):
-    """GIAMME class definition
-
-    Usage:
-        gia = giamme() #gia class based on a multi-model ensemble (ex: Caron et al 2017 statistics)
-    """
-
-    def __init__(self, *args): #{{{
-        self.modelid    = 0 #index into the multi-model ensemble
-        self.Ngia       = [] #geoid ensemble
-        self.Ugia       = [] #uplift ensemble
-        
-        nargin = len(args)
-
-        if nargin == 0:
-            self.setdefaultparameters()
-        else:
-            raise Exception('constructor not supported')
-    #}}}
-
-    def __repr__(self): # {{{
-        s = '   gia mme parameters:\n'
-        s += '{}\n'.format(fielddisplay(self, 'modelid', 'index into the multi-model ensemble, determines which field will be used.'))
-        s += '{}\n'.format(fielddisplay(self, 'Ngia', 'geoid (mm/yr).'))
-        s += '{}\n'.format(fielddisplay(self, 'Ugia', 'uplift (mm/yr).'))
-        return s
-    #}}}
-
-    def setdefaultparameters(self): # {{{
-        return self
-    #}}}
-
-    def checkconsistency(self, md, solution, analyses): # {{{
-        if 'SealevelriseAnalysis' not in analyses:
-            return md
-        if solution == 'TransientSolution' and not md.transient.isslc:
-            return md
-        md = checkfield(md, 'field', self.Ngia, 'NaN', 1, 'Inf', 1)
-        md = checkfield(md, 'field', self.Ugia, 'NaN', 1, 'Inf', 1)
-        md = checkfield(md, 'field', self.modelid, 'NaN', 1, 'Inf', 1, '>=', 0, '<=', len(self.Ngia))
-        return md
-    #}}}
-
-    def marshall(self, prefix, md, fid): #{{{
-        WriteData(fid, prefix, 'name', 'md.gia.model', 'data', 3, 'format', 'Integer')
-
-        if isinstance(self.Ngia, list) or self.Ngia.ndim == 1: #list or 1D numpy.ndarray
-            WriteData(fid, prefix, 'data', np.zeros((md.mesh.numberofvertices, 1)), 'format', 'DoubleMat', 'mattype', 1, 'name', 'md.gia.Ngia')
-            WriteData(fid, prefix, 'data', np.zeros((md.mesh.numberofvertices, 1)), 'format', 'DoubleMat', 'mattype', 1, 'name', 'md.gia.Ugia')
-            WriteData(fid, prefix, 'data', 1, 'name', 'md.gia.modelid', 'format', 'Double')
-            WriteData(fid, prefix, 'name', 'md.gia.nummodels', 'data', 1, 'format', 'Integer')
-        else: #2D numpy.ndarray
-            WriteData(fid, prefix, 'object ', self, 'fieldname', 'Ngia', 'format', 'DoubleMat', 'scale', 1 / 1000 / md.constants.yts)
-            WriteData(fid, prefix, 'object ', self, 'fieldname', 'Ugia', 'format', 'DoubleMat', 'scale', 1 / 1000 / md.constants.yts)
-            WriteData(fid, prefix, 'object ', self, 'fieldname', 'modelid', 'format', 'Double')
-            WriteData(fid, prefix, 'name', 'md.gia.nummodels', 'data', self.Ngia.shape[1],'format', 'Integer') #NOTE: <<numpy.ndarray>>.shape[1] gives length of second dimension
-    #}}}
-
-    def extrude(self, md): #{{{
-        for i in range(len(self.Ngia)):
-            self.Ngia[i] = project3d(md, 'vector', self.Ngia[i], 'type', 'node', 'layer', 1)
-            self.Ugia[i] = project3d(md, 'vector', self.Ugia[i], 'type', 'node', 'layer', 1)
-        return self
-    #}}}
Index: /issm/trunk-jpl/src/m/classes/hydrologyshreve.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/hydrologyshreve.m	(revision 26046)
+++ /issm/trunk-jpl/src/m/classes/hydrologyshreve.m	(revision 26047)
@@ -34,9 +34,7 @@
 		end % }}}
 		function md = checkconsistency(self,md,solution,analyses) % {{{
-
+			
 			%Early return
-			if ~ismember('HydrologyShreveAnalysis',analyses)
-				return;
-			end
+			if ~ismember('HydrologyShreveAnalysis',analyses) |  (strcmp(solution,'TransientSolution') & md.transient.ishydrology==0), return; end
 
 			md = checkfield(md,'fieldname','hydrology.spcwatercolumn','Inf',1,'timeseries',1);
Index: /issm/trunk-jpl/src/m/classes/hydrologytws.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/hydrologytws.m	(revision 26047)
+++ /issm/trunk-jpl/src/m/classes/hydrologytws.m	(revision 26047)
@@ -0,0 +1,63 @@
+%HYDROLOGYTWS class definition
+%
+%   Usage:
+%      hydrologytws=hydrologytws();
+
+classdef hydrologytws
+	properties (SetAccess=public) 
+		spcwatercolumn     = NaN;
+		requested_outputs  = {};
+	end
+	methods
+		function self = extrude(self,md) % {{{
+		end % }}}
+		function self = hydrologytws(varargin) % {{{
+			switch nargin
+				case 0
+					self=setdefaultparameters(self);
+				case 1
+					self=structtoobj(self,varargin{1});
+				otherwise
+					error('constructor not supported');
+			end
+		end % }}}
+		function list = defaultoutputs(self,md) % {{{
+			list = {''};
+		end % }}}    
+
+		function self = setdefaultparameters(self) % {{{
+			self.requested_outputs = {'default'};
+		end % }}}
+		function md = checkconsistency(self,md,solution,analyses) % {{{
+
+			%Early return
+			if ~ismember('HydrologyTwsAnalysis',analyses)
+				return;
+			end
+			md = checkfield(md,'fieldname','hydrology.spcwatercolumn','Inf',1,'timeseries',1);
+		end % }}}
+		function disp(self) % {{{
+			disp(sprintf('   hydrologytws solution parameters:'));
+			fielddisplay(self,'spcwatercolumn','water thickness constraints (NaN means no constraint) [m]');
+			fielddisplay(self,'requested_outputs','additional outputs requested');
+
+		end % }}}
+		function marshall(self,prefix,md,fid) % {{{
+			WriteData(fid,prefix,'name','md.hydrology.model','data',2,'format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','spcwatercolumn','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
+      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.hydrology.requested_outputs','format','StringArray');
+		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+		
+			writejs1Darray(fid,[modelname '.hydrology.spcwatercolumn'],self.spcwatercolumn);
+
+		end % }}}
+	end
+end
+
Index: /issm/trunk-jpl/src/m/classes/initialization.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/initialization.m	(revision 26046)
+++ /issm/trunk-jpl/src/m/classes/initialization.m	(revision 26047)
@@ -20,4 +20,6 @@
 		hydraulic_potential = NaN;
 		channelarea         = NaN;
+		sealevel            = NaN;
+		bottompressure      = NaN;
         sample              = NaN;
 	end
@@ -35,4 +37,6 @@
 			self.epl_head=project3d(md,'vector',self.epl_head,'type','node','layer',1);
 			self.epl_thickness=project3d(md,'vector',self.epl_thickness,'type','node','layer',1);
+			self.sealevel=project3d(md,'vector',self.sealevel,'type','node','layer',1);
+			self.bottompressure=project3d(md,'vector',self.bottompressure,'type','node','layer',1);
 
 			%Lithostatic pressure by default
@@ -60,4 +64,9 @@
 				md = checkfield(md,'fieldname','initialization.vx','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1]);
 				md = checkfield(md,'fieldname','initialization.vy','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1]);
+			end
+			if ismember('OceantransportAnalysis',analyses) 
+				if strcmp(solution,'TransientSolution') & md.transient.isslc & md.transient.isoceantransport,
+					md = checkfield(md,'fieldname','initialization.bottompressure','NaN',1,'Inf',1,'size',[md.mesh.numberofelements 1]);
+				end
 			end
 			if ismember('BalancethicknessAnalysis',analyses) & strcmp(solution,'BalancethicknessSolution'),
@@ -89,5 +98,20 @@
 			if ismember('HydrologyShreveAnalysis',analyses),
 				if isa(md.hydrology,'hydrologyshreve'),
+					if strcmp(solution,'TransientSolution') & md.transient.ishydrology,
+						md = checkfield(md,'fieldname','initialization.watercolumn','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1]);
+					end
+					if strcmp(solution,'HydrologySolution'),
+						md = checkfield(md,'fieldname','initialization.watercolumn','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1]);
+					end
+				end
+			end
+			if ismember('HydrologyTwsAnalysis',analyses),
+				if isa(md.hydrology,'hydrologytws'),
 					md = checkfield(md,'fieldname','initialization.watercolumn','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1]);
+				end
+			end
+			if ismember('SealevelchangeAnalysis',analyses) & ~(strcmp(solution,'TransientSolution') & md.transient.isslc == 0),
+				if strcmp(solution,'TransientSolution') & md.transient.isslc,
+					md = checkfield(md,'fieldname','initialization.sealevel','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1]);
 				end
 			end
@@ -145,4 +169,6 @@
 			WriteData(fid,prefix,'object',self,'fieldname','vz','format','DoubleMat','mattype',1,'scale',1./yts);
 			WriteData(fid,prefix,'object',self,'fieldname','pressure','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'fieldname','sealevel','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'fieldname','bottompressure','format','DoubleMat','mattype',1);
 			WriteData(fid,prefix,'object',self,'fieldname','temperature','format','DoubleMat','mattype',1);
 			WriteData(fid,prefix,'object',self,'fieldname','waterfraction','format','DoubleMat','mattype',1);
Index: /issm/trunk-jpl/src/m/classes/lovenumbers.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/lovenumbers.m	(revision 26046)
+++ /issm/trunk-jpl/src/m/classes/lovenumbers.m	(revision 26047)
@@ -63,5 +63,5 @@
 				error('lovenumbers error message: love numbers should be provided at the same level of accuracy');
 			end
-
+			
 
 		end % }}}
Index: /issm/trunk-jpl/src/m/classes/matdamageice.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/matdamageice.m	(revision 26046)
+++ /issm/trunk-jpl/src/m/classes/matdamageice.m	(revision 26047)
@@ -22,10 +22,4 @@
 		rheology_n   = NaN;
 		rheology_law = '';
-
-		%giaivins: 
-		lithosphere_shear_modulus  = 0.;
-		lithosphere_density        = 0.;
-		mantle_shear_modulus       = 0.;
-		mantle_density             = 0.;
 
 		%slc
@@ -101,10 +95,4 @@
 			self.rheology_law='Paterson';
 
-			% GIA:
-			self.lithosphere_shear_modulus  = 6.7*10^10;  % (Pa)
-			self.lithosphere_density        = 3.32;       % (g/cm^-3)
-			self.mantle_shear_modulus       = 1.45*10^11; % (Pa)
-			self.mantle_density             = 3.34;       % (g/cm^-3)
-
 			%SLR
 			self.earth_density= 5512;  % average density of the Earth, (kg/m^3)
@@ -121,10 +109,4 @@
 			md = checkfield(md,'fieldname','materials.effectiveconductivity_averaging','numel',[1],'values',[0 1 2]);
 			
-			if ismember('GiaAnalysis',analyses),
-				md = checkfield(md,'fieldname','materials.lithosphere_shear_modulus','>',0,'numel',1);
-				md = checkfield(md,'fieldname','materials.lithosphere_density','>',0,'numel',1);
-				md = checkfield(md,'fieldname','materials.mantle_shear_modulus','>',0,'numel',1);
-				md = checkfield(md,'fieldname','materials.mantle_density','>',0,'numel',1);
-			end
 			if ismember('SealevelchangeAnalysis',analyses),
 				md = checkfield(md,'fieldname','materials.earth_density','>',0,'numel',1);
@@ -152,8 +134,4 @@
 			fielddisplay(self,'rheology_n','Glen''s flow law exponent');
 			fielddisplay(self,'rheology_law',['law for the temperature dependance of the rheology: ''None'', ''BuddJacka'', ''Cuffey'', ''CuffeyTemperate'', ''Paterson'', ''Arrhenius'' or ''LliboutryDuval''']);
-			fielddisplay(self,'lithosphere_shear_modulus','Lithosphere shear modulus [Pa]');
-			fielddisplay(self,'lithosphere_density','Lithosphere density [g/cm^-3]');
-			fielddisplay(self,'mantle_shear_modulus','Mantle shear modulus [Pa]');
-			fielddisplay(self,'mantle_density','Mantle density [g/cm^-3]');
 			fielddisplay(self,'earth_density','Mantle density [kg/m^-3]');
 		end % }}}
@@ -177,8 +155,4 @@
 			WriteData(fid,prefix,'data',self.rheology_law,'name','md.materials.rheology_law','format','String');
 
-			WriteData(fid,prefix,'object',self,'class','materials','fieldname','lithosphere_shear_modulus','format','Double');
-			WriteData(fid,prefix,'object',self,'class','materials','fieldname','lithosphere_density','format','Double','scale',10^3);
-			WriteData(fid,prefix,'object',self,'class','materials','fieldname','mantle_shear_modulus','format','Double');
-			WriteData(fid,prefix,'object',self,'class','materials','fieldname','mantle_density','format','Double','scale',10^3);
 			WriteData(fid,prefix,'object',self,'class','materials','fieldname','earth_density','format','Double');
 
Index: /issm/trunk-jpl/src/m/classes/matenhancedice.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/matenhancedice.m	(revision 26046)
+++ /issm/trunk-jpl/src/m/classes/matenhancedice.m	(revision 26047)
@@ -23,10 +23,4 @@
 		rheology_n   = NaN;
 		rheology_law = '';
-
-		%giaivins: 
-		lithosphere_shear_modulus  = 0.;
-		lithosphere_density        = 0.;
-		mantle_shear_modulus       = 0.;
-		mantle_density             = 0.;
 
 		%slr
@@ -103,10 +97,4 @@
 			self.rheology_law='Paterson';
 
-			% GIA:
-			self.lithosphere_shear_modulus  = 6.7*10^10;  % (Pa)
-			self.lithosphere_density        = 3.32;       % (g/cm^-3)
-			self.mantle_shear_modulus       = 1.45*10^11; % (Pa)
-			self.mantle_density             = 3.34;       % (g/cm^-3)
-
 			%SLR
 			self.earth_density= 5512;  % average density of the Earth, (kg/m^3)
@@ -124,10 +112,4 @@
 			md = checkfield(md,'fieldname','materials.effectiveconductivity_averaging','numel',[1],'values',[0 1 2]);
             
-			if ismember('GiaAnalysis',analyses),
-				md = checkfield(md,'fieldname','materials.lithosphere_shear_modulus','>',0,'numel',1);
-				md = checkfield(md,'fieldname','materials.lithosphere_density','>',0,'numel',1);
-				md = checkfield(md,'fieldname','materials.mantle_shear_modulus','>',0,'numel',1);
-				md = checkfield(md,'fieldname','materials.mantle_density','>',0,'numel',1);
-			end
 			if ismember('SealevelchangeAnalysis',analyses),
 				md = checkfield(md,'fieldname','materials.earth_density','>',0,'numel',1);
@@ -155,8 +137,4 @@
 			fielddisplay(self,'rheology_n','Glen''s flow law exponent');
 			fielddisplay(self,'rheology_law',['law for the temperature dependance of the rheology: ''None'', ''BuddJacka'', Cuffey'', ''CuffeyTemperate'', ''Paterson'', ''Arrhenius'' or ''LliboutryDuval''']);
-			fielddisplay(self,'lithosphere_shear_modulus','Lithosphere shear modulus [Pa]');
-			fielddisplay(self,'lithosphere_density','Lithosphere density [g/cm^-3]');
-			fielddisplay(self,'mantle_shear_modulus','Mantle shear modulus [Pa]');
-			fielddisplay(self,'mantle_density','Mantle density [g/cm^-3]');
 			fielddisplay(self,'earth_density','Mantle density [kg/m^-3]');
 		end % }}}
@@ -181,8 +159,4 @@
 			WriteData(fid,prefix,'data',self.rheology_law,'name','md.materials.rheology_law','format','String');
 
-			WriteData(fid,prefix,'object',self,'class','materials','fieldname','lithosphere_shear_modulus','format','Double');
-			WriteData(fid,prefix,'object',self,'class','materials','fieldname','lithosphere_density','format','Double','scale',10^3);
-			WriteData(fid,prefix,'object',self,'class','materials','fieldname','mantle_shear_modulus','format','Double');
-			WriteData(fid,prefix,'object',self,'class','materials','fieldname','mantle_density','format','Double','scale',10^3);
 			WriteData(fid,prefix,'object',self,'class','materials','fieldname','earth_density','format','Double');
 		end % }}}
@@ -207,8 +181,4 @@
 			writejs1Darray(fid,[modelname '.materials.rheology_n'],self.rheology_n);
 			writejsstring(fid,[modelname '.materials.rheology_law'],self.rheology_law);
-			writejsdouble(fid,[modelname '.materials.lithosphere_shear_modulus'],self.lithosphere_shear_modulus);
-			writejsdouble(fid,[modelname '.materials.lithosphere_density'],self.lithosphere_density);
-			writejsdouble(fid,[modelname '.materials.mantle_shear_modulus'],self.mantle_shear_modulus);
-			writejsdouble(fid,[modelname '.materials.mantle_density'],self.mantle_density);
 			writejsdouble(fid,[modelname '.materials.earth_density'],self.earth_density);
 
Index: /issm/trunk-jpl/src/m/classes/materials.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/materials.m	(revision 26046)
+++ /issm/trunk-jpl/src/m/classes/materials.m	(revision 26047)
@@ -37,4 +37,5 @@
 					self.addprop('thermalconductivity');
 					self.addprop('temperateiceconductivity');
+					self.addprop('effectiveconductivity_averaging');
 					self.addprop('meltingpoint');
 					self.addprop('beta');
@@ -59,9 +60,10 @@
 					self.addprop('rho_water');
 					self.addprop('rho_freshwater');
-					self.addprop('earth_density');
 				otherwise
 					error('materials constructor error message: nature of the material not supported yet! (''ice'' or ''litho'' or ''hydro'')');
 				end
 			end
+			self.addprop('earth_density');
+
 			%set default parameters:
 			self.setdefaultparameters();
@@ -97,4 +99,7 @@
 					%wet ice thermal conductivity (W/m/K)
 					self.temperateiceconductivity=.24;
+
+					%computation of effective conductivity
+					self.effectiveconductivity_averaging=1;
 
 					%the melting point of ice at 1 atmosphere of pressure in K
@@ -113,4 +118,9 @@
 					%available: none, paterson and arrhenius
 					self.rheology_law='Paterson';
+
+					%Rheology fields default: 
+					self.rheology_B   = 1*1e8; 
+					self.rheology_n   = 3;
+
 
 				case 'litho'
@@ -137,7 +147,5 @@
 					%ocean water density (kg/m^3)
 					self.rho_water=1023.;
-					% average density of the Earth (kg/m^3)
-					self.earth_density=5512;
-
+					
 					%fresh water density (kg/m^3)
 					self.rho_freshwater=1000.;
@@ -146,4 +154,8 @@
 					error('materials constructor error message: nature of the material not supported yet! (''ice'' or ''litho'' or ''hydro'')');
 				end
+
+				% average density of the Earth (kg/m^3)
+				self.earth_density=5512;
+
 			end
 		end % }}}
@@ -251,5 +263,4 @@
 			WriteData(fid,prefix,'name','md.materials.nature','data',naturetointeger(self.nature),'format','IntMat','mattype',3);
 			WriteData(fid,prefix,'name','md.materials.type','data',5,'format','Integer'); %DANGER, this can evolve if you have classes.
-
 			for i=1:length(self.nature),
 				nat=self.nature{i};
@@ -264,4 +275,5 @@
 					WriteData(fid,prefix,'object',self,'class','materials','fieldname','thermalconductivity','format','Double');
 					WriteData(fid,prefix,'object',self,'class','materials','fieldname','temperateiceconductivity','format','Double');
+					WriteData(fid,prefix,'object',self,'class','materials','fieldname','effectiveconductivity_averaging','format','Integer');
 					WriteData(fid,prefix,'object',self,'class','materials','fieldname','meltingpoint','format','Double');
 					WriteData(fid,prefix,'object',self,'class','materials','fieldname','beta','format','Double');
@@ -282,14 +294,20 @@
 					WriteData(fid,prefix,'object',self,'class','materials','fieldname','burgers_viscosity','format','DoubleMat','mattype',3);
 					WriteData(fid,prefix,'object',self,'class','materials','fieldname','burgers_mu','format','DoubleMat','mattype',3);
+					%compute earth density compatible with our layer density distribution: 
+					earth_density=0;
+					for i=1:self.numlayers,
+						earth_density=earth_density+ (self.radius(i+1)^3-self.radius(i)^3)*self.density(i);
+					end
+					earth_density=earth_density/self.radius(self.numlayers+1)^3;
+					self.earth_density=earth_density;
 				case 'hydro'
 					WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_ice','format','Double');
 					WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_water','format','Double');
-					WriteData(fid,prefix,'object',self,'class','materials','fieldname','earth_density','format','Double');
 					WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_freshwater','format','Double');
-
 				otherwise
 					error('materials constructor error message: nature of the material not supported yet! (''ice'' or ''litho'' or ''hydro'')');
 				end
 			end
+			WriteData(fid,prefix,'data',self.earth_density,'name','md.materials.earth_density','format','Double');
 		end % }}}
 		function self = extrude(self,md) % {{{
@@ -317,4 +335,5 @@
 					writejsdouble(fid,[modelname '.materials.thermalconductivity'],self.thermalconductivity);
 					writejsdouble(fid,[modelname '.materials.temperateiceconductivity'],self.temperateiceconductivity);
+					writejsdouble(fid,[modelname '.materials.effectiveconductivity_averaging'],self.effectiveconductivity_averaging);
 					writejsdouble(fid,[modelname '.materials.meltingpoint'],self.meltingpoint);
 					writejsdouble(fid,[modelname '.materials.beta'],self.beta);
Index: /issm/trunk-jpl/src/m/classes/matestar.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/matestar.m	(revision 26046)
+++ /issm/trunk-jpl/src/m/classes/matestar.m	(revision 26047)
@@ -23,10 +23,4 @@
 		rheology_Es   = NaN;
 		rheology_law = '';
-
-		%giaivins: 
-		lithosphere_shear_modulus  = 0.;
-		lithosphere_density        = 0.;
-		mantle_shear_modulus       = 0.;
-		mantle_density             = 0.;
 
 		%slc
@@ -110,10 +104,4 @@
 			self.rheology_law='Paterson';
 
-			% GIA:
-			self.lithosphere_shear_modulus  = 6.7*10^10;  % (Pa)
-			self.lithosphere_density        = 3.32;       % (g/cm^-3)
-			self.mantle_shear_modulus       = 1.45*10^11; % (Pa)
-			self.mantle_density             = 3.34;       % (g/cm^-3)
-
 			%SLR
 			self.earth_density= 5512;  % average density of the Earth, (kg/m^3)
@@ -131,10 +119,4 @@
 			md = checkfield(md,'fieldname','materials.effectiveconductivity_averaging','numel',[1],'values',[0 1 2]);
             
-			if ismember('GiaAnalysis',analyses),
-				md = checkfield(md,'fieldname','materials.lithosphere_shear_modulus','>',0,'numel',1);
-				md = checkfield(md,'fieldname','materials.lithosphere_density','>',0,'numel',1);
-				md = checkfield(md,'fieldname','materials.mantle_shear_modulus','>',0,'numel',1);
-				md = checkfield(md,'fieldname','materials.mantle_density','>',0,'numel',1);
-			end
 			if ismember('SealevelchangeAnalysis',analyses),
 				md = checkfield(md,'fieldname','materials.earth_density','>',0,'numel',1);
@@ -162,8 +144,4 @@
 			fielddisplay(self,'rheology_Es','shear enhancement factor');
 			fielddisplay(self,'rheology_law',['law for the temperature dependance of the rheology: ''None'', ''BuddJacka'', ''Cuffey'', ''CuffeyTemperate'', ''Paterson'', ''Arrhenius'' or ''LliboutryDuval''']);
-			fielddisplay(self,'lithosphere_shear_modulus','Lithosphere shear modulus [Pa]');
-			fielddisplay(self,'lithosphere_density','Lithosphere density [g/cm^-3]');
-			fielddisplay(self,'mantle_shear_modulus','Mantle shear modulus [Pa]');
-			fielddisplay(self,'mantle_density','Mantle density [g/cm^-3]');
 			fielddisplay(self,'earth_density','Mantle density [kg/m^-3]');
 		end % }}}
@@ -188,8 +166,4 @@
 			WriteData(fid,prefix,'data',self.rheology_law,'name','md.materials.rheology_law','format','String');
 
-			WriteData(fid,prefix,'object',self,'class','materials','fieldname','lithosphere_shear_modulus','format','Double');
-			WriteData(fid,prefix,'object',self,'class','materials','fieldname','lithosphere_density','format','Double','scale',10^3);
-			WriteData(fid,prefix,'object',self,'class','materials','fieldname','mantle_shear_modulus','format','Double');
-			WriteData(fid,prefix,'object',self,'class','materials','fieldname','mantle_density','format','Double','scale',10^3);
 			WriteData(fid,prefix,'object',self,'class','materials','fieldname','earth_density','format','Double');
 		end % }}}
@@ -214,8 +188,4 @@
 			writejs1Darray(fid,[modelname '.materials.rheology_Es'],self.rheology_Es);
 			writejsstring(fid,[modelname '.materials.rheology_law'],self.rheology_law);
-			writejsdouble(fid,[modelname '.materials.lithosphere_shear_modulus'],self.lithosphere_shear_modulus);
-			writejsdouble(fid,[modelname '.materials.lithosphere_density'],self.lithosphere_density);
-			writejsdouble(fid,[modelname '.materials.mantle_shear_modulus'],self.mantle_shear_modulus);
-			writejsdouble(fid,[modelname '.materials.mantle_density'],self.mantle_density);
 			writejsdouble(fid,[modelname '.materials.earth_density'],self.earth_density);
 
Index: /issm/trunk-jpl/src/m/classes/matice.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/matice.m	(revision 26046)
+++ /issm/trunk-jpl/src/m/classes/matice.m	(revision 26047)
@@ -22,10 +22,4 @@
 		rheology_n   = NaN;
 		rheology_law = '';
-
-		%giaivins: 
-		lithosphere_shear_modulus  = 0.;
-		lithosphere_density        = 0.;
-		mantle_shear_modulus       = 0.;
-		mantle_density             = 0.;
 
 		%slc
@@ -101,9 +95,7 @@
 			self.rheology_law='Paterson';
 
-			% GIA:
-			self.lithosphere_shear_modulus  = 6.7*10^10;  % (Pa)
-			self.lithosphere_density        = 3.32;       % (g/cm^-3)
-			self.mantle_shear_modulus       = 1.45*10^11; % (Pa)
-			self.mantle_density             = 3.34;       % (g/cm^-3)
+			%Rheology for ice: 
+			self.rheology_B=2.1*1e8;
+			self.rheology_n=3;
 
 			%SLR
@@ -112,25 +104,18 @@
 		end % }}}
 		function md = checkconsistency(self,md,solution,analyses) % {{{
+			
+			if strcmpi(solution,'TransientSolution') & md.transient.isslc,
+				md = checkfield(md,'fieldname','materials.earth_density','>',0,'numel',1);
+				return;
+			end
 	
-			if ~strcmpi(solution,'SealevelchangeSolution'),
-				md = checkfield(md,'fieldname','materials.rho_ice','>',0);
-				md = checkfield(md,'fieldname','materials.rho_water','>',0);
-				md = checkfield(md,'fieldname','materials.rho_freshwater','>',0);
-				md = checkfield(md,'fieldname','materials.mu_water','>',0);
-				md = checkfield(md,'fieldname','materials.rheology_B','>',0,'universal',1,'NaN',1,'Inf',1);
-				md = checkfield(md,'fieldname','materials.rheology_n','>',0,'size',[md.mesh.numberofelements 1]);
-				md = checkfield(md,'fieldname','materials.rheology_law','values',{'None' 'BuddJacka' 'Cuffey' 'CuffeyTemperate' 'Paterson' 'Arrhenius' 'LliboutryDuval' 'NyeCO2' 'NyeH2O'});
-				md = checkfield(md,'fieldname','materials.effectiveconductivity_averaging','numel',[1],'values',[0 1 2]);
-			end
-
-			if ismember('GiaAnalysis',analyses),
-				md = checkfield(md,'fieldname','materials.lithosphere_shear_modulus','>',0,'numel',1);
-				md = checkfield(md,'fieldname','materials.lithosphere_density','>',0,'numel',1);
-				md = checkfield(md,'fieldname','materials.mantle_shear_modulus','>',0,'numel',1);
-				md = checkfield(md,'fieldname','materials.mantle_density','>',0,'numel',1);
-			end
-			if ismember('SealevelchangeAnalysis',analyses),
-				md = checkfield(md,'fieldname','materials.earth_density','>',0,'numel',1);
-			end
+			md = checkfield(md,'fieldname','materials.rho_ice','>',0);
+			md = checkfield(md,'fieldname','materials.rho_water','>',0);
+			md = checkfield(md,'fieldname','materials.rho_freshwater','>',0);
+			md = checkfield(md,'fieldname','materials.mu_water','>',0);
+			md = checkfield(md,'fieldname','materials.rheology_B','>',0,'universal',1,'NaN',1,'Inf',1);
+			md = checkfield(md,'fieldname','materials.rheology_n','>',0,'universal',1,'NaN',1,'Inf',1);
+			md = checkfield(md,'fieldname','materials.rheology_law','values',{'None' 'BuddJacka' 'Cuffey' 'CuffeyTemperate' 'Paterson' 'Arrhenius' 'LliboutryDuval' 'NyeCO2' 'NyeH2O'});
+			md = checkfield(md,'fieldname','materials.effectiveconductivity_averaging','numel',[1],'values',[0 1 2]);
 
 		end % }}}
@@ -154,8 +139,4 @@
 			fielddisplay(self,'rheology_n','Glen''s flow law exponent');
 			fielddisplay(self,'rheology_law',['law for the temperature dependance of the rheology: ''None'', ''BuddJacka'', Cuffey'', ''CuffeyTemperate'', ''Paterson'', ''Arrhenius'', ''LliboutryDuval'', ''NyeH2O'', or ''NyeCO2''']);
-			fielddisplay(self,'lithosphere_shear_modulus','Lithosphere shear modulus [Pa]');
-			fielddisplay(self,'lithosphere_density','Lithosphere density [g/cm^-3]');
-			fielddisplay(self,'mantle_shear_modulus','Mantle shear modulus [Pa]');
-			fielddisplay(self,'mantle_density','Mantle density [g/cm^-3]');
 			fielddisplay(self,'earth_density','Mantle density [kg/m^-3]');
 		end % }}}
@@ -183,8 +164,4 @@
 			WriteData(fid,prefix,'object',self,'class','materials','fieldname','rheology_n','format','DoubleMat','mattype',2);
 			WriteData(fid,prefix,'data',self.rheology_law,'name','md.materials.rheology_law','format','String');
-			WriteData(fid,prefix,'object',self,'class','materials','fieldname','lithosphere_shear_modulus','format','Double');
-			WriteData(fid,prefix,'object',self,'class','materials','fieldname','lithosphere_density','format','Double','scale',10^3);
-			WriteData(fid,prefix,'object',self,'class','materials','fieldname','mantle_shear_modulus','format','Double');
-			WriteData(fid,prefix,'object',self,'class','materials','fieldname','mantle_density','format','Double','scale',10^3);
 			WriteData(fid,prefix,'object',self,'class','materials','fieldname','earth_density','format','Double');
 		end % }}}
@@ -208,8 +185,4 @@
 			writejs1Darray(fid,[modelname '.materials.rheology_n'],self.rheology_n);
 			writejsstring(fid,[modelname '.materials.rheology_law'],self.rheology_law);
-			writejsdouble(fid,[modelname '.materials.lithosphere_shear_modulus'],self.lithosphere_shear_modulus);
-			writejsdouble(fid,[modelname '.materials.lithosphere_density'],self.lithosphere_density);
-			writejsdouble(fid,[modelname '.materials.mantle_shear_modulus'],self.mantle_shear_modulus);
-			writejsdouble(fid,[modelname '.materials.mantle_density'],self.mantle_density);
 			writejsdouble(fid,[modelname '.materials.earth_density'],self.earth_density);
 
Index: /issm/trunk-jpl/src/m/classes/model.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/model.m	(revision 26046)
+++ /issm/trunk-jpl/src/m/classes/model.m	(revision 26047)
@@ -43,5 +43,4 @@
 		frontalforcings  = 0;
 		love			 = 0;
-		gia				 = 0;
 		esa              = 0;
         sampling         = 0;
@@ -241,5 +240,4 @@
 			md.calving          = calving();
 			md.frontalforcings  = frontalforcings();
-			md.gia              = giamme();
 			md.love             = fourierlove();
 			md.esa              = esa();
@@ -378,9 +376,4 @@
 			end
 
-			%giaivins
-			if isa(md.gia,'giaivins'),
-				if ~isnan(md.gia.mantle_viscosity), md.gia.mantle_viscosity=project2d(md,md.gia.mantle_viscosity,1); end
-				if ~isnan(md.gia.lithosphere_thickness), md.gia.lithosphere_thickness=project2d(md,md.gia.lithosphere_thickness,1); end
-			end
 
 			%elementstype
@@ -1506,5 +1499,4 @@
 			disp(sprintf('%19s: %-22s -- %s','calving'         ,['[1x1 ' class(self.calving) ']'],'parameters for calving'));
 			disp(sprintf('%19s: %-22s -- %s','frontalforcings' ,['[1x1 ' class(self.frontalforcings) ']'],'parameters for frontalforcings'));
-			disp(sprintf('%19s: %-22s -- %s','gia'             ,['[1x1 ' class(self.gia) ']'],'parameters for gia solution'));
 			disp(sprintf('%19s: %-22s -- %s','esa'             ,['[1x1 ' class(self.esa) ']'],'parameters for elastic adjustment solution'));
 			disp(sprintf('%19s: %-22s -- %s','love'            ,['[1x1 ' class(self.love) ']'],'parameters for love solution'));
Index: /issm/trunk-jpl/src/m/classes/sealevelmodel.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/sealevelmodel.m	(revision 26046)
+++ /issm/trunk-jpl/src/m/classes/sealevelmodel.m	(revision 26047)
@@ -79,4 +79,28 @@
 				end
 			end
+
+			%make sure grd is the same everywhere:
+			for i=1:length(slm.icecaps),
+				md= slm.icecaps{i}; 
+				if md.solidearthsettings.isgrd~=slm.earth.solidearthsettings.isgrd),
+					error(sprintf('isgrd on ice cap %s is not the same as for the earth\n',md.miscellaneous.name));
+				end
+			end
+			%make sure that there is no solid earth external forcing on the basins: 
+			for i=1:length(slm.icecaps),
+				md= slm.icecaps{i}; 
+				if ~isempty(md.solidearth.external),
+					error(sprintf('cannot run external forcings on an ice sheet when runing a coupling earth/ice sheet model');
+				end
+
+			end
+			%make sure that we have the rigth grd model for computing ouf sealevel patterns: 
+			for i=1:length(slm.icecaps),
+				md= slm.icecaps{i}; 
+				if md.solidearth.settings.grdmodel~=0
+					error(sprintf('sealevelmodel checkconsistenty error message: ice sheets do not run GRD module, specify solidearth.settings.grdmodel=0 on ice cap %i',i));
+				end
+			end
+
 
 		end
Index: /issm/trunk-jpl/src/m/classes/solidearth.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/solidearth.m	(revision 26046)
+++ /issm/trunk-jpl/src/m/classes/solidearth.m	(revision 26047)
@@ -6,8 +6,6 @@
 classdef solidearth
 	properties (SetAccess=public) 
-		initialsealevel        = NaN;
 		settings               = solidearthsettings(); 
 		external               = [];
-		surfaceload            = surfaceload();
 		lovenumbers            = lovenumbers();
 		rotational             = rotational();
@@ -71,9 +69,7 @@
 			end
 
-			md = checkfield(md,'fieldname','solidearth.initialsealevel','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.lovenumbers.checkconsistency(md,solution,analyses);
 			self.rotational.checkconsistency(md,solution,analyses);
@@ -93,5 +89,4 @@
 			disp(sprintf('   solidearth inputs, forcings and settings:'));
 
-			fielddisplay(self,'initialsealevel','sea level at the start of computation [m]');
 			fielddisplay(self,'planetradius','planet radius [m]');
 			fielddisplay(self,'transitions','indices into parts of the mesh that will be icecaps');
@@ -101,5 +96,4 @@
 			if isempty(self.external), fielddisplay(self,'external','external solution, of the type solidearthsolution'); end
 			self.settings.disp();
-			self.surfaceload.disp();
 			self.lovenumbers.disp();
 			self.rotational.disp();
@@ -111,5 +105,4 @@
 		function marshall(self,prefix,md,fid) % {{{
 			
-			WriteData(fid,prefix,'object',self,'fieldname','initialsealevel','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');
@@ -133,5 +126,4 @@
 			
 			self.settings.marshall(prefix,md,fid);
-			self.surfaceload.marshall(prefix,md,fid);
 			self.lovenumbers.marshall(prefix,md,fid);
 			self.rotational.marshall(prefix,md,fid);
@@ -155,7 +147,5 @@
 		function savemodeljs(self,fid,modelname) % {{{
 		
-			writejs1Darray(fid,[modelname '.solidearth.initialsealevel'],self.initialsealevel);
 			self.settings.savemodeljs(fid,modelname);
-			self.surfaceload.savemodeljs(fid,modelname);
 			self.lovenumbers.savemodeljs(fid,modelname);
 			self.rotational.savemodeljs(fid,modelname);
@@ -168,5 +158,4 @@
 		end % }}}
 		function self = extrude(self,md) % {{{
-			self.initialsealevel=project3d(md,'vector',self.initialsealevel,'type','node');
 		end % }}}
 	end
Index: /issm/trunk-jpl/src/m/classes/solidearthsettings.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/solidearthsettings.m	(revision 26046)
+++ /issm/trunk-jpl/src/m/classes/solidearthsettings.m	(revision 26047)
@@ -16,7 +16,10 @@
 		computesealevelchange  = 1; %will sea-level be coputed? 
 		isgrd                  = 1; %will GRD patterns be computed? 
+		compute_bp_grd         = 1; %will GRD patterns for bottomo pressures be computed? 
 		degacc                 = 0; %degree increment for resolution of Green tables
 		horiz                  = 0; %compute horizontal deformation
 		glfraction             = 1; %barystatic contribution full or fractional (default fractional)
+		grdmodel               = 0; %grd model (0 by default, 1 for elastic, 2 for Ivins)
+		cross_section_shape    = 0; %cross section only used when grd model is Ivins
 	end
 	methods
@@ -43,5 +46,6 @@
 		self.rotation=1;
 		self.ocean_area_scaling=0;
-		self.isgrd=1;
+		self.compute_bp_grd=1;
+		self.isgrd=0;
 		self.computesealevelchange=1;
 
@@ -57,4 +61,11 @@
 		%horizontal displacement?  (not by default)
 		self.horiz=0;
+		
+		%cross section for Ivins model 
+		self.cross_section_shape=1; %square as default (see iedge in GiaDeflectionCorex)
+
+		%no grd model by default: 
+		self.grdmodel=0; 
+
 		end % }}}
 		function md = checkconsistency(self,md,solution,analyses) % {{{
@@ -70,4 +81,6 @@
 			md = checkfield(md,'fieldname','solidearth.settings.horiz','NaN',1,'Inf',1,'values',[0 1]);
 			md = checkfield(md,'fieldname','solidearth.settings.glfraction','values',[0 1]);
+			md = checkfield(md,'fieldname','solidearth.settings.grdmodel','values',[1 2]);
+			md = checkfield(md,'fieldname','solidearth.settings.cross_section_shape','numel',[1],'values',[1,2]);
 
 			%checks on computational flags
@@ -76,16 +89,21 @@
 			end
 
-			%a coupler to a planet model is provided. 
+			%a GRD computation has been requested, makes somes checks on the nature of the meshes provided. 
 			if self.isgrd,
-				if md.transient.iscoupler, 
-					%we are good; 
+				if strcmpi(class(md.mesh),'mesh3dsurface'),
+					if self.grdmodel==2,
+						error('model requires a 2D mesh to run gia Ivins computations (change mesh from mesh3dsurface to mesh2d)');
+					end
 				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!');
+					if self.grdmodel==1,
+						error('model requires a 3D surface mesh to run GRD computations ( change mesh from mesh2d to mesh3dsurface)');
 					end
 				end
 			end
+
+			if self.compute_bp_grd==1 & md.solidearth.settings.isgrd==0,
+					error('solidearthsettings checkconsistency error message; if bottom pressure grd patterns are requested, solidearth settings class should have isgrd flag on');
+			end
+
 
 		end % }}}
@@ -99,4 +117,5 @@
 			fielddisplay(self,'computesealevelchange','compute sealevel change (default 1)');
 			fielddisplay(self,'isgrd','compute GRD patterns (default 1)');
+			fielddisplay(self,'compute_bp_grd','compute GRD patterns for bottom pressure loads (default 1)');
 			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');
@@ -105,4 +124,6 @@
 			fielddisplay(self,'degacc','accuracy (default .01 deg) for numerical discretization of the Green''s functions');
 			fielddisplay(self,'glfraction','contribute fractionally (default, 1) to barystatic sea level');
+			fielddisplay(self,'grdmodel','type of deformation model, 1 for elastic, 2 for visco-elastic from Ivins');
+			fielddisplay(self,'cross_section_shape','1: square-edged (default). 2: elliptical.  See iedge in GiaDeflectionCore');
 		end % }}}
 		function marshall(self,prefix,md,fid) % {{{
@@ -119,5 +140,8 @@
 			WriteData(fid,prefix,'object',self,'fieldname','computesealevelchange','name','md.solidearth.settings.computesealevelchange','format','Integer');
 			WriteData(fid,prefix,'object',self,'fieldname','isgrd','name','md.solidearth.settings.isgrd','format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','compute_bp_grd','name','md.solidearth.settings.compute_bp_grd','format','Integer');
 			WriteData(fid,prefix,'object',self,'fieldname','glfraction','name','md.solidearth.settings.glfraction','format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','grdmodel','name','md.solidearth.settings.grdmodel','format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','cross_section_shape','name','md.solidearth.settings.cross_section_shape','format','Integer');
 		end % }}}
 		function savemodeljs(self,fid,modelname) % {{{
@@ -133,4 +157,5 @@
 			writejsdouble(fid,[modelname '.solidearth.settings.degacc'],self.degacc);
 			writejsdouble(fid,[modelname '.solidearth.settings.glfraction'],self.glfraction);
+			writejsdouble(fid,[modelname '.solidearth.settings.cross_section_shape'],self.cross_section_shape);
 		end % }}}
 		function self = extrude(self,md) % {{{
Index: /issm/trunk-jpl/src/m/classes/transient.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/transient.m	(revision 26046)
+++ /issm/trunk-jpl/src/m/classes/transient.m	(revision 26047)
@@ -8,8 +8,8 @@
 		issmb             = 0;
 		ismasstransport   = 0;
+		isoceantransport   = 0;
 		isstressbalance   = 0;
 		isthermal         = 0;
 		isgroundingline   = 0;
-		isgia             = 0;
 		isesa             = 0;
 		isdamageevolution = 0;
@@ -18,5 +18,4 @@
         issampling        = 0;
 		isslc             = 0;
-		iscoupler         = 0;
 		amr_frequency     = 0;
 		isoceancoupling   = 0;
@@ -37,8 +36,8 @@
 			self.issmb           = 0;
 			self.ismasstransport = 0;
+			self.isoceantransport= 0;
 			self.isstressbalance = 0;
 			self.isthermal       = 0;
 			self.isgroundingline = 0;
-			self.isgia           = 0;
 			self.isesa           = 0;
 			self.isdamageevolution = 0;
@@ -48,5 +47,4 @@
 			self.isslc           = 0;
 			self.isoceancoupling = 0;
-			self.iscoupler       = 0;
 			self.amr_frequency	= 0;
 
@@ -59,8 +57,8 @@
 			self.issmb           = 1;
 			self.ismasstransport = 1;
+			self.isoceantransport = 0;
 			self.isstressbalance = 1;
 			self.isthermal       = 1;
 			self.isgroundingline = 0;
-			self.isgia           = 0;
 			self.isesa           = 0;
 			self.isdamageevolution = 0;
@@ -70,5 +68,4 @@
 			self.isslc           = 0;
 			self.isoceancoupling = 0;
-			self.iscoupler       = 0;
 			self.amr_frequency	= 0;
 
@@ -90,8 +87,8 @@
 			md = checkfield(md,'fieldname','transient.issmb','numel',[1],'values',[0 1]);
 			md = checkfield(md,'fieldname','transient.ismasstransport','numel',[1],'values',[0 1]);
+			md = checkfield(md,'fieldname','transient.isoceantransport','numel',[1],'values',[0 1]);
 			md = checkfield(md,'fieldname','transient.isstressbalance','numel',[1],'values',[0 1]);
 			md = checkfield(md,'fieldname','transient.isthermal','numel',[1],'values',[0 1]);
 			md = checkfield(md,'fieldname','transient.isgroundingline','numel',[1],'values',[0 1]);
-			md = checkfield(md,'fieldname','transient.isgia','numel',[1],'values',[0 1]);
 			md = checkfield(md,'fieldname','transient.isesa','numel',[1],'values',[0 1]);
 			md = checkfield(md,'fieldname','transient.isdamageevolution','numel',[1],'values',[0 1]);
@@ -101,5 +98,4 @@
 			md = checkfield(md,'fieldname','transient.isslc','numel',[1],'values',[0 1]);
 			md = checkfield(md,'fieldname','transient.isoceancoupling','numel',[1],'values',[0 1]);
-			md = checkfield(md,'fieldname','transient.iscoupler','numel',[1],'values',[0 1]);
             md = checkfield(md,'fieldname','transient.issampling','numel',[1],'values',[0 1]);  
 			md = checkfield(md,'fieldname','transient.amr_frequency','numel',[1],'>=',0,'NaN',1,'Inf',1);
@@ -117,8 +113,8 @@
 			fielddisplay(self,'issmb','indicates whether a surface mass balance solution is used in the transient');
 			fielddisplay(self,'ismasstransport','indicates whether a masstransport solution is used in the transient');
+			fielddisplay(self,'isoceantransport','indicates whether an ocean masstransport solution is used in the transient');
 			fielddisplay(self,'isstressbalance','indicates whether a stressbalance solution is used in the transient');
 			fielddisplay(self,'isthermal','indicates whether a thermal solution is used in the transient');
 			fielddisplay(self,'isgroundingline','indicates whether a groundingline migration is used in the transient');
-			fielddisplay(self,'isgia','indicates whether a postglacial rebound model is used in the transient');
 			fielddisplay(self,'isesa','indicates whether an elastic adjustment model is used in the transient');
 			fielddisplay(self,'isdamageevolution','indicates whether damage evolution is used in the transient');
@@ -128,5 +124,4 @@
 			fielddisplay(self,'isslc','indicates whether a sea-level change solution is used in the transient');
 			fielddisplay(self,'isoceancoupling','indicates whether a coupling with an ocean model is used in the transient');
-			fielddisplay(self,'iscoupler','indicates whether different models are being run with need for coupling');
 			fielddisplay(self,'amr_frequency','frequency at which mesh is refined in simulations with multiple time_steps');
 			fielddisplay(self,'requested_outputs','list of additional outputs requested');
@@ -136,8 +131,8 @@
 			WriteData(fid,prefix,'object',self,'fieldname','issmb','format','Boolean');
 			WriteData(fid,prefix,'object',self,'fieldname','ismasstransport','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','isoceantransport','format','Boolean');
 			WriteData(fid,prefix,'object',self,'fieldname','isstressbalance','format','Boolean');
 			WriteData(fid,prefix,'object',self,'fieldname','isthermal','format','Boolean');
 			WriteData(fid,prefix,'object',self,'fieldname','isgroundingline','format','Boolean');
-			WriteData(fid,prefix,'object',self,'fieldname','isgia','format','Boolean');
 			WriteData(fid,prefix,'object',self,'fieldname','isesa','format','Boolean');
 			WriteData(fid,prefix,'object',self,'fieldname','isdamageevolution','format','Boolean');
@@ -147,5 +142,4 @@
 			WriteData(fid,prefix,'object',self,'fieldname','isslc','format','Boolean');
 			WriteData(fid,prefix,'object',self,'fieldname','isoceancoupling','format','Boolean');
-			WriteData(fid,prefix,'object',self,'fieldname','iscoupler','format','Boolean');
 			WriteData(fid,prefix,'object',self,'fieldname','amr_frequency','format','Integer');
 
@@ -163,8 +157,8 @@
 			writejsdouble(fid,[modelname '.trans.issmb'],self.issmb);
 			writejsdouble(fid,[modelname '.trans.ismasstransport'],self.ismasstransport);
+			writejsdouble(fid,[modelname '.trans.isoceantransport'],self.isoceantransport);
 			writejsdouble(fid,[modelname '.trans.isstressbalance'],self.isstressbalance);
 			writejsdouble(fid,[modelname '.trans.isthermal'],self.isthermal);
 			writejsdouble(fid,[modelname '.trans.isgroundingline'],self.isgroundingline);
-			writejsdouble(fid,[modelname '.trans.isgia'],self.isgia);
 			writejsdouble(fid,[modelname '.trans.isesa'],self.isesa);
 			writejsdouble(fid,[modelname '.trans.isdamageevolution'],self.isdamageevolution);
@@ -174,5 +168,4 @@
 			writejsdouble(fid,[modelname '.trans.isslc'],self.isslc);
 			writejsdouble(fid,[modelname '.trans.isoceancoupling'],self.isoceancoupling);
-			writejsdouble(fid,[modelname '.trans.iscoupler'],self.iscoupler);
 			writejsdouble(fid,[modelname '.trans.amr_frequency'],self.amr_frequency);
 			writejscellstring(fid,[modelname '.trans.requested_outputs'],self.requested_outputs);
Index: /issm/trunk-jpl/src/m/consistency/ismodelselfconsistent.m
===================================================================
--- /issm/trunk-jpl/src/m/consistency/ismodelselfconsistent.m	(revision 26046)
+++ /issm/trunk-jpl/src/m/consistency/ismodelselfconsistent.m	(revision 26047)
@@ -52,4 +52,6 @@
 	elseif strcmp(solutiontype,'MasstransportSolution')
 		analyses={'MasstransportAnalysis'};
+	elseif strcmp(solutiontype,'OceantransportSolution')
+		analyses={'OceantransportAnalysis'};
 	elseif strcmp(solutiontype,'BalancethicknessSolution')
 		analyses={'BalancethicknessAnalysis'};
@@ -71,9 +73,9 @@
 		analyses={'EsaAnalysis'};
 	elseif strcmp(solutiontype,'TransientSolution')
-		analyses={'StressbalanceAnalysis','StressbalanceVerticalAnalysis','StressbalanceSIAAnalysis','L2ProjectionBaseAnalysis','ThermalAnalysis','MeltingAnalysis','EnthalpyAnalysis','MasstransportAnalysis','HydrologyShaktiAnalysis','HydrologyGladsAnalysis','HydrologyDCInefficientAnalysis','HydrologyDCEfficientAnalysis','SealevelchangeAnalysis'};
+		analyses={'StressbalanceAnalysis','StressbalanceVerticalAnalysis','StressbalanceSIAAnalysis','L2ProjectionBaseAnalysis','ThermalAnalysis','MeltingAnalysis','EnthalpyAnalysis','MasstransportAnalysis','OceantransportAnalysis','HydrologyShaktiAnalysis','HydrologyGladsAnalysis','HydrologyShreveAnalysis','HydrologyTwsAnalysis','HydrologyDCInefficientAnalysis','HydrologyDCEfficientAnalysis','SealevelchangeAnalysis'};
 	elseif strcmp(solutiontype,'SealevelchangeSolution')
 		analyses={'SealevelchangeAnalysis'};
 	elseif strcmp(solutiontype,'HydrologySolution')
-		analyses={'L2ProjectionBaseAnalysis','HydrologyShreveAnalysis','HydrologyDCInefficientAnalysis','HydrologyDCEfficientAnalysis'};
+		analyses={'L2ProjectionBaseAnalysis','HydrologyShreveAnalysis','HydrologyDCInefficientAnalysis','HydrologyDCEfficientAnalysis','HydrologyGladsAnalysis','HydrologyShaktiAnalysis','HydrologyTwsAnalysis'};
 	elseif strcmp(solutiontype,'DamageEvolutionSolution')
 		analyses={'DamageEvolutionAnalysis'};
Index: /issm/trunk-jpl/src/m/dev/devpath.m
===================================================================
--- /issm/trunk-jpl/src/m/dev/devpath.m	(revision 26046)
+++ /issm/trunk-jpl/src/m/dev/devpath.m	(revision 26047)
@@ -28,5 +28,5 @@
 addpath(recursivepath([ISSM_DIR '/externalpackages/howatmask']));
 addpath(recursivepath([ISSM_DIR '/externalpackages/dem']));
-addpath(recursivepath([ISSM_DIR '/externalpackages/mealpix']));
+addpath(recursivepath([ISSM_DIR '/externalpackages/pcatool']));
 clear ISSM_DIR;
 
Index: /issm/trunk-jpl/src/m/plot/radarpower.m
===================================================================
--- /issm/trunk-jpl/src/m/plot/radarpower.m	(revision 26046)
+++ /issm/trunk-jpl/src/m/plot/radarpower.m	(revision 26047)
@@ -46,5 +46,5 @@
 			paths = {'/u/astrid-r1b/ModelData/MOG/mog100_r2_hp1.tif','/home/ModelData/Greenland/MOG/mog100_r2_hp1.tif'};
 		else
-			paths = {'/u/astrid-r1b/ModelData/MOG/mog500_r2_hp1.tif','/home/ModelData/Greenland/MOG/mog500_r2_hp1.tif'};
+			paths = {'/u/astrid-r1b/ModelData/MOG/mog500_r2_hp1.tif','/home/ModelData/Greenland/MOG/mog500_r2_hp1.tif','/Users/larour/ModelData/MOG/mog500_r2_hp1.tif'};
 		end
 	else
Index: /issm/trunk-jpl/src/m/solve/solve.m
===================================================================
--- /issm/trunk-jpl/src/m/solve/solve.m	(revision 26046)
+++ /issm/trunk-jpl/src/m/solve/solve.m	(revision 26047)
@@ -10,4 +10,5 @@
 %   - 'Stressbalance'      or 'sb'
 %   - 'Masstransport'      or 'mt'
+%   - 'Oceantransport' or 'oceant'
 %   - 'Thermal'            or 'th'
 %   - 'Steadystate'        or 'ss'
@@ -22,5 +23,4 @@
 %   - 'Love'               or 'lv'
 %   - 'Esa'                or 'esa'
-%   - 'Sealevelchange'     or 'slc'
 %   - 'Sampling'           or 'smp'
 %
@@ -46,4 +46,6 @@
 elseif strcmpi(solutionstring,'mt') || strcmpi(solutionstring,'Masstransport')
 	solutionstring = 'MasstransportSolution';
+elseif strcmpi(solutionstring,'oceanmt') || strcmpi(solutionstring,'Oceantransport')
+	solutionstring = 'OceantransportSolution';
 elseif strcmpi(solutionstring,'th') || strcmpi(solutionstring,'Thermal')
 	solutionstring = 'ThermalSolution';
@@ -74,6 +76,4 @@
 elseif strcmpi(solutionstring,'esa') || strcmpi(solutionstring,'Esa')
 	solutionstring = 'EsaSolution';
-elseif strcmpi(solutionstring,'slc') || strcmpi(solutionstring,'Sealevelchange')
-	solutionstring = 'SealevelchangeSolution';
 elseif strcmpi(solutionstring,'smp') || strcmpi(solutionstring,'Sampling')
 	solutionstring = 'SamplingSolution';    
Index: /issm/trunk-jpl/src/m/solve/solveslm.m
===================================================================
--- /issm/trunk-jpl/src/m/solve/solveslm.m	(revision 26046)
+++ /issm/trunk-jpl/src/m/solve/solveslm.m	(revision 26047)
@@ -7,5 +7,4 @@
 %
 %   solution types available comprise:
-%      - 'Sealevelchange'
 %      - 'Transient'
 %
@@ -18,6 +17,4 @@
 if strcmpi(solutionstringi,'tr') || strcmpi(solutionstringi,'Transient')
 	solutionstring = 'TransientSolution';
-elseif strcmpi(solutionstringi,'slr') || strcmpi(solutionstringi,'Sealevelchange')
-	solutionstring = 'SealevelchangeSolution';
 else
 	error(['solutionstring ' solutionstringi ' not supported!']);
Index: /issm/trunk-jpl/test/NightlyRun/test2001.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test2001.m	(revision 26046)
+++ /issm/trunk-jpl/test/NightlyRun/test2001.m	(revision 26047)
@@ -5,35 +5,51 @@
 md=parameterize(md,'../Par/SquareSheetConstrained.par');
 
-%GIA: 
-md.gia=giaivins();
-md.gia.lithosphere_thickness=100.*ones(md.mesh.numberofvertices,1); % in km
-md.gia.mantle_viscosity=1.0*10^21*ones(md.mesh.numberofvertices,1); % in Pa.s
-md.materials.lithosphere_shear_modulus=6.7*10^10;                   % in Pa
-md.materials.lithosphere_density=3.32;                              % in g/cm^-3
-md.materials.mantle_shear_modulus=1.45*10^11;                       % in Pa
-md.materials.mantle_density=3.34;                                   % in g/cm^-3
+%GIA Ivins, 2 layer model.
+md.solidearth.settings.grdmodel=2;
 
-%% indicate what you want to compute 
-md.gia.cross_section_shape=1;    % for square-edged x-section 
+md.materials=materials('litho','ice');
+md.materials.numlayers=2;
+md.materials.radius =  [10 6271e3 6371e3];
+md.materials.density=  [3.34e3 3.32e3];
+md.materials.lame_mu=  [1.45e11         6.7e10];
+md.materials.viscosity=[1e21            0];
+md.initialization.sealevel=zeros(md.mesh.numberofvertices,1);
+md.solidearth.settings.cross_section_shape=1;    % for square-edged x-section 
+md.solidearth.settings.computesealevelchange=0;  %do not compute sea level, only deformation
+md.solidearth.requested_outputs={'Sealevel','SealevelUGrd'};
 
-%% define loading history 
-md.timestepping.start_time=2400000; %2,400 kyr :: EVALUATION TIME
+%Loading history 
+md.timestepping.start_time=-2400000; %4,800 kyr :: EVALUATION TIME
+md.timestepping.time_step= 2400000; %2,400 kyr :: EVALUATION TIME
 % to get rid of default final_time: make sure final_time>start_time
-md.timestepping.final_time=2500000; %2,500 kyr
-md.geometry.thickness=[...
-	[md.geometry.thickness; 0.0],...
-	[md.geometry.thickness; md.timestepping.start_time],...
+md.timestepping.final_time=2400000; %2,500 kyr
+md.masstransport.spcthickness=[...
+	[md.geometry.thickness; 0],...
+	[md.geometry.thickness; 2400000]...
 	];
 
-%% solve for GIA deflection 
-md.cluster=generic('name',oshostname(),'np',3);
-md.verbose=verbose('1111111');
-md=solve(md,'Gia');
+%geometry at 0 initially: 
+md.geometry.thickness=zeros(md.mesh.numberofvertices,1);
+md.geometry.surface=zeros(md.mesh.numberofvertices,1);
+md.geometry.base=zeros(md.mesh.numberofvertices,1);
+
+%Physics: 
+md.transient.issmb=0; 
+md.transient.isstressbalance=0;
+md.transient.isthermal=0;
+md.transient.ismasstransport=1;
+md.transient.isslc=1;
+
+% Solve for GIA deflection 
+md.cluster=generic('name',oshostname(),'np',1);
+%md.cluster=generic('name',oshostname(),'np',3);
+md.verbose=verbose('11111111111');
+md.verbose.solver=0;
+md=solve(md,'tr');
 
 %Fields and tolerances to track changes
-field_names     ={'UGia','UGiaRate'};
-field_tolerances={1e-13,1e-13};
+field_names     ={'UGrd'};
+field_tolerances={1e-13};
 field_values={...
-	(md.results.GiaSolution.UGia),...
-	(md.results.GiaSolution.UGiaRate),...
+	(md.results.TransientSolution(1).SealevelUGrd)
 	};
Index: /issm/trunk-jpl/test/Par/SquareSheetConstrained.par
===================================================================
--- /issm/trunk-jpl/test/Par/SquareSheetConstrained.par	(revision 26046)
+++ /issm/trunk-jpl/test/Par/SquareSheetConstrained.par	(revision 26047)
@@ -10,4 +10,5 @@
 md.geometry.thickness=hmax+(hmin-hmax)*(md.mesh.y-ymin)/(ymax-ymin)+0.1*(hmin-hmax)*(md.mesh.x-xmin)/(xmax-xmin);
 md.geometry.base=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness+20.;
+md.geometry.bed=md.geometry.base;
 md.geometry.surface=md.geometry.base+md.geometry.thickness;
 
