Index: /issm/trunk-jpl/configs/config-macosx64-larour.sh
===================================================================
--- /issm/trunk-jpl/configs/config-macosx64-larour.sh	(revision 14537)
+++ /issm/trunk-jpl/configs/config-macosx64-larour.sh	(revision 14538)
@@ -27,3 +27,3 @@
 	--with-scalapack-dir=$ISSM_DIR/externalpackages/petsc/install/ \
 	--with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install/ \
-	--with-dakota-dir=$ISSM_DIR/externalpackages/dakota/install 
+	--with-dakota-dir=$ISSM_DIR/externalpackages/dakota/install
Index: /issm/trunk-jpl/m4/issm_options.m4
===================================================================
--- /issm/trunk-jpl/m4/issm_options.m4	(revision 14537)
+++ /issm/trunk-jpl/m4/issm_options.m4	(revision 14538)
@@ -1381,4 +1381,22 @@
 	AC_MSG_RESULT($HAVE_RIFTS)
 	dnl }}}
+	dnl with-gia{{{
+	AC_ARG_WITH([gia],
+		AS_HELP_STRING([--with-gia = YES], [compile with gia capabilities (default is yes)]),
+		[GIA=$withval],[GIA=yes]) 
+	AC_MSG_CHECKING(for gia capability compilation)
+
+	if test "x$GIA" = "xyes"; then
+
+		dnl defaults
+		HAVE_GIA=yes
+
+		AC_DEFINE([_HAVE_GIA_],[1],[with gia capability])
+	else
+		HAVE_GIA=no
+	fi
+	AM_CONDITIONAL([GIA], [test x$HAVE_GIA = xyes])
+	AC_MSG_RESULT($HAVE_GIA)
+	dnl }}}
 	dnl with-ios{{{
 	AC_ARG_WITH([ios],
Index: /issm/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h	(revision 14537)
+++ /issm/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h	(revision 14538)
@@ -220,4 +220,5 @@
 	TransientIsprognosticEnum,
 	TransientIsthermalEnum,
+	TransientIsgiaEnum,
 	TransientNumRequestedOutputsEnum,
 	TransientRequestedOutputsEnum,
@@ -262,4 +263,5 @@
 	TransientSolutionEnum,
 	GiaSolutionEnum,
+	GiaAnalysisEnum,
 	/*}}}*/
 	/*Approximations {{{1*/
@@ -442,4 +444,5 @@
 	StressTensoryzEnum,
 	StressTensorzzEnum,
+	GiaWEnum,
 	/*}}}*/
 	/*Element Interpolations{{{1*/
Index: /issm/trunk-jpl/src/c/Makefile.am
===================================================================
--- /issm/trunk-jpl/src/c/Makefile.am	(revision 14537)
+++ /issm/trunk-jpl/src/c/Makefile.am	(revision 14538)
@@ -490,4 +490,7 @@
 					  ./solutions/bedslope_core.cpp
 #}}}
+#Gia sources  {{{
+gia_sources =  ./solutions/gia_core.cpp
+#}}}
 #Groundingline sources  {{{
 groundingline_sources= ./modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp\
@@ -832,4 +835,8 @@
 endif
 
+if GIA
+issm_sources  +=  $(gia_sources)
+endif
+
 if CONTROL
 issm_sources  +=  $(control_sources)
Index: /issm/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 14537)
+++ /issm/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 14538)
@@ -225,4 +225,5 @@
 		case TransientIsprognosticEnum : return "TransientIsprognostic";
 		case TransientIsthermalEnum : return "TransientIsthermal";
+		case TransientIsgiaEnum : return "TransientIsgia";
 		case TransientNumRequestedOutputsEnum : return "TransientNumRequestedOutputs";
 		case TransientRequestedOutputsEnum : return "TransientRequestedOutputs";
@@ -265,4 +266,5 @@
 		case TransientSolutionEnum : return "TransientSolution";
 		case GiaSolutionEnum : return "GiaSolution";
+		case GiaAnalysisEnum : return "GiaAnalysis";
 		case ApproximationEnum : return "Approximation";
 		case NoneApproximationEnum : return "NoneApproximation";
@@ -433,4 +435,5 @@
 		case StressTensoryzEnum : return "StressTensoryz";
 		case StressTensorzzEnum : return "StressTensorzz";
+		case GiaWEnum : return "GiaW";
 		case P0Enum : return "P0";
 		case P1Enum : return "P1";
Index: /issm/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 14537)
+++ /issm/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 14538)
@@ -229,4 +229,5 @@
 	      else if (strcmp(name,"TransientIsprognostic")==0) return TransientIsprognosticEnum;
 	      else if (strcmp(name,"TransientIsthermal")==0) return TransientIsthermalEnum;
