Index: /issm/trunk-jpl/src/c/classes/Constraints/Constraint.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Constraints/Constraint.h	(revision 18387)
+++ /issm/trunk-jpl/src/c/classes/Constraints/Constraint.h	(revision 18388)
@@ -23,4 +23,5 @@
 		virtual void PenaltyDofAndValue(int* dof,IssmDouble* value,Nodes* nodes,Parameters* parameters)=0;
 		virtual bool InAnalysis(int analysis_type)=0;
+		virtual void ActivatePenaltyMethod(void)=0;
 
 };
Index: /issm/trunk-jpl/src/c/classes/Constraints/Constraints.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Constraints/Constraints.cpp	(revision 18387)
+++ /issm/trunk-jpl/src/c/classes/Constraints/Constraints.cpp	(revision 18388)
@@ -12,4 +12,5 @@
 
 #include "./Constraints.h"
+#include "./Constraint.h"
 #include "../../shared/shared.h"
 #include "../../toolkits/toolkits.h"
@@ -34,2 +35,13 @@
 }
 /*}}}*/
+void Constraints::ActivatePenaltyMethod(int in_analysis){/*{{{*/
+
+	for(int i=0;i<this->Size();i++){
+		Constraint* constraint=(Constraint*)this->GetObjectByOffset(i);
+		if(constraint->InAnalysis(in_analysis)){
+			constraint->ActivatePenaltyMethod();
+		}
+	}
+
+}
+/*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Constraints/Constraints.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Constraints/Constraints.h	(revision 18387)
+++ /issm/trunk-jpl/src/c/classes/Constraints/Constraints.h	(revision 18388)
@@ -27,5 +27,6 @@
 
 		/*numerics*/
-		int   NumberOfConstraints(void);
+		int  NumberOfConstraints(void);
+		void ActivatePenaltyMethod(int in_analysis);
 
 };
