Index: /issm/trunk/src/c/objects/Elements/Beam.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Beam.cpp	(revision 4879)
+++ /issm/trunk/src/c/objects/Elements/Beam.cpp	(revision 4880)
@@ -407,14 +407,14 @@
 /*}}}*/
 /*FUNCTION Beam::InputConvergence{{{1*/
-void  Beam::InputConvergence(int* pconverged,double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums){
-
-	int     i;
+bool Beam::InputConvergence(double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums){
+
+	int i;
 	Input** new_inputs=NULL;
 	Input** old_inputs=NULL;
-	int     converged=1;
+	bool    converged=true;
 
 	new_inputs=(Input**)xmalloc(num_enums/2*sizeof(Input*)); //half the enums are for the new inputs
 	old_inputs=(Input**)xmalloc(num_enums/2*sizeof(Input*)); //half the enums are for the old inputs
-	
+
 	for(i=0;i<num_enums/2;i++){
 		new_inputs[i]=(Input*)this->inputs->GetInput(enums[2*i+0]);
@@ -427,5 +427,5 @@
 	for(i=0;i<num_criterionenums;i++){
 		IsInputConverged(eps+i,new_inputs,old_inputs,num_enums/2,criterionenums[i]);
-		if(eps[i]>criterionvalues[i]) converged=0; 
+		if(eps[i]>criterionvalues[i]) converged=false; 
 	}
 
@@ -434,6 +434,6 @@
 	xfree((void**)&old_inputs);
 
-	/*Assign output pointers:*/
-	*pconverged=converged;
+	/*Return output*/
+	return converged;
 
 }
Index: /issm/trunk/src/c/objects/Elements/Beam.h
===================================================================
--- /issm/trunk/src/c/objects/Elements/Beam.h	(revision 4879)
+++ /issm/trunk/src/c/objects/Elements/Beam.h	(revision 4880)
@@ -84,5 +84,5 @@
 		void	   InputAXPY(int YEnum, double scalar, int XEnum);
 		void	   InputControlConstrain(int control_type,double cm_min, double cm_max);
-		void	   InputConvergence(int* pconverged,double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums);
+		bool     InputConvergence(double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums);
 		void     InputDepthAverageAtBase(int enum_type,int average_enum_type){ISSMERROR("not implemented yet");}
 		void	   InputDuplicate(int original_enum,int new_enum);
Index: /issm/trunk/src/c/objects/Elements/Element.h
===================================================================
--- /issm/trunk/src/c/objects/Elements/Element.h	(revision 4879)
+++ /issm/trunk/src/c/objects/Elements/Element.h	(revision 4880)
@@ -72,5 +72,5 @@
 		virtual void   InputAXPY(int YEnum, double scalar, int XEnum)=0;
 		virtual void   InputControlConstrain(int control_type,double cm_min, double cm_max)=0;
-		virtual void   InputConvergence(int* pconverged,double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums)=0;
+		virtual bool   InputConvergence(double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums)=0;
 
 		/*Implementation: */
Index: /issm/trunk/src/c/objects/Elements/Penta.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Penta.cpp	(revision 4879)
+++ /issm/trunk/src/c/objects/Elements/Penta.cpp	(revision 4880)
@@ -1058,14 +1058,14 @@
 /*}}}*/
 /*FUNCTION Penta::InputConvergence{{{1*/
-void  Penta::InputConvergence(int* pconverged,double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums){
-
-	int     i;
+bool Penta::InputConvergence(double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums){
+
+	int i;
 	Input** new_inputs=NULL;
 	Input** old_inputs=NULL;
-	int     converged=1;
+	bool    converged=true;
 
 	new_inputs=(Input**)xmalloc(num_enums/2*sizeof(Input*)); //half the enums are for the new inputs
 	old_inputs=(Input**)xmalloc(num_enums/2*sizeof(Input*)); //half the enums are for the old inputs
-	
+
 	for(i=0;i<num_enums/2;i++){
 		new_inputs[i]=(Input*)this->inputs->GetInput(enums[2*i+0]);
@@ -1078,5 +1078,5 @@
 	for(i=0;i<num_criterionenums;i++){
 		IsInputConverged(eps+i,new_inputs,old_inputs,num_enums/2,criterionenums[i]);
-		if(eps[i]>criterionvalues[i]) converged=0; 
+		if(eps[i]>criterionvalues[i]) converged=false; 
 	}
 
@@ -1085,6 +1085,6 @@
 	xfree((void**)&old_inputs);
 
-	/*Assign output pointers:*/
-	*pconverged=converged;
+	/*Return output*/
+	return converged;
 
 }
Index: /issm/trunk/src/c/objects/Elements/Penta.h
===================================================================
--- /issm/trunk/src/c/objects/Elements/Penta.h	(revision 4879)
+++ /issm/trunk/src/c/objects/Elements/Penta.h	(revision 4880)
@@ -87,5 +87,5 @@
 		void   InputAXPY(int YEnum, double scalar, int XEnum);
 		void   InputControlConstrain(int control_type,double cm_min, double cm_max);
-		void   InputConvergence(int* pconverged,double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums);
+		bool   InputConvergence(double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums);
 		void   InputDepthAverageAtBase(int enum_type,int average_enum_type);
 		void   InputDuplicate(int original_enum,int new_enum);
Index: /issm/trunk/src/c/objects/Elements/Sing.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Sing.cpp	(revision 4879)
+++ /issm/trunk/src/c/objects/Elements/Sing.cpp	(revision 4880)
@@ -376,10 +376,10 @@
 /*}}}*/
 /*FUNCTION Sing::InputConvergence{{{1*/
-void  Sing::InputConvergence(int* pconverged,double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums){
+bool Sing::InputConvergence(double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums){
 
 	int i;
 	Input** new_inputs=NULL;
 	Input** old_inputs=NULL;
-	int     converged=1;
+	bool    converged=true;
 
 	new_inputs=(Input**)xmalloc(num_enums/2*sizeof(Input*)); //half the enums are for the new inputs
@@ -396,5 +396,5 @@
 	for(i=0;i<num_criterionenums;i++){
 		IsInputConverged(eps+i,new_inputs,old_inputs,num_enums/2,criterionenums[i]);
-		if(eps[i]>criterionvalues[i]) converged=0; 
+		if(eps[i]>criterionvalues[i]) converged=false; 
 	}
 
@@ -403,6 +403,6 @@
 	xfree((void**)&old_inputs);
 
-	/*Assign output pointers:*/
-	*pconverged=converged;
+	/*Return output*/
+	return converged;
 
 }
Index: /issm/trunk/src/c/objects/Elements/Sing.h
===================================================================
--- /issm/trunk/src/c/objects/Elements/Sing.h	(revision 4879)
+++ /issm/trunk/src/c/objects/Elements/Sing.h	(revision 4880)
@@ -84,5 +84,5 @@
 		void   InputAXPY(int YEnum, double scalar, int XEnum);
 		void   InputControlConstrain(int control_type,double cm_min, double cm_max);
-		void   InputConvergence(int* pconverged,double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums);
+		bool   InputConvergence(double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums);
 		void   InputDepthAverageAtBase(int enum_type,int average_enum_type){ISSMERROR("not implemented yet");}
 		void   InputDuplicate(int original_enum,int new_enum);
Index: /issm/trunk/src/c/objects/Elements/Tria.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 4879)
+++ /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 4880)
@@ -1255,14 +1255,14 @@
 /*}}}*/
 /*FUNCTION Tria::InputConvergence{{{1*/
-void  Tria::InputConvergence(int* pconverged,double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums){
+bool Tria::InputConvergence(double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums){
 
 	int i;
 	Input** new_inputs=NULL;
 	Input** old_inputs=NULL;
-	int     converged=1;
+	bool    converged=true;
 
 	new_inputs=(Input**)xmalloc(num_enums/2*sizeof(Input*)); //half the enums are for the new inputs
 	old_inputs=(Input**)xmalloc(num_enums/2*sizeof(Input*)); //half the enums are for the old inputs
-	
+
 	for(i=0;i<num_enums/2;i++){
 		new_inputs[i]=(Input*)this->inputs->GetInput(enums[2*i+0]);
@@ -1275,5 +1275,5 @@
 	for(i=0;i<num_criterionenums;i++){
 		IsInputConverged(eps+i,new_inputs,old_inputs,num_enums/2,criterionenums[i]);
-		if(eps[i]>criterionvalues[i]) converged=0; 
+		if(eps[i]>criterionvalues[i]) converged=false; 
 	}
 
@@ -1282,6 +1282,6 @@
 	xfree((void**)&old_inputs);
 
-	/*Assign output pointers:*/
-	*pconverged=converged;
+	/*Return output*/
+	return converged;
 
 }
Index: /issm/trunk/src/c/objects/Elements/Tria.h
===================================================================
--- /issm/trunk/src/c/objects/Elements/Tria.h	(revision 4879)
+++ /issm/trunk/src/c/objects/Elements/Tria.h	(revision 4880)
@@ -83,5 +83,5 @@
 		void   InputAXPY(int YEnum, double scalar, int XEnum);
 		void   InputControlConstrain(int control_type,double cm_min, double cm_max);
-		void   InputConvergence(int* pconverged,double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums);
+		bool   InputConvergence(double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums);
 		void   InputDepthAverageAtBase(int enum_type,int average_enum_type);
 		void   InputDuplicate(int original_enum,int new_enum);
Index: /issm/trunk/src/c/shared/Numerics/IsInputConverged.cpp
===================================================================
--- /issm/trunk/src/c/shared/Numerics/IsInputConverged.cpp	(revision 4879)
+++ /issm/trunk/src/c/shared/Numerics/IsInputConverged.cpp	(revision 4880)
@@ -32,4 +32,9 @@
 		/*conpute ndu/du (where u could be velocity, pressure, temperature, etc ...): */
 		for(i=0;i<num_inputs;i++){
+
+			/*in debugging mode, check that the inputs are of the same type*/
+			ISSMASSERT(new_inputs[i]->Enum()==old_inputs[i]->Enum());
+
+			/*Get pointers*/
 			new_inputs[i]->GetValuesPtr(&newvalues,&num_values);
 			old_inputs[i]->GetValuesPtr(&oldvalues,&num_values);
Index: /issm/trunk/src/c/solutions/steadystate_core.cpp
===================================================================
--- /issm/trunk/src/c/solutions/steadystate_core.cpp	(revision 4879)
+++ /issm/trunk/src/c/solutions/steadystate_core.cpp	(revision 4880)
@@ -44,6 +44,8 @@
 		diagnostic_core(femmodel);
 
-		if(verbose)_printf_("%s\n","checking velocity, temperature and pressure convergence");
-		if (step>1) if(steadystateconvergence(femmodel)) break;
+		if (step>1){
+			if(verbose)_printf_("%s\n","checking velocity, temperature and pressure convergence");
+			if(steadystateconvergence(femmodel)) break;
+		}
 		
 		if(verbose)_printf_("%s\n","saving velocity, temperature and pressure to check for convergence at next step");
