Index: /issm/trunk-jpl/src/c/analyses/DepthAverageAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/DepthAverageAnalysis.cpp	(revision 17691)
+++ /issm/trunk-jpl/src/c/analyses/DepthAverageAnalysis.cpp	(revision 17692)
@@ -59,5 +59,4 @@
 		case Mesh2DverticalEnum: dim = 2; break;
 		case Mesh3DEnum:         dim = 3; break;
-		case Mesh3DtetrasEnum:    dim = 3; break;
 		default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
 	}
Index: /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp	(revision 17691)
+++ /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp	(revision 17692)
@@ -36,5 +36,5 @@
 void L2ProjectionBaseAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
 
-	if(iomodel->domaintype==Mesh3DEnum || iomodel->domaintype==Mesh3DtetrasEnum){
+	if(iomodel->domaintype==Mesh3DEnum){
 		iomodel->FetchData(2,MeshVertexonbaseEnum,MeshVertexonsurfaceEnum);
 	}
@@ -82,8 +82,4 @@
 			break;
 		case Mesh3DEnum:
-			if(!element->IsOnBase()) return NULL;
-			basalelement = element->SpawnBasalElement();
-			break;
-		case Mesh3DtetrasEnum:
 			if(!element->IsOnBase()) return NULL;
 			basalelement = element->SpawnBasalElement();
@@ -145,8 +141,4 @@
 			break;
 		case Mesh3DEnum:
-			if(!element->IsOnBase()) return NULL;
-			basalelement = element->SpawnBasalElement();
-			break;
-		case Mesh3DtetrasEnum:
 			if(!element->IsOnBase()) return NULL;
 			basalelement = element->SpawnBasalElement();
@@ -212,8 +204,9 @@
 void L2ProjectionBaseAnalysis::InputUpdateFromSolution(IssmDouble* solution,Element* element){/*{{{*/
 
-	int inputenum,domaintype;
+	int inputenum,domaintype,elementtype;
 
 	element->FindParam(&inputenum,InputToL2ProjectEnum);
 	element->FindParam(&domaintype,DomainTypeEnum);
+	element->FindParam(&elementtype,MeshElementtypeEnum);
 	switch(domaintype){
 		case Mesh2DhorizontalEnum:
@@ -221,9 +214,11 @@
 			break;
 		case Mesh2DverticalEnum:
-		case Mesh3DtetrasEnum:
 			element->InputUpdateFromSolutionOneDof(solution,inputenum);
 			break;
 		case Mesh3DEnum:
-			element->InputUpdateFromSolutionOneDofCollapsed(solution,inputenum);
+			if(elementtype==TetraEnum)
+			 element->InputUpdateFromSolutionOneDof(solution,inputenum);
+			else
+			 element->InputUpdateFromSolutionOneDofCollapsed(solution,inputenum);
 			break;
 		default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
Index: /issm/trunk-jpl/src/c/analyses/LsfReinitializationAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/LsfReinitializationAnalysis.cpp	(revision 17691)
+++ /issm/trunk-jpl/src/c/analyses/LsfReinitializationAnalysis.cpp	(revision 17692)
@@ -261,5 +261,4 @@
 		case Mesh2DverticalEnum:   dim = 2; dofpernode = 1; break;
 		case Mesh3DEnum:           dim = 3; dofpernode = 1; break;
-		case Mesh3DtetrasEnum:     dim = 3; dofpernode = 1; break;
 		default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
 	}
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 17691)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 17692)
@@ -20,5 +20,4 @@
 			 switch(domaintype){
 				 case Mesh3DEnum:           numdofs=2; break;
-				 case Mesh3DtetrasEnum:     numdofs=2; break;
 				 case Mesh2DhorizontalEnum: numdofs=2; break;
 				 case Mesh2DverticalEnum:   numdofs=1; break;
@@ -30,5 +29,4 @@
 			 switch(domaintype){
 				 case Mesh3DEnum:         numdofs=2; break;
-				 case Mesh3DtetrasEnum:   numdofs=2; break;
 				 case Mesh2DverticalEnum: numdofs=1; break;
 				 default: _error_("mesh type not supported yet");
@@ -39,5 +37,4 @@
 			 switch(domaintype){
 				 case Mesh3DEnum:         numdofs=3; break;
-				 case Mesh3DtetrasEnum:   numdofs=3; break;
 				 case Mesh2DverticalEnum: numdofs=2; break;
 				 default: _error_("mesh type not supported yet");
@@ -48,5 +45,4 @@
 			 switch(domaintype){
 				 case Mesh3DEnum:         numdofs=4; break;
-				 case Mesh3DtetrasEnum:   numdofs=4; break;
 				 case Mesh2DverticalEnum: numdofs=3; break;
 				 default: _error_("mesh type not supported yet");
@@ -227,12 +223,4 @@
 		if(dakota_analysis)elements->InputDuplicate(VzEnum,QmuVzEnum);
 	}
-	if(iomodel->domaintype==Mesh3DtetrasEnum){
-		iomodel->FetchDataToInput(elements,MeshVertexonbaseEnum);
-		iomodel->FetchDataToInput(elements,MeshVertexonsurfaceEnum);
-		iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
-		iomodel->FetchDataToInput(elements,LoadingforceZEnum);
-		iomodel->FetchDataToInput(elements,VzEnum,0.);
-		if(dakota_analysis)elements->InputDuplicate(VzEnum,QmuVzEnum);
-	}
 	if(iomodel->domaintype==Mesh2DverticalEnum){
 		iomodel->FetchDataToInput(elements,MeshVertexonsurfaceEnum);
@@ -431,5 +419,5 @@
 			iomodel->FetchData(&nodeonbase,NULL,NULL,MeshVertexonbaseEnum);
 			iomodel->FetchData(&groundedice_ls,NULL,NULL,MaskGroundediceLevelsetEnum);
-			if(iomodel->domaintype==Mesh3DEnum || iomodel->domaintype==Mesh3DtetrasEnum){
+			if(iomodel->domaintype==Mesh3DEnum){
 				iomodel->FetchData(&spcvz,&Mz,&Nz,StressbalanceSpcvzEnum);
 			}
@@ -440,5 +428,5 @@
 				_error_("not supported yet");
 			}
-			if(iomodel->domaintype==Mesh3DEnum || iomodel->domaintype==Mesh3DtetrasEnum){
+			if(iomodel->domaintype==Mesh3DEnum){
 				IoModelToConstraintsx(constraints,iomodel,StressbalanceSpcvxEnum,StressbalanceAnalysisEnum,finiteelement,0);
 				IoModelToConstraintsx(constraints,iomodel,StressbalanceSpcvyEnum,StressbalanceAnalysisEnum,finiteelement,1);
@@ -520,8 +508,8 @@
 	iomodel->FetchData(&spcvz,&Mz,&Nz,StressbalanceSpcvzEnum);
 	iomodel->FetchData(&nodeonSSA,NULL,NULL,FlowequationBorderSSAEnum);
-	if(iomodel->domaintype==Mesh3DEnum || iomodel->domaintype==Mesh3DtetrasEnum)iomodel->FetchData(&nodeonHO,NULL,NULL,FlowequationBorderHOEnum);
-	if(iomodel->domaintype==Mesh3DEnum || iomodel->domaintype==Mesh3DtetrasEnum)iomodel->FetchData(&nodeonFS,NULL,NULL,FlowequationBorderFSEnum);
-	if(iomodel->domaintype==Mesh3DEnum || iomodel->domaintype==Mesh3DtetrasEnum)iomodel->FetchData(&nodeonbase,NULL,NULL,MeshVertexonbaseEnum);
-	if(iomodel->domaintype==Mesh3DEnum || iomodel->domaintype==Mesh3DtetrasEnum)iomodel->FetchData(&groundedice_ls,NULL,NULL,MaskGroundediceLevelsetEnum);
+	if(iomodel->domaintype==Mesh3DEnum)iomodel->FetchData(&nodeonHO,NULL,NULL,FlowequationBorderHOEnum);
+	if(iomodel->domaintype==Mesh3DEnum)iomodel->FetchData(&nodeonFS,NULL,NULL,FlowequationBorderFSEnum);
+	if(iomodel->domaintype==Mesh3DEnum)iomodel->FetchData(&nodeonbase,NULL,NULL,MeshVertexonbaseEnum);
+	if(iomodel->domaintype==Mesh3DEnum)iomodel->FetchData(&groundedice_ls,NULL,NULL,MaskGroundediceLevelsetEnum);
 	iomodel->FetchData(&vertices_type,NULL,NULL,FlowequationVertexEquationEnum);
 	iomodel->FetchData(&surface,NULL,NULL,SurfaceEnum);
@@ -750,8 +738,8 @@
 	iomodel->DeleteData(spcvz,StressbalanceSpcvzEnum);
 	iomodel->DeleteData(nodeonSSA,FlowequationBorderSSAEnum);
-	if(iomodel->domaintype==Mesh3DEnum || iomodel->domaintype==Mesh3DtetrasEnum)iomodel->DeleteData(nodeonHO,FlowequationBorderHOEnum);
-	if(iomodel->domaintype==Mesh3DEnum || iomodel->domaintype==Mesh3DtetrasEnum)iomodel->DeleteData(nodeonFS,FlowequationBorderFSEnum);
-	if(iomodel->domaintype==Mesh3DEnum || iomodel->domaintype==Mesh3DtetrasEnum)iomodel->DeleteData(nodeonbase,MeshVertexonbaseEnum);
-	if(iomodel->domaintype==Mesh3DEnum || iomodel->domaintype==Mesh3DtetrasEnum)iomodel->DeleteData(groundedice_ls,MaskGroundediceLevelsetEnum);
+	if(iomodel->domaintype==Mesh3DEnum)iomodel->DeleteData(nodeonHO,FlowequationBorderHOEnum);
+	if(iomodel->domaintype==Mesh3DEnum)iomodel->DeleteData(nodeonFS,FlowequationBorderFSEnum);
+	if(iomodel->domaintype==Mesh3DEnum)iomodel->DeleteData(nodeonbase,MeshVertexonbaseEnum);
+	if(iomodel->domaintype==Mesh3DEnum)iomodel->DeleteData(groundedice_ls,MaskGroundediceLevelsetEnum);
 	iomodel->DeleteData(vertices_type,FlowequationVertexEquationEnum);
 	iomodel->DeleteData(surface,SurfaceEnum);
@@ -998,5 +986,4 @@
 		case Mesh2DverticalEnum:   dim = 2; dofpernode = 1; break;
 		case Mesh3DEnum:           dim = 3; dofpernode = 2; break;
-		case Mesh3DtetrasEnum:     dim = 3; dofpernode = 2; break;
 		default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
 	}
@@ -1216,5 +1203,4 @@
 		case Mesh2DhorizontalEnum: dim = 2;break;
 		case Mesh3DEnum:           dim = 2;break;
-		case Mesh3DtetrasEnum:     dim = 2;break;
 		default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
 	}
@@ -1302,5 +1288,4 @@
 		case Mesh2DhorizontalEnum: dim = 2; bsize = 3; break;
 		case Mesh3DEnum:           dim = 2; bsize = 3; break;
-		case Mesh3DtetrasEnum:     dim = 2; bsize = 3; break;
 		default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
 	}
@@ -1415,5 +1400,4 @@
 		case Mesh2DhorizontalEnum: dim = 2;break;
 		case Mesh3DEnum:           dim = 2;break;
-		case Mesh3DtetrasEnum:     dim = 2;break;
 		default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
 	}
@@ -1481,5 +1465,4 @@
 		case Mesh2DhorizontalEnum: dim = 2;break;
 		case Mesh3DEnum:           dim = 2;break;
-		case Mesh3DtetrasEnum:     dim = 2;break;
 		default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
 	}
@@ -2180,5 +2163,4 @@
 		case Mesh2DverticalEnum: dim = 2; bsize = 2; break;
 		case Mesh3DEnum:         dim = 3; bsize = 5; break;
-		case Mesh3DtetrasEnum:   dim = 3; bsize = 5; break;
 		default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
 	}
