Index: /issm/trunk-jpl/src/c/modules/SetActiveNodesLSMx/SetActiveNodesLSMx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/SetActiveNodesLSMx/SetActiveNodesLSMx.cpp	(revision 17239)
+++ /issm/trunk-jpl/src/c/modules/SetActiveNodesLSMx/SetActiveNodesLSMx.cpp	(revision 17239)
@@ -0,0 +1,75 @@
+/*!\file GetMaskOfIceVerticesLSMx 
+ * \brief: Return a mask for all the vertices determining whether the node should be active or not. 
+ */
+
+#include "./SetActiveNodesLSMx.h"
+
+#include "../../classes/classes.h"
+#include "../../shared/shared.h"
+#include "../../toolkits/toolkits.h"
+#include "../modules.h"
+
+void SetActiveNodesLSMx(Elements* elements){/*{{{*/
+
+	// used in femmodel->UpdateConstraintsx
+	int i,in;
+	Element* element = NULL;
+	Node* node = NULL;
+
+	for(i=0;i<elements->Size();i++){
+		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+		int numnodes=element->GetNumberOfNodes();
+		IssmDouble* mask = xNew<IssmDouble>(numnodes);
+		element->GetInputListOnNodes(&mask[0],IceMaskNodeActivationEnum);
+		
+		for(in=0;in<numnodes;in++){
+			node=element->GetNode(in);
+			if(mask[in]==1.){
+				node->Activate();
+			}
+			else {
+				node->Deactivate();
+			}
+		}
+
+		xDelete<IssmDouble>(mask);
+	}
+}/*}}}*/
+void GetMaskOfIceVerticesLSMx(FemModel* femmodel){/*{{{*/
+
+	// use in transient core
+	int                 i;
+	IssmDouble*         mask_ice      = NULL;
+	Vector<IssmDouble>* vec_mask_ice  = NULL;
+	Element*            element       = NULL;
+
+	/*Initialize vector with number of vertices*/
+	IssmDouble numvertices=femmodel->vertices->NumberOfVertices();
+	vec_mask_ice=new Vector<IssmDouble>(numvertices); //vertices that have ice at next time step
+	for(i=0;i<numvertices;i++)
+		vec_mask_ice[i]=0.;
+	/*Fill vector with values: */
+	for(i=0;i<femmodel->elements->Size();i++){
+		element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
+		SetMaskOfIceElement(vec_mask_ice, element);
+	}
+
+	/*Assemble vector and serialize */
+	vec_mask_ice->Assemble();
+	mask_ice=vec_mask_ice->ToMPISerial();
+	InputUpdateFromVectorx(femmodel,mask_ice,IceMaskNodeActivationEnum,VertexSIdEnum);
+	delete vec_mask_ice;
+	delete mask_ice;
+
+}/*}}}*/
+void SetMaskOfIceElement(Vector<IssmDouble>* vec_mask_ice, Element* element){/*{{{*/
+
+	/* Intermediaries */
+	int numvertices = element->GetNumberOfVertices();
+	
+	if(element->IsIceInElement()){
+		for(int i = 0;i<numvertices;i++){
+			vec_mask_ice->SetValue(element->vertices[i]->Sid(),1.,INS_VAL);
+		}
+	}
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/modules/SetActiveNodesLSMx/SetActiveNodesLSMx.h
===================================================================
--- /issm/trunk-jpl/src/c/modules/SetActiveNodesLSMx/SetActiveNodesLSMx.h	(revision 17239)
+++ /issm/trunk-jpl/src/c/modules/SetActiveNodesLSMx/SetActiveNodesLSMx.h	(revision 17239)
@@ -0,0 +1,13 @@
+/*!\file:  SetActiveNodesLSMx.h
+ * \brief header file for updating single point constraints  for next time step
+ */ 
+
+#ifndef _SETACTIVENODESLSMX_H
+#define _SETACTIVENODESLSMX_H
+
+#include "../../classes/classes.h"
+
+void SetActiveNodesLSMx(Elements* elements);
+void GetMaskOfIceVerticesLSMx(FemModel* femmodel);
+void SetMaskOfIceElement(Vector<IssmDouble>* vec_mask_ice, Element* element);
+#endif  /* _UPDATESPCSX_H */