+	      else if (strcmp(name,"TransientIsgia")==0) return TransientIsgiaEnum;
 	      else if (strcmp(name,"TransientNumRequestedOutputs")==0) return TransientNumRequestedOutputsEnum;
 	      else if (strcmp(name,"TransientRequestedOutputs")==0) return TransientRequestedOutputsEnum;
@@ -260,9 +261,9 @@
 	      else if (strcmp(name,"PrognosticAnalysis")==0) return PrognosticAnalysisEnum;
 	      else if (strcmp(name,"PrognosticSolution")==0) return PrognosticSolutionEnum;
-	      else if (strcmp(name,"SteadystateSolution")==0) return SteadystateSolutionEnum;
          else stage=3;
    }
    if(stage==3){
-	      if (strcmp(name,"SurfaceSlopeAnalysis")==0) return SurfaceSlopeAnalysisEnum;
+	      if (strcmp(name,"SteadystateSolution")==0) return SteadystateSolutionEnum;
+	      else if (strcmp(name,"SurfaceSlopeAnalysis")==0) return SurfaceSlopeAnalysisEnum;
 	      else if (strcmp(name,"SurfaceSlopeSolution")==0) return SurfaceSlopeSolutionEnum;
 	      else if (strcmp(name,"SurfaceSlopeXAnalysis")==0) return SurfaceSlopeXAnalysisEnum;
@@ -272,4 +273,5 @@
 	      else if (strcmp(name,"TransientSolution")==0) return TransientSolutionEnum;
 	      else if (strcmp(name,"GiaSolution")==0) return GiaSolutionEnum;
+	      else if (strcmp(name,"GiaAnalysis")==0) return GiaAnalysisEnum;
 	      else if (strcmp(name,"Approximation")==0) return ApproximationEnum;
 	      else if (strcmp(name,"NoneApproximation")==0) return NoneApproximationEnum;
@@ -382,10 +384,10 @@
 	      else if (strcmp(name,"QmuSurface")==0) return QmuSurfaceEnum;
 	      else if (strcmp(name,"QmuMelting")==0) return QmuMeltingEnum;
-	      else if (strcmp(name,"AndroidFrictionCoefficient")==0) return AndroidFrictionCoefficientEnum;
-	      else if (strcmp(name,"ResetPenalties")==0) return ResetPenaltiesEnum;
          else stage=4;
    }
    if(stage==4){
-	      if (strcmp(name,"SegmentOnIceShelf")==0) return SegmentOnIceShelfEnum;
+	      if (strcmp(name,"AndroidFrictionCoefficient")==0) return AndroidFrictionCoefficientEnum;
+	      else if (strcmp(name,"ResetPenalties")==0) return ResetPenaltiesEnum;
+	      else if (strcmp(name,"SegmentOnIceShelf")==0) return SegmentOnIceShelfEnum;
 	      else if (strcmp(name,"SurfaceAbsVelMisfit")==0) return SurfaceAbsVelMisfitEnum;
 	      else if (strcmp(name,"SurfaceArea")==0) return SurfaceAreaEnum;
@@ -443,4 +445,5 @@
 	      else if (strcmp(name,"StressTensoryz")==0) return StressTensoryzEnum;
 	      else if (strcmp(name,"StressTensorzz")==0) return StressTensorzzEnum;
+	      else if (strcmp(name,"GiaW")==0) return GiaWEnum;
 	      else if (strcmp(name,"P0")==0) return P0Enum;
 	      else if (strcmp(name,"P1")==0) return P1Enum;
@@ -504,11 +507,11 @@
 	      else if (strcmp(name,"OldGradient")==0) return OldGradientEnum;
 	      else if (strcmp(name,"OutputFilePointer")==0) return OutputFilePointerEnum;
-	      else if (strcmp(name,"OutputFileName")==0) return OutputFileNameEnum;
-	      else if (strcmp(name,"LockFileName")==0) return LockFileNameEnum;
-	      else if (strcmp(name,"PetscOptionsAnalyses")==0) return PetscOptionsAnalysesEnum;
          else stage=5;
    }
    if(stage==5){
-	      if (strcmp(name,"PetscOptionsStrings")==0) return PetscOptionsStringsEnum;
+	      if (strcmp(name,"OutputFileName")==0) return OutputFileNameEnum;
+	      else if (strcmp(name,"LockFileName")==0) return LockFileNameEnum;
+	      else if (strcmp(name,"PetscOptionsAnalyses")==0) return PetscOptionsAnalysesEnum;
+	      else if (strcmp(name,"PetscOptionsStrings")==0) return PetscOptionsStringsEnum;
 	      else if (strcmp(name,"QmuErrName")==0) return QmuErrNameEnum;
 	      else if (strcmp(name,"QmuInName")==0) return QmuInNameEnum;
Index: /issm/trunk-jpl/src/c/solutions/AnalysisConfiguration.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutions/AnalysisConfiguration.cpp	(revision 14537)
+++ /issm/trunk-jpl/src/c/solutions/AnalysisConfiguration.cpp	(revision 14538)
@@ -101,4 +101,10 @@
 			break;
 
+		case GiaSolutionEnum:
+			numanalyses=1;
+			analyses=xNew<int>(numanalyses);
+			analyses[0]=GiaAnalysisEnum;
+			break;
+
 		case TransientSolutionEnum:
 			numanalyses=9;
Index: /issm/trunk-jpl/src/c/solutions/CorePointerFromSolutionEnum.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutions/CorePointerFromSolutionEnum.cpp	(revision 14537)
+++ /issm/trunk-jpl/src/c/solutions/CorePointerFromSolutionEnum.cpp	(revision 14538)
@@ -102,4 +102,13 @@
 			#endif
 			break;
+
+		case GiaSolutionEnum:
+			#ifdef _HAVE_GIA_
+			solutioncore=&gia_core;
+			#else
+			_error_("ISSM was not compiled with gia capabilities. Exiting");
+			#endif
+			break;
+
 		default:
 			_error_("solution type: " << EnumToStringx(solutiontype) << " not supported yet!");
Index: /issm/trunk-jpl/src/c/solutions/gia_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutions/gia_core.cpp	(revision 14538)
+++ /issm/trunk-jpl/src/c/solutions/gia_core.cpp	(revision 14538)
@@ -0,0 +1,32 @@
+/*!\file: gia_core.cpp
+ * \brief: core of the GIA solution 
+ */ 
+
+#include "./solutions.h"
+#include "../toolkits/toolkits.h"
+#include "../classes/objects/objects.h"
+#include "../io/io.h"
+#include "../EnumDefinitions/EnumDefinitions.h"
+#include "../modules/modules.h"
+#include "../solvers/solvers.h"
+
+void gia_core(FemModel* femmodel){
+
+	/*parameters: */
+	bool save_results;
+
+	/*Recover some parameters: */
+	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
+
+	if(VerboseSolution()) _pprintLine_("   computing slope");
+
+	/*Call on core computations: */
+	femmodel->SetCurrentConfiguration(GiaAnalysisEnum);
+	solver_linear(femmodel);
+
+	if(save_results){
+		if(VerboseSolution()) _pprintLine_("   saving results");
+		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,GiaWEnum);
+	}
+
+}
Index: /issm/trunk-jpl/src/c/solutions/solutions.h
===================================================================
--- /issm/trunk-jpl/src/c/solutions/solutions.h	(revision 14537)
+++ /issm/trunk-jpl/src/c/solutions/solutions.h	(revision 14538)
@@ -34,4 +34,5 @@
 void ad_core(FemModel* femmodel);
 void dummy_core(FemModel* femmodel);
