Index: /issm/trunk-jpl/src/c/Makefile.am
===================================================================
--- /issm/trunk-jpl/src/c/Makefile.am	(revision 14587)
+++ /issm/trunk-jpl/src/c/Makefile.am	(revision 14588)
@@ -491,5 +491,10 @@
 #}}}
 #Gia sources  {{{
-gia_sources =  ./solutions/gia_core.cpp
+gia_sources =  ./solutions/gia_core.cpp\
+			   ./modules/ModelProcessorx/Gia/UpdateElementsGia.cpp\
+			   ./modules/ModelProcessorx/Gia/CreateNodesGia.cpp \
+			   ./modules/ModelProcessorx/Gia/CreateConstraintsGia.cpp\
+			   ./modules/ModelProcessorx/Gia/CreateLoadsGia.cpp
+
 #}}}
 #Groundingline sources  {{{
Index: /issm/trunk-jpl/src/c/classes/objects/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 14587)
+++ /issm/trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 14588)
@@ -1734,4 +1734,9 @@
 		case BalancethicknessAnalysisEnum:
 			InputUpdateFromSolutionOneDof(solution,ThicknessEnum);
+			break;
+		#endif
+		#ifdef _HAVE_GIA_
+		case GiaAnalysisEnum:
+			InputUpdateFromSolutionOneDof(solution,GiaWEnum);
 			break;
 		#endif
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 14587)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 14588)
@@ -96,4 +96,13 @@
 		#endif
 
+		#ifdef _HAVE_GIA_
+		case GiaAnalysisEnum:
+			CreateNodesGia(pnodes, iomodel);
+			CreateConstraintsGia(pconstraints,iomodel);
+			CreateLoadsGia(ploads,iomodel);
+			UpdateElementsGia(elements,iomodel,analysis_counter,analysis_type);
+			break;
+		#endif
+
 		#ifdef _HAVE_SLOPE_
 		case BedSlopeAnalysisEnum:
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp	(revision 14587)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp	(revision 14588)
@@ -89,4 +89,7 @@
 		numdofs=1;
 	}
