Index: /issm/trunk/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationxLocal.h
===================================================================
--- /issm/trunk/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationxLocal.h	(revision 10367)
+++ /issm/trunk/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationxLocal.h	(revision 10368)
@@ -12,6 +12,4 @@
 
 /* local prototypes: */
-double*    CreateElementTouchingIceShelf(Elements* elements,double* nodes_on_iceshelf);
-Vec        CreateNodesOnIceShelf(Nodes* nodes,Vertices* vertices,int analysis_type);
 double*    PotentialSheetUngrounding(Elements* elements,Vertices* vertices,Parameters* parameters);
 double*    PropagateShelfIntoConnexIceSheet(Elements* elements,Nodes* nodes,Vertices* vertices,Parameters* parameters,double* vertices_potentially_ungrounding);
Index: /issm/trunk/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationxUtils.cpp
===================================================================
--- /issm/trunk/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationxUtils.cpp	(revision 10367)
+++ /issm/trunk/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationxUtils.cpp	(revision 10368)
@@ -11,62 +11,4 @@
 #include "../../EnumDefinitions/EnumDefinitions.h"
 
-/*FUNCTION CreateElementTouchingIceShelf {{{1*/
-double*    CreateElementTouchingIceShelf(Elements* elements,double* nodes_on_iceshelf){ 
-
-	int      i;
-	double  *element_touching_iceshelf     = NULL;
-	Element *element                       = NULL;
-	Vec      vec_element_touching_iceshelf = NULL;
-
-	/*Create  vector holding  all the elements IsFloating flags: */
-	vec_element_touching_iceshelf=NewVec(elements->NumberOfElements(),true);
-
-	/*Loop through elements, and fill vec_element_touching_iceshelf: */
-	for(i=0;i<elements->Size();i++){
-		element=(Element*)elements->GetObjectByOffset(i);
-		VecSetValue(vec_element_touching_iceshelf,element->Sid(),element->IsNodeOnShelfFromFlags(nodes_on_iceshelf)?1.0:0.0,INSERT_VALUES);
-	}
-
-	/*Assemble vector: */
-	VecAssemblyBegin(vec_element_touching_iceshelf);
-	VecAssemblyEnd(vec_element_touching_iceshelf);
-
-	/*Serialize vector: */
-	VecToMPISerial(&element_touching_iceshelf,vec_element_touching_iceshelf);
-
-	/*free ressouces: */
-	VecFree(&vec_element_touching_iceshelf);
-
-	return element_touching_iceshelf;
-}
-/*}}}*/
-/*FUNCTION CreateNodesOnIceShelf {{{1*/
-Vec CreateNodesOnIceShelf(Nodes* nodes,Vertices* vertices,int configuration_type){ 
-
-	int     i,numberofvertices;
-	Vec     nodes_on_iceshelf = NULL;
-	Node*   node              = NULL;
-
-	/*First, initialize nodes_on_iceshelf, which will track which nodes have changed status: */
-	numberofvertices=vertices->NumberOfVertices();
-	nodes_on_iceshelf=NewVec(numberofvertices);
-
-	/*Loop through nodes, and fill nodes_on_iceshelf: */
-	for(i=0;i<nodes->Size();i++){
-		node=(Node*)nodes->GetObjectByOffset(i);
-		if(node->InAnalysis(configuration_type)){
-			if(node->IsFloating()){
-				VecSetValue(nodes_on_iceshelf,node->Sid(),1.0,INSERT_VALUES);
-			}
-		}
-	}
-
-	/*Assemble vector: */
-	VecAssemblyBegin(nodes_on_iceshelf);
-	VecAssemblyEnd(nodes_on_iceshelf);
-
-	return nodes_on_iceshelf;
-}
-/*}}}*/
 /*FUNCTION PotentialSheetUngrounding {{{1*/
 double*    PotentialSheetUngrounding(Elements* elements,Vertices* vertices,Parameters* parameters){ 
@@ -103,15 +45,34 @@
 
 	int      i,analysis_type;
+	int      numberofvertices;
 	int      nflipped,local_nflipped;
-	double*  nodes_on_iceshelf          = NULL;
-	double*  elements_touching_iceshelf = NULL;
-	Vec      vec_nodes_on_iceshelf      = NULL;
-	Element* element                    = NULL;
+	double*  nodes_on_iceshelf             = NULL;
+	double*  elements_touching_iceshelf    = NULL;
+	Vec      vec_element_touching_iceshelf = NULL;
+	Vec      vec_nodes_on_iceshelf         = NULL;
+	Node*    node                          = NULL;
+	Element* element                       = NULL;
+
 
 	/*recover parameters: */
 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+	numberofvertices=vertices->NumberOfVertices();
 
-	/*recover vec_nodes_on_iceshelf and serialize: */
-	vec_nodes_on_iceshelf=CreateNodesOnIceShelf(nodes,vertices,analysis_type);
+	/*recover vec_nodes_on_iceshelf*/
+	vec_nodes_on_iceshelf=NewVec(numberofvertices);
+
+	/*Loop through nodes, and fill nodes_on_iceshelf: */
+	for(i=0;i<nodes->Size();i++){
+		node=(Node*)nodes->GetObjectByOffset(i);
+		if(node->InAnalysis(analysis_type)){
+			if(node->IsFloating()){
+				VecSetValue(vec_nodes_on_iceshelf,node->Sid(),1.0,INSERT_VALUES);
+			}
+		}
+	}
+
+	/*Assemble vector and serialize: */
+	VecAssemblyBegin(vec_nodes_on_iceshelf);
+	VecAssemblyEnd(vec_nodes_on_iceshelf);
 	VecToMPISerial(&nodes_on_iceshelf,vec_nodes_on_iceshelf);
 
@@ -119,6 +80,17 @@
 	while(nflipped){
 		
-		/*get a list of potential elements that have nodes on ice shelf: */
-		elements_touching_iceshelf=CreateElementTouchingIceShelf(elements,nodes_on_iceshelf);
+		/*Vector of size number of elements*/
+		vec_element_touching_iceshelf=NewVec(elements->NumberOfElements(),true);
+
+		/*Figure out if any of the nodes of the element will be floating -> elements neighbouting the floating ice*/
+		for(i=0;i<elements->Size();i++){
+			element=(Element*)elements->GetObjectByOffset(i);
+			VecSetValue(vec_element_touching_iceshelf,element->Sid(),element->IsNodeOnShelfFromFlags(nodes_on_iceshelf)?1.0:0.0,INSERT_VALUES);
+		}
+
+		/*Assemble vector and serialize: */
+		VecAssemblyBegin(vec_element_touching_iceshelf);
+		VecAssemblyEnd(vec_element_touching_iceshelf);
+		VecToMPISerial(&elements_touching_iceshelf,vec_element_touching_iceshelf);
 
 		/*Go through elements_touching_iceshelf, and flag their nodes that can unground inside potential_sheet_ungrounding*/
@@ -139,4 +111,5 @@
 
 		/*Assemble and serialize:*/
+		VecFree(&vec_element_touching_iceshelf);
 		VecAssemblyBegin(vec_nodes_on_iceshelf);
 		VecAssemblyEnd(vec_nodes_on_iceshelf);
Index: /issm/trunk/src/c/objects/Elements/Tria.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 10367)
+++ /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 10368)
@@ -2529,7 +2529,6 @@
 /*}}}*/
 /*FUNCTION Tria::UpdatePotentialSheetUngrounding{{{1*/