+void gia_core(FemModel* femmodel);
 IssmDouble objectivefunction(IssmDouble search_scalar,OptArgs* optargs);
 
Index: /issm/trunk-jpl/src/c/solutions/transient_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutions/transient_core.cpp	(revision 14537)
+++ /issm/trunk-jpl/src/c/solutions/transient_core.cpp	(revision 14538)
@@ -24,5 +24,5 @@
 	/*parameters: */
 	IssmDouble starttime,finaltime,dt,yts;
-	bool   isdiagnostic,isprognostic,isthermal,isgroundingline,isenthalpy,isdelta18o;
+	bool   isdiagnostic,isprognostic,isthermal,isgroundingline,isenthalpy,isdelta18o,isgia;
 	bool   save_results,dakota_analysis;
 	bool   time_adapt=false;
@@ -48,4 +48,5 @@
 	femmodel->parameters->FindParam(&isprognostic,TransientIsprognosticEnum);
 	femmodel->parameters->FindParam(&isthermal,TransientIsthermalEnum);
+	femmodel->parameters->FindParam(&isgia,TransientIsgiaEnum);
 	femmodel->parameters->FindParam(&isgroundingline,TransientIsgroundinglineEnum);
 	femmodel->parameters->FindParam(&isenthalpy,ThermalIsenthalpyEnum);
