Index: /issm/trunk-jpl/src/c/Makefile.am
===================================================================
--- /issm/trunk-jpl/src/c/Makefile.am	(revision 25065)
+++ /issm/trunk-jpl/src/c/Makefile.am	(revision 25066)
@@ -499,9 +499,9 @@
 #}}}
 #Gia sources (only if have fortran){{{
-if GIAIVINS
+if GIA
 if FORTRAN
 issm_sources += \
 	./cores/gia_core.cpp \
-	./analyses/GiaIvinsAnalysis.cpp \
+	./analyses/GiaAnalysis.cpp \
 	./modules/GiaDeflectionCorex/GiaDeflectionCorex.cpp \
 	./modules/GiaDeflectionCorex/distme.f \
Index: /issm/trunk-jpl/src/c/analyses/EnumToAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/EnumToAnalysis.cpp	(revision 25065)
+++ /issm/trunk-jpl/src/c/analyses/EnumToAnalysis.cpp	(revision 25066)
@@ -65,6 +65,6 @@
 		case GLheightadvectionAnalysisEnum : return new GLheightadvectionAnalysis();
 		#endif
-		#ifdef _HAVE_GIAIVINS_
-		case GiaIvinsAnalysisEnum : return new GiaIvinsAnalysis();
+		#ifdef _HAVE_GIA_
+		case GiaAnalysisEnum : return new GiaAnalysis();
 		#endif
 		#ifdef _HAVE_HYDROLOGYDCEFFICIENT_
Index: /issm/trunk-jpl/src/c/analyses/GiaAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/GiaAnalysis.cpp	(revision 25066)
+++ /issm/trunk-jpl/src/c/analyses/GiaAnalysis.cpp	(revision 25066)
@@ -0,0 +1,128 @@
+#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,Inputs2* inputs2,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(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum);
+			counter++;
+		}
+	}
+
+	/*fetch gia model type: */
+	iomodel->FetchData(&giamodel,"md.gia.model");
+	if(giamodel==1){ //GiaIvins
+		iomodel->FetchDataToInput(inputs2,elements,"md.geometry.thickness",ThicknessEnum);
+		iomodel->FetchDataToInput(inputs2,elements,"md.gia.mantle_viscosity",GiaMantleViscosityEnum);
+		iomodel->FetchDataToInput(inputs2,elements,"md.gia.lithosphere_thickness",GiaLithosphereThicknessEnum);
+		iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+	}
+	else if(giamodel==2){ //GiaCaron: not implemneted yet
+	}
+	else if(giamodel==3){
+		int nummodels=0;
+		iomodel->FetchData(&nummodels,"md.gia.nummodels");
+		if(nummodels){
+			/*take Ngia and Ugia from the offline models and plug into the element inputs:*/
+			iomodel->FetchDataToDatasetInput(inputs2,elements,"md.gia.Ngia",GiaMmeNgiaEnum);
+			iomodel->FetchDataToDatasetInput(inputs2,elements,"md.gia.Ugia",GiaMmeUgiaEnum);
+		}
+		else{
+			/*we have been provided no models, just an zero array, use it to fill NGiaRate and UGiaRate:*/
+			iomodel->FetchDataToInput(inputs2,elements,"md.gia.Ngia",NGiaRateEnum);
+			iomodel->FetchDataToInput(inputs2,elements,"md.gia.Ugia",UGiaRateEnum);
+		}
+	}
+}/*}}}*/
+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);
+
+		if(nummodels){
+			iomodel->FetchData(&modelid,"md.gia.modelid");
+			/*create double param, not int param, because Dakota will be updating it as 
+			 * a double potentially: */
+			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_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: /issm/trunk-jpl/src/c/analyses/GiaAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/GiaAnalysis.h	(revision 25066)
+++ /issm/trunk-jpl/src/c/analyses/GiaAnalysis.h	(revision 25066)
@@ -0,0 +1,33 @@
+/*! \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,Inputs2* inputs2,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_index);
+		void           InputUpdateFromSolution(IssmDouble* solution,Element* element);
+		void           UpdateConstraints(FemModel* femmodel);
+};
+#endif
Index: sm/trunk-jpl/src/c/analyses/GiaIvinsAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/GiaIvinsAnalysis.cpp	(revision 25065)
+++ 	(revision )
@@ -1,72 +1,0 @@
-#include "./GiaIvinsAnalysis.h"
-#include "../toolkits/toolkits.h"
-#include "../classes/classes.h"
-#include "../shared/shared.h"
-#include "../modules/modules.h"
-
-/*Model processing*/
-void GiaIvinsAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/
-	/*No constraints*/
-}/*}}}*/
-void GiaIvinsAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
-	/*No loads*/
-}/*}}}*/
-void GiaIvinsAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr){/*{{{*/
-	::CreateNodes(nodes,iomodel,GiaIvinsAnalysisEnum,P1Enum);
-}/*}}}*/
-int  GiaIvinsAnalysis::DofsPerNode(int** doflist,int domaintype,int approximation){/*{{{*/
-	return 1;
-}/*}}}*/
-void GiaIvinsAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
-
-	/*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(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum);
-			counter++;
-		}
-	}
-
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.thickness",ThicknessEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.gia.mantle_viscosity",GiaMantleViscosityEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.gia.lithosphere_thickness",GiaLithosphereThicknessEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
-}/*}}}*/
-void GiaIvinsAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
-
-	parameters->AddObject(iomodel->CopyConstantObject("md.gia.cross_section_shape",GiaCrossSectionShapeEnum));
-
-}/*}}}*/
-
-/*Finite Element Analysis*/
-void           GiaIvinsAnalysis::Core(FemModel* femmodel){/*{{{*/
-	_error_("not implemented");
-}/*}}}*/
-ElementVector* GiaIvinsAnalysis::CreateDVector(Element* element){/*{{{*/
-	/*Default, return NULL*/
-	return NULL;
-}/*}}}*/
-ElementMatrix* GiaIvinsAnalysis::CreateJacobianMatrix(Element* element){/*{{{*/
-_error_("Not implemented");
-}/*}}}*/
-ElementMatrix* GiaIvinsAnalysis::CreateKMatrix(Element* element){/*{{{*/
-	_error_("not implemented yet");
-}/*}}}*/
-ElementVector* GiaIvinsAnalysis::CreatePVector(Element* element){/*{{{*/
-_error_("not implemented yet");
-}/*}}}*/
-void           GiaIvinsAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
-	   _error_("not implemented yet");
-}/*}}}*/
-void           GiaIvinsAnalysis::GradientJ(Vector<IssmDouble>* gradient,Element* element,int control_type,int control_index){/*{{{*/
-	_error_("Not implemented yet");
-}/*}}}*/
-void           GiaIvinsAnalysis::InputUpdateFromSolution(IssmDouble* solution,Element* element){/*{{{*/
-	_error_("not implemented yet");
-}/*}}}*/
-void           GiaIvinsAnalysis::UpdateConstraints(FemModel* femmodel){/*{{{*/
-	/*Default, do nothing*/
-	return;
-}/*}}}*/
Index: sm/trunk-jpl/src/c/analyses/GiaIvinsAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/GiaIvinsAnalysis.h	(revision 25065)
+++ 	(revision )
@@ -1,33 +1,0 @@
-/*! \file GiaIvinsAnalysis.h 
- *  \brief: header file for generic external result object
- */
-
-#ifndef _GiaIvinsAnalysis_
-#define _GiaIvinsAnalysis_
-
-/*Headers*/
-#include "./Analysis.h"
-
-class GiaIvinsAnalysis: 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,Inputs2* inputs2,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_index);
-		void           InputUpdateFromSolution(IssmDouble* solution,Element* element);
-		void           UpdateConstraints(FemModel* femmodel);
-};
-#endif
Index: /issm/trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp	(revision 25065)
+++ /issm/trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp	(revision 25066)
@@ -24,5 +24,4 @@
 	int geodetic=0;
 	int dslmodel=0;
