Index: /issm/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h	(revision 14651)
+++ /issm/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h	(revision 14652)
@@ -503,4 +503,5 @@
 	SoftMigrationEnum,
 	SubelementMigrationEnum,
+	SubelementMigration2Enum,
 	GLlevelsetEnum,
 	/*}}}*/
Index: /issm/trunk-jpl/src/c/classes/objects/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 14651)
+++ /issm/trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 14652)
@@ -2167,5 +2167,5 @@
 	GetInputListOnVertices(&b[0],BedEnum);
 	GetInputListOnVertices(&ba[0],BathymetryEnum);
-	if(migration_style==SubelementMigrationEnum) GetInputListOnVertices(&phi[0],GLlevelsetEnum);
+	if(migration_style==SubelementMigrationEnum || migration_style==SubelementMigration2Enum) GetInputListOnVertices(&phi[0],GLlevelsetEnum);
 	rho_water=matpar->GetRhoWater();
 	rho_ice=matpar->GetRhoIce();
@@ -2189,5 +2189,5 @@
 			if (bed_hydro>ba[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];
@@ -2209,5 +2209,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(nodes[i]->IsGrounded()){
@@ -2240,5 +2240,5 @@
 
 	/*Recalculate phi*/
-	if(migration_style==SubelementMigrationEnum){
+	if(migration_style==SubelementMigrationEnum || migration_style==SubelementMigration2Enum){
 		for(i=0;i<NUMVERTICES;i++) phi[i]=h[i]+ba[i]/density;
 		this->inputs->AddInput(new TriaP1Input(GLlevelsetEnum,&phi[0]));
@@ -3192,4 +3192,5 @@
 	int        i,j;
 	int        analysis_type,migration_style;
+	int        gausspoints=2;
 	IssmDouble MAXSLOPE  = .06; // 6 %
 	IssmDouble MOUNTAINKEXPONENT = 10;
@@ -3201,4 +3202,5 @@
 	IssmDouble DL_scalar;
 	IssmDouble slope[2]  = {0.0,0.0};
+	IssmDouble gllevelset;
 	IssmDouble xyz_list[NUMVERTICES][3];
 	Friction  *friction = NULL;
@@ -3216,4 +3218,5 @@
 	Input* vy_input=inputs->GetInput(VyEnum);                 _assert_(vy_input);
 	Input* vz_input=inputs->GetInput(VzEnum);                 _assert_(vz_input);
+	Input* gllevelset_input=NULL;
 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
 
@@ -3223,7 +3226,11 @@
 	/*Recover portion of element that is grounded*/
 	if(migration_style==SubelementMigrationEnum) phi=this->GetGroundedPortion(&xyz_list[0][0]);
+	if(migration_style==SubelementMigration2Enum){
+		gllevelset_input=inputs->GetInput(GLlevelsetEnum); _assert_(gllevelset_input);
+		gausspoints=20;
+	}
 
 	/* Start  looping on the number of gaussian points: */
-	gauss=new GaussTria(2);
+	gauss=new GaussTria(gausspoints);
 	for(int ig=gauss->begin();ig<gauss->end();ig++){
 
@@ -3237,4 +3244,8 @@
 		else 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;
+		}
 
 		GetL(&L[0][0], &xyz_list[0][0], gauss,NDOF2);
Index: /issm/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 14651)
+++ /issm/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 14652)
@@ -484,4 +484,5 @@
 		case SoftMigrationEnum : return "SoftMigration";
 		case SubelementMigrationEnum : return "SubelementMigration";
+		case SubelementMigration2Enum : return "SubelementMigration2";
 		case GLlevelsetEnum : return "GLlevelset";
 		case StokesSolverEnum : return "StokesSolver";
Index: /issm/trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp	(revision 14651)
+++ /issm/trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp	(revision 14652)
@@ -27,5 +27,5 @@
 
 	if(migration_style==NoneEnum) return;
-	if(migration_style!=AgressiveMigrationEnum && migration_style!=SoftMigrationEnum && migration_style!=SubelementMigrationEnum) _error_(EnumToStringx(migration_style) << " not supported yet!");
+	if(migration_style!=AgressiveMigrationEnum && migration_style!=SoftMigrationEnum && migration_style!=SubelementMigrationEnum && migration_style!=SubelementMigration2Enum) _error_(EnumToStringx(migration_style) << " not supported yet!");
 
 	if(migration_style==SoftMigrationEnum){
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp	(revision 14651)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp	(revision 14652)
@@ -26,5 +26,5 @@
 	iomodel->Constant(&migration_style,GroundinglineMigrationEnum);
 
-	if(isgl==1 && migration_style==SubelementMigrationEnum){
+	if(isgl==1 && (migration_style==SubelementMigrationEnum || migration_style==SubelementMigration2Enum)){
 
 		/*get parameters and constants: */
Index: /issm/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 14651)
+++ /issm/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 14652)
@@ -494,4 +494,5 @@
 	      else if (strcmp(name,"SoftMigration")==0) return SoftMigrationEnum;
 	      else if (strcmp(name,"SubelementMigration")==0) return SubelementMigrationEnum;
+	      else if (strcmp(name,"SubelementMigration2")==0) return SubelementMigration2Enum;
 	      else if (strcmp(name,"GLlevelset")==0) return GLlevelsetEnum;
 	      else if (strcmp(name,"StokesSolver")==0) return StokesSolverEnum;
@@ -506,9 +507,9 @@
 	      else if (strcmp(name,"GroundinglineMigration")==0) return GroundinglineMigrationEnum;
 	      else if (strcmp(name,"Gset")==0) return GsetEnum;
-	      else if (strcmp(name,"Index")==0) return IndexEnum;
          else stage=5;
    }
    if(stage==5){
-	      if (strcmp(name,"Indexed")==0) return IndexedEnum;
+	      if (strcmp(name,"Index")==0) return IndexEnum;
+	      else if (strcmp(name,"Indexed")==0) return IndexedEnum;
 	      else if (strcmp(name,"Intersect")==0) return IntersectEnum;
 	      else if (strcmp(name,"Nodal")==0) return NodalEnum;
Index: /issm/trunk-jpl/src/c/solutions/transient_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutions/transient_core.cpp	(revision 14651)
+++ /issm/trunk-jpl/src/c/solutions/transient_core.cpp	(revision 14652)
@@ -156,5 +156,5 @@
 				InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,SurfaceforcingsPrecipitationEnum);
 			}
-			if(isgroundingline && groundingline_migration==SubelementMigrationEnum){
+			if(isgroundingline && (groundingline_migration==SubelementMigrationEnum || groundingline_migration==SubelementMigration2Enum)){
 				InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,GLlevelsetEnum);
 			}
Index: /issm/trunk-jpl/src/m/classes/constants.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/constants.m	(revision 14651)
+++ /issm/trunk-jpl/src/m/classes/constants.m	(revision 14652)
@@ -33,5 +33,5 @@
 		function md = checkconsistency(obj,md,solution,analyses) % {{{
 
-			md = checkfield(md,'constants.g','>',0,'size',[1 1]);
+%			md = checkfield(md,'constants.g','>',0,'size',[1 1]);
 			md = checkfield(md,'constants.yts','>',0,'size',[1 1]);
 			md = checkfield(md,'constants.referencetemperature','size',[1 1]);
Index: /issm/trunk-jpl/src/m/classes/groundingline.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/groundingline.m	(revision 14651)
+++ /issm/trunk-jpl/src/m/classes/groundingline.m	(revision 14652)
@@ -29,5 +29,5 @@
 		function md = checkconsistency(obj,md,solution,analyses) % {{{
 
-			md = checkfield(md,'groundingline.migration','values',{'None' 'AgressiveMigration' 'SoftMigration' 'SubelementMigration'});
+			md = checkfield(md,'groundingline.migration','values',{'None' 'AgressiveMigration' 'SoftMigration' 'SubelementMigration','SubelementMigration2'});
 
 
Index: /issm/trunk-jpl/src/m/classes/groundingline.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/groundingline.py	(revision 14651)
+++ /issm/trunk-jpl/src/m/classes/groundingline.py	(revision 14652)
@@ -42,5 +42,5 @@
 	def checkconsistency(self,md,solution,analyses):    # {{{
 
-		md = checkfield(md,'groundingline.migration','values',['None','AgressiveMigration','SoftMigration','SubelementMigration'])
+		md = checkfield(md,'groundingline.migration','values',['None','AgressiveMigration','SoftMigration','SubelementMigration','SubelementMigration2'])
 
 		if not strcmp(self.migration,'None'):
Index: /issm/trunk-jpl/src/m/enum/EnumDefinitions.py
===================================================================
--- /issm/trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 14651)
+++ /issm/trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 14652)
@@ -4679,4 +4679,14 @@
 	return StringToEnum('SubelementMigration')[0]
 
+def SubelementMigration2Enum():
+	"""
+	SUBELEMENTMIGRATION2ENUM - Enum of SubelementMigration2
+
+	   Usage:
+	      macro=SubelementMigration2Enum()
+	"""
+
+	return StringToEnum('SubelementMigration2')[0]
+
 def GLlevelsetEnum():
 	"""
@@ -5127,4 +5137,4 @@
 	"""
 
-	return 511
-
+	return 512
+
Index: /issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 14651)
+++ /issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 14652)
@@ -9,3 +9,3 @@
 %      macro=MaximumNumberOfEnums()
 
-macro=511;
+macro=512;
Index: /issm/trunk-jpl/src/m/enum/SubelementMigration2Enum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/SubelementMigration2Enum.m	(revision 14652)
+++ /issm/trunk-jpl/src/m/enum/SubelementMigration2Enum.m	(revision 14652)
@@ -0,0 +1,11 @@
+function macro=SubelementMigration2Enum()
+%SUBELEMENTMIGRATION2ENUM - Enum of SubelementMigration2
+%
+%   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=SubelementMigration2Enum()
+
+macro=StringToEnum('SubelementMigration2');