@@ -2260,5 +2242,4 @@
 		case Mesh2DverticalEnum: dim = 2; break;
 		case Mesh3DEnum:         dim = 3; break;
-		case Mesh3DtetrasEnum:   dim = 3; break;
 		default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
 	}
@@ -2346,5 +2327,4 @@
 		case Mesh2DverticalEnum: dim = 2; break;
 		case Mesh3DEnum:         dim = 3; break;
-		case Mesh3DtetrasEnum:   dim = 3; break;
 		default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
 	}
@@ -2423,5 +2403,4 @@
 		case Mesh2DverticalEnum: dim = 2; break;
 		case Mesh3DEnum:         dim = 3; break;
-		case Mesh3DtetrasEnum:   dim = 3; break;
 		default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
 	}
@@ -2485,5 +2464,4 @@
 		case Mesh2DverticalEnum: dim = 2; break;
 		case Mesh3DEnum:         dim = 3; break;
-		case Mesh3DtetrasEnum:   dim = 3; break;
 		default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
 	}
@@ -2684,5 +2662,4 @@
 		case Mesh2DverticalEnum: dim = 2; break;
 		case Mesh3DEnum:         dim = 3; break;
-		case Mesh3DtetrasEnum:   dim = 3; break;
 		default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
 	}
@@ -2772,5 +2749,4 @@
 		case Mesh2DverticalEnum: dim = 2; break;
 		case Mesh3DEnum:         dim = 3; break;
