Index: /issm/trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp	(revision 24988)
+++ /issm/trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp	(revision 24989)
@@ -10,5 +10,5 @@
 #include "../InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.h"
 
-void InputUpdateFromDakotax(FemModel* femmodel,double* variables,char* *variables_descriptors,int numvariables){
+void InputUpdateFromDakotax(FemModel* femmodel,double* variables,char* *variables_descriptors,int numdakotavariables){
 
 	int     i,j,k,l;
@@ -20,9 +20,8 @@
 	IssmDouble **variable_partitions         = NULL;
 	IssmDouble * variable_partition         = NULL;
+	int * variable_partitions_npart         = NULL;
 	int          variable_partitions_num;
-	int         *partitions_m   = NULL;
-	int         *partitions_n   = NULL;
 	int          npart;
-	int          dummy; //should match numvariables
+	int variablecount=0;
 
 	double *distributed_values = NULL;
@@ -32,5 +31,6 @@
 
 	/*retrieve parameters: */
-	femmodel->parameters->FindParam(&variable_partitions,&variable_partitions_num,&partitions_m,&partitions_n,QmuVariablePartitionsEnum); 
+	femmodel->parameters->FindParam(&variable_partitions,&variable_partitions_num,NULL,NULL,QmuVariablePartitionsEnum); 
+	femmodel->parameters->FindParam(&variable_partitions_npart,NULL,NULL,QmuVariablePartitionsNpartEnum); 
 	
 	numberofvertices=femmodel->vertices->NumberOfVertices();
@@ -39,6 +39,5 @@
 	/*Go through all dakota descriptors, ex: "rho_ice","thermal_conductivity","thickness1","thickness2", etc ..., and 
 	 * for each descriptor, take the variable value and plug it into the inputs: */
-
-	for(i=0;i<numvariables;i++){
+	for(i=0;i<numdakotavariables;i++){ //these are the dakota variables, for all partitions. 
 
 		descriptor=variables_descriptors[i];
@@ -48,7 +47,6 @@
 		
 			/*recover partition vector: */
-			variable_partition=variable_partitions[i];
-			//_printf_("variable_partition_M: " << variable_partition_M << " variable_partition_N " << variable_partition_N << "\n");
-			npart=partitions_m[i];
+			variable_partition=variable_partitions[variablecount];
+			npart=variable_partitions_npart[variablecount];
 
 			/*Variable is scaled. Determine root name of variable (ex: scaled_DragCoefficient_1 -> DragCoefficient). Allocate distributed_values and fill the 
@@ -136,4 +134,5 @@
 			InputUpdateFromConstantx(femmodel,variables[i],StringToEnumx(descriptor));
 		}
+		variablecount++;
 	}
 
@@ -143,6 +142,4 @@
 		xDelete<IssmDouble>(matrix);
 	}
-	xDelete<int>(partitions_m);
-	xDelete<int>(partitions_n);
 	xDelete<IssmDouble*>(variable_partitions);
 
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp	(revision 24988)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp	(revision 24989)
@@ -38,4 +38,6 @@
 	int         *ndims_array                = NULL;
 	int          num_partitions;
+	int*         intarray = NULL;
+	int M,N;
 
 	/*recover parameters: */
@@ -77,5 +79,6 @@
 		iomodel->FetchData(&array,&mdims_array,&ndims_array,&num_partitions,"md.qmu.variablepartitions");
 		parameters->AddObject(new DoubleMatArrayParam(QmuVariablePartitionsEnum,array,num_partitions,mdims_array,ndims_array));
-
+		iomodel->FetchData(&intarray,&M,&N,"md.qmu.variablepartitions_npart");
+		parameters->AddObject(new IntMatParam(QmuVariablePartitionsNpartEnum,intarray,M,N));
 
 		/*Deal with data needed because of qmu variables*/
@@ -128,4 +131,5 @@
 		xDelete<int>(ndims_array);
 		xDelete<IssmDouble*>(array);
+		xDelete<int>(intarray);
 
 	}
Index: /issm/trunk-jpl/src/c/shared/Enum/Enum.vim
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 24988)
+++ /issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 24989)
@@ -299,4 +299,5 @@
 syn keyword cConstant QmuVariableDescriptorsEnum
 syn keyword cConstant QmuVariablePartitionsEnum
+syn keyword cConstant QmuVariablePartitionsNpartEnum
 syn keyword cConstant RestartFileNameEnum
 syn keyword cConstant ResultsEnum
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 24988)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 24989)
@@ -293,4 +293,5 @@
 	QmuVariableDescriptorsEnum,
 	QmuVariablePartitionsEnum,
