Index: /issm/trunk/src/c/objects/Elements/Penta.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Penta.cpp	(revision 5840)
+++ /issm/trunk/src/c/objects/Elements/Penta.cpp	(revision 5841)
@@ -687,87 +687,44 @@
 void  Penta::CreateKMatrix(Mat Kgg, Mat Kff, Mat Kfs){
 
+	/*retrive parameters: */
 	int analysis_type;
-
-	/*retrive parameters: */
 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
 
-	/*if debugging mode, check that all pointers exist*/
+	/*Checks in debugging {{{2*/
 	ISSMASSERT(this->nodes && this->matice && this->matpar && this->neighbors && this->parameters && this->inputs);
+	/*}}}*/
 
 	/*Just branch to the correct element stiffness matrix generator, according to the type of analysis we are carrying out: */
-	if (analysis_type==DiagnosticHorizAnalysisEnum){
-		int approximation;
-		inputs->GetParameterValue(&approximation,ApproximationEnum);
-		if(approximation==MacAyealApproximationEnum){
-			CreateKMatrixDiagnosticMacAyeal( Kgg);
-		}
-		else if(approximation==PattynApproximationEnum){
-			CreateKMatrixDiagnosticPattyn( Kgg);
-		}
-		else if(approximation==StokesApproximationEnum){
-			CreateKMatrixDiagnosticStokes( Kgg);
-		}
-		else if(approximation==HutterApproximationEnum){
-			return;
-		}
-		else if(approximation==NoneApproximationEnum){
-			return;
-		}
-		else if(approximation==MacAyealPattynApproximationEnum){
-			CreateKMatrixDiagnosticMacAyeal( Kgg);
-			CreateKMatrixDiagnosticPattyn( Kgg);
-			CreateKMatrixCouplingMacAyealPattyn( Kgg);
-		}
-		else if(approximation==PattynStokesApproximationEnum){
-			CreateKMatrixDiagnosticPattyn( Kgg);
-			CreateKMatrixDiagnosticStokes( Kgg);
-			CreateKMatrixCouplingPattynStokes( Kgg);
-		}
-		else ISSMERROR("Approximation %s not supported yet",EnumToString(approximation));
-	}
-	else if (analysis_type==AdjointHorizAnalysisEnum){
-		/*Same as diagnostic*/
-		int approximation;
-		inputs->GetParameterValue(&approximation,ApproximationEnum);
-		if(approximation==MacAyealApproximationEnum){
-			CreateKMatrixDiagnosticMacAyeal( Kgg);
-		}
-		else if(approximation==PattynApproximationEnum){
-			CreateKMatrixDiagnosticPattyn( Kgg);
-		}
-		else if(approximation==StokesApproximationEnum){
-			CreateKMatrixDiagnosticStokes( Kgg);
-		}
-		else if(approximation==NoneApproximationEnum){
-			return;
-		}
-		else ISSMERROR("Approximation %s not supported yet",EnumToString(approximation));
-	}
-	else if (analysis_type==DiagnosticHutterAnalysisEnum){
-		CreateKMatrixDiagnosticHutter( Kgg);
-	}
-	else if (analysis_type==DiagnosticVertAnalysisEnum){
-		CreateKMatrixDiagnosticVert( Kgg);
-	}
-	else if (analysis_type==BedSlopeXAnalysisEnum || analysis_type==SurfaceSlopeXAnalysisEnum || analysis_type==BedSlopeYAnalysisEnum || analysis_type==SurfaceSlopeYAnalysisEnum){
-		CreateKMatrixSlope( Kgg);
-	}
-	else if (analysis_type==PrognosticAnalysisEnum){
-		CreateKMatrixPrognostic( Kgg);
-	}
-	else if (analysis_type==BalancedthicknessAnalysisEnum){
-		CreateKMatrixBalancedthickness( Kgg);
-	}
-	else if (analysis_type==BalancedvelocitiesAnalysisEnum){
-		CreateKMatrixBalancedvelocities( Kgg);
-	}
-	else if (analysis_type==ThermalAnalysisEnum){
-		CreateKMatrixThermal( Kgg);
-	}
-	else if (analysis_type==MeltingAnalysisEnum){
-		CreateKMatrixMelting( Kgg);
-	}
-	else ISSMERROR("analysis %i (%s) not supported yet",analysis_type,EnumToString(analysis_type));
-
+	switch(analysis_type){
+		case DiagnosticHorizAnalysisEnum: case AdjointHorizAnalysisEnum:
+			CreateKMatrixDiagnosticHoriz(Kgg);
+			break;
+		case DiagnosticHutterAnalysisEnum:
+			CreateKMatrixDiagnosticHutter( Kgg);
+			break;
+		case DiagnosticVertAnalysisEnum:
+			CreateKMatrixDiagnosticVert( Kgg);
+			break;
+		case BedSlopeXAnalysisEnum: case SurfaceSlopeXAnalysisEnum: case BedSlopeYAnalysisEnum: case SurfaceSlopeYAnalysisEnum:
+			CreateKMatrixSlope( Kgg);
+			break;
+		case PrognosticAnalysisEnum:
+			CreateKMatrixPrognostic( Kgg);
+			break;
+		case BalancedthicknessAnalysisEnum:
+			CreateKMatrixBalancedthickness( Kgg);
+			break;
+		case BalancedvelocitiesAnalysisEnum:
+			CreateKMatrixBalancedvelocities( Kgg);
+			break;
+		case ThermalAnalysisEnum:
+			CreateKMatrixThermal( Kgg);
+			break;
+		case MeltingAnalysisEnum:
+			CreateKMatrixMelting( Kgg);
+			break;
+		default:
+			ISSMERROR("analysis %i (%s) not supported yet",analysis_type,EnumToString(analysis_type));
+	}
 }
 /*}}}*/
