Index: /issm/trunk-jpl/src/c/classes/Elements/Element.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 24397)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 24398)
@@ -3234,4 +3234,5 @@
 		case SurfaceCrevasseEnum: this->CalvingCrevasseDepth(); break;
 		case SigmaVMEnum: this->CalvingRateVonmises(); break;
+		case PartitioningEnum: this->inputs2->SetInput(PartitioningEnum,this->lid,IssmComm::GetRank()); break;
 	}
 
@@ -3253,4 +3254,9 @@
 			*parray_size      = 1;
 			break;
+		case IntInput2Enum:
+			*pinterpolation   = P0Enum;
+			*pnodesperelement = 1;
+			*parray_size      = 1;
+			break;
 		case ArrayInput2Enum:{
 			int M;
@@ -3336,4 +3342,9 @@
 			this->GetInput2Value(&bvalue,output_enum);
 			vector->SetValue(this->Sid(),reCast<IssmDouble>(bvalue),INS_VAL);
+			break;
+		case IntInput2Enum:
+			int ivalue;
+			this->GetInput2Value(&ivalue,output_enum);
+			vector->SetValue(this->Sid(),reCast<IssmDouble>(ivalue),INS_VAL);
 			break;
 		default:
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp	(revision 24397)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp	(revision 24398)
@@ -60,8 +60,35 @@
 	}
 
+	/*Use ice levelset for weights*/
+	int fordan = 0;
+	int* weights = NULL;
+	if(fordan){
+		IssmDouble* icelevelset = NULL;
+		iomodel->FetchData(&icelevelset,NULL,NULL,"md.mask.ice_levelset");
+
+		weights = xNew<int>(iomodel->numberofvertices);
+		for(int i=0;i<iomodel->numberofvertices;i++){
+			if(icelevelset[i]>=0) weights[i] = 1;
+			if(icelevelset[i]<0)  weights[i] = 100;
+		}
+		xDelete<IssmDouble>(icelevelset);
+	}
+
 	/*Partition and free resouces*/
-	MeshPartitionx(&epart,&npart,iomodel->numberofelements,iomodel->numberofvertices,iomodel->elements,numberofelements2d,numberofvertices2d,elements2d,NULL,numlayers,elements_width,iomodel->meshelementtype,num_procs);
+	MeshPartitionx(&epart,&npart,iomodel->numberofelements,iomodel->numberofvertices,iomodel->elements,numberofelements2d,numberofvertices2d,elements2d,weights,numlayers,elements_width,iomodel->meshelementtype,num_procs);
 	xDelete<int>(elements2d);
 	xDelete<int>(npart);
+	xDelete<int>(weights);
+
+	if(fordan){
+		for(int i=0;i<IssmComm::GetSize();i++){
+			if(i==IssmComm::GetRank()){
+				int temp =0;
+				for(int j=0;j<iomodel->numberofelements;j++) if(epart[j]==i) temp++;
+				_printf_("Partition #"<<i<<" number of elements: "<<temp<<"\n");
+			}
+			ISSM_MPI_Barrier(IssmComm::GetComm());
+		}
+	}
 
 	/*Deal with rifts, they have to be included into one partition only, not several: */
Index: /issm/trunk-jpl/src/c/shared/Enum/Enum.vim
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 24397)
+++ /issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 24398)
@@ -633,4 +633,5 @@
 syn keyword cConstant P0Enum
 syn keyword cConstant P1Enum
+syn keyword cConstant PartitioningEnum
 syn keyword cConstant PressureEnum
 syn keyword cConstant RadarEnum
@@ -1316,5 +1317,4 @@
 syn keyword cType AmrBamg
 syn keyword cType ArrayInput2
-syn keyword cType BoolInput
 syn keyword cType BoolInput2
 syn keyword cType BoolParam
@@ -1328,14 +1328,10 @@
 syn keyword cType Contour
 syn keyword cType Contours