-		case Mesh3DtetrasEnum:   dim = 3; break;
 		default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
 	}
@@ -2914,5 +2890,4 @@
 		case Mesh2DverticalEnum: dim = 2; epssize = 3; break;
 		case Mesh3DEnum:         dim = 3; epssize = 6; break;
-		case Mesh3DtetrasEnum:   dim = 3; epssize = 6; break;
 		default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
 	}
@@ -2986,5 +2961,4 @@
 		case Mesh2DverticalEnum: dim = 2; epssize = 3; break;
 		case Mesh3DEnum:         dim = 3; epssize = 6; break;
-		case Mesh3DtetrasEnum:   dim = 3; epssize = 6; break;
 		default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
 	}
@@ -3072,5 +3046,4 @@
 		case Mesh2DverticalEnum: dim = 2;break;
 		case Mesh3DEnum:         dim = 3;break;
-		case Mesh3DtetrasEnum:   dim = 3;break;
 		default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
 	}
@@ -3143,5 +3116,4 @@
 		case Mesh2DverticalEnum: dim = 2;break;
 		case Mesh3DEnum:         dim = 3;break;
-		case Mesh3DtetrasEnum:   dim = 3;break;
 		default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
 	}
@@ -3207,5 +3179,4 @@
 		case Mesh2DverticalEnum: dim = 2; break;
 		case Mesh3DEnum:         dim = 3; break;