+	QmuVariablePartitionsNpartEnum,
 	RestartFileNameEnum,
 	ResultsEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 24988)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 24989)
@@ -301,4 +301,5 @@
 		case QmuVariableDescriptorsEnum : return "QmuVariableDescriptors";
 		case QmuVariablePartitionsEnum : return "QmuVariablePartitions";
+		case QmuVariablePartitionsNpartEnum : return "QmuVariablePartitionsNpart";
 		case RestartFileNameEnum : return "RestartFileName";
 		case ResultsEnum : return "Results";
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 24988)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 24989)
@@ -307,4 +307,5 @@
 	      else if (strcmp(name,"QmuVariableDescriptors")==0) return QmuVariableDescriptorsEnum;
 	      else if (strcmp(name,"QmuVariablePartitions")==0) return QmuVariablePartitionsEnum;
+	      else if (strcmp(name,"QmuVariablePartitionsNpart")==0) return QmuVariablePartitionsNpartEnum;
 	      else if (strcmp(name,"RestartFileName")==0) return RestartFileNameEnum;
 	      else if (strcmp(name,"Results")==0) return ResultsEnum;
@@ -382,9 +383,9 @@
 	      else if (strcmp(name,"SmbIsthermal")==0) return SmbIsthermalEnum;
 	      else if (strcmp(name,"SmbIsturbulentflux")==0) return SmbIsturbulentfluxEnum;
