Index: /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp	(revision 17583)
+++ /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp	(revision 17584)
@@ -366,5 +366,31 @@
 }/*}}}*/
 void FreeSurfaceBaseAnalysis::UpdateConstraints(FemModel* femmodel){/*{{{*/
-	/*Default, do nothing*/
-	return;
-}/*}}}*/
+
+	/*Intermediary*/
+	IssmDouble phi,isonbed,base;
+
+	for(int i=0;i<femmodel->elements->Size();i++){
+
+		Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
+		if(!element->IsOnBed()) continue;
+
+		int             numnodes = element->GetNumberOfNodes();
+		Input* groundedice_input = element->GetInput(MaskGroundediceLevelsetEnum);  _assert_(groundedice_input);
+		Input* onbed_input       = element->GetInput(MeshVertexonbedEnum);          _assert_(onbed_input);
+		Input* base_input        = element->GetInput(BaseEnum);                     _assert_(base_input);
+
+		Gauss* gauss=element->NewGauss();
+		for(int iv=0;iv<numnodes;iv++){
+			gauss->GaussNode(element->GetElementType(),iv);
+			onbed_input->GetInputValue(&isonbed,gauss);
+			if(isonbed==1.){
+				groundedice_input->GetInputValue(&phi,gauss);
+				if(phi>=0.){
+					base_input->GetInputValue(&base,gauss);
+					element->nodes[iv]->ApplyConstraint(1,base);
+				}
+			}
+		}
+		delete gauss;
+	}
+}/*}}}*/
