Index: /issm/trunk/src/c/Container/Inputs.cpp
===================================================================
--- /issm/trunk/src/c/Container/Inputs.cpp	(revision 5016)
+++ /issm/trunk/src/c/Container/Inputs.cpp	(revision 5017)
@@ -348,4 +348,18 @@
 }
 /*}}}*/
+/*FUNCTION Inputs::ConstrainMin{{{1*/
+void  Inputs::ConstrainMin(int constrain_enum, double minimum){
+	   
+	Input* constrain_input=NULL; 
+	/*Find x and y inputs: */
+	constrain_input=(Input*)this->GetInput(constrain_enum);
+
+	/*some checks: */
+	if(!constrain_input) ISSMERROR(" input %s could not be found!",EnumAsString(constrain_enum));
+
+	/*Apply ContrainMin: */
+	constrain_input->ConstrainMin(minimum);
+}
+/*}}}*/
 /*FUNCTION Inputs::GetInput{{{1*/
 Input* Inputs::GetInput(int enum_name){
Index: /issm/trunk/src/c/Container/Inputs.h
===================================================================
--- /issm/trunk/src/c/Container/Inputs.h	(revision 5016)
+++ /issm/trunk/src/c/Container/Inputs.h	(revision 5017)
@@ -30,4 +30,5 @@
 		int     AddInput(Input* in_input);
 		void    ChangeEnum(int enumtype,int new_enumtype);
+		void    ConstrainMin(int constrain_enum, double minimum);
 		int     DeleteInput(int enum_type);
 		void    DuplicateInput(int original_enum,int new_enum);
Index: /issm/trunk/src/c/objects/Elements/Penta.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Penta.cpp	(revision 5016)
+++ /issm/trunk/src/c/objects/Elements/Penta.cpp	(revision 5017)
@@ -1932,4 +1932,7 @@
 	double rho_ice,rho_water;
 
+	/*Correct thickness*/
+	this->inputs->ConstrainMin(ThicknessEnum,1.0);
+
 	/*If shelf: hydrostatic equilibrium*/
 	if (this->GetShelf()){
@@ -3503,5 +3506,5 @@
 
 			//compute ub
-			constant_part=-1.58*pow((double)10.0,-(double)10.0)*rho_ice*gravity*thickness;
+			constant_part=-0*1.58*pow((double)10.0,-(double)10.0)*rho_ice*gravity*thickness;
 			ub=constant_part*slope[0];
 			vb=constant_part*slope[1];
Index: /issm/trunk/src/c/objects/Elements/Tria.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 5016)
+++ /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 5017)
@@ -2287,4 +2287,7 @@
 	double rho_ice,rho_water;
 
+	/*Correct thickness*/
+	this->inputs->ConstrainMin(ThicknessEnum,1.0);
+
 	/*If shelf: hydrostatic equilibrium*/
 	if (this->GetShelf()){
Index: /issm/trunk/src/c/objects/Inputs/BoolInput.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/BoolInput.h	(revision 5016)
+++ /issm/trunk/src/c/objects/Inputs/BoolInput.h	(revision 5017)
@@ -59,4 +59,5 @@
 		void ChangeEnum(int newenumtype);
 		void SquareMin(double* psquaremin, bool process_units,Parameters* parameters);
+		void ConstrainMin(double minimum){ISSMERROR("not implemented yet");};
 		void Scale(double scale_factor);
 		void AXPY(Input* xinput,double scalar);
Index: /issm/trunk/src/c/objects/Inputs/DoubleInput.cpp
===================================================================
--- /issm/trunk/src/c/objects/Inputs/DoubleInput.cpp	(revision 5016)
+++ /issm/trunk/src/c/objects/Inputs/DoubleInput.cpp	(revision 5017)
@@ -205,4 +205,9 @@
 }
 /*}}}*/
