Index: /issm/trunk/src/m/classes/@model/model.m
===================================================================
--- /issm/trunk/src/m/classes/@model/model.m	(revision 960)
+++ /issm/trunk/src/m/classes/@model/model.m	(revision 961)
@@ -262,5 +262,4 @@
 	md.qmu_method=struct();
 	md.qmu_params=struct();
-	md.dakotaplugin=0;
 	md.dakotaresults=struct();
 	md.dakotain='';
@@ -269,4 +268,8 @@
 	md.qmu_analysis=0;
 	md.npart=0;
+	md.numberofvariables=0;
+	md.numberofresponses=0;
+	md.variabledescriptors=NaN;
+	md.responsedescriptors=NaN;
 
 	%Ice solver string
Index: /issm/trunk/src/m/classes/public/BuildQueueingScriptGeneric.m
===================================================================
--- /issm/trunk/src/m/classes/public/BuildQueueingScriptGeneric.m	(revision 960)
+++ /issm/trunk/src/m/classes/public/BuildQueueingScriptGeneric.m	(revision 961)
@@ -31,4 +31,4 @@
 end
 
-fprintf(fid,' %s %s.bin %s.outbin %s.lock %s.qmu.in %s.qmu.out %s.qmu.err 2> %s.errlog >%s.outlog & ',executionpath,md.name,md.name,md.name,md.name,md.name,md.name,md.name,md.name);
+fprintf(fid,' %s %s.bin %s.outbin %s.lock  2> %s.errlog >%s.outlog & ',executionpath,md.name,md.name,md.name,md.name,md.name);
 fclose(fid);
Index: /issm/trunk/src/m/classes/public/displayqmu.m
===================================================================
--- /issm/trunk/src/m/classes/public/displayqmu.m	(revision 960)
+++ /issm/trunk/src/m/classes/public/displayqmu.m	(revision 961)
@@ -11,77 +11,82 @@
 disp(sprintf('      ''%s''','qmu using Dakota'));
 