-syn keyword cType ControlInput
 syn keyword cType ControlInput2
 syn keyword cType Covertree
-syn keyword cType DatasetInput
 syn keyword cType DatasetInput2
 syn keyword cType DataSetParam
 syn keyword cType Definition
 syn keyword cType DependentObject
-syn keyword cType DoubleArrayInput
-syn keyword cType DoubleInput
 syn keyword cType DoubleMatArrayParam
 syn keyword cType DoubleMatParam
@@ -1366,9 +1362,6 @@
 syn keyword cType GiaDeflectionCoreArgs
 syn keyword cType Hook
-syn keyword cType Input
 syn keyword cType Input2
-syn keyword cType Inputs
 syn keyword cType Inputs2
-syn keyword cType IntInput
 syn keyword cType IntInput2
 syn keyword cType IntMatParam
@@ -1409,5 +1402,4 @@
 syn keyword cType Penpair
 syn keyword cType Penta
-syn keyword cType PentaInput
 syn keyword cType PentaInput2
 syn keyword cType PentaRef
@@ -1421,5 +1413,4 @@
 syn keyword cType RiftStruct
 syn keyword cType Seg
-syn keyword cType SegInput
 syn keyword cType SegInput2
 syn keyword cType Segment
@@ -1432,12 +1423,9 @@
 syn keyword cType StringParam
 syn keyword cType Tetra
-syn keyword cType TetraInput
 syn keyword cType TetraRef
 syn keyword cType TransientArrayParam
-syn keyword cType TransientInput
 syn keyword cType TransientInput2
 syn keyword cType TransientParam
 syn keyword cType Tria
-syn keyword cType TriaInput
 syn keyword cType TriaInput2
 syn keyword cType TriaRef
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 24397)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 24398)
@@ -629,4 +629,5 @@
 	P0Enum,
 	P1Enum,
+	PartitioningEnum,
 	PressureEnum,
 	RadarEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 24397)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 24398)
@@ -635,4 +635,5 @@
 		case P0Enum : return "P0";
 		case P1Enum : return "P1";
+		case PartitioningEnum : return "Partitioning";
 		case PressureEnum : return "Pressure";
 		case RadarEnum : return "Radar";
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 24397)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 24398)
@@ -650,4 +650,5 @@
 	      else if (strcmp(name,"P0")==0) return P0Enum;
 	      else if (strcmp(name,"P1")==0) return P1Enum;
+	      else if (strcmp(name,"Partitioning")==0) return PartitioningEnum;
 	      else if (strcmp(name,"Pressure")==0) return PressureEnum;
 	      else if (strcmp(name,"Radar")==0) return RadarEnum;
@@ -751,9 +752,9 @@
 	      else if (strcmp(name,"SmbPrecipitationsLgm")==0) return SmbPrecipitationsLgmEnum;
 	      else if (strcmp(name,"SmbPrecipitationsPresentday")==0) return SmbPrecipitationsPresentdayEnum;