-	int giamodel=0;
 
 	/*Update elements: */
@@ -44,6 +43,4 @@
 	iomodel->FetchDataToInput(inputs2,elements,"md.slr.sealevel",SealevelEnum,0);
 	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.bed",BedEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.slr.Ngia",SealevelNGiaRateEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.slr.Ugia",SealevelUGiaRateEnum);
 	iomodel->FetchDataToInput(inputs2,elements,"md.slr.hydro_rate",SealevelriseHydroRateEnum);
 		
@@ -267,11 +264,5 @@
 	else _error_("Dsl model " << dslmodel << " not implemented yet!");
 		
-	/*gia mme model: */
-	iomodel->FetchData(&giamodel,"md.gia.model");
-	if(giamodel==3){
-		/*deal with Ngia and Ugia: */
-		iomodel->FetchDataToDatasetInput(inputs2,elements,"md.gia.Ngia",GiaMmeNgiaEnum);
-		iomodel->FetchDataToDatasetInput(inputs2,elements,"md.gia.Ugia",GiaMmeUgiaEnum);
-	}
+	
 
 	/*Initialize cumdeltalthickness and sealevel rise rate input*/
@@ -291,5 +282,4 @@
 	IssmDouble* love_l=NULL;
 	int         dslmodel=0;
-	int         giamodel=0;
 
 	IssmDouble* G_rigid = NULL;
@@ -317,5 +307,4 @@
 	/*some constant parameters: */
 	parameters->AddObject(iomodel->CopyConstantObject("md.dsl.model",DslModelEnum));
-	parameters->AddObject(iomodel->CopyConstantObject("md.gia.model",GiaModelEnum));
 	parameters->AddObject(iomodel->CopyConstantObject("md.slr.geodetic_run_frequency",SealevelriseGeodeticRunFrequencyEnum));
 	parameters->AddObject(iomodel->CopyConstantObject("md.slr.reltol",SealevelriseReltolEnum));
@@ -357,22 +346,4 @@
 		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 gia multi-model ensembles: {{{*/
-	iomodel->FetchData(&giamodel,"md.gia.model");
-	if(giamodel==3){
-		IssmDouble modelid; 
-		int nummodels;
-
-		parameters->AddObject(iomodel->CopyConstantObject("md.gia.nummodels",GiaNummodelsEnum));
-		iomodel->FetchData(&modelid,"md.gia.modelid");
-		/*create double param, not int param, because Dakota will be updating it as 
-		 * a double potentially: */
-		parameters->AddObject(new DoubleParam(GiaModelidEnum,modelid));
-
-		iomodel->FetchData(&nummodels,"md.gia.nummodels");
-
-		/*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!");
-	} /*}}}*/
 	/*Deal with elasticity {{{*/
 	/*love numbers: */
Index: /issm/trunk-jpl/src/c/analyses/analyses.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/analyses.h	(revision 25065)
+++ /issm/trunk-jpl/src/c/analyses/analyses.h	(revision 25066)
@@ -23,5 +23,5 @@
 #include "./FreeSurfaceBaseAnalysis.h"
 #include "./FreeSurfaceTopAnalysis.h"
-#include "./GiaIvinsAnalysis.h"
+#include "./GiaAnalysis.h"
 #include "./GLheightadvectionAnalysis.h"
 #include "./LoveAnalysis.h"
Index: /issm/trunk-jpl/src/c/classes/Elements/Element.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 25065)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 25066)
@@ -366,5 +366,5 @@
 		virtual void       WriteFieldIsovalueSegment(DataSet* segments,int fieldenum,IssmDouble fieldvalue){_error_("not implemented yet");};
 
-		#ifdef _HAVE_GIAIVINS_
+		#ifdef _HAVE_GIA_
 		virtual void       GiaDeflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt,IssmDouble* x,IssmDouble* y)=0;
 		#endif
Index: /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 25065)
+++ /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 25066)
@@ -4706,5 +4706,5 @@
 /*}}}*/
 
-#ifdef _HAVE_GIAIVINS_
+#ifdef _HAVE_GIA_
 void       Penta::GiaDeflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt,IssmDouble* x,IssmDouble* y){/*{{{*/
 	_error_("GIA deflection not implemented yet!");
Index: /issm/trunk-jpl/src/c/classes/Elements/Penta.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Penta.h	(revision 25065)
+++ /issm/trunk-jpl/src/c/classes/Elements/Penta.h	(revision 25066)
@@ -204,5 +204,5 @@
 		#endif
 
-		#ifdef _HAVE_GIAIVINS_
+		#ifdef _HAVE_GIA_
 		void           GiaDeflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt,IssmDouble* x,IssmDouble* y);
 		#endif