-		case Mesh3DtetrasEnum:   dim = 3; break;
 		default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
 	}
@@ -3293,5 +3264,4 @@
 		case Mesh2DverticalEnum: dim = 2;break;
 		case Mesh3DEnum:         dim = 3;break;
-		case Mesh3DtetrasEnum:   dim = 3;break;
 		default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
 	}
@@ -3408,5 +3378,4 @@
 		case Mesh2DverticalEnum: dim = 2; break;
 		case Mesh3DEnum:         dim = 3; break;
-		case Mesh3DtetrasEnum:   dim = 3; break;
 		default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
 	}
@@ -3486,5 +3455,4 @@
 		case Mesh2DverticalEnum: dim = 2; tausize = 3; break;
 		case Mesh3DEnum:         dim = 3; tausize = 6; break;
-		case Mesh3DtetrasEnum:   dim = 3; tausize = 6; break;
 		default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
 	}
@@ -3663,5 +3631,4 @@
 		case Mesh2DverticalEnum: dim = 2; break;
 		case Mesh3DEnum:         dim = 3; break;
-		case Mesh3DtetrasEnum:   dim = 3; break;
 		default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
 	}
@@ -3740,5 +3707,4 @@
 		case Mesh2DverticalEnum: dim = 2; break;
 		case Mesh3DEnum:         dim = 3; break;
-		case Mesh3DtetrasEnum:   dim = 3; break;
 		default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
 	}
@@ -4093,5 +4059,4 @@
 		case Mesh2DverticalEnum: dim = 2; break;
 		case Mesh3DEnum:         dim = 3; break;
-		case Mesh3DtetrasEnum:   dim = 3; break;
 		default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
 	}
@@ -4160,5 +4125,4 @@
 		case Mesh2DverticalEnum: dim = 2; break;
 		case Mesh3DEnum:         dim = 3; break;
-		case Mesh3DtetrasEnum:   dim = 3; break;
 		default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
 	}
@@ -4246,5 +4210,4 @@
 		case Mesh2DverticalEnum: dim = 2; break;
 		case Mesh3DEnum:         dim = 3; break;
-		case Mesh3DtetrasEnum:   dim = 3; break;
 		default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
 	}
@@ -4344,5 +4307,4 @@
 		case Mesh2DverticalEnum: dim = 2; tausize = 3; break;
 		case Mesh3DEnum:         dim = 3; tausize = 6; break;
-		case Mesh3DtetrasEnum:   dim = 3; tausize = 6; break;
 		default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
 	}
@@ -4558,5 +4520,4 @@
 		case Mesh2DverticalEnum: dim = 2; tausize = 3; break;
 		case Mesh3DEnum:         dim = 3; tausize = 6; break;
-		case Mesh3DtetrasEnum:   dim = 3; tausize = 6; break;
 		default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
 	}
Index: /issm/trunk-jpl/src/c/classes/IoModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/IoModel.cpp	(revision 17691)
+++ /issm/trunk-jpl/src/c/classes/IoModel.cpp	(revision 17692)
@@ -31,4 +31,6 @@
 
 	this->domaintype=-1;
+	this->domaindim=-1;
+	this->meshelementtype=-1;
 	this->numberofvertices=-1;
 	this->numberofelements=-1;
@@ -76,4 +78,6 @@
 
 	FetchData(&this->domaintype,DomainTypeEnum);