-for i=1:numel(md.variables)
-    disp(sprintf('         variables%s:  (arrays of each variable class)',...
-        string_dim(md.variables,i)));
-    fnames=fieldnames(md.variables(i));
-    maxlen=0;
-    for j=1:numel(fnames)
-        maxlen=max(maxlen,length(fnames{j}));
-    end
-    
-    for j=1:numel(fnames)
-        disp(sprintf(['            %-' num2str(maxlen+1) 's:    [%ix%i]    ''%s'''],...
-            fnames{j},size(md.variables.(fnames{j})),class(md.variables.(fnames{j}))));
-    end
-end
+if ~md.qmu_analysis,
+	disp(sprintf('         %s','no scheduled qmu. activate by doing md.qmu_analysis=1'));
+else
+
+	for i=1:numel(md.variables)
+		disp(sprintf('         variables%s:  (arrays of each variable class)',...
+			string_dim(md.variables,i)));
+		fnames=fieldnames(md.variables(i));
+		maxlen=0;
+		for j=1:numel(fnames)
+			maxlen=max(maxlen,length(fnames{j}));
+		end
+		
+		for j=1:numel(fnames)
+			disp(sprintf(['            %-' num2str(maxlen+1) 's:    [%ix%i]    ''%s'''],...
+				fnames{j},size(md.variables.(fnames{j})),class(md.variables.(fnames{j}))));
+		end
+	end
 
 
-for i=1:numel(md.responses)
-    disp(sprintf('         responses%s:  (arrays of each response class)',...
-        string_dim(md.responses,i)));
-    fnames=fieldnames(md.responses(i));
-    maxlen=0;
-    for j=1:numel(fnames)
-        maxlen=max(maxlen,length(fnames{j}));
-    end
-    
-    for j=1:numel(fnames)
-        disp(sprintf(['            %-' num2str(maxlen+1) 's:    [%ix%i]    ''%s'''],...
-            fnames{j},size(md.responses.(fnames{j})),class(md.responses.(fnames{j}))));
-    end
-end
+	for i=1:numel(md.responses)
+		disp(sprintf('         responses%s:  (arrays of each response class)',...
+			string_dim(md.responses,i)));
+		fnames=fieldnames(md.responses(i));
+		maxlen=0;
+		for j=1:numel(fnames)
+			maxlen=max(maxlen,length(fnames{j}));
+		end
+		
+		for j=1:numel(fnames)
+			disp(sprintf(['            %-' num2str(maxlen+1) 's:    [%ix%i]    ''%s'''],...
+				fnames{j},size(md.responses.(fnames{j})),class(md.responses.(fnames{j}))));
+		end
+	end
 
 
-disp(sprintf('         qmu_method:  (array of dakota_method class)'));
-for i=1:numel(md.qmu_method);
-    if strcmp(class(md.qmu_method(i)),'dakota_method')
-        disp(sprintf('            method%s :    ''%s''',...
-            string_dim(md.qmu_method,i),md.qmu_method(i).method));
-    end
+	disp(sprintf('         qmu_method:  (array of dakota_method class)'));
+	for i=1:numel(md.qmu_method);
+		if strcmp(class(md.qmu_method(i)),'dakota_method')
+			disp(sprintf('            method%s :    ''%s''',...
+				string_dim(md.qmu_method,i),md.qmu_method(i).method));
+		end
+	end
+
+	for i=1:numel(md.qmu_params)
+		disp(sprintf('         qmu_params%s:  (array of method-independent parameters)',...
+			string_dim(md.qmu_params,i)));
+		fnames=fieldnames(md.qmu_params(i));
+		maxlen=0;
+		for j=1:numel(fnames)
+			maxlen=max(maxlen,length(fnames{j}));
+		end
+		
+		for j=1:numel(fnames)
+			disp(sprintf(['            %-' num2str(maxlen+1) 's: %s'],...
+				fnames{j},any2str(md.qmu_params(i).(fnames{j}))));
+		end
+	end
+
+	for i=1:numel(md.dakotaresults)
+		disp(sprintf('         dakotaresults%s:  (information from dakota files)',...
+			string_dim(md.dakotaresults,i)));
+		fnames=fieldnames(md.dakotaresults(i));
+		maxlen=0;
+		for j=1:numel(fnames)
+			maxlen=max(maxlen,length(fnames{j}));
+		end
+		
+		for j=1:numel(fnames)
+			disp(sprintf(['            %-' num2str(maxlen+1) 's:    [%ix%i]    ''%s'''],...
+				fnames{j},size(md.dakotaresults.(fnames{j})),class(md.dakotaresults.(fnames{j}))));
+		end
+	end
+
+	if isempty(md.dakotain), disp(sprintf('         dakotain: N/A')); else disp(sprintf('         dakotain:    [%ix%i]    (can be accessed by typing md.dakotain)',size(md.dakotain)));end
+	if isempty(md.dakotaout), disp(sprintf('         dakotaout: N/A')); else disp(sprintf('         dakotaout:    [%ix%i]    (can be accessed by typing md.dakotaout)',size(md.dakotaout)));end
+	if isempty(md.dakotadat), disp(sprintf('         dakotadat: N/A')); else disp(sprintf('         dakotadat:    [%ix%i]    (can be accessed by typing md.dakotadat)',size(md.dakotadat)));end
+	disp(sprintf('         npart   : %i (number of partitions for semi-descrete qmu)',md.npart));
+	disp(sprintf('         dakotaplugin   : %i (are we running using the library mode for Dakota? defaults to 0',md.dakotaplugin));
 end