Index: /issm/trunk-jpl/src/c/classes/Elements/Seg.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Seg.h	(revision 25065)
+++ /issm/trunk-jpl/src/c/classes/Elements/Seg.h	(revision 25066)
@@ -164,5 +164,5 @@
 		IssmDouble     GetAreaSpherical(void){_error_("not implemented yet!");};
 
-#ifdef _HAVE_GIAIVINS_
+#ifdef _HAVE_GIA_
 		void        GiaDeflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt,IssmDouble* x,IssmDouble* y){_error_("not implemented yet");};
 #endif
Index: /issm/trunk-jpl/src/c/classes/Elements/Tetra.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 25065)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 25066)
@@ -170,5 +170,5 @@
 		void        ViscousHeating(IssmDouble* pphi,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input);
 
-#ifdef _HAVE_GIAIVINS_
+#ifdef _HAVE_GIA_
 		void        GiaDeflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt,IssmDouble* x,IssmDouble* y){_error_("not implemented yet");};
 #endif
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 25065)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 25066)
@@ -21,5 +21,5 @@
 #include "../Inputs2/TransientInput2.h"
 #include "../../shared/shared.h"
-#ifdef _HAVE_GIAIVINS_
+#ifdef _HAVE_GIA_
 #include "../../modules/GiaDeflectionCorex/GiaDeflectionCorex.h"
 #endif
@@ -4951,5 +4951,5 @@
 /*}}}*/
 
-#ifdef _HAVE_GIAIVINS_
+#ifdef _HAVE_GIA_
 void       Tria::GiaDeflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt,IssmDouble* x, IssmDouble* y){/*{{{*/
 
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.h	(revision 25065)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.h	(revision 25066)
@@ -155,5 +155,5 @@
 		void			WriteFieldIsovalueSegment(DataSet* segments,int fieldenum,IssmDouble fieldvalue);
 
-		#ifdef _HAVE_GIAIVINS_
+		#ifdef _HAVE_GIA_
 		void   GiaDeflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt,IssmDouble* x,IssmDouble* y);
 		#endif
Index: /issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 25065)
+++ /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 25066)
@@ -770,5 +770,5 @@
 
 		case GiaSolutionEnum:
-			analyses_temp[numanalyses++]=GiaIvinsAnalysisEnum;
+			analyses_temp[numanalyses++]=GiaAnalysisEnum;
 			break;
 
@@ -783,4 +783,5 @@
 		case SealevelriseSolutionEnum:
 			analyses_temp[numanalyses++]=SealevelriseAnalysisEnum;
+			analyses_temp[numanalyses++]=GiaAnalysisEnum;
 			break;
 
@@ -845,4 +846,5 @@
 			}
 			if(isslr){
+				analyses_temp[numanalyses++]=GiaAnalysisEnum;
 				analyses_temp[numanalyses++]=SealevelriseAnalysisEnum;
 			}
@@ -851,5 +853,5 @@
 			}
 			if(isgia){
-				analyses_temp[numanalyses++]=GiaIvinsAnalysisEnum;
+				analyses_temp[numanalyses++]=GiaAnalysisEnum;
 			}
 
@@ -4602,5 +4604,5 @@
 /*}}}*/
 #endif
-#ifdef _HAVE_GIAIVINS_
+#ifdef _HAVE_GIA_
 void FemModel::Deflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt, IssmDouble* x, IssmDouble* y){ /*{{{*/
 
Index: /issm/trunk-jpl/src/c/classes/FemModel.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.h	(revision 25065)
+++ /issm/trunk-jpl/src/c/classes/FemModel.h	(revision 25066)
@@ -155,5 +155,5 @@
 		void ThicknessAbsGradientx( IssmDouble* pJ);
 		void ThicknessPositivex(IssmDouble* pJ);
-		#ifdef _HAVE_GIAIVINS_
+		#ifdef _HAVE_GIA_
 		void Deflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt, IssmDouble* x, IssmDouble* y);
 		#endif
Index: /issm/trunk-jpl/src/c/cores/CorePointerFromSolutionEnum.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/CorePointerFromSolutionEnum.cpp	(revision 25065)
+++ /issm/trunk-jpl/src/c/cores/CorePointerFromSolutionEnum.cpp	(revision 25066)
@@ -66,5 +66,5 @@
 			break;
 		case GiaSolutionEnum:
-			#if _HAVE_GIAIVINS_
+			#if _HAVE_GIA_
 			solutioncore=&gia_core;
 			#else
Index: /issm/trunk-jpl/src/c/cores/gia_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/gia_core.cpp	(revision 25065)
+++ /issm/trunk-jpl/src/c/cores/gia_core.cpp	(revision 25066)
@@ -6,4 +6,6 @@
 #include "../toolkits/toolkits.h"
 #include "../classes/classes.h"
+#include "../classes/Inputs2/TriaInput2.h"
+#include "../classes/Inputs2/DatasetInput2.h"
 #include "../shared/shared.h"
 #include "../modules/modules.h"
@@ -11,15 +13,17 @@
 void gia_core(FemModel* femmodel){
 
-	/*Start profiler*/
-	femmodel->profiler->Start(GIACORE);
-
 	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: */
@@ -29,32 +33,65 @@
 
 	/*Call on core computations: */
-	femmodel->SetCurrentConfiguration(GiaIvinsAnalysisEnum);
+	femmodel->SetCurrentConfiguration(GiaAnalysisEnum);
 
-	/*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);
+	/*Figure out type of gia model:*/
+	femmodel->parameters->FindParam(&giamodel,GiaModelEnum);
 
-	/*first, recover x and y vectors from vertices: */
-	VertexCoordinatesx(&x,&y,NULL,femmodel->vertices); //no need for z coordinate
+	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);
 
-	/*call the main module: */
-	femmodel->Deflection(wg,dwdtg,x,y);
+		/*first, recover x and y vectors from vertices: */
+		VertexCoordinatesx(&x,&y,NULL,femmodel->vertices); //no need for z coordinate
 
-	/*assemble vector: */
-	wg->Assemble();
-	dwdtg->Assemble();
+		/*call the main module: */
+		femmodel->Deflection(wg,dwdtg,x,y);
 
-	InputUpdateFromVectorx(femmodel,wg,GiaWEnum,VertexSIdEnum);
-	InputUpdateFromVectorx(femmodel,dwdtg,GiadWdtEnum,VertexSIdEnum);
+		/*assemble vector: */
+		wg->Assemble();
+		dwdtg->Assemble();
 