-int Tria::UpdatePotentialSheetUngrounding(double* potential_sheet_ungrounding,Vec vec_nodes_on_iceshelf,double* nodes_on_iceshelf){
-
-	/*intermediary: */
+int Tria::UpdatePotentialSheetUngrounding(double* vertices_potentially_ungrounding,Vec vec_nodes_on_iceshelf,double* nodes_on_iceshelf){
+
 	int i;
 	int nflipped=0;
@@ -2537,9 +2536,11 @@
 	/*Ok, go through our 3 nodes, and whoever is on the potential_sheet_ungrounding, ends up in nodes_on_iceshelf: */
 	for(i=0;i<3;i++){
-		if (potential_sheet_ungrounding[nodes[i]->Sid()]){
+		if (vertices_potentially_ungrounding[nodes[i]->Sid()]){
 			VecSetValue(vec_nodes_on_iceshelf,nodes[i]->Sid(),1,INSERT_VALUES);
 		
-			/*Figure out if we flipped: */
-			if (potential_sheet_ungrounding[nodes[i]->Sid()] != nodes_on_iceshelf[nodes[i]->Sid()])nflipped++;
+			/*If node was not on ice shelf, we flipped*/
+			if(nodes_on_iceshelf[nodes[i]->Sid()]==0){
+				nflipped++;
+			}
 		}
 	}
Index: /issm/trunk/src/c/objects/Elements/Tria.h
===================================================================
--- /issm/trunk/src/c/objects/Elements/Tria.h	(revision 10367)
+++ /issm/trunk/src/c/objects/Elements/Tria.h	(revision 10368)
@@ -114,5 +114,5 @@
 		void   Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type);
 		int    UpdateShelfStatus(Vec new_shelf_nodes);
-		int    UpdatePotentialSheetUngrounding(double* potential_sheet_ungrounding,Vec vec_nodes_on_iceshelf,double* nodes_on_iceshelf);
+		int    UpdatePotentialSheetUngrounding(double* vertices_potentially_ungrounding,Vec vec_nodes_on_iceshelf,double* nodes_on_iceshelf);
 		void   UpdateShelfFlags(double* new_shelf_nodes);
 		double TimeAdapt();
