Index: /issm/trunk/src/c/objects/Pengrid.cpp
===================================================================
--- /issm/trunk/src/c/objects/Pengrid.cpp	(revision 497)
+++ /issm/trunk/src/c/objects/Pengrid.cpp	(revision 498)
@@ -346,4 +346,10 @@
 			
 		PenaltyCreatePVectorMelting( pg,inputs,kmax,analysis_type,sub_analysis_type);
+
+	}
+	else if (analysis_type==DiagnosticAnalysisEnum()){
+
+		/*No loads applied, do nothing: */
+		return;
 
 	}
@@ -485,4 +491,31 @@
 void  Pengrid::PenaltyConstrain(int* punstable,void* vinputs,int analysis_type,int sub_analysis_type){
 
+	if ((analysis_type==DiagnosticAnalysisEnum()) && ((sub_analysis_type==StokesAnalysisEnum()))){
+
+		/*No penalty to check*/
+		return;
+
+	}
+	else if (analysis_type==ThermalAnalysisEnum()){
+		
+		PenaltyConstrainThermal(punstable,vinputs,analysis_type,sub_analysis_type);
+		
+	}
+	else if (analysis_type==MeltingAnalysisEnum()){
+			
+		/*No penalty to check*/
+		return;
+
+	}
+	else{
+		throw ErrorException(__FUNCT__,exprintf("%s%i%s%i%s","analysis: ",analysis_type," and sub_analysis_type: ",sub_analysis_type," not supported yet"));
+	}
+
+}
+
+#undef __FUNCT__ 
+#define __FUNCT__ "Pengrid::PenaltyConstrainThermal"
+void  Pengrid::PenaltyConstrainThermal(int* punstable,void* vinputs,int analysis_type,int sub_analysis_type){
+
 	//   The penalty is stable if it doesn't change during to successive iterations.   
 
Index: /issm/trunk/src/c/objects/Pengrid.h
===================================================================
--- /issm/trunk/src/c/objects/Pengrid.h	(revision 497)
+++ /issm/trunk/src/c/objects/Pengrid.h	(revision 498)
@@ -60,4 +60,5 @@
 		void  PenaltyCreatePVectorMelting(Vec pg, void* inputs, double kmax,int analysis_type,int sub_analysis_type);
 		void  PenaltyConstrain(int* punstable,void* inputs,int analysis_type,int sub_analysis_type);
+		void  PenaltyConstrainThermal(int* punstable,void* inputs,int analysis_type,int sub_analysis_type);
 };
 