-	if(save_results){
-		if(VerboseSolution()) _printf0_("   saving results\n");
-		int outputs[2] = {GiaWEnum,GiadWdtEnum};
-		femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],2);
+		InputUpdateFromVectorx(femmodel,wg,UGiaEnum,VertexSIdEnum);
+		InputUpdateFromVectorx(femmodel,dwdtg,UGiaRateEnum,VertexSIdEnum);
+
+		if(save_results){
+			if(VerboseSolution()) _printf0_("   saving results\n");
+			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
+		
 
-	xDelete<IssmDouble>(x);
-	xDelete<IssmDouble>(y);
+		/*Go grab the values for Ngia and Ugia in the offline GiaMme class:*/ 
+		femmodel->parameters->FindParam(&nummodels,GiaNummodelsEnum); 
+		if(nummodels){
+			femmodel->parameters->FindParam(&modelid,GiaModelidEnum); 
+			modelid--; //from matlab
+
+			/*find the Ngia and Ugia dataset:*/
+			DatasetInput2* dataset_input_ngia=femmodel->inputs2->GetDatasetInput2(GiaMmeNgiaEnum);
+			DatasetInput2* dataset_input_ugia=femmodel->inputs2->GetDatasetInput2(GiaMmeUgiaEnum);
+			/*Go find the modelid'th input:*/
+			TriaInput2* tria_input_ngia=dataset_input_ngia->GetTriaInputByOffset(modelid);
+			TriaInput2* tria_input_ugia=dataset_input_ugia->GetTriaInputByOffset(modelid);
+
+			/*Plug into SealevelUGiaRate and SealevelNGiaRate inputs:*/
+			Input2* tria_input_copy_ngia=tria_input_ngia->copy();
+			Input2* tria_input_copy_ugia=tria_input_ugia->copy();
+			tria_input_copy_ngia->ChangeEnum(NGiaRateEnum);
+			tria_input_copy_ugia->ChangeEnum(UGiaRateEnum);
+			femmodel->inputs2->AddInput(tria_input_copy_ngia);
+			femmodel->inputs2->AddInput(tria_input_copy_ugia);
+		}
+	}
 	
 	/*End profiler*/
Index: /issm/trunk-jpl/src/c/cores/sealevelchange_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/sealevelchange_core.cpp	(revision 25065)
+++ /issm/trunk-jpl/src/c/cores/sealevelchange_core.cpp	(revision 25066)
@@ -191,11 +191,11 @@
 		InputUpdateFromVectorx(femmodel,U_esa_rate,SealevelUEsaRateEnum,VertexSIdEnum); 
 		InputUpdateFromVectorx(femmodel,N_esa_rate,SealevelNEsaRateEnum,VertexSIdEnum); 
-		InputUpdateFromVectorx(femmodel,U_gia_rate,SealevelUGiaRateEnum,VertexSIdEnum);
-		InputUpdateFromVectorx(femmodel,N_gia_rate,SealevelNGiaRateEnum,VertexSIdEnum); 
+		InputUpdateFromVectorx(femmodel,U_gia_rate,UGiaRateEnum,VertexSIdEnum);
+		InputUpdateFromVectorx(femmodel,N_gia_rate,NGiaRateEnum,VertexSIdEnum); 
 		InputUpdateFromVectorx(femmodel,RSLg_rate,SealevelRSLRateEnum,VertexSIdEnum); 
 		InputUpdateFromVectorx(femmodel,U_esa,SealevelUEsaEnum,VertexSIdEnum); 
 		InputUpdateFromVectorx(femmodel,N_esa,SealevelNEsaEnum,VertexSIdEnum); 
-		InputUpdateFromVectorx(femmodel,U_gia,SealevelUGiaEnum,VertexSIdEnum); 
-		InputUpdateFromVectorx(femmodel,N_gia,SealevelNGiaEnum,VertexSIdEnum); 
+		InputUpdateFromVectorx(femmodel,U_gia,UGiaEnum,VertexSIdEnum); 
+		InputUpdateFromVectorx(femmodel,N_gia,NGiaEnum,VertexSIdEnum); 
 		InputUpdateFromVectorx(femmodel,RSLg,SealevelRSLEnum,VertexSIdEnum); 
 		InputUpdateFromVectorx(femmodel,RSLg_eustatic,SealevelRSLEustaticEnum,VertexSIdEnum); 
@@ -210,7 +210,7 @@
 		/*transfer sea level back to ice caps:*/
 		TransferSealevel(femmodel,SealevelNEsaRateEnum);
-		TransferSealevel(femmodel,SealevelNGiaRateEnum);
+		TransferSealevel(femmodel,NGiaRateEnum);
 		TransferSealevel(femmodel,SealevelUEsaRateEnum);
-		TransferSealevel(femmodel,SealevelUGiaRateEnum);
+		TransferSealevel(femmodel,UGiaRateEnum);
 
 		//reset cumdeltathickness  to 0: 
@@ -286,7 +286,7 @@
 	if(geodetic){
 		GetVectorFromInputsx(&U_esa_rate,femmodel,SealevelUEsaRateEnum,VertexSIdEnum);
-		GetVectorFromInputsx(&U_gia_rate,femmodel,SealevelUGiaRateEnum,VertexSIdEnum);
+		GetVectorFromInputsx(&U_gia_rate,femmodel,UGiaRateEnum,VertexSIdEnum);
 		GetVectorFromInputsx(&N_esa_rate,femmodel,SealevelNEsaRateEnum,VertexSIdEnum);
-		GetVectorFromInputsx(&N_gia_rate,femmodel,SealevelNGiaRateEnum,VertexSIdEnum);
+		GetVectorFromInputsx(&N_gia_rate,femmodel,NGiaRateEnum,VertexSIdEnum);
 	}
 
@@ -625,6 +625,4 @@
 	/*parameters:*/
 	int					frequency;
-	int                 giamodel;
-	IssmDouble          modelid;
 	IssmDouble          dt;
 	
@@ -634,33 +632,8 @@
 	femmodel->parameters->FindParam(&frequency,SealevelriseGeodeticRunFrequencyEnum);
 	femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
