Index: /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 17433)
+++ /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 17434)
@@ -25,5 +25,5 @@
 void EnthalpyAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
 
-	bool dakota_analysis;
+	bool dakota_analysis, islevelset;
 	bool isenthalpy;
 
@@ -49,4 +49,5 @@
 
 	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
+	iomodel->Constant(&islevelset,TransientIslevelsetEnum);
 
 	iomodel->FetchDataToInput(elements,ThicknessEnum);
@@ -83,4 +84,8 @@
 		elements->InputDuplicate(VxMeshEnum,QmuVzMeshEnum);
 	}
+	if(islevelset){
+		iomodel->FetchDataToInput(elements,IceMaskNodeActivationEnum);
+		iomodel->FetchDataToInput(elements,MeshVertexonbedEnum); // required for updating active nodes
+	}
 
 	/*Free data: */
@@ -196,4 +201,7 @@
 ElementMatrix* EnthalpyAnalysis::CreateKMatrix(Element* element){/*{{{*/
 
+	/* Check if ice in element */
+	if(!element->IsIceInElement()) return NULL;
+
 	/*compute all stiffness matrices for this element*/
 	ElementMatrix* Ke1=CreateKMatrixVolume(element);
@@ -207,4 +215,7 @@
 }/*}}}*/
 ElementMatrix* EnthalpyAnalysis::CreateKMatrixVolume(Element* element){/*{{{*/
+
+	/* Check if ice in element */
+	if(!element->IsIceInElement()) return NULL;
 
 	/*Intermediaries */
@@ -339,4 +350,7 @@
 ElementMatrix* EnthalpyAnalysis::CreateKMatrixShelf(Element* element){/*{{{*/
 
+	/* Check if ice in element */
+	if(!element->IsIceInElement()) return NULL;
+
 	/*Initialize Element matrix and return if necessary*/
 	if(!element->IsOnBed() || !element->IsFloating()) return NULL;
@@ -388,4 +402,7 @@
 ElementVector* EnthalpyAnalysis::CreatePVector(Element* element){/*{{{*/
 
+	/* Check if ice in element */
+	if(!element->IsIceInElement()) return NULL;
+
 	/*compute all load vectors for this element*/
 	ElementVector* pe1=CreatePVectorVolume(element);
@@ -401,4 +418,7 @@
 }/*}}}*/
 ElementVector* EnthalpyAnalysis::CreatePVectorVolume(Element* element){/*{{{*/
+
+	/* Check if ice in element */
+	if(!element->IsIceInElement()) return NULL;
 
 	/*Intermediaries*/
@@ -515,4 +535,7 @@
 ElementVector* EnthalpyAnalysis::CreatePVectorSheet(Element* element){/*{{{*/
 
+	/* Check if ice in element */
+	if(!element->IsIceInElement()) return NULL;
+
 	/* implementation of the basal condition decision chart of Aschwanden 2012, Fig.5 */
 	if(!element->IsOnBed() || element->IsFloating()) return NULL;
@@ -601,4 +624,7 @@
 }/*}}}*/
 ElementVector* EnthalpyAnalysis::CreatePVectorShelf(Element* element){/*{{{*/
+
+	/* Check if ice in element */
+	if(!element->IsIceInElement()) return NULL;
 
 	/*Get basal element*/
@@ -819,5 +845,11 @@
 }/*}}}*/
 void EnthalpyAnalysis::UpdateConstraints(FemModel* femmodel){/*{{{*/
-	/*Default, do nothing*/
+
+	bool islevelset;
+	femmodel->parameters->FindParam(&islevelset,TransientIslevelsetEnum);
+	if(islevelset){
+		_printf0_("   Updating active and non-active nodes for ThermalAnalysis \n");
+		SetActiveNodesLSMx(femmodel);
+	}
 	return;
 }/*}}}*/
@@ -829,5 +861,5 @@
 	int solution_type, i;
 	bool computebasalmeltingrates=true;
-	bool isdrainage=true;
+	bool isdrainage=false;
 	bool updatebasalconstraints=true;
 
@@ -862,4 +894,10 @@
 	/*Calculate the basal melt rates of the enthalpy model after Aschwanden 2012*/
 	/* melting rate is positive when melting, negative when refreezing*/
+
+	/* Check if ice in element */
+	if(!element->IsIceInElement()) return;
+
+	/* Only compute melt rates at the base of grounded ice*/
+	if(!element->IsOnBed() || element->IsFloating()) return;
 
 	/* Intermediaries */
@@ -877,7 +915,4 @@
 	IssmDouble *xyz_list_base = NULL;
 	int        *pairindices   = NULL;
-
-	/* Only compute melt rates at the base of grounded ice*/
-	if(!element->IsOnBed() || element->IsFloating()) return;
 
 	/*Fetch parameters and inputs */
@@ -1006,4 +1041,7 @@
 void EnthalpyAnalysis::DrainWaterfractionIcecolumn(Element* element){/*{{{*/
 
+	/* Check if ice in element */
+	if(!element->IsIceInElement()) return;
+
 	/* Only drain waterfraction of ice column from element at base*/
 	if(!element->IsOnBed()) return; //FIXME: allow freeze on for floating elements
@@ -1043,4 +1081,7 @@
 }/*}}}*/
 void EnthalpyAnalysis::DrainWaterfraction(Element* element, IssmDouble* pdrainrate_element){/*{{{*/
+
+	/* Check if ice in element */
+	if(!element->IsIceInElement()) return;
 
 	/*Intermediaries*/
@@ -1102,4 +1143,10 @@
 void EnthalpyAnalysis::UpdateBasalConstraints(Element* element){/*{{{*/
 
+	/* Check if ice in element */
+	if(!element->IsIceInElement()) return;
+
+	/* Only update Constraints at the base of grounded ice*/
+	if(!(element->IsOnBed()) || element->IsFloating()) return;
+
 	/*Intermediary*/
 	bool        isdynamicbasalspc,setspc;
@@ -1110,7 +1157,4 @@
 	int        *indices = NULL, *indicesup = NULL;
 	Node*       node = NULL;
-	
-	/* Only update Constraints at the base of grounded ice*/
-	if(!(element->IsOnBed()) || element->IsFloating()) return;
 
 	/*Check wether dynamic basal boundary conditions are activated */
Index: /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 17433)
+++ /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 17434)
@@ -43,6 +43,7 @@
 	}
 
-	bool dakota_analysis;
+	bool dakota_analysis, islevelset;
 	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
+	iomodel->Constant(&islevelset,TransientIslevelsetEnum);
 
 	iomodel->FetchDataToInput(elements,ThicknessEnum);
@@ -75,4 +76,8 @@
 		elements->InputDuplicate(VxMeshEnum,QmuVzMeshEnum);
 	}
+	if(islevelset){
+		iomodel->FetchDataToInput(elements,IceMaskNodeActivationEnum);
+		iomodel->FetchDataToInput(elements,MeshVertexonbedEnum); // required for updating active nodes
+	}
 }/*}}}*/
 void ThermalAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
