Index: /issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp	(revision 20668)
+++ /issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp	(revision 20669)
@@ -2343,12 +2343,20 @@
 	/*fill in all arrays: */
 	for(i=0;i<vnumnodes;i++){
-		lambdax[i] = values[i*dim+0]; if(xIsNan<IssmDouble>(lambdax[i])) _error_("NaN found in solution vector");
-		lambday[i] = values[i*dim+1]; if(xIsNan<IssmDouble>(lambday[i])) _error_("NaN found in solution vector");
+		lambdax[i] = values[i*dim+0];
+		if(xIsNan<IssmDouble>(lambdax[i])) _error_("NaN found in solution vector");
+		if(xIsInf<IssmDouble>(lambdax[i])) _error_("Inf found in solution vector");
+		lambday[i] = values[i*dim+1];
+		if(xIsNan<IssmDouble>(lambday[i])) _error_("NaN found in solution vector");
+		if(xIsInf<IssmDouble>(lambday[i])) _error_("Inf found in solution vector");
 		if(dim==3){
-			lambdaz[i] = values[i*dim+2]; if(xIsNan<IssmDouble>(lambdaz[i])) _error_("NaN found in solution vector");
+			lambdaz[i] = values[i*dim+2];
+			if(xIsNan<IssmDouble>(lambdaz[i])) _error_("NaN found in solution vector");
+			if(xIsInf<IssmDouble>(lambdaz[i])) _error_("Inf found in solution vector");
 		}
 	}
 	for(i=0;i<pnumnodes;i++){
-		lambdap[i] = values[vnumdof+i]; if(xIsNan<IssmDouble>(lambdap[i])) _error_("NaN found in solution vector");
+		lambdap[i] = values[vnumdof+i];
+		if(xIsNan<IssmDouble>(lambdap[i])) _error_("NaN found in solution vector");
+		if(xIsInf<IssmDouble>(lambdap[i])) _error_("Inf found in solution vector");
 	}
 
@@ -2409,5 +2417,7 @@
 		/*Check solution*/
 		if(xIsNan<IssmDouble>(lambdax[i])) _error_("NaN found in solution vector");
+		if(xIsInf<IssmDouble>(lambdax[i])) _error_("Inf found in solution vector");
 		if(domaintype!=Domain2DverticalEnum && xIsNan<IssmDouble>(lambday[i])) _error_("NaN found in solution vector");
+		if(domaintype!=Domain2DverticalEnum && xIsInf<IssmDouble>(lambday[i])) _error_("Inf found in solution vector");
 	}
 
Index: /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp	(revision 20668)
+++ /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp	(revision 20669)
@@ -649,4 +649,5 @@
 		/*Check solution*/
 		if(xIsNan<IssmDouble>(newdamage[i])) _error_("NaN found in solution vector");
+		if(xIsInf<IssmDouble>(newdamage[i])) _error_("Inf found in solution vector");
 		/*Enforce D < max_damage and D > 0 */
 		if(newdamage[i]>max_damage) newdamage[i]=max_damage;
Index: /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 20668)
+++ /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 20669)
@@ -1466,4 +1466,5 @@
 		/*Check solution*/
 		if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in solution vector");
+		if(xIsInf<IssmDouble>(values[i])) _error_("Inf found in solution vector");
 	}
 
Index: /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp	(revision 20668)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp	(revision 20669)
@@ -398,4 +398,5 @@
 		eplHeads[i]=solution[doflist[i]];
 		if(xIsNan<IssmDouble>(eplHeads[i])) _error_("NaN found in solution vector");
+		if(xIsInf<IssmDouble>(eplHeads[i])) _error_("Inf found in solution vector");
 	}
 	/*Add input to the element: */
Index: /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp	(revision 20668)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp	(revision 20669)
@@ -435,4 +435,5 @@
 		values[i] =solution[doflist[i]];
 		if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in solution vector");
+		if(xIsInf<IssmDouble>(values[i])) _error_("Inf found in solution vector");
 	}
 
Index: /issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.cpp	(revision 20668)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.cpp	(revision 20669)
@@ -356,4 +356,5 @@
 		values[i]=solution[doflist[i]];
 		if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in solution vector");
