Index: /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16020)
+++ /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16021)
@@ -8021,7 +8021,10 @@
 	int         i,j;
 	int         analysis_type,migration_style;
+	int         point1;
 	IssmDouble  xyz_list[NUMVERTICES][3];
 	IssmDouble  xyz_list_tria[NUMVERTICES2D][3];
 	IssmDouble  alpha2,Jdet;
+	IssmDouble fraction1,fraction2;
+	IssmDouble gllevelset;
 	IssmDouble  phi=1.0;
 	IssmDouble  DL_scalar;
@@ -8050,4 +8053,5 @@
 	Input* vy_input=inputs->GetInput(VyEnum);           _assert_(vy_input);
 	Input* vz_input=inputs->GetInput(VzEnum);           _assert_(vz_input);
+	Input* gllevelset_input=NULL;
 
 	/*build friction object, used later on: */
@@ -8056,7 +8060,15 @@
 	/*Recover portion of element that is grounded*/
 	if(migration_style==SubelementMigrationEnum) phi=this->GetGroundedPortion(&xyz_list_tria[0][0]);
+	if(migration_style==SubelementMigration2Enum){
+		gllevelset_input=inputs->GetInput(MaskGroundediceLevelsetEnum); _assert_(gllevelset_input);
+		//this->GetGroundedPart(&point1,&fraction1,&fraction2,&mainlyfloating);
+		//gauss=new GaussPenta(point1,fraction1,fraction2,mainlyfloating,2);
+		gauss=new GaussPenta(0,1,2,2);
+	}
+	else{
+		gauss=new GaussPenta(0,1,2,2);
+	}
 
 	/* Start  looping on the number of gaussian points: */
-	gauss=new GaussPenta(0,1,2,2);
 	for(int ig=gauss->begin();ig<gauss->end();ig++){
 
@@ -8068,4 +8080,8 @@
 		friction->GetAlpha2(&alpha2, gauss,VxEnum,VyEnum,VzEnum); 
 		if(migration_style==SubelementMigrationEnum) alpha2=phi*alpha2;
+		if(migration_style==SubelementMigration2Enum){
+			gllevelset_input->GetInputValue(&gllevelset, gauss);
+			if(gllevelset<0) alpha2=0;
+		}
 
 		DL_scalar=alpha2*gauss->weight*Jdet;
@@ -11227,5 +11243,5 @@
 			if(bed_hydro>r[i]){
 				/*Unground only if the element is connected to the ice shelf*/
-				if(migration_style==AgressiveMigrationEnum || migration_style==SubelementMigrationEnum){
+				if(migration_style==AgressiveMigrationEnum || migration_style==SubelementMigrationEnum || migration_style==SubelementMigration2Enum){
 					s[i]        = (1-density)*h[i];
 					b[i]        = -density*h[i];
@@ -11260,5 +11276,5 @@
 
 	/*SubelementMigrationEnum: if one grounded, all grounded*/
-	if(migration_style==SubelementMigrationEnum){
+	if(migration_style==SubelementMigrationEnum || migration_style==SubelementMigration2Enum){
 		for(i=0;i<NUMVERTICES;i++){
 			if(phi[i]>0.){
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16020)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16021)
@@ -3047,6 +3047,5 @@
 	int        analysis_type,migration_style;
 	int        point1;
-	IssmDouble alpha2;
-	IssmDouble Jdet;
+	IssmDouble alpha2,Jdet;
 	IssmDouble fraction1,fraction2;
 	IssmDouble phi=1.0;