-
-for i=1:numel(md.qmu_params)
-    disp(sprintf('         qmu_params%s:  (array of method-independent parameters)',...
-        string_dim(md.qmu_params,i)));
-    fnames=fieldnames(md.qmu_params(i));
-    maxlen=0;
-    for j=1:numel(fnames)
-        maxlen=max(maxlen,length(fnames{j}));
-    end
-    
-    for j=1:numel(fnames)
-        disp(sprintf(['            %-' num2str(maxlen+1) 's: %s'],...
-            fnames{j},any2str(md.qmu_params(i).(fnames{j}))));
-    end
-end
-
-for i=1:numel(md.dakotaresults)
-    disp(sprintf('         dakotaresults%s:  (information from dakota files)',...
-        string_dim(md.dakotaresults,i)));
-    fnames=fieldnames(md.dakotaresults(i));
-    maxlen=0;
-    for j=1:numel(fnames)
-        maxlen=max(maxlen,length(fnames{j}));
-    end
-    
-    for j=1:numel(fnames)
-        disp(sprintf(['            %-' num2str(maxlen+1) 's:    [%ix%i]    ''%s'''],...
-            fnames{j},size(md.dakotaresults.(fnames{j})),class(md.dakotaresults.(fnames{j}))));
-    end
-end
-
-if isempty(md.dakotain), disp(sprintf('         dakotain: N/A')); else disp(sprintf('         dakotain:    [%ix%i]    (can be accessed by typing md.dakotain)',size(md.dakotain)));end
-if isempty(md.dakotaout), disp(sprintf('         dakotaout: N/A')); else disp(sprintf('         dakotaout:    [%ix%i]    (can be accessed by typing md.dakotaout)',size(md.dakotaout)));end
-if isempty(md.dakotadat), disp(sprintf('         dakotadat: N/A')); else disp(sprintf('         dakotadat:    [%ix%i]    (can be accessed by typing md.dakotadat)',size(md.dakotadat)));end
-disp(sprintf('         npart   : %i (number of partitions for semi-descrete qmu)',md.npart));
-disp(sprintf('         dakotaplugin   : %i (are we running using the library mode for Dakota? defaults to 0',md.dakotaplugin));
Index: /issm/trunk/src/m/classes/public/ismodelselfconsistent.m
===================================================================
--- /issm/trunk/src/m/classes/public/ismodelselfconsistent.m	(revision 960)
+++ /issm/trunk/src/m/classes/public/ismodelselfconsistent.m	(revision 961)
@@ -158,9 +158,7 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  SOLUTION CHECKS  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %QMU
-if md.dakotaplugin==1,
-	if md.qmu_params.evaluation_concurrency~=1,
-		disp(['concurrency should be set to 1 when running dakota in library mode']);
-		bool=0;return;
-	end
+if md.qmu_params.evaluation_concurrency~=1,
+	disp(['concurrency should be set to 1 when running dakota in library mode']);
+	bool=0;return;
 end
 
Index: /issm/trunk/src/m/classes/public/marshall.m
===================================================================
--- /issm/trunk/src/m/classes/public/marshall.m	(revision 960)
+++ /issm/trunk/src/m/classes/public/marshall.m	(revision 961)
@@ -159,4 +159,5 @@
 %Qmu: the rest will be handle by qmumarshall
 WriteData(fid,md.qmu_analysis,'Integer','qmu_analysis');
+WriteData(fid,md.name,'String','name');
 
 %Get penalties to connect collapsed and non-collapsed 3d meshes: 
Index: /issm/trunk/src/m/classes/public/process_solve_options.m
===================================================================
--- /issm/trunk/src/m/classes/public/process_solve_options.m	(revision 960)
+++ /issm/trunk/src/m/classes/public/process_solve_options.m	(revision 961)
@@ -79,6 +79,54 @@
 end
 
