Index: /issm/trunk-jpl/src/c/classes/objects/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 14371)
+++ /issm/trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 14372)
@@ -2192,15 +2192,17 @@
 	}
 
-	/*If at least one vertex is now floating, the element is now floating*/
-	for(i=0;i<NUMVERTICES;i++){
-		if(migration_style==SubelementMigrationEnum){
+	/*SubelementMigrationEnum: if one grounded, all grounded*/
+	if(migration_style==SubelementMigrationEnum){
+		for(i=0;i<NUMVERTICES;i++){
 			if(nodes[i]->IsGrounded()){
 				elementonsheet=true;
 				break;
 			}
-			phi[i]=h[i]+ba[i]/density;
-			elementonshelf=!elementonsheet;
 		}
-		else{
+		elementonshelf=!elementonsheet;
+	}
+	else{
+		/*Otherwise: if one floating, all floating*/
+		for(i=0;i<NUMVERTICES;i++){
 			if(nodes[i]->IsFloating()){
 				elementonshelf=true;
@@ -2220,5 +2222,10 @@
 	this->inputs->AddInput(new TriaP1Input(SurfaceEnum,&s[0]));
 	this->inputs->AddInput(new TriaP1Input(BedEnum,&b[0]));
-	if(migration_style==SubelementMigrationEnum) this->inputs->AddInput(new TriaP1Input(GLlevelsetEnum,&phi[0]));
+
+	/*Recalculate phi*/
+	if(migration_style==SubelementMigrationEnum){
+		for(i=0;i<NUMVERTICES;i++) phi[i]=h[i]+ba[i]/density;
+		this->inputs->AddInput(new TriaP1Input(GLlevelsetEnum,&phi[0]));
+	}
 }
 /*}}}*/