+		if(xIsInf<IssmDouble>(values[i])) _error_("Inf found in solution vector");
 		if (values[i]<10e-10) values[i]=10e-10; //correcting the water column to positive values
 	}
Index: /issm/trunk-jpl/src/c/analyses/HydrologySommersAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologySommersAnalysis.cpp	(revision 20668)
+++ /issm/trunk-jpl/src/c/analyses/HydrologySommersAnalysis.cpp	(revision 20669)
@@ -345,4 +345,5 @@
 
 		if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in solution vector");
+		if(xIsInf<IssmDouble>(values[i])) _error_("Inf found in solution vector");
 	}
 
Index: /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 20668)
+++ /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 20669)
@@ -684,4 +684,5 @@
 		newthickness[i]=solution[doflist[i]];
 		if(xIsNan<IssmDouble>(newthickness[i])) _error_("NaN found in solution vector");
+		if(xIsInf<IssmDouble>(newthickness[i])) _error_("Inf found in solution vector");
 		/*Constrain thickness to be at least 1m*/
 		if(newthickness[i]<minthickness) newthickness[i]=minthickness;
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 20668)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 20669)
@@ -1851,8 +1851,10 @@
 		vx[i]=values[i*dim+0];
 		if(xIsNan<IssmDouble>(vx[i])) _error_("NaN found in solution vector");
+		if(xIsInf<IssmDouble>(vx[i])) _error_("Inf found in solution vector");
 
 		if(dim==2){
 			vy[i]=values[i*dim+1];
 			if(xIsNan<IssmDouble>(vy[i])) _error_("NaN found in solution vector");
+			if(xIsInf<IssmDouble>(vy[i])) _error_("Inf found in solution vector");
 		}
 	}
@@ -2187,5 +2189,7 @@
 		/*Check solution*/
 		if(xIsNan<IssmDouble>(vx[i])) _error_("NaN found in solution vector");
+		if(xIsInf<IssmDouble>(vx[i])) _error_("Inf found in solution vector");
 		if(xIsNan<IssmDouble>(vy[i])) _error_("NaN found in solution vector");
+		if(xIsInf<IssmDouble>(vy[i])) _error_("Inf found in solution vector");
 	}
 
@@ -2815,7 +2819,9 @@
 		vx[i]=values[i*(dim-1)+0];
 		if(xIsNan<IssmDouble>(vx[i])) _error_("NaN found in solution vector");
+		if(xIsInf<IssmDouble>(vx[i])) _error_("Inf found in solution vector");
 		if(dim==3){
 			vy[i]=values[i*(dim-1)+1];
 			if(xIsNan<IssmDouble>(vy[i])) _error_("NaN found in solution vector");
+			if(xIsInf<IssmDouble>(vy[i])) _error_("Inf found in solution vector");
 		}
 	}
@@ -4953,9 +4959,12 @@
 		vy[i] = values[i*dim+1];
 		if(xIsNan<IssmDouble>(vx[i])) _error_("NaN found in solution vector");
+		if(xIsInf<IssmDouble>(vx[i])) _error_("Inf found in solution vector");
 		if(xIsNan<IssmDouble>(vy[i])) _error_("NaN found in solution vector");
+		if(xIsInf<IssmDouble>(vy[i])) _error_("Inf found in solution vector");
 
 		if(dim==3){
 			vz[i] = values[i*dim+2];
 			if(xIsNan<IssmDouble>(vz[i])) _error_("NaN found in solution vector");
+			if(xIsInf<IssmDouble>(vz[i])) _error_("Inf found in solution vector");
 		}
 	}
@@ -4963,4 +4972,5 @@
 		pressure[i] = values[vnumdof+i];
 		if(xIsNan<IssmDouble>(pressure[i])) _error_("NaN found in solution vector");
+		if(xIsInf<IssmDouble>(pressure[i])) _error_("Inf found in solution vector");
 	}
 
@@ -6854,7 +6864,11 @@
 		/*Check solution*/
 		if(xIsNan<IssmDouble>(vx[i]))       _error_("NaN found in solution vector");
+		if(xIsInf<IssmDouble>(vx[i]))       _error_("Inf found in solution vector");
 		if(xIsNan<IssmDouble>(vy[i]))       _error_("NaN found in solution vector");