Index: /issm/trunk-jpl/src/c/classes/Constraints/SpcDynamic.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Constraints/SpcDynamic.cpp	(revision 18387)
+++ /issm/trunk-jpl/src/c/classes/Constraints/SpcDynamic.cpp	(revision 18388)
@@ -20,10 +20,11 @@
 SpcDynamic::SpcDynamic(int spc_sid,int spc_nodeid, int spc_dof,int spc_analysis_type){/*{{{*/
 
-	sid=spc_sid;
-	nodeid=spc_nodeid;
-	dof=spc_dof;
-	value=0;
-	analysis_type=spc_analysis_type;
-	isset=false;
+	sid           = spc_sid;
+	nodeid        = spc_nodeid;
+	dof           = spc_dof;
+	value         = 0;
+	analysis_type = spc_analysis_type;
+	isset         = false;
+	penalty       = false;
 
 	return;
@@ -78,4 +79,8 @@
 
 /*Constraint virtual functions definitions: */
+void SpcDynamic::ActivatePenaltyMethod(void){/*{{{*/
+	this->penalty = true;
+}
+/*}}}*/
 bool SpcDynamic::InAnalysis(int in_analysis_type){/*{{{*/
 	if (in_analysis_type==this->analysis_type) return true;
Index: /issm/trunk-jpl/src/c/classes/Constraints/SpcDynamic.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Constraints/SpcDynamic.h	(revision 18387)
+++ /issm/trunk-jpl/src/c/classes/Constraints/SpcDynamic.h	(revision 18388)
@@ -14,36 +14,37 @@
 
 	private: 
-		int	sid; /*! id, to track it*/
-		int	nodeid; /*!node id*/
-		int dof; /*!component*/
-		IssmDouble value; /*value*/
-		bool isset;
-		int analysis_type;
+		int        sid;             /*! id, to track it */
+		int        nodeid;          /*!node id          */
+		int        dof;             /*!component        */
+		IssmDouble value;           /*value             */
+		bool       isset;
+		int        analysis_type;
+		bool       penalty;         /*Is this a penalty constraint */
 
 	public:
 
-		/*SpcDynamic constructors, destructors:{{{*/
+		/*SpcDynamic constructors, destructors*/
 		SpcDynamic();
 		SpcDynamic(int sid,int nodeid, int dof,int analysis_type);
 		~SpcDynamic();
-		/*}}}*/
-		/*Object virtual functions definitions:{{{ */
-		void  Echo();
-		void  DeepEcho();
-		int   Id(); 
-		int   ObjectEnum();
-		Object* copy();
-		/*}}}*/
-		/*Constraint virtual functions definitions: {{{*/
-		void   ConstrainNode(Nodes* nodes,Parameters* parameters);
-		bool   InAnalysis(int analysis_type);
-		void   PenaltyDofAndValue(int* dof,IssmDouble* value,Nodes* nodes,Parameters* parameters){_error_("not implemented yet");};
-		/*}}}*/
-		/*SpcDynamic management:{{{ */
-		int    GetNodeId();
-		int    GetDof();
+
+		/*Object virtual functions definitions*/
+		void    Echo();
+		void    DeepEcho();
+		int     Id();
+		int     ObjectEnum();
+		Object *copy();
+
+		/*Constraint virtual functions definitions*/
+		void ConstrainNode(Nodes* nodes,Parameters* parameters);
+		bool InAnalysis(int analysis_type);
+		void ActivatePenaltyMethod(void);
+		void PenaltyDofAndValue(int* dof,IssmDouble* value,Nodes* nodes,Parameters* parameters){_error_("not implemented yet");};
+
+		/*SpcDynamic management*/
+		int        GetNodeId();
+		int        GetDof();
 		IssmDouble GetValue();
-		void   SetDynamicConstraint(Nodes* nodes,IssmDouble *yg_serial);
-		/*}}}*/
+		void       SetDynamicConstraint(Nodes  *nodes,IssmDouble *yg_serial);
 
 };
Index: /issm/trunk-jpl/src/c/classes/Constraints/SpcStatic.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Constraints/SpcStatic.cpp	(revision 18387)
+++ /issm/trunk-jpl/src/c/classes/Constraints/SpcStatic.cpp	(revision 18388)
@@ -25,4 +25,5 @@
 	value         = spc_value;
 	analysis_type = spc_analysis_type;
+	penalty       = false;
 
 	return;
@@ -80,4 +81,8 @@
 
 /*Constraint virtual functions definitions: */
+void SpcStatic::ActivatePenaltyMethod(void){/*{{{*/
+	   this->penalty = true;
+}
+/*}}}*/
 bool SpcStatic::InAnalysis(int in_analysis_type){/*{{{*/
 	if (in_analysis_type==this->analysis_type) return true;
Index: /issm/trunk-jpl/src/c/classes/Constraints/SpcStatic.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Constraints/SpcStatic.h	(revision 18387)
+++ /issm/trunk-jpl/src/c/classes/Constraints/SpcStatic.h	(revision 18388)
@@ -14,9 +14,10 @@
 
 	private: 
-		int	sid; /*! id, to track it*/
-		int	nodeid; /*!node id*/
-		int dof; /*!component*/
-		IssmDouble value; /*value*/
-		int analysis_type;
+		int        sid;             /*! id, to track it */
+		int        nodeid;          /*!node id          */
+		int        dof;             /*!component        */
+		IssmDouble value;           /*value             */
+		int        analysis_type;
+		bool       penalty;         /*Is this a penalty constraint */
 
 	public:
@@ -35,4 +36,5 @@
 		/*}}}*/
 		/*Constraint virtual functions definitions: {{{*/
+		void ActivatePenaltyMethod(void);
 		void   ConstrainNode(Nodes* nodes,Parameters* parameters);
 		bool   InAnalysis(int analysis_type);
Index: /issm/trunk-jpl/src/c/classes/Constraints/SpcTransient.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Constraints/SpcTransient.cpp	(revision 18387)
+++ /issm/trunk-jpl/src/c/classes/Constraints/SpcTransient.cpp	(revision 18388)
@@ -28,9 +28,9 @@
 SpcTransient::SpcTransient(int spc_sid,int spc_nodeid, int spc_dof,int spc_nsteps, IssmDouble* spc_times, IssmDouble* spc_values,int spc_analysis_type){/*{{{*/
 
-	penalty= false;
-	sid    = spc_sid;
-	nodeid = spc_nodeid;
-	dof    = spc_dof;
-	nsteps = spc_nsteps;
+	penalty = false;
+	sid     = spc_sid;
+	nodeid  = spc_nodeid;
+	dof     = spc_dof;
+	nsteps  = spc_nsteps;
 	if(spc_nsteps){
 		values = xNew<IssmDouble>(spc_nsteps);
@@ -87,4 +87,8 @@
 
 /*Constraint virtual functions definitions:*/
+void SpcTransient::ActivatePenaltyMethod(void){/*{{{*/
+	   this->penalty = true;
+}
+/*}}}*/
 bool SpcTransient::InAnalysis(int in_analysis_type){/*{{{*/
 
Index: /issm/trunk-jpl/src/c/classes/Constraints/SpcTransient.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Constraints/SpcTransient.h	(revision 18387)
+++ /issm/trunk-jpl/src/c/classes/Constraints/SpcTransient.h	(revision 18388)
@@ -14,5 +14,4 @@
 
 	private: 
-		bool        penalty;         /*Is this a penalty constraint */
 		int         sid;             /* id, to track it             */
 		int         nodeid;          /*node id                      */
@@ -22,4 +21,5 @@
 		int         nsteps;          /*number of time steps         */
 		int         analysis_type;
+		bool        penalty;         /*Is this a penalty constraint */
 
 	public:
@@ -38,4 +38,5 @@
 		/*}}}*/
 		/*Constraint virtual functions definitions: {{{*/
+		void ActivatePenaltyMethod(void);
 		void   ConstrainNode(Nodes* nodes,Parameters* parameters);
 		bool   InAnalysis(int analysis_type);
