Index: /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp	(revision 22901)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp	(revision 22902)
@@ -485,8 +485,9 @@
 
 	/*Intermediaries*/
-	int						domaintype;
-	Element*			basalelement=NULL;
-	bool					converged;
-	int*					doflist	=	NULL;
+	bool     thawed_element;
+	int			 domaintype;
+	Element* basalelement=NULL;
+	bool		 converged;
+	int*		 doflist	=	NULL;
 
 	/*Get basal element*/
@@ -514,4 +515,6 @@
 
 	/*Use the dof list to index into the solution vector: */
+
+	/*need to introduce thawed test herre*/
 	for(int i=0;i<numnodes;i++){
 		values[i] =solution[doflist[i]];
@@ -819,2 +822,52 @@
 	}
 }/*}}}*/
+
+void HydrologyDCInefficientAnalysis::HydrologyIdsGetActive(Vector<IssmDouble>* active_vec, Element* element){/*{{{*/
+	/*Constants*/
+	int      domaintype;
+	Element*   basalelement=NULL;
+
+	/*Get basal element*/
+	element->FindParam(&domaintype,DomainTypeEnum);
+	switch(domaintype){
+		case Domain2DhorizontalEnum:
+			basalelement = element;
+			break;
+		case Domain3DEnum:
+			if(!element->IsOnBase()) return;
+			basalelement = element->SpawnBasalElement();
+			break;
+		default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
+	}
+
+	const int   numnodes = basalelement->GetNumberOfNodes();
+	IssmDouble  flag     = 0.;
+	IssmDouble* active   = xNew<IssmDouble>(numnodes);
+	bool active_element;
+
+	/*Pass the activity mask from elements to nodes*/
+	basalelement->GetInputListOnVertices(&active[0],HydrologydcMaskThawedNodeEnum);
+	Input* 	active_element_input=basalelement->GetInput(HydrologydcMaskThawedEltEnum); _assert_(active_element_input);
+	active_element_input->GetInputValue(&active_element);
+
+	for(int i=0;i<numnodes;i++) flag+=active[i];
+
+	/*If any node is active all the node in the element are active*/
+	if(flag>0.){
+		for(int i=0;i<numnodes;i++){
+			active_vec->SetValue(basalelement->nodes[i]->Sid(),1.,INS_VAL);
+		}
+	}
+	/*If the element is active all its nodes are active*/
+	else if(active_element){
+		for(int i=0;i<numnodes;i++){
+			active_vec->SetValue(basalelement->nodes[i]->Sid(),1.,INS_VAL);
+		}
+	}
+	else{
+		/*Do not do anything: at least one node is active for this element but this element is not solved for*/
+	}
+	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	xDelete<IssmDouble>(active);
+}
+/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.h	(revision 22901)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.h	(revision 22902)
@@ -42,4 +42,5 @@
 		void HydrologyIDSGetMask(Vector<IssmDouble>* vec_mask, Element* element);
 		void ElementizeIdsMask(FemModel* femmodel);
+		void HydrologyIdsGetActive(Vector<IssmDouble>* active_vec, Element* element);
 };
 #endif
Index: /issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 22901)
+++ /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 22902)
@@ -4599,5 +4599,7 @@
 	bool                isthermal;
 	Vector<IssmDouble>* mask				= NULL;
+	Vector<IssmDouble>* active				= NULL;
 	IssmDouble*         serial_mask	= NULL;
+	IssmDouble*         serial_active	= NULL;
 
 	HydrologyDCInefficientAnalysis* inefanalysis =  new HydrologyDCInefficientAnalysis();
@@ -4620,6 +4622,23 @@
 	/*for other cases we just grab the mask from the initialisation value*/
 	else{
-	GetVectorFromInputsx(&serial_mask,this,HydrologydcMaskThawedNodeEnum,NodeSIdEnum);
-	}
+		GetVectorFromInputsx(&serial_mask,this,HydrologydcMaskThawedNodeEnum,NodeSIdEnum);
+	}
+	/*Update Mask and elementize*/
+	InputUpdateFromVectorx(this,serial_mask,HydrologydcMaskThawedNodeEnum,NodeSIdEnum);
+	xDelete<IssmDouble>(serial_mask);
+	inefanalysis->ElementizeIdsMask(this);
+
+	/*get node mask coherent with element mask*/
+	active=new Vector<IssmDouble>(nodes->NumberOfNodes(HydrologyDCInefficientAnalysisEnum));
+	for (int i=0;i<elements->Size();i++){
+		Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
+		inefanalysis->HydrologyIdsGetActive(active,element);
+	}
+
+	/*Assemble and serialize*/
+	active->Assemble();
+	serial_active=active->ToMPISerial();
+	delete active;
+
 	/*Update node activation accordingly*/
 	int counter =0;
@@ -4627,5 +4646,5 @@
 		Node* node=xDynamicCast<Node*>(nodes->GetObjectByOffset(i));
 		if(node->InAnalysis(HydrologyDCInefficientAnalysisEnum)){
-			if(serial_mask[node->Sid()]==1.){
+			if(serial_active[node->Sid()]==1.){
 				node->Activate();
 				if(!node->IsClone()) counter++;
@@ -4637,9 +4656,6 @@
 	}
 
-	/*Update Mask*/
-	InputUpdateFromVectorx(this,serial_mask,HydrologydcMaskThawedNodeEnum,NodeSIdEnum);
-	xDelete<IssmDouble>(serial_mask);
-	inefanalysis->ElementizeIdsMask(this);
-
+	xDelete<IssmDouble>(serial_active);
+	delete inefanalysis;
 	int sum_counter;
 	ISSM_MPI_Reduce(&counter,&sum_counter,1,ISSM_MPI_INT,ISSM_MPI_SUM,0,IssmComm::GetComm() );
Index: /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp	(revision 22901)
+++ /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp	(revision 22902)
@@ -60,5 +60,4 @@
 	GetSolutionFromInputsx(&ug_sed,femmodel);
 	Reducevectorgtofx(&uf_sed, ug_sed, femmodel->nodes,femmodel->parameters);
-	/*Initialize the thawed element mask*/
 	if(isefficientlayer) {
 		inefanalysis = new HydrologyDCInefficientAnalysis();