-	femmodel->parameters->FindParam(&giamodel,GiaModelEnum);
-
-	if(giamodel==3){
-		/*need to actively get GIA from the MME ensemble, and plug it into 
-		 * the elements as inputs SealevelUGiaRateEnum and SealevelNGiaRateEnum :*/
-		femmodel->parameters->FindParam(&modelid,GiaModelidEnum); 
-		
-		modelid--; //from matlab
-
-		/*find the GiaMmeNgiaEnum dataset:*/
-		DatasetInput2* dataset_input_ngia=femmodel->inputs2->GetDatasetInput2(GiaMmeNgiaEnum);
-		DatasetInput2* dataset_input_ugia=femmodel->inputs2->GetDatasetInput2(GiaMmeUgiaEnum);
-
-		/*Go find the modelid'th input:*/
-		TriaInput2* tria_input_ngia=dataset_input_ngia->GetTriaInputByOffset(modelid);
-		TriaInput2* tria_input_ugia=dataset_input_ugia->GetTriaInputByOffset(modelid);
-
-		/*Plug into SealevelUGiaRate and SealevelNGiaRate inputs:*/
-		Input2* tria_input_copy_ngia=tria_input_ngia->copy();
-		Input2* tria_input_copy_ugia=tria_input_ugia->copy();
-		tria_input_copy_ngia->ChangeEnum(SealevelNGiaRateEnum);
-		tria_input_copy_ugia->ChangeEnum(SealevelUGiaRateEnum);
-		femmodel->inputs2->AddInput(tria_input_copy_ngia);
-		femmodel->inputs2->AddInput(tria_input_copy_ugia);
-	}
-	
+
 	/*recover GIA rates:*/
-	GetVectorFromInputsx(&U_gia,femmodel,SealevelUGiaRateEnum,VertexSIdEnum);
-	GetVectorFromInputsx(&N_gia,femmodel,SealevelNGiaRateEnum,VertexSIdEnum);
+	GetVectorFromInputsx(&U_gia,femmodel,UGiaRateEnum,VertexSIdEnum);
+	GetVectorFromInputsx(&N_gia,femmodel,NGiaRateEnum,VertexSIdEnum);
 
 	/*we just loaded rates, that's not what's being asked, scale by time:*/ 
Index: /issm/trunk-jpl/src/c/cores/transient_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/transient_core.cpp	(revision 25065)
+++ /issm/trunk-jpl/src/c/cores/transient_core.cpp	(revision 25066)
@@ -217,5 +217,5 @@
 		if(isgia){
 			if(VerboseSolution()) _printf0_("   computing glacial isostatic adjustment\n");
-			#ifdef _HAVE_GIAIVINS_
+			#ifdef _HAVE_GIA_
 			gia_core(femmodel);
 			#else
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 25065)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 25066)
@@ -326,13 +326,6 @@
 			parameters->AddObject(iomodel->CopyConstantObject("md.constants.g",ConstantsGEnum));
 			parameters->AddObject(iomodel->CopyConstantObject("md.materials.rheology_law",MaterialsRheologyLawEnum));
-
-			/*gia: */
-			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));
-
-			/*slr:*/
 			parameters->AddObject(iomodel->CopyConstantObject("md.materials.earth_density",MaterialsEarthDensityEnum));
+
 			break;
 		case MaterialsEnum:{
@@ -365,10 +358,4 @@
 						parameters->AddObject(iomodel->CopyConstantObject("md.materials.rheology_law",MaterialsRheologyLawEnum));
 
-						/*gia: */
-						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));
-
 						/*slr:*/
 						parameters->AddObject(iomodel->CopyConstantObject("md.materials.earth_density",MaterialsEarthDensityEnum));
Index: /issm/trunk-jpl/src/c/shared/Enum/Enum.vim
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 25065)
+++ /issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 25066)
@@ -588,6 +588,8 @@
 syn keyword cConstant GiaLithosphereThicknessEnum
 syn keyword cConstant GiaMantleViscosityEnum
-syn keyword cConstant GiaWEnum
-syn keyword cConstant GiadWdtEnum
+syn keyword cConstant NGiaEnum
+syn keyword cConstant NGiaRateEnum
+syn keyword cConstant UGiaEnum
+syn keyword cConstant UGiaRateEnum
 syn keyword cConstant GradientEnum
 syn keyword cConstant GroundinglineHeightEnum
@@ -675,6 +677,4 @@
 syn keyword cConstant SealevelNEsaEnum
 syn keyword cConstant SealevelNEsaRateEnum
-syn keyword cConstant SealevelNGiaEnum
-syn keyword cConstant SealevelNGiaRateEnum
 syn keyword cConstant SealevelRSLEnum
 syn keyword cConstant SealevelRSLEustaticEnum
@@ -684,6 +684,4 @@
 syn keyword cConstant SealevelUEsaEnum
 syn keyword cConstant SealevelUEsaRateEnum
-syn keyword cConstant SealevelUGiaEnum
-syn keyword cConstant SealevelUGiaRateEnum
 syn keyword cConstant SealevelUNorthEsaEnum
 syn keyword cConstant SealevelriseCumDeltathicknessEnum
@@ -1080,5 +1078,5 @@
 syn keyword cConstant GenericOptionEnum
 syn keyword cConstant GenericParamEnum
-syn keyword cConstant GiaIvinsAnalysisEnum
+syn keyword cConstant GiaAnalysisEnum
 syn keyword cConstant GiaSolutionEnum
 syn keyword cConstant Gradient1Enum
@@ -1490,5 +1488,5 @@
 syn keyword cType FreeSurfaceTopAnalysis
 syn keyword cType GLheightadvectionAnalysis
-syn keyword cType GiaIvinsAnalysis
+syn keyword cType GiaAnalysis
 syn keyword cType HydrologyDCEfficientAnalysis
 syn keyword cType HydrologyDCInefficientAnalysis
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 25065)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 25066)
@@ -585,6 +585,8 @@
 	GiaLithosphereThicknessEnum,
 	GiaMantleViscosityEnum,
-	GiaWEnum,
-	GiadWdtEnum,
+	NGiaEnum,
+	NGiaRateEnum,
+	UGiaEnum,
+	UGiaRateEnum,
 	GradientEnum,
 	GroundinglineHeightEnum,
@@ -672,6 +674,4 @@
 	SealevelNEsaEnum,
 	SealevelNEsaRateEnum,
-	SealevelNGiaEnum,
-	SealevelNGiaRateEnum,
 	SealevelRSLEnum,
 	SealevelRSLEustaticEnum,