+
+%  process qmu arguments
+
+%first, the defaults
+qmudir ='qmu';% qmudir =['qmu_' datestr(now,'yyyymmdd_HHMMSS')];
+qmufile='qmu';%  qmufile can not be changed unless cielo_ice_script.sh is also changed
+ivar   =1;
+iresp  =1;
+imethod=1;
+iparams=1;
+runmpi =false;
+
+for i=1:size(options,1),
+	switch options{i,1},
+	case 'qmudir'
+		qmudir=options{i,2};
+	case 'qmufile'
+		qmufile=options{i,2};
+	case 'ivar'
+		ivar=options{i,2};
+	case 'iresp'
+		iresp=options{i,2};
+	case 'imethod'
+		imethod=options{i,2};
+	case 'iparams'
+		iparams=options{i,2};
+	case 'overwrite'
+		outoptions.overwrite=options{i,2};
+	case 'outfiles'
+		outoptions.outfiles=options{i,2};
+	case 'rstfile'
+		outoptions.rstfile=options{i,2}; 
+	case 'rundakota'
+		outoptions.rundakota=options{i,2};
+	case 'runmpi'
+		runmpi=options{i,2};
+	otherwise
+		%nothing
+	end
+end
+
 %setup final options structure
 outoptions.analysis_type=analysis_type;
 outoptions.package=package;
 outoptions.sub_analysis_type=sub_analysis_type;
+outoptions.qmudir=qmudir;
+outoptions.qmufile=qmufile;
+outoptions.ivar=ivar;
+outoptions.iresp=iresp;
+outoptions.imethod=imethod;
+outoptions.iparams=iparams;
+outoptions.runmpi=runmpi;
Index: /issm/trunk/src/m/classes/public/solve.m
===================================================================
--- /issm/trunk/src/m/classes/public/solve.m	(revision 960)
+++ /issm/trunk/src/m/classes/public/solve.m	(revision 961)
@@ -37,15 +37,18 @@
 end
 
+%if running qmu analysis, some preprocessing of dakota files using 
+%models fields needs to be carried out. 
+if md.qmu_analysis,
+	md=preqmu(md,options);
+end
+
 displaystring(md.debug,'\n%s\n','launching solution sequence');
 
 %If running in parallel, we have a different way of launching the solution
-%sequences. qmu is the only solution sequence that cannot run in parallel
-if ~strcmpi(md.analysis_type,'qmu'),
-	if ~strcmpi(md.cluster,'none'),
-		md=solveparallel(md);
-		return;
-	end
+%sequences. 
+if ~strcmpi(md.cluster,'none'),
+	md=solveparallel(md);
+	return;
 end
-
 %Launch correct solution sequence
 if strcmpi(md.analysis_type,'diagnostic'),
@@ -57,7 +60,4 @@
 elseif strcmpi(md.analysis_type,'transient'),
 	md=transient(md);
-
-elseif strcmpi(md.analysis_type,'qmu'),
-	md=qmu(md,package);
 
 elseif strcmpi(md.analysis_type,'mesh2grid'),
@@ -80,4 +80,10 @@
 end
 
+%post processes qmu results if necessary
+if md.qmu_analysis,
+	md=postqmu(md);
+	cd ..
+end
+
 %Check result is consistent
 displaystring(md.debug,'%s\n','checking result consistency');
@@ -91,2 +97,3 @@
 addpath(genpath_ice([ISSM_DIR '/src/m/solutions/cielo']));
 addpath(genpath_ice([ISSM_DIR '/bin']));
+
Index: /issm/trunk/src/m/classes/public/solveparallel.m
===================================================================
--- /issm/trunk/src/m/classes/public/solveparallel.m	(revision 960)
+++ /issm/trunk/src/m/classes/public/solveparallel.m	(revision 961)
@@ -14,4 +14,9 @@
 marshall(md);
 
+%add qmu fields to binary file if running qmu analysis
+if md.qmu_analysis,
+	qmumarshall(md,md.variables(options.ivar),md.responses(options.iresp));
+end
+
 %Now, we need to build the queuing script, used by the cluster to launch the job.
 BuildQueueingScript(md,executionpath,codepath);