+/*FUNCTION DoubleInput::ConstrainMin{{{1*/
+void DoubleInput::ConstrainMin(double minimum){
+	if (value<minimum) value=minimum;
+}
+/*}}}*/
 /*FUNCTION DoubleInput::AXPY{{{1*/
 void DoubleInput::AXPY(Input* xinput,double scalar){
Index: /issm/trunk/src/c/objects/Inputs/DoubleInput.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/DoubleInput.h	(revision 5016)
+++ /issm/trunk/src/c/objects/Inputs/DoubleInput.h	(revision 5017)
@@ -58,4 +58,5 @@
 		void ChangeEnum(int newenumtype);
 		void SquareMin(double* psquaremin, bool process_units,Parameters* parameters);
+		void ConstrainMin(double minimum);
 		void Scale(double scale_factor);
 		void AXPY(Input* xinput,double scalar);
Index: /issm/trunk/src/c/objects/Inputs/Input.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/Input.h	(revision 5016)
+++ /issm/trunk/src/c/objects/Inputs/Input.h	(revision 5017)
@@ -41,4 +41,5 @@
 		virtual ElementResult* SpawnResult(int step, double time)=0;
 		virtual void SquareMin(double* psquaremin, bool process_units,Parameters* parameters)=0;
+		virtual void ConstrainMin(double minimum)=0;
 		virtual void Scale(double scale_factor)=0;
 		virtual void AXPY(Input* xinput,double scalar)=0;
Index: /issm/trunk/src/c/objects/Inputs/IntInput.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/IntInput.h	(revision 5016)
+++ /issm/trunk/src/c/objects/Inputs/IntInput.h	(revision 5017)
@@ -59,4 +59,5 @@
 		void ChangeEnum(int newenumtype);
 		void SquareMin(double* psquaremin, bool process_units,Parameters* parameters);
+		void ConstrainMin(double minimum){ISSMERROR("not implemented yet");};
 		void Scale(double scale_factor);
 		void AXPY(Input* xinput,double scalar);
Index: /issm/trunk/src/c/objects/Inputs/PentaVertexInput.cpp
===================================================================
--- /issm/trunk/src/c/objects/Inputs/PentaVertexInput.cpp	(revision 5016)
+++ /issm/trunk/src/c/objects/Inputs/PentaVertexInput.cpp	(revision 5017)
@@ -429,4 +429,13 @@
 }
 /*}}}*/
+/*FUNCTION PentaVertexInput::ConstrainMin{{{1*/
+void PentaVertexInput::ConstrainMin(double minimum){
+	
+	int i;
+	const int numgrids=6;
+
+	for(i=0;i<numgrids;i++) if (values[i]<minimum) values[i]=minimum;
+}
+/*}}}*/
 /*FUNCTION PentaVertexInput::Scale{{{1*/
 void PentaVertexInput::Scale(double scale_factor){
Index: /issm/trunk/src/c/objects/Inputs/PentaVertexInput.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/PentaVertexInput.h	(revision 5016)
+++ /issm/trunk/src/c/objects/Inputs/PentaVertexInput.h	(revision 5017)
@@ -60,4 +60,5 @@
 
 		void SquareMin(double* psquaremin, bool process_units,Parameters* parameters);
+		void ConstrainMin(double minimum);
 		void Scale(double scale_factor);
 		void AXPY(Input* xinput,double scalar);
Index: /issm/trunk/src/c/objects/Inputs/TriaVertexInput.cpp
===================================================================
--- /issm/trunk/src/c/objects/Inputs/TriaVertexInput.cpp	(revision 5016)
+++ /issm/trunk/src/c/objects/Inputs/TriaVertexInput.cpp	(revision 5017)
@@ -281,4 +281,13 @@
 }
 /*}}}*/
+/*FUNCTION TriaVertexInput::ContrainMin{{{1*/
+void TriaVertexInput::ConstrainMin(double minimum){
+	
+	int i;
+	const int numgrids=3;
+
+	for(i=0;i<numgrids;i++) if (values[i]<minimum) values[i]=minimum;
+}
+/*}}}*/
 /*FUNCTION TriaVertexInput::Scale{{{1*/
 void TriaVertexInput::Scale(double scale_factor){
Index: /issm/trunk/src/c/objects/Inputs/TriaVertexInput.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/TriaVertexInput.h	(revision 5016)
+++ /issm/trunk/src/c/objects/Inputs/TriaVertexInput.h	(revision 5017)
@@ -60,4 +60,5 @@
 
 		void SquareMin(double* psquaremin, bool process_units,Parameters* parameters);
+		void ConstrainMin(double minimum);
 		void Scale(double scale_factor);
 		void AXPY(Input* xinput,double scalar);
