Index: /issm/trunk-jpl/src/c/analyses/control_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/control_core.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/analyses/control_core.cpp	(revision 16291)
@@ -21,5 +21,4 @@
 	int        nsteps;
 	IssmDouble tol_cm;
-	int        dim;
 	int        solution_type;
 	bool       isFS;
@@ -53,5 +52,4 @@
 	femmodel->parameters->FindParam(&cm_jump,NULL,InversionStepThresholdEnum);
 	femmodel->parameters->FindParam(&tol_cm,InversionCostFunctionThresholdEnum);
-	femmodel->parameters->FindParam(&dim,MeshDimensionEnum);
 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
 	femmodel->parameters->FindParam(&isFS,FlowequationIsFSEnum);
Index: /issm/trunk-jpl/src/c/analyses/stressbalance_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/stressbalance_core.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/analyses/stressbalance_core.cpp	(revision 16291)
@@ -14,5 +14,5 @@
 	/*parameters: */
 	bool  dakota_analysis;
-	int   dim;
+	int   meshtype;
 	bool  isSIA,isSSA,isL1L2,isHO,isFS;
 	bool  conserve_loads    = true;
@@ -24,5 +24,5 @@
 
 	/* recover parameters:*/
-	femmodel->parameters->FindParam(&dim,MeshDimensionEnum);
+	femmodel->parameters->FindParam(&meshtype,MeshTypeEnum);
 	femmodel->parameters->FindParam(&isSIA,FlowequationIsSIAEnum);
 	femmodel->parameters->FindParam(&isSSA,FlowequationIsSSAEnum);
@@ -78,5 +78,5 @@
 	}
 
-	if (dim==3 && (isSIA || isSSA || isL1L2 || isHO)){
+	if (meshtype==Mesh3DEnum && (isSIA || isSSA || isL1L2 || isHO)){
 		if(VerboseSolution()) _printf0_("   computing vertical velocities\n");
 		femmodel->SetCurrentConfiguration(StressbalanceVerticalAnalysisEnum);
@@ -90,5 +90,5 @@
 		InputToResultx(femmodel,VelEnum);
 		InputToResultx(femmodel,PressureEnum);
-		if(dim==3) InputToResultx(femmodel,VzEnum);
+		if(meshtype==Mesh3DEnum) InputToResultx(femmodel,VzEnum);
 		femmodel->RequestedOutputsx(requested_outputs,numoutputs);
 	}
Index: /issm/trunk-jpl/src/c/analyses/transient_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/transient_core.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/analyses/transient_core.cpp	(revision 16291)
@@ -25,7 +25,7 @@
 	bool   time_adapt=false;
 	int    output_frequency;
-	int    dim,groundingline_migration;
+	int    meshtype,groundingline_migration;
 	int    numoutputs         = 0;
-	int    *requested_outputs = NULL;
+	int   *requested_outputs = NULL;
 
 	/*intermediary: */
@@ -34,5 +34,5 @@
 
 	//first recover parameters common to all solutions
-	femmodel->parameters->FindParam(&dim,MeshDimensionEnum);
+	femmodel->parameters->FindParam(&meshtype,MeshTypeEnum);
 	femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum);
 	femmodel->parameters->FindParam(&finaltime,TimesteppingFinalTimeEnum);
@@ -63,5 +63,5 @@
 			InputDuplicatex(femmodel,QmuVxEnum,VxEnum);
 			InputDuplicatex(femmodel,QmuVyEnum,VyEnum);
