Index: /issm/trunk/src/m/qmu/dakota_in_data.m
===================================================================
--- /issm/trunk/src/m/qmu/dakota_in_data.m	(revision 5214)
+++ /issm/trunk/src/m/qmu/dakota_in_data.m	(revision 5215)
@@ -94,24 +94,10 @@
 
 for i=1:length(fnames)
+
+%  currently all variable types can just be copied
+	dvar.(fnames{i})=variables.(fnames{i});
+
+end
     
-%  for linear constraints, just copy
-
-    if isa(variables.(fnames{i}),'linear_inequality_constraint') || ...
-       isa(variables.(fnames{i}),'linear_equality_constraint'  )
-        dvar.(fnames{i})=variables.(fnames{i});
-
-%  for variables, call the setup function
-
-    else
-        fhandle=str2func([class(variables.(fnames{i})) '.empty']);
-        dvar.(fnames{i})=fhandle();
-        for j=1:length(variables.(fnames{i}))
-            %call setupdesign
-            dvar.(fnames{i})=QmuSetupDesign(dvar.(fnames{i}),variables.(fnames{i})(j),params,varargin{:});
-        end
-    end
-end
-
-
 %%  responses
 
Index: /issm/trunk/src/m/qmu/expandvariables.m
===================================================================
--- /issm/trunk/src/m/qmu/expandvariables.m	(revision 5215)
+++ /issm/trunk/src/m/qmu/expandvariables.m	(revision 5215)
@@ -0,0 +1,23 @@
+function dvar=expandvariables(md,variables)
+
+fnames=fieldnames(variables);
+
+for i=1:length(fnames)
+    
+%  for linear constraints, just copy
+
+    if isa(variables.(fnames{i}),'linear_inequality_constraint') || ...
+       isa(variables.(fnames{i}),'linear_equality_constraint'  )
+        dvar.(fnames{i})=variables.(fnames{i});
+
+%  for variables, call the setup function
+
+    else
+        fhandle=str2func([class(variables.(fnames{i})) '.empty']);
+        dvar.(fnames{i})=fhandle();
+        for j=1:length(variables.(fnames{i}))
+            %call setupdesign
+            dvar.(fnames{i})=QmuSetupDesign(md,dvar.(fnames{i}),variables.(fnames{i})(j));
+        end
+    end
+end
Index: /issm/trunk/src/m/qmu/postqmu.m
===================================================================
--- /issm/trunk/src/m/qmu/postqmu.m	(revision 5214)
+++ /issm/trunk/src/m/qmu/postqmu.m	(revision 5215)
@@ -48,4 +48,8 @@
 end
 
+%scale  sensitivities by partitioned average of the input parameter
+disp('Do this for god''s akes!');
+
+
 %put dakotaresults in their right location.
 md.results.dakota=dakotaresults;
Index: /issm/trunk/src/m/qmu/preqmu.m
===================================================================
--- /issm/trunk/src/m/qmu/preqmu.m	(revision 5214)
+++ /issm/trunk/src/m/qmu/preqmu.m	(revision 5215)
@@ -41,6 +41,19 @@
 responses=md.responses(options.iresp);
 
+%expand variables
+variables=expandvariables(md,md.variables);
+
+%go through variables, and check they don't have more than md.npart values
+variable_fieldnames=fieldnames(variables);
+for i=1:length(variable_fieldnames),
+	field_name=variable_fieldnames{i};
+	fieldvariables=variables.(field_name);
+	if numel(fieldvariables)>md.npart,
+		error('preqmu error message: one of the expanded variables has more values than the number of partitions (setup in md.npart)');
+	end
+end
+
 %create m and in files for dakota
-dakota_in_data(md.qmu_method(options.imethod),variables,md.responses,md.qmu_params(options.iparams),options.qmufile,md);
+dakota_in_data(md.qmu_method(options.imethod),variables,md.responses,md.qmu_params(options.iparams),options.qmufile);
 
 %in library mode, we only need the dakota in file
Index: /issm/trunk/src/m/qmu/qmumarshall.m
===================================================================
--- /issm/trunk/src/m/qmu/qmumarshall.m	(revision 5214)
+++ /issm/trunk/src/m/qmu/qmumarshall.m	(revision 5215)
@@ -21,63 +21,33 @@
 end
 
-%count how many variables we have
-numvariables=0;
-variable_fieldnames=fieldnames(variables);
-for i=1:length(variable_fieldnames),
-	field_name=variable_fieldnames{i};
-	fieldvariables=variables.(field_name);
-	numvariables=numvariables+numel(variables.(field_name));
-end
 %write number of variables to disk