@@ -132,4 +133,13 @@
 			#endif
 		}
+		if(isgia){
+			if(VerboseSolution()) _pprintLine_("   computing glacial isostatic adjustment");
+			#ifdef _HAVE_GIA_
+			gia_core(femmodel);
+			#else
+			_error_("ISSM was not compiled with gia capabilities. Exiting");
+			#endif
+
+		}
 
 		/*unload results*/
Index: /issm/trunk-jpl/src/m/consistency/ismodelselfconsistent.m
===================================================================
--- /issm/trunk-jpl/src/m/consistency/ismodelselfconsistent.m	(revision 14537)
+++ /issm/trunk-jpl/src/m/consistency/ismodelselfconsistent.m	(revision 14538)
@@ -80,4 +80,8 @@
 		numanalyses=1; 
 		analyses=[BedSlopeAnalysisEnum()];
+	
+	case GiaSolutionEnum(),
+		numanalyses=1; 
+		analyses=[GiaAnalysisEnum()];
 
 	case TransientSolutionEnum(),
Index: /issm/trunk-jpl/src/m/enum/EnumDefinitions.py
===================================================================
--- /issm/trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 14537)
+++ /issm/trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 14538)
@@ -2089,4 +2089,14 @@
 	return StringToEnum('TransientIsthermal')[0]
 
+def TransientIsgiaEnum():
+	"""
+	TRANSIENTISGIAENUM - Enum of TransientIsgia
+
+	   Usage:
+	      macro=TransientIsgiaEnum()
+	"""
+
+	return StringToEnum('TransientIsgia')[0]
+
 def TransientNumRequestedOutputsEnum():
 	"""
@@ -2489,4 +2499,14 @@
 	return StringToEnum('GiaSolution')[0]
 
+def GiaAnalysisEnum():
+	"""
+	GIAANALYSISENUM - Enum of GiaAnalysis
+
+	   Usage:
+	      macro=GiaAnalysisEnum()
+	"""
+
+	return StringToEnum('GiaAnalysis')[0]
+
 def ApproximationEnum():
 	"""