@@ -2228,4 +2185,39 @@
 }
 /*}}}*/
+/*FUNCTION Penta::CreateKMatrixDiagnosticHoriz {{{1*/
+void  Penta::CreateKMatrixDiagnosticHoriz(Mat Kgg){
+
+	int approximation;
+	inputs->GetParameterValue(&approximation,ApproximationEnum);
+
+	switch(approximation){
+		case MacAyealApproximationEnum:
+			CreateKMatrixDiagnosticMacAyeal( Kgg);
+			break;
+		case PattynApproximationEnum:
+			CreateKMatrixDiagnosticPattyn( Kgg);
+			break;
+		case StokesApproximationEnum:
+			CreateKMatrixDiagnosticStokes( Kgg);
+			break;
+		case HutterApproximationEnum:
+			break;
+		case NoneApproximationEnum:
+			break;
+		case MacAyealPattynApproximationEnum:
+			CreateKMatrixDiagnosticMacAyeal( Kgg);
+			CreateKMatrixDiagnosticPattyn( Kgg);
+			CreateKMatrixCouplingMacAyealPattyn( Kgg);
+			break;
+		case PattynStokesApproximationEnum:
+			CreateKMatrixDiagnosticPattyn( Kgg);
+			CreateKMatrixDiagnosticStokes( Kgg);
+			CreateKMatrixCouplingPattynStokes( Kgg);
+			break;
+		default:
+			ISSMERROR("Approximation %s not supported yet",EnumToString(approximation));
+	}
+}
+/*}}}*/
 /*FUNCTION Penta::CreateKMatrixDiagnosticHutter{{{1*/
 void  Penta::CreateKMatrixDiagnosticHutter(Mat Kgg){
Index: /issm/trunk/src/c/objects/Elements/Penta.h
===================================================================
--- /issm/trunk/src/c/objects/Elements/Penta.h	(revision 5840)
+++ /issm/trunk/src/c/objects/Elements/Penta.h	(revision 5841)
@@ -123,4 +123,5 @@
 		void	  CreateKMatrixCouplingMacAyealPattyn( Mat Kgg);
 		void	  CreateKMatrixCouplingPattynStokes( Mat Kgg);
+		void	  CreateKMatrixDiagnosticHoriz( Mat Kgg);
 		void	  CreateKMatrixDiagnosticHutter( Mat Kgg);
 		void	  CreateKMatrixDiagnosticMacAyeal( Mat Kgg);