-	      else if (strcmp(name,"SmbPrecipitationsReconstructed")==0) return SmbPrecipitationsReconstructedEnum;
          else stage=7;
    }
    if(stage==7){
-	      if (strcmp(name,"SmbRe")==0) return SmbReEnum;
+	      if (strcmp(name,"SmbPrecipitationsReconstructed")==0) return SmbPrecipitationsReconstructedEnum;
+	      else if (strcmp(name,"SmbRe")==0) return SmbReEnum;
 	      else if (strcmp(name,"SmbRefreeze")==0) return SmbRefreezeEnum;
 	      else if (strcmp(name,"SmbReini")==0) return SmbReiniEnum;
@@ -874,9 +875,9 @@
 	      else if (strcmp(name,"Outputdefinition31")==0) return Outputdefinition31Enum;
 	      else if (strcmp(name,"Outputdefinition32")==0) return Outputdefinition32Enum;
-	      else if (strcmp(name,"Outputdefinition33")==0) return Outputdefinition33Enum;
          else stage=8;
    }
    if(stage==8){
-	      if (strcmp(name,"Outputdefinition34")==0) return Outputdefinition34Enum;
+	      if (strcmp(name,"Outputdefinition33")==0) return Outputdefinition33Enum;
+	      else if (strcmp(name,"Outputdefinition34")==0) return Outputdefinition34Enum;
 	      else if (strcmp(name,"Outputdefinition35")==0) return Outputdefinition35Enum;
 	      else if (strcmp(name,"Outputdefinition36")==0) return Outputdefinition36Enum;
@@ -997,9 +998,9 @@
 	      else if (strcmp(name,"Closed")==0) return ClosedEnum;
 	      else if (strcmp(name,"Colinear")==0) return ColinearEnum;
-	      else if (strcmp(name,"Constraints")==0) return ConstraintsEnum;
          else stage=9;
    }
    if(stage==9){
-	      if (strcmp(name,"Contact")==0) return ContactEnum;
+	      if (strcmp(name,"Constraints")==0) return ConstraintsEnum;
+	      else if (strcmp(name,"Contact")==0) return ContactEnum;
 	      else if (strcmp(name,"Contour")==0) return ContourEnum;
 	      else if (strcmp(name,"Contours")==0) return ContoursEnum;
@@ -1120,9 +1121,9 @@
 	      else if (strcmp(name,"Internal")==0) return InternalEnum;
 	      else if (strcmp(name,"Intersect")==0) return IntersectEnum;
-	      else if (strcmp(name,"InversionVzObs")==0) return InversionVzObsEnum;
          else stage=10;
    }
    if(stage==10){
-	      if (strcmp(name,"J")==0) return JEnum;
+	      if (strcmp(name,"InversionVzObs")==0) return InversionVzObsEnum;
+	      else if (strcmp(name,"J")==0) return JEnum;
 	      else if (strcmp(name,"L1L2Approximation")==0) return L1L2ApproximationEnum;
 	      else if (strcmp(name,"L2ProjectionBaseAnalysis")==0) return L2ProjectionBaseAnalysisEnum;
@@ -1243,9 +1244,9 @@
 	      else if (strcmp(name,"SMBpdd")==0) return SMBpddEnum;
 	      else if (strcmp(name,"SMBpddSicopolis")==0) return SMBpddSicopolisEnum;
-	      else if (strcmp(name,"SMBsemic")==0) return SMBsemicEnum;
          else stage=11;
    }
    if(stage==11){
-	      if (strcmp(name,"SSAApproximation")==0) return SSAApproximationEnum;
+	      if (strcmp(name,"SMBsemic")==0) return SMBsemicEnum;
+	      else if (strcmp(name,"SSAApproximation")==0) return SSAApproximationEnum;
 	      else if (strcmp(name,"SSAFSApproximation")==0) return SSAFSApproximationEnum;
 	      else if (strcmp(name,"SSAHOApproximation")==0) return SSAHOApproximationEnum;
Index: /issm/trunk-jpl/src/c/toolkits/metis/patches/METIS_PartMeshNodalPatch.cpp
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/metis/patches/METIS_PartMeshNodalPatch.cpp	(revision 24397)
+++ /issm/trunk-jpl/src/c/toolkits/metis/patches/METIS_PartMeshNodalPatch.cpp	(revision 24398)
@@ -60,6 +60,9 @@
 
 	/*create vwgt (Weight per node)*/
-	idx_t* vwgts=xNew<idx_t>(numberofnodes);
-	for(int i=0;i<numberofnodes;i++) vwgts[i]=1;
+	idx_t* vwgts=NULL;
+	if(vweights){
+		vwgts=xNew<idx_t>(numberofnodes);
+		for(int i=0;i<numberofnodes;i++) vwgts[i]=reCast<idx_t>(vweights[i]);
+	}
 
 	/*Call METIS*/