@@ -681,6 +681,4 @@
 	SealevelUEsaEnum,
 	SealevelUEsaRateEnum,
-	SealevelUGiaEnum,
-	SealevelUGiaRateEnum,
 	SealevelUNorthEsaEnum,
 	SealevelriseCumDeltathicknessEnum,
@@ -1080,5 +1078,5 @@
 	GenericOptionEnum,
 	GenericParamEnum,
-	GiaIvinsAnalysisEnum,
+	GiaAnalysisEnum,
 	GiaSolutionEnum,
 	Gradient1Enum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 25065)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 25066)
@@ -590,6 +590,8 @@
 		case GiaLithosphereThicknessEnum : return "GiaLithosphereThickness";
 		case GiaMantleViscosityEnum : return "GiaMantleViscosity";
-		case GiaWEnum : return "GiaW";
-		case GiadWdtEnum : return "GiadWdt";
+		case NGiaEnum : return "NGia";
+		case NGiaRateEnum : return "NGiaRate";
+		case UGiaEnum : return "UGia";
+		case UGiaRateEnum : return "UGiaRate";
 		case GradientEnum : return "Gradient";
 		case GroundinglineHeightEnum : return "GroundinglineHeight";
@@ -677,6 +679,4 @@
 		case SealevelNEsaEnum : return "SealevelNEsa";
 		case SealevelNEsaRateEnum : return "SealevelNEsaRate";
-		case SealevelNGiaEnum : return "SealevelNGia";
-		case SealevelNGiaRateEnum : return "SealevelNGiaRate";
 		case SealevelRSLEnum : return "SealevelRSL";
 		case SealevelRSLEustaticEnum : return "SealevelRSLEustatic";
@@ -686,6 +686,4 @@
 		case SealevelUEsaEnum : return "SealevelUEsa";
 		case SealevelUEsaRateEnum : return "SealevelUEsaRate";
-		case SealevelUGiaEnum : return "SealevelUGia";
-		case SealevelUGiaRateEnum : return "SealevelUGiaRate";
 		case SealevelUNorthEsaEnum : return "SealevelUNorthEsa";
 		case SealevelriseCumDeltathicknessEnum : return "SealevelriseCumDeltathickness";
@@ -1082,5 +1080,5 @@
 		case GenericOptionEnum : return "GenericOption";
 		case GenericParamEnum : return "GenericParam";
-		case GiaIvinsAnalysisEnum : return "GiaIvinsAnalysis";
+		case GiaAnalysisEnum : return "GiaAnalysis";
 		case GiaSolutionEnum : return "GiaSolution";
 		case Gradient1Enum : return "Gradient1";
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 25065)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 25066)
@@ -602,6 +602,8 @@
 	      else if (strcmp(name,"GiaLithosphereThickness")==0) return GiaLithosphereThicknessEnum;
 	      else if (strcmp(name,"GiaMantleViscosity")==0) return GiaMantleViscosityEnum;
-	      else if (strcmp(name,"GiaW")==0) return GiaWEnum;
-	      else if (strcmp(name,"GiadWdt")==0) return GiadWdtEnum;
+	      else if (strcmp(name,"NGia")==0) return NGiaEnum;
+	      else if (strcmp(name,"NGiaRate")==0) return NGiaRateEnum;
+	      else if (strcmp(name,"UGia")==0) return UGiaEnum;
+	      else if (strcmp(name,"UGiaRate")==0) return UGiaRateEnum;
 	      else if (strcmp(name,"Gradient")==0) return GradientEnum;
 	      else if (strcmp(name,"GroundinglineHeight")==0) return GroundinglineHeightEnum;
@@ -627,10 +629,10 @@
 	      else if (strcmp(name,"HydrologyHeadOld")==0) return HydrologyHeadOldEnum;
 	      else if (strcmp(name,"HydrologyMoulinInput")==0) return HydrologyMoulinInputEnum;