+	FetchData(&this->domaindim,DomainDimensionEnum);
+	FetchData(&this->meshelementtype,MeshElementtypeEnum);
 	FetchData(&this->numberofvertices,MeshNumberofverticesEnum);
 	FetchData(&this->numberofelements,MeshNumberofelementsEnum);
Index: /issm/trunk-jpl/src/c/classes/IoModel.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/IoModel.h	(revision 17691)
+++ /issm/trunk-jpl/src/c/classes/IoModel.h	(revision 17692)
@@ -32,4 +32,6 @@
 		/*Mesh properties and connectivity tables*/
 		int  domaintype;
+		int  domaindim;
+		int  meshelementtype;
 		int  numberofvertices;
 		int  numberofelements;
Index: /issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 17691)
+++ /issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 17692)
@@ -51,9 +51,8 @@
 			break;
 		case P1bubbleEnum:
-			switch(iomodel->domaintype){
-				case Mesh2DhorizontalEnum: elementnbv = 3; break;
-				case Mesh2DverticalEnum:   elementnbv = 3; break;
-				case Mesh3DtetrasEnum:     elementnbv = 4; break;
-				case Mesh3DEnum:           elementnbv = 6; break;
+			switch(iomodel->meshelementtype){
+				case TriaEnum:  elementnbv = 3; break;
+				case TetraEnum: elementnbv = 4; break;
+				case PentaEnum: elementnbv = 6; break;
 				default: _error_("mesh type not supported yet");
 			}
@@ -73,5 +72,5 @@
 		case P2Enum:
 			EdgesPartitioning(&my_edges,iomodel);
-	      if(iomodel->domaintype==Mesh3DEnum){
+	      if(iomodel->meshelementtype==PentaEnum){
 				FacesPartitioning(&my_faces,iomodel);
 			}
@@ -118,5 +117,5 @@
 					}
 				}