-	      else if (strcmp(name,"SmbK")==0) return SmbKEnum;
          else stage=4;
    }
    if(stage==4){
-	      if (strcmp(name,"SmbNumRequestedOutputs")==0) return SmbNumRequestedOutputsEnum;
+	      if (strcmp(name,"SmbK")==0) return SmbKEnum;
+	      else if (strcmp(name,"SmbNumRequestedOutputs")==0) return SmbNumRequestedOutputsEnum;
 	      else if (strcmp(name,"SmbPfac")==0) return SmbPfacEnum;
 	      else if (strcmp(name,"SmbRdl")==0) return SmbRdlEnum;
@@ -505,9 +506,9 @@
 	      else if (strcmp(name,"BaseSlopeY")==0) return BaseSlopeYEnum;
 	      else if (strcmp(name,"Bed")==0) return BedEnum;
-	      else if (strcmp(name,"BedSlopeX")==0) return BedSlopeXEnum;
          else stage=5;
    }
    if(stage==5){
-	      if (strcmp(name,"BedSlopeY")==0) return BedSlopeYEnum;
+	      if (strcmp(name,"BedSlopeX")==0) return BedSlopeXEnum;
+	      else if (strcmp(name,"BedSlopeY")==0) return BedSlopeYEnum;
 	      else if (strcmp(name,"CalvingCalvingrate")==0) return CalvingCalvingrateEnum;
 	      else if (strcmp(name,"CalvingHabFraction")==0) return CalvingHabFractionEnum;
@@ -628,9 +629,9 @@
 	      else if (strcmp(name,"HydrologyWatercolumnMax")==0) return HydrologyWatercolumnMaxEnum;
 	      else if (strcmp(name,"HydrologyWaterVx")==0) return HydrologyWaterVxEnum;
-	      else if (strcmp(name,"HydrologyWaterVy")==0) return HydrologyWaterVyEnum;
          else stage=6;
    }
    if(stage==6){
-	      if (strcmp(name,"Ice")==0) return IceEnum;
+	      if (strcmp(name,"HydrologyWaterVy")==0) return HydrologyWaterVyEnum;
+	      else if (strcmp(name,"Ice")==0) return IceEnum;
 	      else if (strcmp(name,"IceMaskNodeActivation")==0) return IceMaskNodeActivationEnum;
 	      else if (strcmp(name,"Input")==0) return InputEnum;
@@ -751,9 +752,9 @@
 	      else if (strcmp(name,"SmbFAC")==0) return SmbFACEnum;
 	      else if (strcmp(name,"SmbGdn")==0) return SmbGdnEnum;
-	      else if (strcmp(name,"SmbGdnini")==0) return SmbGdniniEnum;
          else stage=7;
    }
    if(stage==7){
-	      if (strcmp(name,"SmbGsp")==0) return SmbGspEnum;
+	      if (strcmp(name,"SmbGdnini")==0) return SmbGdniniEnum;
+	      else if (strcmp(name,"SmbGsp")==0) return SmbGspEnum;
 	      else if (strcmp(name,"SmbGspini")==0) return SmbGspiniEnum;
 	      else if (strcmp(name,"SmbHref")==0) return SmbHrefEnum;
@@ -874,9 +875,9 @@
 	      else if (strcmp(name,"WaterfractionDrainage")==0) return WaterfractionDrainageEnum;
 	      else if (strcmp(name,"WaterfractionDrainageIntegrated")==0) return WaterfractionDrainageIntegratedEnum;
-	      else if (strcmp(name,"Waterfraction")==0) return WaterfractionEnum;
          else stage=8;
    }
    if(stage==8){
-	      if (strcmp(name,"Waterheight")==0) return WaterheightEnum;
+	      if (strcmp(name,"Waterfraction")==0) return WaterfractionEnum;
+	      else if (strcmp(name,"Waterheight")==0) return WaterheightEnum;
 	      else if (strcmp(name,"WeightsSurfaceObservation")==0) return WeightsSurfaceObservationEnum;
 	      else if (strcmp(name,"Outputdefinition1")==0) return Outputdefinition1Enum;
@@ -997,9 +998,9 @@
 	      else if (strcmp(name,"BalancethicknessApparentMassbalance")==0) return BalancethicknessApparentMassbalanceEnum;
 	      else if (strcmp(name,"BalancethicknessSoftAnalysis")==0) return BalancethicknessSoftAnalysisEnum;
-	      else if (strcmp(name,"BalancethicknessSoftSolution")==0) return BalancethicknessSoftSolutionEnum;
          else stage=9;
    }
    if(stage==9){
-	      if (strcmp(name,"BalancethicknessSolution")==0) return BalancethicknessSolutionEnum;
+	      if (strcmp(name,"BalancethicknessSoftSolution")==0) return BalancethicknessSoftSolutionEnum;
+	      else if (strcmp(name,"BalancethicknessSolution")==0) return BalancethicknessSolutionEnum;
 	      else if (strcmp(name,"BalancethicknessSpcthickness")==0) return BalancethicknessSpcthicknessEnum;
 	      else if (strcmp(name,"BalancevelocityAnalysis")==0) return BalancevelocityAnalysisEnum;
@@ -1120,9 +1121,9 @@
 	      else if (strcmp(name,"HydrologyPismAnalysis")==0) return HydrologyPismAnalysisEnum;
 	      else if (strcmp(name,"HydrologyShaktiAnalysis")==0) return HydrologyShaktiAnalysisEnum;
-	      else if (strcmp(name,"HydrologyShreveAnalysis")==0) return HydrologyShreveAnalysisEnum;
          else stage=10;
    }
    if(stage==10){
-	      if (strcmp(name,"HydrologySolution")==0) return HydrologySolutionEnum;
+	      if (strcmp(name,"HydrologyShreveAnalysis")==0) return HydrologyShreveAnalysisEnum;
+	      else if (strcmp(name,"HydrologySolution")==0) return HydrologySolutionEnum;
 	      else if (strcmp(name,"Hydrologydc")==0) return HydrologydcEnum;
 	      else if (strcmp(name,"Hydrologypism")==0) return HydrologypismEnum;
@@ -1243,9 +1244,9 @@
 	      else if (strcmp(name,"P1xP4")==0) return P1xP4Enum;
 	      else if (strcmp(name,"P2")==0) return P2Enum;
-	      else if (strcmp(name,"P2bubble")==0) return P2bubbleEnum;
          else stage=11;
    }
    if(stage==11){
-	      if (strcmp(name,"P2bubblecondensed")==0) return P2bubblecondensedEnum;
+	      if (strcmp(name,"P2bubble")==0) return P2bubbleEnum;
+	      else if (strcmp(name,"P2bubblecondensed")==0) return P2bubblecondensedEnum;
 	      else if (strcmp(name,"P2xP1")==0) return P2xP1Enum;
 	      else if (strcmp(name,"P2xP4")==0) return P2xP4Enum;
@@ -1366,9 +1367,9 @@
 	      else if (strcmp(name,"SealevelWeights")==0) return SealevelWeightsEnum;
 	      else if (strcmp(name,"StrainRate")==0) return StrainRateEnum;
-	      else if (strcmp(name,"StressTensor")==0) return StressTensorEnum;
          else stage=12;
    }
    if(stage==12){
-	      if (strcmp(name,"StressbalanceViscosityOvershoot")==0) return StressbalanceViscosityOvershootEnum;
+	      if (strcmp(name,"StressTensor")==0) return StressTensorEnum;
+	      else if (strcmp(name,"StressbalanceViscosityOvershoot")==0) return StressbalanceViscosityOvershootEnum;
 	      else if (strcmp(name,"SubelementMigration4")==0) return SubelementMigration4Enum;
 	      else if (strcmp(name,"TimesteppingTimeAdapt")==0) return TimesteppingTimeAdaptEnum;
Index: /issm/trunk-jpl/src/m/classes/qmu.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/qmu.m	(revision 24988)
+++ /issm/trunk-jpl/src/m/classes/qmu.m	(revision 24989)
@@ -19,4 +19,5 @@
 		variabledescriptors         = {};
 		variablepartitions          = {};
+		variablepartitions_npart    = [];
 		responsedescriptors         = {};
 		mass_flux_profile_directory = NaN;
@@ -173,4 +174,5 @@
 			end
 			fielddisplay(self,'variablepartitions','');
+			fielddisplay(self,'variablepartitions_npart','');
 			fielddisplay(self,'variabledescriptors','');
 			fielddisplay(self,'responsedescriptors','');
@@ -196,4 +198,5 @@
 			WriteData(fid,prefix,'object',self,'fieldname','variabledescriptors','format','StringArray');
 			WriteData(fid,prefix,'object',self,'fieldname','variablepartitions','format','MatArray');
+			WriteData(fid,prefix,'object',self,'fieldname','variablepartitions_npart','format','IntMat','mattype',3);
 			WriteData(fid,prefix,'object',self,'fieldname','responsedescriptors','format','StringArray');
 			if ~isempty(self.mass_flux_segments),
Index: /issm/trunk-jpl/src/m/qmu/preqmu.m
===================================================================
--- /issm/trunk-jpl/src/m/qmu/preqmu.m	(revision 24988)
+++ /issm/trunk-jpl/src/m/qmu/preqmu.m	(revision 24989)
@@ -90,4 +90,5 @@
 variable_fieldnames=fieldnames(md.qmu.variables(ivar));
 variablepartitions={};
+variablepartitions_npart=[];
 for i=1:length(variable_fieldnames),
 	field_name=variable_fieldnames{i};
@@ -95,6 +96,8 @@
 	if fieldvariable.isscaled();
 		variablepartitions{end+1}=fieldvariable.partition;
+		variablepartitions_npart(end+1)=qmupart2npart(fieldvariable.partition);
 	else
 		variablepartitions{end+1}=[];
+		variablepartitions_npart(end+1)=0;
 	end
 end
@@ -105,4 +108,5 @@
 md.qmu.variabledescriptors=variabledescriptors;
 md.qmu.variablepartitions=variablepartitions;
+md.qmu.variablepartitions_npart=variablepartitions_npart;
 md.qmu.responsedescriptors=responsedescriptors;
 
Index: /issm/trunk-jpl/src/m/qmu/qmupart2npart.m
===================================================================
--- /issm/trunk-jpl/src/m/qmu/qmupart2npart.m	(revision 24989)
+++ /issm/trunk-jpl/src/m/qmu/qmupart2npart.m	(revision 24989)
@@ -0,0 +1,8 @@
+function npart=qmupart2npart(vector)
+
+	%vector is full of -1 (no partition) and 0 to npart.  We need to 
+	%identify npart
+
+	npart=max(vector)+1;
+
+
Index: /issm/trunk-jpl/src/m/qmu/setupdesign/QmuSetupVariables.m
===================================================================
--- /issm/trunk-jpl/src/m/qmu/setupdesign/QmuSetupVariables.m	(revision 24988)
+++ /issm/trunk-jpl/src/m/qmu/setupdesign/QmuSetupVariables.m	(revision 24989)
@@ -12,5 +12,5 @@
 	partition=variables.partition;
 	%figure out number of partitions: 
-	npart=qmupart2npart(partition)
+	npart=qmupart2npart(partition);
 
 	if isa(variables,'uniform_uncertain'),