-WriteData(fid,numvariables,'Integer','numberofvariables');
+WriteData(fid,md.numberofvariables,'Integer','numberofvariables');
 
 %now, for each variable, write descriptor
-count=0;
-for i=1:length(variable_fieldnames),
-	field_name=variable_fieldnames{i};
-	fieldvariables=variables.(field_name);
-	for j=1:length(fieldvariables),
-		descriptor=fieldvariables(j).descriptor;
-		WriteData(fid,descriptor,'String',['variabledescriptor' num2str(count)]);
-		count=count+1;
-	end
+for i=1:numel(md.variabledescriptors),
+	field_name=md.variabledescriptors{i};
+	WriteData(fid,field_name,'String',['variabledescriptor' num2str(i)]);
 end
+
 
 %deal with responses
 
-%count how many responses we have
-numresponses=0;
-response_fieldnames=fieldnames(responses);
-for i=1:length(response_fieldnames),
-	field_name=response_fieldnames{i};
-	fieldresponses=responses.(field_name);
-	numresponses=numresponses+numel(responses.(field_name));
-end
 %write number of responses to disk
-WriteData(fid,numresponses,'Integer','numberofresponses');
+WriteData(fid,md.numberofresponses,'Integer','numberofresponses');
 
 %now, for each response, write descriptor
-count=0;
-for i=1:length(response_fieldnames),
-	field_name=response_fieldnames{i};
-	fieldresponses=responses.(field_name);
-	for j=1:length(fieldresponses),
-		descriptor=fieldresponses(j).descriptor;
-		WriteData(fid,descriptor,'String',['responsedescriptor' num2str(count)]);
-		count=count+1;
-	end
+for i=1:numel(md.responsedescriptors),
+	field_name=md.responsedescriptors{i};
+	WriteData(fid,field_name,'String',['responsedescriptor' num2str(i)]);
 end
+
 
 %write response specific data
 qmu_segments=0;
-count=0;
-for i=1:length(response_fieldnames),
-	field_name=response_fieldnames{i};
-	fieldresponses=responses.(field_name);
-	for j=1:length(fieldresponses),
-		descriptor=fieldresponses(j).descriptor;
-		if strncmpi(descriptor,'MassFlux',8),
-			qmu_segments=1;
-		end
+
+for i=1:numel(md.responsedescriptors),
+	field_name=md.responsedescriptors{i};
+	if strncmpi(field_name,'MassFlux',8),
+		qmu_segments=1;
 	end
 end
Index: /issm/trunk/src/m/qmu/setupdesign/QmuSetupDesign.m
===================================================================
--- /issm/trunk/src/m/qmu/setupdesign/QmuSetupDesign.m	(revision 5214)
+++ /issm/trunk/src/m/qmu/setupdesign/QmuSetupDesign.m	(revision 5215)
@@ -1,12 +1,3 @@
-function dvar=QmuSetupDesign(dvar,variables,params,varargin)
-
-%recover model
-for i=1:length(varargin)
-    if strcmp(class(varargin{i}),'model')
-        md=varargin{i};
-        break;
-    end
-end
-
+function dvar=QmuSetupDesign(md,dvar,variables)
 
 %get descriptor
@@ -18,4 +9,5 @@
 %if descriptor is something like 'Thickness1','Surface10', etc ... the variable expansion already did the work, skip
 if qmuisdistributed(descriptor),
+	dvar(end+1)=variables;
 	return;
 end
@@ -46,5 +38,5 @@
 case {'RiftsFriction'},
 	
-	dvar=setupriftsfriction(dvar,variables,params,varargin{:});
+	dvar=setupriftsfriction(md,dvar,variable);
 
 otherwise
Index: /issm/trunk/src/m/qmu/setupdesign/setupriftsfriction.m
===================================================================
--- /issm/trunk/src/m/qmu/setupdesign/setupriftsfriction.m	(revision 5214)
+++ /issm/trunk/src/m/qmu/setupdesign/setupriftsfriction.m	(revision 5215)
@@ -1,10 +1,3 @@
-function dvar=setupriftsfriction(dvar,variables,params,varargin)
-
-for i=1:length(varargin)
-    if strcmp(class(varargin{i}),'model')
-        md=varargin{i};
-        break;
-    end
-end
+function dvar=setupriftsfriction(md,dvar,variables)
 
 %we have several rifts.