-	      else if (strcmp(name,"HydrologyNeumannflux")==0) return HydrologyNeumannfluxEnum;
-	      else if (strcmp(name,"HydrologyReynolds")==0) return HydrologyReynoldsEnum;
          else stage=6;
    }
    if(stage==6){
-	      if (strcmp(name,"HydrologySheetConductivity")==0) return HydrologySheetConductivityEnum;
+	      if (strcmp(name,"HydrologyNeumannflux")==0) return HydrologyNeumannfluxEnum;
+	      else if (strcmp(name,"HydrologyReynolds")==0) return HydrologyReynoldsEnum;
+	      else if (strcmp(name,"HydrologySheetConductivity")==0) return HydrologySheetConductivityEnum;
 	      else if (strcmp(name,"HydrologySheetThickness")==0) return HydrologySheetThicknessEnum;
 	      else if (strcmp(name,"HydrologySheetThicknessOld")==0) return HydrologySheetThicknessOldEnum;
@@ -692,6 +694,4 @@
 	      else if (strcmp(name,"SealevelNEsa")==0) return SealevelNEsaEnum;
 	      else if (strcmp(name,"SealevelNEsaRate")==0) return SealevelNEsaRateEnum;
-	      else if (strcmp(name,"SealevelNGia")==0) return SealevelNGiaEnum;
-	      else if (strcmp(name,"SealevelNGiaRate")==0) return SealevelNGiaRateEnum;
 	      else if (strcmp(name,"SealevelRSL")==0) return SealevelRSLEnum;
 	      else if (strcmp(name,"SealevelRSLEustatic")==0) return SealevelRSLEustaticEnum;
@@ -701,6 +701,4 @@
 	      else if (strcmp(name,"SealevelUEsa")==0) return SealevelUEsaEnum;
 	      else if (strcmp(name,"SealevelUEsaRate")==0) return SealevelUEsaRateEnum;
-	      else if (strcmp(name,"SealevelUGia")==0) return SealevelUGiaEnum;
-	      else if (strcmp(name,"SealevelUGiaRate")==0) return SealevelUGiaRateEnum;
 	      else if (strcmp(name,"SealevelUNorthEsa")==0) return SealevelUNorthEsaEnum;
 	      else if (strcmp(name,"SealevelriseCumDeltathickness")==0) return SealevelriseCumDeltathicknessEnum;
@@ -752,10 +750,10 @@
 	      else if (strcmp(name,"SmbEC")==0) return SmbECEnum;
 	      else if (strcmp(name,"SmbECDt")==0) return SmbECDtEnum;
+	      else if (strcmp(name,"SmbECini")==0) return SmbECiniEnum;
+	      else if (strcmp(name,"SmbEla")==0) return SmbElaEnum;
          else stage=7;
    }
    if(stage==7){
-	      if (strcmp(name,"SmbECini")==0) return SmbECiniEnum;
-	      else if (strcmp(name,"SmbEla")==0) return SmbElaEnum;
-	      else if (strcmp(name,"SmbEvaporation")==0) return SmbEvaporationEnum;
+	      if (strcmp(name,"SmbEvaporation")==0) return SmbEvaporationEnum;
 	      else if (strcmp(name,"SmbFAC")==0) return SmbFACEnum;
 	      else if (strcmp(name,"SmbGdn")==0) return SmbGdnEnum;
@@ -875,10 +873,10 @@
 	      else if (strcmp(name,"VzHO")==0) return VzHOEnum;
 	      else if (strcmp(name,"VzMesh")==0) return VzMeshEnum;
+	      else if (strcmp(name,"VzSSA")==0) return VzSSAEnum;
+	      else if (strcmp(name,"WaterColumnOld")==0) return WaterColumnOldEnum;
          else stage=8;
    }
    if(stage==8){
-	      if (strcmp(name,"VzSSA")==0) return VzSSAEnum;
-	      else if (strcmp(name,"WaterColumnOld")==0) return WaterColumnOldEnum;
-	      else if (strcmp(name,"Watercolumn")==0) return WatercolumnEnum;
+	      if (strcmp(name,"Watercolumn")==0) return WatercolumnEnum;
 	      else if (strcmp(name,"WaterfractionDrainage")==0) return WaterfractionDrainageEnum;
 	      else if (strcmp(name,"WaterfractionDrainageIntegrated")==0) return WaterfractionDrainageIntegratedEnum;
@@ -998,10 +996,10 @@
 	      else if (strcmp(name,"Arrhenius")==0) return ArrheniusEnum;
 	      else if (strcmp(name,"AutodiffJacobian")==0) return AutodiffJacobianEnum;
+	      else if (strcmp(name,"Balancethickness2Analysis")==0) return Balancethickness2AnalysisEnum;
+	      else if (strcmp(name,"Balancethickness2Solution")==0) return Balancethickness2SolutionEnum;
          else stage=9;
    }
    if(stage==9){
-	      if (strcmp(name,"Balancethickness2Analysis")==0) return Balancethickness2AnalysisEnum;
-	      else if (strcmp(name,"Balancethickness2Solution")==0) return Balancethickness2SolutionEnum;
-	      else if (strcmp(name,"BalancethicknessAnalysis")==0) return BalancethicknessAnalysisEnum;
+	      if (strcmp(name,"BalancethicknessAnalysis")==0) return BalancethicknessAnalysisEnum;
 	      else if (strcmp(name,"BalancethicknessApparentMassbalance")==0) return BalancethicknessApparentMassbalanceEnum;
 	      else if (strcmp(name,"BalancethicknessSoftAnalysis")==0) return BalancethicknessSoftAnalysisEnum;
@@ -1106,5 +1104,5 @@
 	      else if (strcmp(name,"GenericOption")==0) return GenericOptionEnum;
 	      else if (strcmp(name,"GenericParam")==0) return GenericParamEnum;
-	      else if (strcmp(name,"GiaIvinsAnalysis")==0) return GiaIvinsAnalysisEnum;
+	      else if (strcmp(name,"GiaAnalysis")==0) return GiaAnalysisEnum;
 	      else if (strcmp(name,"GiaSolution")==0) return GiaSolutionEnum;
 	      else if (strcmp(name,"Gradient1")==0) return Gradient1Enum;
@@ -1121,10 +1119,10 @@
 	      else if (strcmp(name,"Hook")==0) return HookEnum;
 	      else if (strcmp(name,"HydrologyDCEfficientAnalysis")==0) return HydrologyDCEfficientAnalysisEnum;
+	      else if (strcmp(name,"HydrologyDCInefficientAnalysis")==0) return HydrologyDCInefficientAnalysisEnum;
+	      else if (strcmp(name,"HydrologyGlaDSAnalysis")==0) return HydrologyGlaDSAnalysisEnum;
          else stage=10;
    }
    if(stage==10){
-	      if (strcmp(name,"HydrologyDCInefficientAnalysis")==0) return HydrologyDCInefficientAnalysisEnum;
-	      else if (strcmp(name,"HydrologyGlaDSAnalysis")==0) return HydrologyGlaDSAnalysisEnum;
-	      else if (strcmp(name,"HydrologyGlaDS")==0) return HydrologyGlaDSEnum;
+	      if (strcmp(name,"HydrologyGlaDS")==0) return HydrologyGlaDSEnum;
 	      else if (strcmp(name,"HydrologyPismAnalysis")==0) return HydrologyPismAnalysisEnum;
 	      else if (strcmp(name,"HydrologyShaktiAnalysis")==0) return HydrologyShaktiAnalysisEnum;
@@ -1244,10 +1242,10 @@
 	      else if (strcmp(name,"P1P1GLS")==0) return P1P1GLSEnum;
 	      else if (strcmp(name,"P1bubble")==0) return P1bubbleEnum;
+	      else if (strcmp(name,"P1bubblecondensed")==0) return P1bubblecondensedEnum;
+	      else if (strcmp(name,"P1xP2")==0) return P1xP2Enum;
          else stage=11;
    }
    if(stage==11){
-	      if (strcmp(name,"P1bubblecondensed")==0) return P1bubblecondensedEnum;
-	      else if (strcmp(name,"P1xP2")==0) return P1xP2Enum;
-	      else if (strcmp(name,"P1xP3")==0) return P1xP3Enum;
+	      if (strcmp(name,"P1xP3")==0) return P1xP3Enum;
 	      else if (strcmp(name,"P1xP4")==0) return P1xP4Enum;
 	      else if (strcmp(name,"P2")==0) return P2Enum;
@@ -1367,10 +1365,10 @@
 	      else if (strcmp(name,"EtaAbsGradient")==0) return EtaAbsGradientEnum;
 	      else if (strcmp(name,"MeshZ")==0) return MeshZEnum;
+	      else if (strcmp(name,"NearestInterp")==0) return NearestInterpEnum;
+	      else if (strcmp(name,"OutputdefinitionList")==0) return OutputdefinitionListEnum;
          else stage=12;
    }
    if(stage==12){
-	      if (strcmp(name,"NearestInterp")==0) return NearestInterpEnum;
-	      else if (strcmp(name,"OutputdefinitionList")==0) return OutputdefinitionListEnum;
-	      else if (strcmp(name,"SealevelObs")==0) return SealevelObsEnum;
+	      if (strcmp(name,"SealevelObs")==0) return SealevelObsEnum;
 	      else if (strcmp(name,"SealevelWeights")==0) return SealevelWeightsEnum;
 	      else if (strcmp(name,"StrainRate")==0) return StrainRateEnum;
Index: /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 25065)
+++ /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 25066)
@@ -168,7 +168,7 @@
 		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
 	}