@@ -124,4 +129,7 @@
 ElementMatrix* ThermalAnalysis::CreateKMatrix(Element* element){/*{{{*/
 
+	/* Check if ice in element */
+	if(!element->IsIceInElement()) return NULL;
+
 	/*compute all stiffness matrices for this element*/
 	ElementMatrix* Ke1=CreateKMatrixVolume(element);
@@ -135,4 +143,7 @@
 }/*}}}*/
 ElementMatrix* ThermalAnalysis::CreateKMatrixVolume(Element* element){/*{{{*/
+
+	/* Check if ice in element */
+	if(!element->IsIceInElement()) return NULL;
 
 	/*Intermediaries */
@@ -266,4 +277,7 @@
 ElementMatrix* ThermalAnalysis::CreateKMatrixShelf(Element* element){/*{{{*/
 
+	/* Check if ice in element */
+	if(!element->IsIceInElement()) return NULL;
+
 	/*Initialize Element matrix and return if necessary*/
 	if(!element->IsOnBed() || !element->IsFloating()) return NULL;
@@ -316,4 +330,7 @@
 }/*}}}*/
 ElementVector* ThermalAnalysis::CreatePVector(Element* element){/*{{{*/
+	
+	/* Check if ice in element */
+	if(!element->IsIceInElement()) return NULL;
 
 	/*compute all load vectors for this element*/
@@ -330,4 +347,7 @@
 }/*}}}*/
 ElementVector* ThermalAnalysis::CreatePVectorVolume(Element* element){/*{{{*/
+
+	/* Check if ice in element */
+	if(!element->IsIceInElement()) return NULL;
 
 	/*Intermediaries*/
@@ -410,4 +430,7 @@
 ElementVector* ThermalAnalysis::CreatePVectorSheet(Element* element){/*{{{*/
 
+	/* Check if ice in element */
+	if(!element->IsIceInElement()) return NULL;
+
 	/* Geothermal flux on ice sheet base and basal friction */
 	if(!element->IsOnBed() || element->IsFloating()) return NULL;
@@ -468,4 +491,7 @@
 }/*}}}*/
 ElementVector* ThermalAnalysis::CreatePVectorShelf(Element* element){/*{{{*/
+
+	/* Check if ice in element */
+	if(!element->IsIceInElement()) return NULL;
 
 	IssmDouble  t_pmp,dt,Jdet,scalar_ocean,pressure;
@@ -683,5 +709,11 @@
 }/*}}}*/
 void ThermalAnalysis::UpdateConstraints(FemModel* femmodel){/*{{{*/
-	/*Default, do nothing*/
+
+	bool islevelset;
+	femmodel->parameters->FindParam(&islevelset,TransientIslevelsetEnum);
+	if(islevelset){
+		_printf0_("   Updating active and non-active nodes for ThermalAnalysis \n");
+		SetActiveNodesLSMx(femmodel);
+	}
 	return;
 }/*}}}*/