+	else if (analysis_type==GiaAnalysisEnum){
+		numdofs=1;
+	}
 	else if (analysis_type==BalancethicknessAnalysisEnum){
 		numdofs=1;
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Gia/CMakeLists.txt
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Gia/CMakeLists.txt	(revision 14588)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Gia/CMakeLists.txt	(revision 14588)
@@ -0,0 +1,8 @@
+# Subdirectories {{{
+# }}}
+# SLOPE_SOURCES {{{
+set(SLOPE_SOURCES $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/Gia/CreateConstraintsGia.cpp
+                        $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/Gia/CreateLoadsGia.cpp
+                        $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/Gia/CreateNodesGia.cpp
+                     $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/Gia/UpdateElementsGia.cpp PARENT_SCOPE)
+# }}}
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateConstraintsGia.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateConstraintsGia.cpp	(revision 14588)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateConstraintsGia.cpp	(revision 14588)
@@ -0,0 +1,23 @@
+/*
+ * CreateConstraintsGia.c:
+ */
+
+#include "../../../Container/Container.h"
+#include "../../../io/io.h"
+#include "../../../toolkits/toolkits.h"
+#include "../../../EnumDefinitions/EnumDefinitions.h"
+#include "../../../classes/objects/objects.h"
+#include "../../../shared/shared.h"
+#include "../ModelProcessorx.h"
+
+void	CreateConstraintsGia(Constraints** pconstraints, IoModel* iomodel){
+
+	/*Recover pointer: */
+	Constraints* constraints=*pconstraints;
+
+	/*Create constraints if they do not exist yet*/
+	if(!constraints) constraints = new Constraints();
+
+	/*Assign output pointer: */
+	*pconstraints=constraints;
+}
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateLoadsGia.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateLoadsGia.cpp	(revision 14588)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateLoadsGia.cpp	(revision 14588)
@@ -0,0 +1,23 @@
+/*! \file CreateLoadsGia.c:
+ */
+
+#include "../../../Container/Container.h"
+#include "../../../io/io.h"
+#include "../../../toolkits/toolkits.h"
+#include "../../../EnumDefinitions/EnumDefinitions.h"
+#include "../../../classes/objects/objects.h"
+#include "../../../shared/shared.h"
+#include "../../../include/include.h"
+#include "../ModelProcessorx.h"
+
+void	CreateLoadsGia(Loads** ploads, IoModel* iomodel){
+
+	/*Recover pointer: */
+	Loads* loads=*ploads;
+
+	/*Create loads if they do not exist yet*/
+	if(!loads) loads = new Loads();
+
+	/*Assign output pointer: */
+	*ploads=loads;
+}
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateNodesGia.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateNodesGia.cpp	(revision 14588)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateNodesGia.cpp	(revision 14588)
@@ -0,0 +1,52 @@
+/*
+ * CreateNodesGia.c:
+ */
+
+#include "../../../Container/Container.h"
+#include "../../../io/io.h"
+#include "../../../toolkits/toolkits.h"
+#include "../../../EnumDefinitions/EnumDefinitions.h"
+#include "../../../classes/objects/objects.h"
+#include "../../../shared/shared.h"
+#include "../../../include/include.h"
+#include "../../MeshPartitionx/MeshPartitionx.h"
+#include "../ModelProcessorx.h"
+
+void	CreateNodesGia(Nodes** pnodes, IoModel* iomodel){
+
+	/*Intermediary*/
+	int i;
+	bool continuous_galerkin=true;
+
+	/*Fetch parameters: */
+	int    numberofvertices;
+	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+
+	/*Recover pointer: */
+	Nodes* nodes=*pnodes;
+
+	/*Create nodes if they do not exist yet*/
+	if(!nodes) nodes = new Nodes();
+
+	/*Continuous Galerkin partition of nodes: */
+	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
+
+	/*First fetch data: */
+	iomodel->FetchData(1,MaskVertexonwaterEnum);
+
+	/*First fetch data: */
+	for (i=0;i<numberofvertices;i++){
+		if(iomodel->my_vertices[i]){
+
+			/*Add node to nodes dataset: */
+			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i+1,i,iomodel,GiaAnalysisEnum));
+
+		}
+	}
+	
+	/*Clean fetched data: */
+	iomodel->DeleteData(1,MaskVertexonwaterEnum);
+
+	/*Assign output pointer: */
+	*pnodes=nodes;
+}
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Gia/UpdateElementsGia.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Gia/UpdateElementsGia.cpp	(revision 14588)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Gia/UpdateElementsGia.cpp	(revision 14588)
@@ -0,0 +1,41 @@
+/*
+ * UpdateElementsGia:
+ */
+
+#include "../../../Container/Container.h"
+#include "../../../modules/modules.h"
+#include "../../../toolkits/toolkits.h"
+#include "../../../io/io.h"
+#include "../../../EnumDefinitions/EnumDefinitions.h"
+#include "../../../classes/objects/objects.h"
+#include "../../../shared/shared.h"
+#include "../../MeshPartitionx/MeshPartitionx.h"
+#include "../../../include/include.h"
+#include "../ModelProcessorx.h"
+
+void	UpdateElementsGia(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+
+	int    dim;
+	int    numberofelements;
+
+	/*Fetch data needed: */
+	iomodel->Constant(&dim,MeshDimensionEnum);
+	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+	iomodel->FetchData(1,MeshElementsEnum);
+
+	/*Update elements: */
+	int counter=0;
+	for(int i=0;i<numberofelements;i++){
+		if(iomodel->my_elements[i]){
+			Element* element=(Element*)elements->GetObjectByOffset(counter);
+			element->Update(i,iomodel,analysis_counter,analysis_type); //we need i to index into elements.
+			counter++;
+		}
+	}
+
+	iomodel->FetchDataToInput(elements,SurfaceEnum);
+	iomodel->FetchDataToInput(elements,BedEnum);
+
+	/*Free data: */
+	iomodel->DeleteData(1,MeshElementsEnum);
+}
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 14587)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 14588)
@@ -46,4 +46,12 @@
 void  CreateLoadsDiagnosticHutter(Loads** ploads, IoModel* iomodel);
 void	UpdateElementsDiagnosticHutter(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+
+#ifdef _HAVE_GIA_
+/*gia*/
+void	CreateNodesGia(Nodes** pnodes,IoModel* iomodel);
+void	CreateConstraintsGia(Constraints** pconstraints,IoModel* iomodel);
+void    CreateLoadsGia(Loads** ploads, IoModel* iomodel);
+void	UpdateElementsGia(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+#endif
 
 /*bed slope*/
Index: /issm/trunk-jpl/src/c/solutions/gia_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutions/gia_core.cpp	(revision 14587)
+++ /issm/trunk-jpl/src/c/solutions/gia_core.cpp	(revision 14588)
@@ -12,16 +12,29 @@
 
 void gia_core(FemModel* femmodel){
+	
+	Vector<IssmDouble>*  wg  = NULL;
 
 	/*parameters: */
 	bool save_results;
+	int  gsize;
+	int  configuration_type;
 
 	/*Recover some parameters: */
 	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
-
+	femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+	
 	if(VerboseSolution()) _pprintLine_("   computing GIA");
 
 	/*Call on core computations: */
 	femmodel->SetCurrentConfiguration(GiaAnalysisEnum);
-	solver_linear(femmodel);
+
+	/*Figure out size of g-set deflection vector and allocate solution vector: */
+	gsize      = femmodel->nodes->NumberOfDofs(configuration_type,GsetEnum);
+	wg = new Vector<IssmDouble>(gsize);
+
+	/*call the main module: */
+	//Deflection();
+	
+	InputUpdateFromSolutionx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,wg); 
 
 	if(save_results){
Index: /issm/trunk-jpl/test/NightlyRun/test330.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test330.m	(revision 14587)
+++ /issm/trunk-jpl/test/NightlyRun/test330.m	(revision 14588)
@@ -4,11 +4,11 @@
 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.verbose=verbose('solution',true,'convergence',true,'mprocessor',true,'module',true);
+md.cluster=generic('name',oshostname(),'np',1);
 md=solve(md,GiaSolutionEnum());
 
 %Fields and tolerances to track changes
-field_names     ={'W'};
+field_names     ={'GiaW'};
 field_tolerances={1e-13};
 field_values={...
-	(md.results.DiagnosticSolution.W)};
+	(md.results.GiaSolution.GiaW)};