-	else if(strcmp(string_in,"SealevelNGiaRate")==0){
-		const char* field = "md.slr.Ngia";
-		input_enum        = SealevelNGiaRateEnum;
+	else if(strcmp(string_in,"NGiaRate")==0){
+		const char* field = "md.gia.Ngia";
+		input_enum        = NGiaRateEnum;
 		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
 	}
@@ -183,7 +183,7 @@
 		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
 	}
-	else if(strcmp(string_in,"SealevelUGiaRate")==0){
-		const char* field = "md.slr.Ugia";
-		input_enum        = SealevelUGiaRateEnum;
+	else if(strcmp(string_in,"UGiaRate")==0){
+		const char* field = "md.gia.Ugia";
+		input_enum        = UGiaRateEnum;
 		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
 	}
Index: /issm/trunk-jpl/src/m/classes/giamme.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/giamme.m	(revision 25065)
+++ /issm/trunk-jpl/src/m/classes/giamme.m	(revision 25066)
@@ -33,6 +33,6 @@
 
 			self.modelid=0;
-			self.Ngia={};
-			self.Ugia={};
+			self.Ngia=[];
+			self.Ugia=[];
 
 		end % }}}
@@ -44,5 +44,5 @@
 			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,'>=',1,'<=',length(self.Ngia));
+			md = checkfield(md,'field',self.modelid,'NaN',1,'Inf',1,'>=',0,'<=',length(self.Ngia));
 		end % }}}
 		function disp(self) % {{{
@@ -56,9 +56,13 @@
 
 			WriteData(fid,prefix,'name','md.gia.model','data',3,'format','Integer');
-			WriteData(fid,prefix,'name','md.gia.nummodels','data',length(self.Ngia),'format','Integer');
+			WriteData(fid,prefix,'name','md.gia.nummodels','data',size(self.Ngia,2),'format','Integer');
 			WriteData(fid,prefix,'object',self,'fieldname','modelid','format','Double');
-			WriteData(fid,prefix,'object',self,'fieldname','Ngia','format','DoubleMat');
-			WriteData(fid,prefix,'object',self,'fieldname','Ugia','format','DoubleMat');
-
+			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');
+			else
+				WriteData(fid,prefix,'object',self,'fieldname','Ngia','format','DoubleMat');
+				WriteData(fid,prefix,'object',self,'fieldname','Ugia','format','DoubleMat');
+			end
 		end % }}}
 		function savemodeljs(self,fid,modelname) % {{{
Index: /issm/trunk-jpl/src/m/classes/model.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/model.m	(revision 25065)
+++ /issm/trunk-jpl/src/m/classes/model.m	(revision 25066)
@@ -136,5 +136,5 @@
 			end
 			%2017 April 10th
-			if isa(md.gia,'gia'), md.gia=giaivins(); end
+			if isa(md.gia,'gia'), md.gia=giamme(); end
 			%2017 May 4th
 			if isa(md.amr,'double'); md.amr=amr(); end
@@ -1229,5 +1229,5 @@
 			md.calving          = calving();
 			md.frontalforcings  = frontalforcings();
-			md.gia				= giaivins();
+			md.gia				= giamme();
 			md.esa              = esa();
 			md.love             = fourierlove();
Index: /issm/trunk-jpl/src/m/classes/slr.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/slr.m	(revision 25065)
+++ /issm/trunk-jpl/src/m/classes/slr.m	(revision 25066)
@@ -30,6 +30,4 @@
 		degacc                 = 0;
 		horiz                  = 0;
-		Ngia                   = NaN;
-		Ugia                   = NaN;
 		planetradius           = planetradius('earth');
 
@@ -125,6 +123,4 @@
 			md = checkfield(md,'fieldname','slr.requested_outputs','stringrow',1);
 			md = checkfield(md,'fieldname','slr.horiz','NaN',1,'Inf',1,'values',[0 1]);
-			md = checkfield(md,'fieldname','slr.Ngia','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1]);
-			md = checkfield(md,'fieldname','slr.Ugia','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1]);
 
 			%check that love numbers are provided at the same level of accuracy: 
@@ -179,6 +175,4 @@
 			fielddisplay(self,'ocean_area_scaling','correction for model representation of ocean area [default: No correction]'); 
 			fielddisplay(self,'hydro_rate','rate of hydrological expansion (in mm/yr)'); 
-			fielddisplay(self,'Ngia','rate of viscous (GIA) geoid expansion (in mm/yr)'); 
-			fielddisplay(self,'Ugia','rate of viscous (GIA) bedrock uplift (in mm/yr)'); 
 			fielddisplay(self,'geodetic','compute geodetic SLR? ( in addition to steric?) default 0');
 			fielddisplay(self,'geodetic_run_frequency','how many time steps we skip before we run SLR solver during transient (default: 1)');
@@ -215,6 +209,4 @@
 			WriteData(fid,prefix,'object',self,'fieldname','geodetic_run_frequency','format','Integer');
 			WriteData(fid,prefix,'object',self,'fieldname','hydro_rate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1e-3/md.constants.yts);
-			WriteData(fid,prefix,'object',self,'fieldname','Ngia','format','DoubleMat','mattype',1,'scale',1e-3/md.constants.yts);
-			WriteData(fid,prefix,'object',self,'fieldname','Ugia','format','DoubleMat','mattype',1,'scale',1e-3/md.constants.yts);
 			WriteData(fid,prefix,'object',self,'fieldname','degacc','format','Double');
 			WriteData(fid,prefix,'object',self,'fieldname','transitions','format','MatArray');
