Index: ../trunk-jpl/src/c/classes/Constraints/SpcDynamic.h
===================================================================
--- ../trunk-jpl/src/c/classes/Constraints/SpcDynamic.h	(revision 18387)
+++ ../trunk-jpl/src/c/classes/Constraints/SpcDynamic.h	(revision 18388)
@@ -13,38 +13,39 @@
 class SpcDynamic: public Constraint{
 
 	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: ../trunk-jpl/src/c/classes/Constraints/SpcStatic.h
===================================================================
--- ../trunk-jpl/src/c/classes/Constraints/SpcStatic.h	(revision 18387)
+++ ../trunk-jpl/src/c/classes/Constraints/SpcStatic.h	(revision 18388)
@@ -13,11 +13,12 @@
 class SpcStatic: public Constraint{
 
 	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:
 
@@ -34,6 +35,7 @@
 		Object* copy();
 		/*}}}*/
 		/*Constraint virtual functions definitions: {{{*/
+		void ActivatePenaltyMethod(void);
 		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");};
Index: ../trunk-jpl/src/c/classes/Constraints/SpcTransient.h
===================================================================
--- ../trunk-jpl/src/c/classes/Constraints/SpcTransient.h	(revision 18387)
+++ ../trunk-jpl/src/c/classes/Constraints/SpcTransient.h	(revision 18388)
@@ -13,7 +13,6 @@
 class SpcTransient: public Constraint{
 
 	private: 
-		bool        penalty;         /*Is this a penalty constraint */
 		int         sid;             /* id, to track it             */
 		int         nodeid;          /*node id                      */
 		int         dof;             /*component                    */
@@ -21,6 +20,7 @@
 		IssmDouble *times;           /*different time steps         */
 		int         nsteps;          /*number of time steps         */
 		int         analysis_type;
+		bool        penalty;         /*Is this a penalty constraint */
 
 	public:
 
@@ -37,6 +37,7 @@
 		Object* copy();
 		/*}}}*/
 		/*Constraint virtual functions definitions: {{{*/
+		void ActivatePenaltyMethod(void);
 		void   ConstrainNode(Nodes* nodes,Parameters* parameters);
 		bool   InAnalysis(int analysis_type);
 		void   PenaltyDofAndValue(int* dof,IssmDouble* value,Nodes* nodes,Parameters* parameters);
Index: ../trunk-jpl/src/c/classes/Constraints/Constraints.cpp
===================================================================
--- ../trunk-jpl/src/c/classes/Constraints/Constraints.cpp	(revision 18387)
+++ ../trunk-jpl/src/c/classes/Constraints/Constraints.cpp	(revision 18388)
@@ -11,6 +11,7 @@
 #endif
 
 #include "./Constraints.h"
+#include "./Constraint.h"
 #include "../../shared/shared.h"
 #include "../../toolkits/toolkits.h"
 
@@ -33,3 +34,14 @@
 	return numberofconstraints;
 }
 /*}}}*/
+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: ../trunk-jpl/src/c/classes/Constraints/Constraint.h
===================================================================
--- ../trunk-jpl/src/c/classes/Constraints/Constraint.h	(revision 18387)
+++ ../trunk-jpl/src/c/classes/Constraints/Constraint.h	(revision 18388)
@@ -22,6 +22,7 @@
 		virtual void ConstrainNode(Nodes* nodes,Parameters* parameters)=0;
 		virtual void PenaltyDofAndValue(int* dof,IssmDouble* value,Nodes* nodes,Parameters* parameters)=0;
 		virtual bool InAnalysis(int analysis_type)=0;
+		virtual void ActivatePenaltyMethod(void)=0;
 
 };
 #endif
Index: ../trunk-jpl/src/c/classes/Constraints/SpcDynamic.cpp
===================================================================
--- ../trunk-jpl/src/c/classes/Constraints/SpcDynamic.cpp	(revision 18387)
+++ ../trunk-jpl/src/c/classes/Constraints/SpcDynamic.cpp	(revision 18388)
@@ -19,12 +19,13 @@
 /*}}}*/
 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;
 }
@@ -77,6 +78,10 @@
 /*}}}*/
 
 /*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;
 	else return false;
Index: ../trunk-jpl/src/c/classes/Constraints/Constraints.h
===================================================================
--- ../trunk-jpl/src/c/classes/Constraints/Constraints.h	(revision 18387)
+++ ../trunk-jpl/src/c/classes/Constraints/Constraints.h	(revision 18388)
@@ -26,7 +26,8 @@
 		/*}}}*/
 
 		/*numerics*/
-		int   NumberOfConstraints(void);
+		int  NumberOfConstraints(void);
+		void ActivatePenaltyMethod(int in_analysis);
 
 };
 
Index: ../trunk-jpl/src/c/classes/Constraints/SpcStatic.cpp
===================================================================
--- ../trunk-jpl/src/c/classes/Constraints/SpcStatic.cpp	(revision 18387)
+++ ../trunk-jpl/src/c/classes/Constraints/SpcStatic.cpp	(revision 18388)
@@ -24,6 +24,7 @@
 	dof           = spc_dof;
 	value         = spc_value;
 	analysis_type = spc_analysis_type;
+	penalty       = false;
 
 	return;
 }
@@ -79,6 +80,10 @@
 /*}}}*/
 
 /*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;
 	else return false;
Index: ../trunk-jpl/src/c/classes/Constraints/SpcTransient.cpp
===================================================================
--- ../trunk-jpl/src/c/classes/Constraints/SpcTransient.cpp	(revision 18387)
+++ ../trunk-jpl/src/c/classes/Constraints/SpcTransient.cpp	(revision 18388)
@@ -27,11 +27,11 @@
 /*}}}*/
 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);
 		times  = xNew<IssmDouble>(spc_nsteps);
@@ -86,6 +86,10 @@
 /*}}}*/
 
 /*Constraint virtual functions definitions:*/
+void SpcTransient::ActivatePenaltyMethod(void){/*{{{*/
+	   this->penalty = true;
+}
+/*}}}*/
 bool SpcTransient::InAnalysis(int in_analysis_type){/*{{{*/
 
 	if (in_analysis_type==this->analysis_type) return true;