@@ -4169,4 +4189,14 @@
 	return StringToEnum('StressTensorzz')[0]
 
+def GiaWEnum():
+	"""
+	GIAWENUM - Enum of GiaW
+
+	   Usage:
+	      macro=GiaWEnum()
+	"""
+
+	return StringToEnum('GiaW')[0]
+
 def P0Enum():
 	"""
@@ -5047,4 +5077,4 @@
 	"""
 
-	return 503
-
+	return 506
+
Index: /issm/trunk-jpl/src/m/enum/GiaAnalysisEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/GiaAnalysisEnum.m	(revision 14538)
+++ /issm/trunk-jpl/src/m/enum/GiaAnalysisEnum.m	(revision 14538)
@@ -0,0 +1,11 @@
+function macro=GiaAnalysisEnum()
+%GIAANALYSISENUM - Enum of GiaAnalysis
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
+%            Please read src/c/EnumDefinitions/README for more information
+%
+%   Usage:
+%      macro=GiaAnalysisEnum()
+
+macro=StringToEnum('GiaAnalysis');
Index: /issm/trunk-jpl/src/m/enum/GiaWEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/GiaWEnum.m	(revision 14538)
+++ /issm/trunk-jpl/src/m/enum/GiaWEnum.m	(revision 14538)
@@ -0,0 +1,11 @@
+function macro=GiaWEnum()
+%GIAWENUM - Enum of GiaW
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
+%            Please read src/c/EnumDefinitions/README for more information
+%
+%   Usage:
+%      macro=GiaWEnum()
+
+macro=StringToEnum('GiaW');
Index: /issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 14537)
+++ /issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 14538)
@@ -9,3 +9,3 @@
 %      macro=MaximumNumberOfEnums()
 
-macro=503;
+macro=506;
Index: /issm/trunk-jpl/src/m/enum/TransientIsgiaEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/TransientIsgiaEnum.m	(revision 14538)
+++ /issm/trunk-jpl/src/m/enum/TransientIsgiaEnum.m	(revision 14538)
@@ -0,0 +1,11 @@
+function macro=TransientIsgiaEnum()
+%TRANSIENTISGIAENUM - Enum of TransientIsgia
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
+%            Please read src/c/EnumDefinitions/README for more information
+%
+%   Usage:
+%      macro=TransientIsgiaEnum()
+
+macro=StringToEnum('TransientIsgia');
Index: /issm/trunk-jpl/src/m/solve/process_solve_options.m
===================================================================
--- /issm/trunk-jpl/src/m/solve/process_solve_options.m	(revision 14537)
+++ /issm/trunk-jpl/src/m/solve/process_solve_options.m	(revision 14538)
@@ -12,5 +12,5 @@
 		SteadystateSolutionEnum(),TransientSolutionEnum(),EnthalpySolutionEnum(),...
 		BalancethicknessSolutionEnum(),WeakBalancethicknessSolutionEnum(),BedSlopeSolutionEnum(),...
-		SurfaceSlopeSolutionEnum(),HydrologySolutionEnum(),FlaimSolutionEnum()]),
+		SurfaceSlopeSolutionEnum(),HydrologySolutionEnum(),FlaimSolutionEnum(),GiaSolutionEnum()]),
 	error(['process_solve_options error message: solution_type ' EnumToString(solution_type) ' not supported yet!']);
 end
Index: /issm/trunk-jpl/test/NightlyRun/test330.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test330.m	(revision 14537)
+++ /issm/trunk-jpl/test/NightlyRun/test330.m	(revision 14538)
@@ -4,4 +4,5 @@
 md=parameterize(md,'../Par/SquareShelfConstrained.par');
 md=setflowequation(md,'macayeal','all');
+md.verbose=verbose('solution',true,'convergence',true,'mprocessor',true);
 md.cluster=generic('name',oshostname(),'np',3);
 md=solve(md,GiaSolutionEnum());