-				if(iomodel->domaintype==Mesh3DEnum){
+				if(iomodel->meshelementtype==PentaEnum){
 					for(i=0;i<iomodel->numberoffaces;i++){
 						if(iomodel->faces[i*6+5]==2){/*Vertical quads*/
Index: /issm/trunk-jpl/src/c/modules/MeshPartitionx/MeshPartitionx.h
===================================================================
--- /issm/trunk-jpl/src/c/modules/MeshPartitionx/MeshPartitionx.h	(revision 17691)
+++ /issm/trunk-jpl/src/c/modules/MeshPartitionx/MeshPartitionx.h	(revision 17692)
@@ -11,5 +11,5 @@
 template <class doubletype> 
 int MeshPartitionx(int** pepart, int** pnpart, int numberofelements,int numberofnodes,int* elements,
-		int numberofelements2d,int numberofnodes2d,doubletype* elements2d,int numlayers,int elements_width, int domaintype,int num_procs){
+		int numberofelements2d,int numberofnodes2d,doubletype* elements2d,int numlayers,int elements_width, int meshelementtype,int num_procs){
 
 	int noerr=1;
@@ -31,8 +31,7 @@
 	int  edgecut=1;
 
-	switch(domaintype){
-		case Mesh2DhorizontalEnum:
-		case Mesh2DverticalEnum:
-		case Mesh3DtetrasEnum:
+	switch(meshelementtype){
+		case TriaEnum:
+		case TetraEnum:
 			epart=xNew<int>(numberofelements);
 			npart=xNew<int>(numberofnodes);
@@ -59,5 +58,5 @@
 			else _error_("At least one processor is required");
 			break;
-		case Mesh3DEnum:
+		case PentaEnum:
 			/*We have a 3d mesh, made of a regularly extruded 2d mesh. We first partition the 2d mesh, then we extrude the partition: */
 
@@ -111,5 +110,5 @@
 			break;
 		default:
-			_error_("mesh type "<<EnumToStringx(domaintype)<<" not supported yet");
+			_error_("mesh type "<<EnumToStringx(meshelementtype)<<" not supported yet");
 	}
 
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp	(revision 17691)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp	(revision 17692)
@@ -23,50 +23,42 @@
 
 	/*Mesh dependent variables*/
-	if(iomodel->domaintype==Mesh2DhorizontalEnum){
-		elementnbv = 3;
-		elementnbe = 3;
-		elementedges         = xNew<int>(elementnbe*2);
-		elementedges_markers = xNew<int>(elementnbe);
-		elementedges[2*0+0] = 1; elementedges[2*0+1] = 2; elementedges_markers[0] = 1;
-		elementedges[2*1+0] = 2; elementedges[2*1+1] = 0; elementedges_markers[1] = 1;
-		elementedges[2*2+0] = 0; elementedges[2*2+1] = 1; elementedges_markers[2] = 1;
-	}
-	else if(iomodel->domaintype==Mesh2DverticalEnum){
-		elementnbv = 3;
-		elementnbe = 3;
-		elementedges         = xNew<int>(elementnbe*2);
-		elementedges_markers = xNew<int>(elementnbe);
-		elementedges[2*0+0] = 1; elementedges[2*0+1] = 2; elementedges_markers[0] = 1;
-		elementedges[2*1+0] = 2; elementedges[2*1+1] = 0; elementedges_markers[1] = 1;
-		elementedges[2*2+0] = 0; elementedges[2*2+1] = 1; elementedges_markers[2] = 1;
-	}
-	else if(iomodel->domaintype==Mesh3DtetrasEnum){
-		elementnbv = 4;
-		elementnbe = 6;
-		elementedges         = xNew<int>(elementnbe*2);
-		elementedges_markers = xNew<int>(elementnbe);
-		elementedges[2*0+0] = 1; elementedges[2*0+1] = 2; elementedges_markers[0] = 1;
-		elementedges[2*1+0] = 2; elementedges[2*1+1] = 0; elementedges_markers[1] = 1;
-		elementedges[2*2+0] = 0; elementedges[2*2+1] = 1; elementedges_markers[2] = 1;
-		elementedges[2*3+0] = 0; elementedges[2*3+1] = 3; elementedges_markers[3] = 1;
-		elementedges[2*4+0] = 1; elementedges[2*4+1] = 3; elementedges_markers[4] = 1;
-		elementedges[2*5+0] = 2; elementedges[2*5+1] = 3; elementedges_markers[5] = 1;
-	}
-	else if(iomodel->domaintype==Mesh3DEnum){
-		elementnbv = 6;
-		elementnbe = 9;
-		elementedges         = xNew<int>(elementnbe*2);
-		elementedges_markers = xNew<int>(elementnbe);
-		elementedges[2*0+0] = 0; elementedges[2*0+1] = 3; elementedges_markers[0] = 2;
-		elementedges[2*1+0] = 1; elementedges[2*1+1] = 4; elementedges_markers[1] = 2;
-		elementedges[2*2+0] = 2; elementedges[2*2+1] = 5; elementedges_markers[2] = 2;
-		elementedges[2*3+0] = 1; elementedges[2*3+1] = 2; elementedges_markers[3] = 1;
-		elementedges[2*4+0] = 2; elementedges[2*4+1] = 0; elementedges_markers[4] = 1;
-		elementedges[2*5+0] = 0; elementedges[2*5+1] = 1; elementedges_markers[5] = 1;
-		elementedges[2*6+0] = 4; elementedges[2*6+1] = 5; elementedges_markers[6] = 1;
-		elementedges[2*7+0] = 5; elementedges[2*7+1] = 3; elementedges_markers[7] = 1;
-		elementedges[2*8+0] = 3; elementedges[2*8+1] = 4; elementedges_markers[8] = 1;
-	}
-	else{
+	switch(iomodel->meshelementtype){
+		case TriaEnum:
+			elementnbv = 3;
+			elementnbe = 3;
+			elementedges         = xNew<int>(elementnbe*2);
+			elementedges_markers = xNew<int>(elementnbe);
+			elementedges[2*0+0] = 1; elementedges[2*0+1] = 2; elementedges_markers[0] = 1;
+			elementedges[2*1+0] = 2; elementedges[2*1+1] = 0; elementedges_markers[1] = 1;
+			elementedges[2*2+0] = 0; elementedges[2*2+1] = 1; elementedges_markers[2] = 1;
+			break;
+		case TetraEnum:
+			elementnbv = 4;
+			elementnbe = 6;
+			elementedges         = xNew<int>(elementnbe*2);
+			elementedges_markers = xNew<int>(elementnbe);
+			elementedges[2*0+0] = 1; elementedges[2*0+1] = 2; elementedges_markers[0] = 1;
+			elementedges[2*1+0] = 2; elementedges[2*1+1] = 0; elementedges_markers[1] = 1;
+			elementedges[2*2+0] = 0; elementedges[2*2+1] = 1; elementedges_markers[2] = 1;
+			elementedges[2*3+0] = 0; elementedges[2*3+1] = 3; elementedges_markers[3] = 1;
+			elementedges[2*4+0] = 1; elementedges[2*4+1] = 3; elementedges_markers[4] = 1;
+			elementedges[2*5+0] = 2; elementedges[2*5+1] = 3; elementedges_markers[5] = 1;
+			break;
+		case PentaEnum:
+			elementnbv = 6;
+			elementnbe = 9;
+			elementedges         = xNew<int>(elementnbe*2);
+			elementedges_markers = xNew<int>(elementnbe);
+			elementedges[2*0+0] = 0; elementedges[2*0+1] = 3; elementedges_markers[0] = 2;
+			elementedges[2*1+0] = 1; elementedges[2*1+1] = 4; elementedges_markers[1] = 2;
+			elementedges[2*2+0] = 2; elementedges[2*2+1] = 5; elementedges_markers[2] = 2;
+			elementedges[2*3+0] = 1; elementedges[2*3+1] = 2; elementedges_markers[3] = 1;
+			elementedges[2*4+0] = 2; elementedges[2*4+1] = 0; elementedges_markers[4] = 1;
+			elementedges[2*5+0] = 0; elementedges[2*5+1] = 1; elementedges_markers[5] = 1;
+			elementedges[2*6+0] = 4; elementedges[2*6+1] = 5; elementedges_markers[6] = 1;
+			elementedges[2*7+0] = 5; elementedges[2*7+1] = 3; elementedges_markers[7] = 1;
+			elementedges[2*8+0] = 3; elementedges[2*8+1] = 4; elementedges_markers[8] = 1;
+			break;
+		default:
 		_error_("mesh dimension not supported yet");
 	}
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 17691)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 17692)
@@ -26,21 +26,16 @@
 	/*Create elements*/
 	if(control_analysis)iomodel->FetchData(3,InversionControlParametersEnum,InversionMinParametersEnum,InversionMaxParametersEnum);
-	switch(iomodel->domaintype){
-		case Mesh2DhorizontalEnum:
+	switch(iomodel->meshelementtype){
+		case TriaEnum:
 			for(i=0;i<iomodel->numberofelements;i++){
 				if(iomodel->my_elements[i]) elements->AddObject(new Tria(i+1,i,i,iomodel,nummodels));
 			}
 			break;
-		case Mesh2DverticalEnum:
-			for(i=0;i<iomodel->numberofelements;i++){
-				if(iomodel->my_elements[i]) elements->AddObject(new Tria(i+1,i,i,iomodel,nummodels));
-			}
-			break;
-		case Mesh3DtetrasEnum:
+		case TetraEnum:
 			for(i=0;i<iomodel->numberofelements;i++){
 				if(iomodel->my_elements[i]) elements->AddObject(new Tetra(i+1,i,i,iomodel,nummodels));
 			}
 			break;
-		case Mesh3DEnum:
+		case PentaEnum:
 			iomodel->FetchData(2,MeshUpperelementsEnum,MeshLowerelementsEnum);
 			for(i=0;i<iomodel->numberofelements;i++){
@@ -59,11 +54,11 @@
 			iomodel->FetchDataToInput(elements,DamageDEnum);
 			for (i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matice(i+1,i,iomodel));
-			switch(iomodel->domaintype){
-				case Mesh2DhorizontalEnum: case Mesh2DverticalEnum:
+			switch(iomodel->domaindim){
+				case 2:
 					elements->InputDuplicate(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum);
 					elements->InputDuplicate(DamageDEnum,DamageDbarEnum);
 					if(dakota_analysis) elements->InputDuplicate(MaterialsRheologyBbarEnum,QmuMaterialsRheologyBEnum);
 					break;
-				case Mesh3DEnum: case Mesh3DtetrasEnum:
+				case 3:
 					if(dakota_analysis) elements->InputDuplicate(MaterialsRheologyBEnum,QmuMaterialsRheologyBEnum); 
 					break;
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateFaces.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateFaces.cpp	(revision 17691)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateFaces.cpp	(revision 17692)
@@ -144,5 +144,5 @@
 
 	/*Mesh specific face indexing per element*/
-	if(iomodel->domaintype==Mesh3DEnum){
+	if(iomodel->meshelementtype==PentaEnum){
 		elementnbv = 6; /*Number of vertices per element*/
 		elementnbf = 5; /*Number of faces per element*/
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 17691)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 17692)
@@ -144,5 +144,5 @@
 			}
 			id0 = id0+iomodel->numberofvertices+iomodel->numberofedges;
-	      if(iomodel->domaintype==Mesh3DEnum){
+	      if(iomodel->meshelementtype==PentaEnum){
 				FacesPartitioning(&my_faces,iomodel);
 				for(i=0;i<iomodel->numberoffaces;i++){
@@ -309,5 +309,5 @@
 			}
 			id0 = id0+iomodel->numberofvertices+iomodel->numberofedges;
-	      if(iomodel->domaintype==Mesh3DEnum){
+	      if(iomodel->meshelementtype==PentaEnum){
 				FacesPartitioning(&my_faces,iomodel);
 				for(i=0;i<iomodel->numberoffaces;i++){
@@ -328,5 +328,5 @@
 
 			/*P1 pressure*/
-	      if(iomodel->domaintype==Mesh3DEnum){
+	      if(iomodel->meshelementtype==PentaEnum){
 				numberoffaces=iomodel->numberoffaces;
 			}
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp	(revision 17691)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp	(revision 17692)
@@ -36,9 +36,8 @@
 
 	/*Get element width*/
-	switch(iomodel->domaintype){
-		case Mesh2DhorizontalEnum: elementswidth=3; break;
-		case Mesh2DverticalEnum:   elementswidth=3; break;
-		case Mesh3DtetrasEnum:     elementswidth=4; break;
-		case Mesh3DEnum:           elementswidth=6; break;
+	switch(iomodel->meshelementtype){
+		case TriaEnum:  elementswidth=3; break;
+		case TetraEnum: elementswidth=4; break;
+		case PentaEnum: elementswidth=6; break;
 		default:                   _error_("mesh not supported yet");
 	}
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 17691)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 17692)
@@ -42,4 +42,6 @@
 	/*Copy some constants from iomodel */
 	parameters->AddObject(iomodel->CopyConstantObject(DomainTypeEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(DomainDimensionEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(MeshElementtypeEnum));
 	parameters->AddObject(iomodel->CopyConstantObject(SettingsOutputFrequencyEnum));
 	parameters->AddObject(iomodel->CopyConstantObject(SteadystateReltolEnum));
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/EdgesPartitioning.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/EdgesPartitioning.cpp	(revision 17691)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/EdgesPartitioning.cpp	(revision 17692)
@@ -18,19 +18,11 @@
 
 	/*Mesh dependent variables*/
-	if(iomodel->domaintype==Mesh2DhorizontalEnum){
-		elementnbe = 3;
+	switch(iomodel->meshelementtype){
+		case TriaEnum:  elementnbe = 3; break;
+		case TetraEnum: elementnbe = 6; break;
+		case PentaEnum: elementnbe = 9; break;
+		default: _error_("mesh dimension not supported yet");
 	}
-	else if(iomodel->domaintype==Mesh2DverticalEnum){
-		elementnbe = 3;
-	}
-	else if(iomodel->domaintype==Mesh3DtetrasEnum){
-		elementnbe = 6;
-	}
-	else if(iomodel->domaintype==Mesh3DEnum){
-		elementnbe = 9;
-	}
-	else{
-		_error_("mesh dimension not supported yet");
-	}
+
 	/*output: */
 	bool* my_edges=xNewZeroInit<bool>(iomodel->numberofedges);
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp	(revision 17691)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp	(revision 17692)
@@ -51,6 +51,6 @@
 	/*Number of vertices per elements, needed to correctly retrieve data: */
 	/*Determine parallel partitioning of elements: we use Metis for now. First load the data, then partition*/
-	switch(iomodel->domaintype){
-		case Mesh2DhorizontalEnum:
+	switch(iomodel->meshelementtype){
+		case TriaEnum:
 			elements_width=3;
 			numberofelements2d = 0;
@@ -58,18 +58,12 @@
 			numlayers          = 0;
 			break;
-		case Mesh2DverticalEnum:
-			elements_width=3;
+		case TetraEnum:
+			elements_width=4;
 			numberofelements2d = 0;
 			numberofvertices2d = 0;
 			numlayers          = 0;
 			break;
-		case Mesh3DtetrasEnum:
-			elements_width=4; //penta elements
-			numberofelements2d = 0;
-			numberofvertices2d = 0;
-			numlayers          = 0;
-			break;
-		case Mesh3DEnum:
-			elements_width=6; //penta elements
+		case PentaEnum:
+			elements_width=6;
 			iomodel->FetchData(&elements2d,NULL,NULL,MeshElements2dEnum);
 			iomodel->Constant(&numberofelements2d,MeshNumberofelements2dEnum);
@@ -81,5 +75,5 @@
 	}
 
-	MeshPartitionx(&epart,&npart,iomodel->numberofelements,iomodel->numberofvertices,iomodel->elements,numberofelements2d,numberofvertices2d,elements2d,numlayers,elements_width,iomodel->domaintype,num_procs);
+	MeshPartitionx(&epart,&npart,iomodel->numberofelements,iomodel->numberofvertices,iomodel->elements,numberofelements2d,numberofvertices2d,elements2d,numlayers,elements_width,iomodel->meshelementtype,num_procs);
 
 	/*Free elements2d: */