+		if(xIsInf<IssmDouble>(vy[i]))       _error_("Inf found in solution vector");
 		if(xIsNan<IssmDouble>(vzFS[i]))     _error_("NaN found in solution vector");
+		if(xIsInf<IssmDouble>(vzFS[i]))     _error_("Inf found in solution vector");
 		if(xIsNan<IssmDouble>(pressure[i])) _error_("NaN found in solution vector");
+		if(xIsInf<IssmDouble>(pressure[i])) _error_("Inf found in solution vector");
 	}
 
@@ -6960,7 +6974,11 @@
 		/*Check solution*/
 		if(xIsNan<IssmDouble>(vx[i]))       _error_("NaN found in solution vector");
+		if(xIsInf<IssmDouble>(vx[i]))       _error_("Inf found in solution vector");
 		if(xIsNan<IssmDouble>(vy[i]))       _error_("NaN found in solution vector");
+		if(xIsInf<IssmDouble>(vy[i]))       _error_("Inf found in solution vector");
 		if(xIsNan<IssmDouble>(vzFS[i]))     _error_("NaN found in solution vector");
+		if(xIsInf<IssmDouble>(vzFS[i]))     _error_("Inf found in solution vector");
 		if(xIsNan<IssmDouble>(pressure[i])) _error_("NaN found in solution vector");
+		if(xIsInf<IssmDouble>(pressure[i])) _error_("Inf found in solution vector");
 	}
 
@@ -7055,5 +7073,7 @@
 		/*Check solution*/
 		if(xIsNan<IssmDouble>(vx[i])) _error_("NaN found in solution vector");
+		if(xIsInf<IssmDouble>(vx[i])) _error_("Inf found in solution vector");
 		if(xIsNan<IssmDouble>(vy[i])) _error_("NaN found in solution vector");
+		if(xIsInf<IssmDouble>(vy[i])) _error_("Inf found in solution vector");
 	}
 
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp	(revision 20668)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp	(revision 20669)
@@ -586,5 +586,7 @@
 		/*Check solution*/
 		if(xIsNan<IssmDouble>(vx[i])) _error_("NaN found in solution vector");
+		if(xIsInf<IssmDouble>(vx[i])) _error_("Inf found in solution vector");
 		if(xIsNan<IssmDouble>(vy[i])) _error_("NaN found in solution vector");
+		if(xIsInf<IssmDouble>(vy[i])) _error_("Inf found in solution vector");
 	}
 
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp	(revision 20668)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp	(revision 20669)
@@ -539,4 +539,5 @@
 		/*Check solution*/
 		if(xIsNan<IssmDouble>(vz[i])) _error_("NaN found in solution vector");
+		if(xIsInf<IssmDouble>(vz[i])) _error_("Inf found in solution vector");
 	}
 
Index: /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 20668)
+++ /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 20669)
@@ -739,4 +739,5 @@
 		/*Check solution*/
 		if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in solution vector");
+		if(xIsInf<IssmDouble>(values[i])) _error_("Inf found in solution vector");
 		//if(values[i]<0)      _printf_("temperature < 0°K found in solution vector\n");
 		//if(values[i]>275)    _printf_("temperature > 275°K found in solution vector (Paterson's rheology associated is negative)\n");
Index: /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 20668)
+++ /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 20669)
@@ -1506,4 +1506,5 @@
 		values[i]=solution[doflist[i]];
 		if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in solution vector");
+		if(xIsInf<IssmDouble>(values[i])) _error_("Inf found in solution vector");
 	}
 
@@ -1536,4 +1537,5 @@
 		values[i+numdof2d]=values[i];
 		if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in solution vector");
+		if(xIsInf<IssmDouble>(values[i])) _error_("Inf found in solution vector");
 	}
 
@@ -1589,4 +1591,5 @@
 				values[i]=vector[doflist[i]];
 				if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in solution vector");
+				if(xIsInf<IssmDouble>(values[i])) _error_("Inf found in solution vector");
 			}
 			/*Add input to the element: */
@@ -1601,4 +1604,5 @@
 				values[i]=vector[nodes[i]->Sid()];
 				if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in solution vector");