-			if(dim==3){
+			if(meshtype==Mesh3DEnum){
 				InputDuplicatex(femmodel,QmuVzEnum,VzEnum);
 				if(isFS)InputDuplicatex(femmodel,QmuPressureEnum,PressureEnum);
@@ -75,6 +75,6 @@
 		}
 		if(isgroundingline) InputDuplicatex(femmodel,QmuMaskGroundediceLevelsetEnum,MaskGroundediceLevelsetEnum);
-		if(dim==2)InputDuplicatex(femmodel,QmuMaterialsRheologyBEnum,MaterialsRheologyBbarEnum);
-		if(isthermal && dim==3){
+		if(meshtype==Mesh2DhorizontalEnum)InputDuplicatex(femmodel,QmuMaterialsRheologyBEnum,MaterialsRheologyBbarEnum);
+		if(isthermal && meshtype==Mesh3DEnum){
 			//Update Vertex Position after updating Thickness and Bed
 			femmodel->SetCurrentConfiguration(MasstransportAnalysisEnum);
@@ -112,5 +112,5 @@
 		femmodel->parameters->SetParam(save_results,SaveResultsEnum);
 
-		if(isthermal && dim==3){
+		if(isthermal && meshtype==Mesh3DEnum){
 			if(VerboseSolution()) _printf0_("   computing temperatures\n");
 			#ifdef _HAVE_THERMAL_
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16291)
@@ -2573,5 +2573,5 @@
 IssmDouble Tria::MassFlux( IssmDouble* segment){
 
-	int        dim;
+	int        meshtype;
 	IssmDouble mass_flux=0.;
 	IssmDouble xyz_list[NUMVERTICES][3];
@@ -2607,8 +2607,8 @@
 
 	Input* thickness_input=inputs->GetInput(ThicknessEnum); _assert_(thickness_input);
-	this->parameters->FindParam(&dim,MeshDimensionEnum);
+	this->parameters->FindParam(&meshtype,MeshTypeEnum);
 	Input* vx_input=NULL;
 	Input* vy_input=NULL;
-	if(dim==2){
+	if(meshtype==Mesh2DhorizontalEnum){
 		vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
 		vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
@@ -6237,5 +6237,5 @@
 	/*Intermediaries */
 	int        stabilization;
-	int        dim;
+	int        meshtype;
 	IssmDouble Jdet,D_scalar,dt,h;
 	IssmDouble vel,vx,vy,dvxdx,dvydy;
@@ -6256,9 +6256,9 @@
 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
 	this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
-	this->parameters->FindParam(&dim,MeshDimensionEnum);
+	this->parameters->FindParam(&meshtype,MeshTypeEnum);
 	this->parameters->FindParam(&stabilization,MasstransportStabilizationEnum);
 	Input* vxaverage_input=NULL;
 	Input* vyaverage_input=NULL;
-	if(dim==2){
+	if(meshtype==Mesh2DhorizontalEnum){
 		vxaverage_input=inputs->GetInput(VxEnum); _assert_(vxaverage_input);
 		vyaverage_input=inputs->GetInput(VyEnum); _assert_(vyaverage_input);
@@ -6355,5 +6355,5 @@
 
 	/*Intermediaries */
-	int        dim;
+	int        meshtype;
 	IssmDouble xyz_list[NUMVERTICES][3];
 	IssmDouble Jdet,D_scalar,dt,vx,vy;
@@ -6372,8 +6372,8 @@
 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
 	this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
-	this->parameters->FindParam(&dim,MeshDimensionEnum);
+	this->parameters->FindParam(&meshtype,MeshTypeEnum);
 	Input* vxaverage_input=NULL;
 	Input* vyaverage_input=NULL;
-	if(dim==2){
+	if(meshtype==Mesh2DhorizontalEnum){
 		vxaverage_input=inputs->GetInput(VxEnum); _assert_(vxaverage_input);
 		vyaverage_input=inputs->GetInput(VyEnum); _assert_(vyaverage_input);
@@ -6844,5 +6844,5 @@
 	/*Intermediaries */
 	int        stabilization;
-	int        dim;
+	int        meshtype;
 	IssmDouble Jdet,D_scalar,dt,h;
 	IssmDouble vel,vx,vy,dvxdx,dvydy;
@@ -6863,9 +6863,9 @@
 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
 	this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
-	this->parameters->FindParam(&dim,MeshDimensionEnum);
+	this->parameters->FindParam(&meshtype,MeshTypeEnum);
 	this->parameters->FindParam(&stabilization,DamageStabilizationEnum);
 	Input* vxaverage_input=NULL;
 	Input* vyaverage_input=NULL;
-	if(dim==2){
+	if(meshtype==Mesh2DhorizontalEnum){
 		vxaverage_input=inputs->GetInput(VxEnum); _assert_(vxaverage_input);
 		vyaverage_input=inputs->GetInput(VyEnum); _assert_(vyaverage_input);
@@ -7268,5 +7268,5 @@
 
 	/*Intermediaries */
-	int        stabilization,dim;
+	int        stabilization,meshtype;
 	IssmDouble Jdet,vx,vy,dvxdx,dvydy,vel,h;
 	IssmDouble D_scalar;
@@ -7287,8 +7287,8 @@
 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
 	this->parameters->FindParam(&stabilization,BalancethicknessStabilizationEnum);
-	this->parameters->FindParam(&dim,MeshDimensionEnum);
+	this->parameters->FindParam(&meshtype,MeshTypeEnum);
 	Input* vxaverage_input=NULL;
 	Input* vyaverage_input=NULL;
-	if(dim==2){
+	if(meshtype==Mesh2DhorizontalEnum){
 		vxaverage_input=inputs->GetInput(VxEnum); _assert_(vxaverage_input);
 		vyaverage_input=inputs->GetInput(VyEnum); _assert_(vyaverage_input);
@@ -7376,5 +7376,4 @@
 
 	/*Intermediaries*/
-	int        dim;
 	IssmDouble vx,vy,D_scalar,Jdet;
 	IssmDouble xyz_list[NUMVERTICES][3];
@@ -7392,5 +7391,4 @@
 	/*Retrieve all inputs and parameters*/
 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
-	this->parameters->FindParam(&dim,MeshDimensionEnum);
 	Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
 	Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
Index: /issm/trunk-jpl/src/c/classes/IoModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/IoModel.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/classes/IoModel.cpp	(revision 16291)
@@ -30,5 +30,5 @@
 	this->my_vertices=NULL;
 
-	this->dim=-1;
+	this->meshtype=-1;
 	this->numberofvertices=-1;
 	this->numberofelements=-1;
@@ -74,5 +74,5 @@
 	this->my_vertices = NULL;
 
-	FetchData(&this->dim,MeshDimensionEnum);
+	FetchData(&this->meshtype,MeshTypeEnum);
 	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 16290)
+++ /issm/trunk-jpl/src/c/classes/IoModel.h	(revision 16291)
@@ -31,15 +31,15 @@
 
 		/*Mesh properties and connectivity tables*/
-		int   dim;
-		int   numberofvertices;
-		int   numberofelements;
-		int   numberoffaces;
-		int   numberofedges;
-		int  *elements;
-		int  *faces;
-		int  *edges;
-		int  *elementtoedgeconnectivity;
-		int  *singlenodetoelementconnectivity;
-		int  *numbernodetoelementconnectivity;
+		int  meshtype;
+		int  numberofvertices;
+		int  numberofelements;
+		int  numberoffaces;
+		int  numberofedges;
+		int *elements;
+		int *faces;
+		int *edges;
+		int *elementtoedgeconnectivity;
+		int *singlenodetoelementconnectivity;
+		int *numbernodetoelementconnectivity;
 
 		/*Data to synchronize through low level object drivers: */
Index: /issm/trunk-jpl/src/c/classes/Materials/Matice.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 16291)
@@ -701,7 +701,7 @@
 
 	/*Intermediaries*/
-	Element *element      = NULL;
-	Parameters* parameters= NULL;
-	int         dim;
+	Element    *element    = NULL;
+	Parameters *parameters = NULL;
+	int         meshtype;
 
 	/*Recover element*/
@@ -730,6 +730,6 @@
 							parameters=((Penta*)(element))->parameters;
 						}
-						parameters->FindParam(&dim,MeshDimensionEnum);
-						if(dim==2){
+						parameters->FindParam(&meshtype,MeshTypeEnum);
+						if(meshtype==Mesh3DEnum){
 							/*Duplicate rheology input: */
 							this->inputs->AddInput(new TriaInput(MaterialsRheologyBbarEnum,values,P1Enum));
@@ -790,5 +790,5 @@
 	if(control_analysis) iomodel->Constant(&num_control_type,InversionNumControlParametersEnum);
 
-	if(iomodel->dim==2){
+	if(iomodel->meshtype==Mesh2DhorizontalEnum){
 
 		/*Intermediaries*/
@@ -847,5 +847,5 @@
 	/*if 3d*/
 	#ifdef _HAVE_3D_
-	else if(iomodel->dim==3){
+	else if(iomodel->meshtype==Mesh3DEnum){
 
 		/*Intermediaries*/
Index: /issm/trunk-jpl/src/c/classes/Node.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Node.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/classes/Node.cpp	(revision 16291)
@@ -55,5 +55,5 @@
 		_assert_(sqrt( coord_system[0][0]*coord_system[0][0] + coord_system[1][0]*coord_system[1][0]) >1.e-4);
 
-		if(iomodel->dim==3){
+		if(iomodel->meshtype==Mesh3DEnum){
 			/*We have a  3d mesh, we may have collapsed elements, hence dead nodes. Freeze them out: */
 			_assert_(iomodel->Data(MeshVertexonbedEnum)); 
@@ -95,5 +95,5 @@
 				analysis_type==HydrologyDCEfficientAnalysisEnum
 				){
-		if(iomodel->dim==3){
+		if(iomodel->meshtype==Mesh3DEnum){
 			/*On a 3d mesh, we may have collapsed elements, hence dead nodes. Freeze them out: */
 			_assert_(iomodel->Data(MeshVertexonbedEnum));
@@ -104,5 +104,5 @@
 	}
 	if(analysis_type==FreeSurfaceTopAnalysisEnum){
-		if(iomodel->dim==3){
+		if(iomodel->meshtype==Mesh3DEnum){
 			/*On a 3d mesh, we may have collapsed elements, hence dead nodes. Freeze them out: */
 			_assert_(iomodel->Data(MeshVertexonsurfaceEnum));
Index: /issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 16291)
@@ -48,7 +48,7 @@
 			break;
 		case P1bubbleEnum:
-			switch(iomodel->dim){
-				case 2: elementnbv = 3; break;
-				case 3: elementnbv = 6; break;
+			switch(iomodel->meshtype){
+				case Mesh2DhorizontalEnum: elementnbv = 3; break;
+				case Mesh3DEnum:           elementnbv = 6; break;
 				default: _error_("3d is the only supported dimension");
 			}
Index: /issm/trunk-jpl/src/c/modules/MeshPartitionx/MeshPartitionx.h
===================================================================
--- /issm/trunk-jpl/src/c/modules/MeshPartitionx/MeshPartitionx.h	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/MeshPartitionx/MeshPartitionx.h	(revision 16291)
@@ -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 dim,int num_procs){
+		int numberofelements2d,int numberofnodes2d,doubletype* elements2d,int numlayers,int elements_width, int meshtype,int num_procs){
 
 	int noerr=1;
@@ -31,79 +31,83 @@
 	int  edgecut=1;
 
-	if(dim==2){
-		epart=xNew<int>(numberofelements);
-		npart=xNew<int>(numberofnodes);
-		index=xNew<int>(elements_width*numberofelements);
-		for (i=0;i<numberofelements;i++){
-			for (j=0;j<elements_width;j++){
-				*(index+elements_width*i+j)=(*(elements+elements_width*i+j))-1; //-1 for C indexing in Metis
+	switch(meshtype){
+		case Mesh2DhorizontalEnum:
+			epart=xNew<int>(numberofelements);
+			npart=xNew<int>(numberofnodes);
+			index=xNew<int>(elements_width*numberofelements);
+			for (i=0;i<numberofelements;i++){
+				for (j=0;j<elements_width;j++){
+					*(index+elements_width*i+j)=(*(elements+elements_width*i+j))-1; //-1 for C indexing in Metis
+				}
 			}
-		}
 
-		/*Partition using Metis:*/
-		if (num_procs>1){
-			#ifdef _HAVE_METIS_
-			METIS_PartMeshNodalPatch(&numberofelements,&numberofnodes, index, &etype, &numflag, &num_procs, &edgecut, epart, npart);
-			#else
-			_error_("metis has not beed installed. Cannot run with more than 1 cpu");
-			#endif
-		}
-		else if (num_procs==1){
-			/*METIS does not know how to deal with one cpu only!*/
-			for (i=0;i<numberofelements;i++) epart[i]=0;
-			for (i=0;i<numberofnodes;i++)    npart[i]=0;
-		}
-		else _error_("At least one processor is required");
-	}
-	else{
-		/*We have a 3d mesh, made of a regularly extruded 2d mesh. We first partition the 2d mesh, then we extrude the partition: */
+			/*Partition using Metis:*/
+			if (num_procs>1){
+#ifdef _HAVE_METIS_
+				METIS_PartMeshNodalPatch(&numberofelements,&numberofnodes, index, &etype, &numflag, &num_procs, &edgecut, epart, npart);
+#else
+				_error_("metis has not beed installed. Cannot run with more than 1 cpu");
+#endif
+			}
+			else if (num_procs==1){
+				/*METIS does not know how to deal with one cpu only!*/
+				for (i=0;i<numberofelements;i++) epart[i]=0;
+				for (i=0;i<numberofnodes;i++)    npart[i]=0;
+			}
+			else _error_("At least one processor is required");
+			break;
+		case Mesh3DEnum:
+			/*We have a 3d mesh, made of a regularly extruded 2d mesh. We first partition the 2d mesh, then we extrude the partition: */
 
-		/*First build concatenated 2d mesh  from 2d_coll and 2d_noncoll: */
-		epart2d=xNew<int>(numberofelements2d);
-		npart2d=xNew<int>(numberofnodes2d); 
-		index2d=xNew<int>(3*numberofelements2d);
+			/*First build concatenated 2d mesh  from 2d_coll and 2d_noncoll: */
+			epart2d=xNew<int>(numberofelements2d);
+			npart2d=xNew<int>(numberofnodes2d); 
+			index2d=xNew<int>(3*numberofelements2d);
 
-		for (i=0;i<numberofelements2d;i++){
-			for (j=0;j<3;j++){
-				*(index2d+3*i+j)=reCast<int>(*(elements2d+3*i+j))-1; //-1 for C indexing in Metis
+			for (i=0;i<numberofelements2d;i++){
+				for (j=0;j<3;j++){
+					*(index2d+3*i+j)=reCast<int>(*(elements2d+3*i+j))-1; //-1 for C indexing in Metis
+				}
 			}
-		}
 
-		/*Partition using Metis:*/
-		if (num_procs>1){
-			#ifdef _HAVE_METIS_
-			METIS_PartMeshNodalPatch(&numberofelements2d,&numberofnodes2d, index2d, &etype2d, &numflag, &num_procs, &edgecut, epart2d, npart2d);
-			#else
-			_error_("metis has not beed installed. Cannot run with more than 1 cpu");
-			#endif
-		}
-		else if (num_procs==1){
-			/*METIS does not know how to deal with one cpu only!*/
-			for (i=0;i<numberofelements2d;i++) epart2d[i]=0;
-			for (i=0;i<numberofnodes2d;i++)    npart2d[i]=0;
-		}
-		else _error_("At least one processor is required");
+			/*Partition using Metis:*/
+			if (num_procs>1){
+#ifdef _HAVE_METIS_
+				METIS_PartMeshNodalPatch(&numberofelements2d,&numberofnodes2d, index2d, &etype2d, &numflag, &num_procs, &edgecut, epart2d, npart2d);
+#else
+				_error_("metis has not beed installed. Cannot run with more than 1 cpu");
+#endif
+			}
+			else if (num_procs==1){
+				/*METIS does not know how to deal with one cpu only!*/
+				for (i=0;i<numberofelements2d;i++) epart2d[i]=0;
+				for (i=0;i<numberofnodes2d;i++)    npart2d[i]=0;
+			}
+			else _error_("At least one processor is required");
 
-		/*Extrude epart2d to epart, using numlayers: */
-		epart=xNew<int>(numberofelements);
+			/*Extrude epart2d to epart, using numlayers: */
+			epart=xNew<int>(numberofelements);
 
-		count=0;
-		for(i=0;i<(numlayers-1);i++){
-			for(j=0;j<numberofelements2d;j++){
-				epart[count]=epart2d[j];
-				count++;
+			count=0;
+			for(i=0;i<(numlayers-1);i++){
+				for(j=0;j<numberofelements2d;j++){
+					epart[count]=epart2d[j];
+					count++;
+				}
 			}
-		}
 
-		/*Extrude npart2d to npart, using numlayers: */
-		npart=xNew<int>(numberofnodes);
+			/*Extrude npart2d to npart, using numlayers: */
+			npart=xNew<int>(numberofnodes);
 
-		count=0;
-		for(i=0;i<(numlayers);i++){
-			for(j=0;j<numberofnodes2d;j++){
-				npart[count]=npart2d[j];
-				count++;
+			count=0;
+			for(i=0;i<(numlayers);i++){
+				for(j=0;j<numberofnodes2d;j++){
+					npart[count]=npart2d[j];
+					count++;
+				}
 			}
-		}
+			break;
+		default:
+			_error_("mesh type "<<EnumToStringx(meshtype)<<" not supported yet");
 	}
 
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp	(revision 16291)
@@ -16,8 +16,8 @@
 
 	/*Check in 3d*/
-	if(stabilization==3 && iomodel->dim==3) _error_("DG 3d not implemented yet");
+	if(stabilization==3 && iomodel->meshtype==Mesh3DEnum) _error_("DG 3d not implemented yet");
 
 	/*First fetch data: */
-	iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
 	if(stabilization!=3){
 		CreateNodes(pnodes,iomodel,BalancethicknessAnalysisEnum,P1Enum);
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp	(revision 16291)
@@ -42,5 +42,5 @@
 	iomodel->FetchDataToInput(elements,BalancethicknessThickeningRateEnum);
 
-	if(iomodel->dim==3){
+	if(iomodel->meshtype==Mesh3DEnum){
 		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
 		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/CreateNodesBalancevelocity.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/CreateNodesBalancevelocity.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/CreateNodesBalancevelocity.cpp	(revision 16291)
@@ -12,5 +12,5 @@
 
 	/*Check in 3d*/
-	if(iomodel->dim==3) _error_("DG 3d not implemented yet");
+	if(iomodel->meshtype==Mesh3DEnum) _error_("DG 3d not implemented yet");
 
 	/*First fetch data: */
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/UpdateElementsBalancevelocity.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/UpdateElementsBalancevelocity.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/UpdateElementsBalancevelocity.cpp	(revision 16291)
@@ -31,5 +31,5 @@
 	iomodel->FetchDataToInput(elements,BalancethicknessThickeningRateEnum);
 
-	if(iomodel->dim==3){
+	if(iomodel->meshtype==Mesh3DEnum){
 		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
 		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp	(revision 16291)
@@ -11,5 +11,5 @@
 void	CreateNodesBedSlope(Nodes** pnodes, IoModel* iomodel){
 
-	iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
 	CreateNodes(pnodes,iomodel,BedSlopeAnalysisEnum,P1Enum);
 	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp	(revision 16291)
@@ -24,5 +24,5 @@
 	iomodel->FetchDataToInput(elements,BedEnum);
 	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
-	if(iomodel->dim==3){
+	if(iomodel->meshtype==Mesh3DEnum){
 		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
 		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp	(revision 16291)
@@ -23,5 +23,5 @@
 
 	/*Mesh dependent variables*/
-	if(iomodel->dim==2){
+	if(iomodel->meshtype==Mesh2DhorizontalEnum){
 		elementnbv = 3;
 		elementnbe = 3;
@@ -32,5 +32,5 @@
 		elementedges[2*2+0] = 0; elementedges[2*2+1] = 1; elementedges_markers[2] = 1;
 	}
-	else if(iomodel->dim==3){
+	else if(iomodel->meshtype==Mesh3DEnum){
 		elementnbv = 6;
 		elementnbe = 9;
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 16291)
@@ -35,5 +35,5 @@
 
 	#ifdef _HAVE_3D_
-	if(iomodel->dim==3)iomodel->FetchData(2,MeshUpperelementsEnum,MeshLowerelementsEnum);
+	if(iomodel->meshtype==Mesh3DEnum)iomodel->FetchData(2,MeshUpperelementsEnum,MeshLowerelementsEnum);
 	#endif
 	if(control_analysis)iomodel->FetchData(3,InversionControlParametersEnum,InversionMinParametersEnum,InversionMaxParametersEnum);
@@ -44,5 +44,5 @@
 
 			/*Create and add tria element to elements dataset: */
-			if(iomodel->dim==2) elements->AddObject(new Tria(i+1,i,i,iomodel,nummodels));
+			if(iomodel->meshtype==Mesh2DhorizontalEnum) elements->AddObject(new Tria(i+1,i,i,iomodel,nummodels));
 	        #ifdef _HAVE_3D_
 			else       elements->AddObject(new Penta(i+1,i,i,iomodel,nummodels));
@@ -57,5 +57,5 @@
 			for (i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matice(i+1,i,iomodel));
 			if(dakota_analysis){
-				if(iomodel->dim==2) materials->InputDuplicate(MaterialsRheologyBbarEnum,QmuMaterialsRheologyBEnum); 
+				if(iomodel->meshtype==Mesh2DhorizontalEnum) materials->InputDuplicate(MaterialsRheologyBbarEnum,QmuMaterialsRheologyBEnum); 
            #ifdef _HAVE_3D_
 				else       materials->InputDuplicate(MaterialsRheologyBEnum,QmuMaterialsRheologyBEnum); 
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateFaces.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateFaces.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateFaces.cpp	(revision 16291)
@@ -12,5 +12,5 @@
 
 	/*Check Iomodel properties*/
-	if(iomodel->dim!=2)             _error_("only 2d model are supported");
+	if(iomodel->meshtype!=Mesh2DhorizontalEnum)             _error_("only 2d model are supported");
 	if(iomodel->numberofvertices<3) _error_("not enough elements in mesh");
 	_assert_(iomodel->elements);
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp	(revision 16291)
@@ -36,5 +36,5 @@
 
 	/*Get element width (3 or 6)*/
-	if(iomodel->dim==2){
+	if(iomodel->meshtype==Mesh2DhorizontalEnum){
 		elementswidth=3;
 	}
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 16291)
@@ -19,5 +19,5 @@
 
 	int         i,j,m,k;
-	int         numoutputs;
+	int         numoutputs,meshtype;
 	Parameters *parameters       = NULL;
 	IssmDouble *requestedoutputs = NULL;
@@ -45,5 +45,5 @@
 
 	/*Copy some constants from iomodel */
-	parameters->AddObject(iomodel->CopyConstantObject(MeshDimensionEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(MeshTypeEnum));
 	parameters->AddObject(iomodel->CopyConstantObject(SettingsOutputFrequencyEnum));
 	parameters->AddObject(iomodel->CopyConstantObject(SteadystateReltolEnum));
@@ -74,5 +74,4 @@
 	parameters->AddObject(iomodel->CopyConstantObject(MeshNumberofelementsEnum));
 	parameters->AddObject(iomodel->CopyConstantObject(MeshNumberofverticesEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(MeshNumberoflayersEnum));
 	parameters->AddObject(iomodel->CopyConstantObject(SettingsIoGatherEnum));
 	parameters->AddObject(iomodel->CopyConstantObject(SettingsResultsAsPatchesEnum));
@@ -94,5 +93,9 @@
 	parameters->AddObject(iomodel->CopyConstantObject(SurfaceforcingsIssmbgradientsEnum));
 	parameters->AddObject(iomodel->CopyConstantObject(GiaCrossSectionShapeEnum));
-	
+
+	/*For stress balance only*/
+	if(iomodel->meshtype==Mesh3DEnum)
+	 parameters->AddObject(iomodel->CopyConstantObject(MeshNumberoflayersEnum));
+
 	iomodel->Constant(&ispdd,SurfaceforcingsIspddEnum);
 	if(ispdd){
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateSingleNodeToElementConnectivity.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateSingleNodeToElementConnectivity.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateSingleNodeToElementConnectivity.cpp	(revision 16291)
@@ -30,5 +30,5 @@
 
 	/*Get element width (3 or 6)*/
-	if(iomodel->dim==2){
+	if(iomodel->meshtype==Mesh2DhorizontalEnum){
 		elementswidth=3;
 	}
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/EdgesPartitioning.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/EdgesPartitioning.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/EdgesPartitioning.cpp	(revision 16291)
@@ -18,8 +18,8 @@
 
 	/*Mesh dependent variables*/
-	if(iomodel->dim==2){
+	if(iomodel->meshtype==Mesh2DhorizontalEnum){
 		elementnbe = 3;
 	}
-	else if(iomodel->dim==3){
+	else if(iomodel->meshtype==Mesh3DEnum){
 		elementnbe = 9;
 	}
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp	(revision 16291)
@@ -45,7 +45,5 @@
 
 	/*Fetch parameters: */
-	iomodel->Constant(&numberofelements2d,MeshNumberofelements2dEnum);
-	iomodel->Constant(&numberofvertices2d,MeshNumberofvertices2dEnum);
-	iomodel->Constant(&numlayers,MeshNumberoflayersEnum);
+
 	iomodel->Constant(&numrifts,RiftsNumriftsEnum);
 
@@ -55,13 +53,23 @@
 	/*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*/
-	if(iomodel->dim==2){
-		elements_width=3; //tria elements
-	}
-	else{
-		elements_width=6; //penta elements
-		iomodel->FetchData(&elements2d,NULL,NULL,MeshElements2dEnum);
+	switch(iomodel->meshtype){
+		case Mesh2DhorizontalEnum:
+			elements_width=3;
+			numberofelements2d = 0;
+			numberofvertices2d = 0;
+			numlayers          = 0;
+			break;
+		case Mesh3DEnum:
+			elements_width=6; //penta elements
+			iomodel->FetchData(&elements2d,NULL,NULL,MeshElements2dEnum);
+			iomodel->Constant(&numberofelements2d,MeshNumberofelements2dEnum);
+			iomodel->Constant(&numberofvertices2d,MeshNumberofvertices2dEnum);
+			iomodel->Constant(&numlayers,MeshNumberoflayersEnum);
+			break;
+		default:
+			_error_("mesh not supported yet");
 	}
 
-	MeshPartitionx(&epart,&npart,iomodel->numberofelements,iomodel->numberofvertices,iomodel->elements,numberofelements2d,numberofvertices2d,elements2d,numlayers,elements_width,iomodel->dim,num_procs);
+	MeshPartitionx(&epart,&npart,iomodel->numberofelements,iomodel->numberofvertices,iomodel->elements,numberofelements2d,numberofvertices2d,elements2d,numlayers,elements_width,iomodel->meshtype,num_procs);
 
 	/*Free elements2d: */
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp	(revision 16291)
@@ -30,5 +30,5 @@
 
 	/*return if 2d mesh*/
-	if(iomodel->dim==2) return;
+	if(iomodel->meshtype==Mesh2DhorizontalEnum) return;
 
 	/*Fetch data: */
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp	(revision 16291)
@@ -11,5 +11,5 @@
 void	CreateNodesEnthalpy(Nodes** pnodes, IoModel* iomodel){
 
-	iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
 	CreateNodes(pnodes,iomodel,EnthalpyAnalysisEnum,P1Enum);
 	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp	(revision 16291)
@@ -13,5 +13,5 @@
 
 	/*Now, is the model 3d? otherwise, do nothing: */
-	if(iomodel->dim==2)return;
+	if(iomodel->meshtype==Mesh2DhorizontalEnum)return;
 
 	/*Fetch data needed: */
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/FacesPartitioning.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/FacesPartitioning.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/FacesPartitioning.cpp	(revision 16291)
@@ -15,5 +15,5 @@
 
 	/*Check Iomodel properties*/
-	if(iomodel->dim!=2) _error_("only 2d model are supported");
+	if(iomodel->meshtype!=Mesh2DhorizontalEnum) _error_("only 2d model are supported");
 
 	/*Get faces and elements*/
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateNodesFreeSurfaceBase.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateNodesFreeSurfaceBase.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateNodesFreeSurfaceBase.cpp	(revision 16291)
@@ -12,5 +12,5 @@
 
 	/*Create Nodes either DG or CG depending on stabilization*/
-	iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
 	CreateNodes(pnodes,iomodel,FreeSurfaceBaseAnalysisEnum,P1Enum);
 	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp	(revision 16291)
@@ -12,5 +12,5 @@
 
 	/*Now, is the model 3d? otherwise, do nothing: */
-	if (iomodel->dim==2)return;
+	if (iomodel->meshtype==Mesh2DhorizontalEnum)return;
 
 	/*Finite element type*/
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateNodesFreeSurfaceTop.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateNodesFreeSurfaceTop.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateNodesFreeSurfaceTop.cpp	(revision 16291)
@@ -12,5 +12,5 @@
 
 	/*Create Nodes either DG or CG depending on stabilization*/
-	iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
 	CreateNodes(pnodes,iomodel,FreeSurfaceTopAnalysisEnum,P1Enum);
 	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp	(revision 16291)
@@ -12,5 +12,5 @@
 
 	/*Now, is the model 3d? otherwise, do nothing: */
-	if (iomodel->dim==2)return;
+	if (iomodel->meshtype==Mesh2DhorizontalEnum)return;
 
 	int finiteelement = P1Enum;
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateLoadsHydrologyDCInefficient.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateLoadsHydrologyDCInefficient.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateLoadsHydrologyDCInefficient.cpp	(revision 16291)
@@ -22,5 +22,5 @@
 	CreateSingleNodeToElementConnectivity(iomodel);
 	for(int i=0;i<iomodel->numberofvertices;i++){
-		if (iomodel->dim==3){
+		if (iomodel->meshtype==Mesh3DEnum){
 			/*keep only this partition's nodes:*/
 			if((iomodel->my_vertices[i]==1)){
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp	(revision 16291)
@@ -18,5 +18,5 @@
 	if(hydrology_model!=HydrologydcEnum) return;
 
-	iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
 	CreateNodes(pnodes,iomodel,HydrologyDCInefficientAnalysisEnum,P1Enum);
 	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp	(revision 16291)
@@ -18,5 +18,5 @@
 	if(hydrology_model!=HydrologyshreveEnum) return;
 
-	iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
 	CreateNodes(pnodes,iomodel,HydrologyShreveAnalysisEnum,P1Enum);
 	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateNodesMasstransport.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateNodesMasstransport.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateNodesMasstransport.cpp	(revision 16291)
@@ -16,8 +16,8 @@
 
 	/*Check in 3d*/
-	if(stabilization==3 && iomodel->dim==3) _error_("DG 3d not implemented yet");
+	if(stabilization==3 && iomodel->meshtype==Mesh3DEnum) _error_("DG 3d not implemented yet");
 
 	/*Create Nodes either DG or CG depending on stabilization*/
-	iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
 	if(stabilization!=3){
 		CreateNodes(pnodes,iomodel,MasstransportAnalysisEnum,P1Enum);
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp	(revision 16291)
@@ -64,5 +64,5 @@
 	}
 
-	if(iomodel->dim==3){
+	if(iomodel->meshtype==Mesh3DEnum){
 		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
 		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp	(revision 16291)
@@ -10,5 +10,5 @@
 
 	/*if 2d: Error*/
-	if(iomodel->dim==2) _error_("2d meshes not supported yet");
+	if(iomodel->meshtype==Mesh2DhorizontalEnum) _error_("2d meshes not supported yet");
 
 	/*Recover pointer: */
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp	(revision 16291)
@@ -11,5 +11,5 @@
 void	CreateNodesMelting(Nodes** pnodes, IoModel* iomodel){
 
-	iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
 	CreateNodes(pnodes,iomodel,MeltingAnalysisEnum,P1Enum);
 	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp	(revision 16291)
@@ -12,5 +12,5 @@
 
 	/*Now, is the model 3d? otherwise, do nothing: */
-	if(iomodel->dim==2)return;
+	if(iomodel->meshtype==Mesh2DhorizontalEnum)return;
 
 	/*Update elements: */
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 16291)
@@ -47,7 +47,7 @@
 
 		/*Hack for trasient runs (FIXME: to be improved)*/
-		if(solution_type==TransientSolutionEnum && analysis_type==ThermalAnalysisEnum  && iomodel->dim==2) continue;
-		if(solution_type==TransientSolutionEnum && analysis_type==MeltingAnalysisEnum  && iomodel->dim==2) continue;
-		if(solution_type==TransientSolutionEnum && analysis_type==EnthalpyAnalysisEnum && iomodel->dim==2) continue;
+		if(solution_type==TransientSolutionEnum && analysis_type==ThermalAnalysisEnum  && iomodel->meshtype==Mesh2DhorizontalEnum) continue;
+		if(solution_type==TransientSolutionEnum && analysis_type==MeltingAnalysisEnum  && iomodel->meshtype==Mesh2DhorizontalEnum) continue;
+		if(solution_type==TransientSolutionEnum && analysis_type==EnthalpyAnalysisEnum && iomodel->meshtype==Mesh2DhorizontalEnum) continue;
 		if(solution_type==TransientSolutionEnum && analysis_type==ThermalAnalysisEnum && isthermal==false) continue;
 		if(solution_type==TransientSolutionEnum && analysis_type==MeltingAnalysisEnum && isthermal==false) continue;
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp	(revision 16291)
@@ -65,5 +65,5 @@
 
 	/*First: add all the nodes of all the elements belonging to this cpu*/
-	if(iomodel->dim==2){
+	if(iomodel->meshtype==Mesh2DhorizontalEnum){
 		for (i=0;i<iomodel->numberofelements;i++){
 			if (my_elements[i]){
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp	(revision 16291)
@@ -161,8 +161,8 @@
 	iomodel->FetchData(&spcvz,&Mz,&Nz,StressbalanceSpcvzEnum);
 	iomodel->FetchData(&nodeonSSA,NULL,NULL,FlowequationBorderSSAEnum);
-	if(iomodel->dim==3)iomodel->FetchData(&nodeonHO,NULL,NULL,FlowequationBorderHOEnum);
-	if(iomodel->dim==3)iomodel->FetchData(&nodeonFS,NULL,NULL,FlowequationBorderFSEnum);
-	if(iomodel->dim==3)iomodel->FetchData(&nodeonbed,NULL,NULL,MeshVertexonbedEnum);
-	if(iomodel->dim==3)iomodel->FetchData(&groundedice_ls,NULL,NULL,MaskGroundediceLevelsetEnum);
+	if(iomodel->meshtype==Mesh3DEnum)iomodel->FetchData(&nodeonHO,NULL,NULL,FlowequationBorderHOEnum);
+	if(iomodel->meshtype==Mesh3DEnum)iomodel->FetchData(&nodeonFS,NULL,NULL,FlowequationBorderFSEnum);
+	if(iomodel->meshtype==Mesh3DEnum)iomodel->FetchData(&nodeonbed,NULL,NULL,MeshVertexonbedEnum);
+	if(iomodel->meshtype==Mesh3DEnum)iomodel->FetchData(&groundedice_ls,NULL,NULL,MaskGroundediceLevelsetEnum);
 	iomodel->FetchData(&vertices_type,NULL,NULL,FlowequationVertexEquationEnum);
 	iomodel->FetchData(&surface,NULL,NULL,SurfaceEnum);
@@ -385,5 +385,5 @@
 
 			/*Constraint at the bedrock interface (v.n = vz = 0) (Coordinates will be updated according to the bed slope)*/
-			if (iomodel->dim==3) if(nodeonbed[i]>0. && groundedice_ls[i]>=0. && nodeonFS[i]>0.){
+			if (iomodel->meshtype==Mesh3DEnum) if(nodeonbed[i]>0. && groundedice_ls[i]>=0. && nodeonFS[i]>0.){
 				 switch(reCast<int,IssmDouble>(vertices_type[i])){
 					case SSAFSApproximationEnum:
@@ -410,8 +410,8 @@
 	iomodel->DeleteData(spcvz,StressbalanceSpcvzEnum);
 	iomodel->DeleteData(nodeonSSA,FlowequationBorderSSAEnum);
-	if(iomodel->dim==3)iomodel->DeleteData(nodeonHO,FlowequationBorderHOEnum);
-	if(iomodel->dim==3)iomodel->DeleteData(nodeonFS,FlowequationBorderFSEnum);
-	if(iomodel->dim==3)iomodel->DeleteData(nodeonbed,MeshVertexonbedEnum);
-	if(iomodel->dim==3)iomodel->DeleteData(groundedice_ls,MaskGroundediceLevelsetEnum);
+	if(iomodel->meshtype==Mesh3DEnum)iomodel->DeleteData(nodeonHO,FlowequationBorderHOEnum);
+	if(iomodel->meshtype==Mesh3DEnum)iomodel->DeleteData(nodeonFS,FlowequationBorderFSEnum);
+	if(iomodel->meshtype==Mesh3DEnum)iomodel->DeleteData(nodeonbed,MeshVertexonbedEnum);
+	if(iomodel->meshtype==Mesh3DEnum)iomodel->DeleteData(groundedice_ls,MaskGroundediceLevelsetEnum);
 	iomodel->DeleteData(vertices_type,FlowequationVertexEquationEnum);
 	iomodel->DeleteData(surface,SurfaceEnum);
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateNodesStressbalance.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateNodesStressbalance.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateNodesStressbalance.cpp	(revision 16291)
@@ -50,6 +50,6 @@
 			iomodel->Constant(&finiteelement,FlowequationFeFSEnum);
 		}
-		iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
-					FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
+		iomodel->FetchData(3,FlowequationBorderSSAEnum,FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
+		if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderFSEnum);
 		CreateNodes(pnodes,iomodel,StressbalanceAnalysisEnum,finiteelement,approximation);
 		iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 16291)
@@ -104,5 +104,5 @@
 	iomodel->FetchDataToInput(elements,DamageDEnum);
 
-	if(iomodel->dim==3){
+	if(iomodel->meshtype==Mesh3DEnum){
 		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
 		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateConstraintsStressbalanceVertical.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateConstraintsStressbalanceVertical.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateConstraintsStressbalanceVertical.cpp	(revision 16291)
@@ -21,5 +21,5 @@
 
 	/*return if 2d mesh*/
-	if(iomodel->dim==2) return;
+	if(iomodel->meshtype==Mesh2DhorizontalEnum) return;
 
 	/*Fetch data: */
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateNodesStressbalanceVertical.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateNodesStressbalanceVertical.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateNodesStressbalanceVertical.cpp	(revision 16291)
@@ -12,5 +12,5 @@
 
 	/*Now, is the flag macayaealHO on? otherwise, do nothing: */
-	if(iomodel->dim==2) return;
+	if(iomodel->meshtype==Mesh2DhorizontalEnum) return;
 
 	iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/UpdateElementsStressbalanceVertical.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/UpdateElementsStressbalanceVertical.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/UpdateElementsStressbalanceVertical.cpp	(revision 16291)
@@ -12,5 +12,5 @@
 
 	/*Now, is the model 3d? otherwise, do nothing: */
-	if (iomodel->dim==2)return;
+	if (iomodel->meshtype==Mesh2DhorizontalEnum)return;
 
 	/*Update elements: */
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp	(revision 16291)
@@ -11,5 +11,5 @@
 void	CreateNodesSurfaceSlope(Nodes** pnodes, IoModel* iomodel){
 
-	iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
 	CreateNodes(pnodes,iomodel,SurfaceSlopeAnalysisEnum,P1Enum);
 	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp	(revision 16291)
@@ -24,5 +24,5 @@
 	iomodel->FetchDataToInput(elements,BedEnum);
 	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
-	if(iomodel->dim==3){
+	if(iomodel->meshtype==Mesh3DEnum){
 		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
 		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp	(revision 16291)
@@ -15,5 +15,5 @@
 
 	/*Only 3d mesh supported*/
-	if(iomodel->dim==3){
+	if(iomodel->meshtype==Mesh3DEnum){
 		IoModelToConstraintsx(constraints,iomodel,ThermalSpctemperatureEnum,ThermalAnalysisEnum,P1Enum);
 	}
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp	(revision 16291)
@@ -12,5 +12,5 @@
 	Loads* loads=*ploads;
 
-	if(iomodel->dim==2) _error_("2d meshes not supported yet");
+	if(iomodel->meshtype==Mesh2DhorizontalEnum) _error_("2d meshes not supported yet");
 
 	/*create penalties for nodes: no node can have a temperature over the melting point*/
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp	(revision 16291)
@@ -11,5 +11,5 @@
 void	CreateNodesThermal(Nodes** pnodes, IoModel* iomodel){
 
-	iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
 	CreateNodes(pnodes,iomodel,ThermalAnalysisEnum,P1Enum);
 	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp	(revision 16291)
@@ -13,5 +13,5 @@
 
 	/*Now, is the model 3d? otherwise, do nothing: */
-	if(iomodel->dim==2)return;
+	if(iomodel->meshtype==Mesh2DhorizontalEnum)return;
 
 	/*Update elements: */
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16290)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16291)
@@ -183,5 +183,4 @@
 	MaterialsMantleDensityEnum,
 	MeshAverageVertexConnectivityEnum,
-	MeshDimensionEnum,
 	MeshElementonbedEnum,
 	MeshElementonsurfaceEnum,
@@ -200,4 +199,8 @@
 	MeshYEnum,
 	MeshZEnum,
+	MeshTypeEnum,
+	Mesh2DhorizontalEnum,
+	Mesh2DverticalEnum,
+	Mesh3DEnum,
 	MiscellaneousNameEnum, //FIXME: only used by qmu, should not be marshalled (already in queueing script)
 	MasstransportHydrostaticAdjustmentEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16291)
@@ -191,5 +191,4 @@
 		case MaterialsMantleDensityEnum : return "MaterialsMantleDensity";
 		case MeshAverageVertexConnectivityEnum : return "MeshAverageVertexConnectivity";
-		case MeshDimensionEnum : return "MeshDimension";
 		case MeshElementonbedEnum : return "MeshElementonbed";
 		case MeshElementonsurfaceEnum : return "MeshElementonsurface";
@@ -208,4 +207,8 @@
 		case MeshYEnum : return "MeshY";
 		case MeshZEnum : return "MeshZ";
+		case MeshTypeEnum : return "MeshType";
+		case Mesh2DhorizontalEnum : return "Mesh2Dhorizontal";
+		case Mesh2DverticalEnum : return "Mesh2Dvertical";
+		case Mesh3DEnum : return "Mesh3D";
 		case MiscellaneousNameEnum : return "MiscellaneousName";
 		case MasstransportHydrostaticAdjustmentEnum : return "MasstransportHydrostaticAdjustment";
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16290)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16291)
@@ -194,5 +194,4 @@
 	      else if (strcmp(name,"MaterialsMantleDensity")==0) return MaterialsMantleDensityEnum;
 	      else if (strcmp(name,"MeshAverageVertexConnectivity")==0) return MeshAverageVertexConnectivityEnum;
-	      else if (strcmp(name,"MeshDimension")==0) return MeshDimensionEnum;
 	      else if (strcmp(name,"MeshElementonbed")==0) return MeshElementonbedEnum;
 	      else if (strcmp(name,"MeshElementonsurface")==0) return MeshElementonsurfaceEnum;
@@ -211,4 +210,8 @@
 	      else if (strcmp(name,"MeshY")==0) return MeshYEnum;
 	      else if (strcmp(name,"MeshZ")==0) return MeshZEnum;
+	      else if (strcmp(name,"MeshType")==0) return MeshTypeEnum;
+	      else if (strcmp(name,"Mesh2Dhorizontal")==0) return Mesh2DhorizontalEnum;
+	      else if (strcmp(name,"Mesh2Dvertical")==0) return Mesh2DverticalEnum;
+	      else if (strcmp(name,"Mesh3D")==0) return Mesh3DEnum;
 	      else if (strcmp(name,"MiscellaneousName")==0) return MiscellaneousNameEnum;
 	      else if (strcmp(name,"MasstransportHydrostaticAdjustment")==0) return MasstransportHydrostaticAdjustmentEnum;
@@ -257,11 +260,11 @@
 	      else if (strcmp(name,"SurfaceforcingsMassBalance")==0) return SurfaceforcingsMassBalanceEnum;
 	      else if (strcmp(name,"SurfaceforcingsIspdd")==0) return SurfaceforcingsIspddEnum;
-	      else if (strcmp(name,"SurfaceforcingsDesfac")==0) return SurfaceforcingsDesfacEnum;
-	      else if (strcmp(name,"SurfaceforcingsS0p")==0) return SurfaceforcingsS0pEnum;
-	      else if (strcmp(name,"SurfaceforcingsIssmbgradients")==0) return SurfaceforcingsIssmbgradientsEnum;
          else stage=3;
    }
    if(stage==3){
-	      if (strcmp(name,"SurfaceforcingsMonthlytemperatures")==0) return SurfaceforcingsMonthlytemperaturesEnum;
+	      if (strcmp(name,"SurfaceforcingsDesfac")==0) return SurfaceforcingsDesfacEnum;
+	      else if (strcmp(name,"SurfaceforcingsS0p")==0) return SurfaceforcingsS0pEnum;
+	      else if (strcmp(name,"SurfaceforcingsIssmbgradients")==0) return SurfaceforcingsIssmbgradientsEnum;
+	      else if (strcmp(name,"SurfaceforcingsMonthlytemperatures")==0) return SurfaceforcingsMonthlytemperaturesEnum;
 	      else if (strcmp(name,"SurfaceforcingsHref")==0) return SurfaceforcingsHrefEnum;
 	      else if (strcmp(name,"SurfaceforcingsSmbref")==0) return SurfaceforcingsSmbrefEnum;
@@ -380,11 +383,11 @@
 	      else if (strcmp(name,"Input")==0) return InputEnum;
 	      else if (strcmp(name,"IntInput")==0) return IntInputEnum;
-	      else if (strcmp(name,"IntParam")==0) return IntParamEnum;
-	      else if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum;
-	      else if (strcmp(name,"TransientParam")==0) return TransientParamEnum;
          else stage=4;
    }
    if(stage==4){
-	      if (strcmp(name,"Matice")==0) return MaticeEnum;
+	      if (strcmp(name,"IntParam")==0) return IntParamEnum;
+	      else if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum;
+	      else if (strcmp(name,"TransientParam")==0) return TransientParamEnum;
+	      else if (strcmp(name,"Matice")==0) return MaticeEnum;
 	      else if (strcmp(name,"Matpar")==0) return MatparEnum;
 	      else if (strcmp(name,"Node")==0) return NodeEnum;
@@ -503,11 +506,11 @@
 	      else if (strcmp(name,"StressTensorxz")==0) return StressTensorxzEnum;
 	      else if (strcmp(name,"StressTensoryy")==0) return StressTensoryyEnum;
-	      else if (strcmp(name,"StressTensoryz")==0) return StressTensoryzEnum;
-	      else if (strcmp(name,"StressTensorzz")==0) return StressTensorzzEnum;
-	      else if (strcmp(name,"GiaCrossSectionShape")==0) return GiaCrossSectionShapeEnum;
          else stage=5;
    }
    if(stage==5){
-	      if (strcmp(name,"GiadWdt")==0) return GiadWdtEnum;
+	      if (strcmp(name,"StressTensoryz")==0) return StressTensoryzEnum;
+	      else if (strcmp(name,"StressTensorzz")==0) return StressTensorzzEnum;
+	      else if (strcmp(name,"GiaCrossSectionShape")==0) return GiaCrossSectionShapeEnum;
+	      else if (strcmp(name,"GiadWdt")==0) return GiadWdtEnum;
 	      else if (strcmp(name,"GiaW")==0) return GiaWEnum;
 	      else if (strcmp(name,"P0")==0) return P0Enum;