+				if(xIsInf<IssmDouble>(values[i])) _error_("Inf found in solution vector");
 			}
 			/*Add input to the element: */
Index: /issm/trunk-jpl/src/c/classes/Elements/Tetra.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tetra.cpp	(revision 20668)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tetra.cpp	(revision 20669)
@@ -475,4 +475,5 @@
 		values[i]=solution[doflist[i]];
 		if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in solution vector");
+		if(xIsInf<IssmDouble>(values[i])) _error_("Inf found in solution vector");
 	}
 
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 20668)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 20669)
@@ -1927,4 +1927,5 @@
 		values[i]=solution[doflist[i]];
 		if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in solution vector");
+		if(xIsInf<IssmDouble>(values[i])) _error_("Inf found in solution vector");
 	}
 
@@ -1974,4 +1975,5 @@
 			values[i]=vector[doflist[i]];
 			if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in vector");
+			if(xIsInf<IssmDouble>(values[i])) _error_("Inf found in vector");
 		}
 		this->inputs->AddInput(new TriaInput(name,values,this->element_type));
@@ -1986,4 +1988,5 @@
 			values[i]=vector[nodes[i]->Sid()];
 			if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in vector");
+			if(xIsInf<IssmDouble>(values[i])) _error_("Inf found in vector");
 		}
 		this->inputs->AddInput(new TriaInput(name,values,this->element_type));
Index: /issm/trunk-jpl/src/c/classes/matrix/ElementMatrix.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/matrix/ElementMatrix.cpp	(revision 20668)
+++ /issm/trunk-jpl/src/c/classes/matrix/ElementMatrix.cpp	(revision 20669)
@@ -368,4 +368,5 @@
 		for(int j=0;j<this->ncols;j++){
 			if (xIsNan<IssmDouble>(this->values[i*this->ncols+j])) _error_("NaN found in Element Matrix");
+			if (xIsInf<IssmDouble>(this->values[i*this->ncols+j])) _error_("Inf found in Element Matrix");
 			if (fabs(this->values[i*this->ncols+j])>1.e+50) _error_("Element Matrix values exceeds 1.e+50");
 		}
Index: /issm/trunk-jpl/src/c/classes/matrix/ElementVector.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/matrix/ElementVector.cpp	(revision 20668)
+++ /issm/trunk-jpl/src/c/classes/matrix/ElementVector.cpp	(revision 20669)
@@ -201,4 +201,5 @@
 	for (int i=0;i<this->nrows;i++){
 		if (xIsNan<IssmDouble>(this->values[i])) _error_("NaN found in Element Vector");
+		if (xIsInf<IssmDouble>(this->values[i])) _error_("Inf found in Element Vector");
 		if (fabs( this->values[i])>1.e+50) _error_("Element Vector values exceeds 1.e+50");
 	}
Index: /issm/trunk-jpl/src/c/shared/Numerics/isnan.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Numerics/isnan.cpp	(revision 20668)
+++ /issm/trunk-jpl/src/c/shared/Numerics/isnan.cpp	(revision 20669)
@@ -7,5 +7,5 @@
 #endif
 
-#include "isnan.h"
+#include "./isnan.h"
 
 #if defined(_HAVE_ADOLC_) && !defined(_WRAPPERS_)
@@ -14,2 +14,8 @@
 }
 #endif
+
+#if defined(_HAVE_ADOLC_) && !defined(_WRAPPERS_)
+template <> int xIsInf<adouble> (const adouble& X){
+  return isinf(X.getValue());
+}
+#endif
Index: /issm/trunk-jpl/src/c/shared/Numerics/isnan.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Numerics/isnan.h	(revision 20668)
+++ /issm/trunk-jpl/src/c/shared/Numerics/isnan.h	(revision 20669)
@@ -23,7 +23,12 @@
 }
 
+template <class T> int xIsInf(const T& X) {
+	return std::isinf(X);
+}
+
 #if defined(_HAVE_ADOLC_) && !defined(_WRAPPERS_)
 #include "./types.h"
 template <> int xIsNan<adouble> (const adouble& X);
+template <> int xIsInf<adouble> (const adouble& X);
 #endif
 
