Index: /issm/trunk/src/m/classes/public/solversettomatlab.m
===================================================================
--- /issm/trunk/src/m/classes/public/solversettomatlab.m	(revision 4525)
+++ /issm/trunk/src/m/classes/public/solversettomatlab.m	(revision 4525)
@@ -0,0 +1,7 @@
+function md=solversettomatlab(md)
+%SOLVERSETTOASM - associate solver matlab to the model
+%
+%   Usage:
+%      md=solversettomatlab(md)
+
+md.solverstring='-ksp_type matlab';
Index: /issm/trunk/src/m/solutions/SpawnCore.m
===================================================================
--- /issm/trunk/src/m/solutions/SpawnCore.m	(revision 4524)
+++ /issm/trunk/src/m/solutions/SpawnCore.m	(revision 4525)
@@ -11,5 +11,5 @@
 solution_type=femmodel.parameters.SolutionType;
 
-displaystring(verbose,'%s%i',['   qmu iteration:'],counter);
+displaystring(1,'%s%i',['   qmu iteration:'],counter);
 
 %first update the inputs to the femmodel using the variables provided to us by dakota.
@@ -21,7 +21,3 @@
 
 %now process the results to get response function values
-responses=zeros(numel(responsedescriptors),1);
-for i=1:numel(responsedescriptors),
-	descriptor=responsedescriptors{i};
-	responses(i)=qmuresponse(femmodel,descriptor);
-end
+responses=DakotaResponses(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,responsedescriptors);
Index: /issm/trunk/src/mex/DakotaResponses/DakotaResponses.cpp
===================================================================
--- /issm/trunk/src/mex/DakotaResponses/DakotaResponses.cpp	(revision 4524)
+++ /issm/trunk/src/mex/DakotaResponses/DakotaResponses.cpp	(revision 4525)
@@ -43,6 +43,6 @@
 		pfield=mxGetCell(RESPONSESDESCRIPTORS,i);
 		stringlength = (mxGetM(pfield) * mxGetN(pfield) * sizeof(mxChar)) + 1 ;
+		string=(char*)xmalloc(stringlength);
 		mxGetString(pfield,string,stringlength);
-		
 		responses_descriptors[i]=string;
 	}
Index: /issm/trunk/src/mex/InputUpdateFromDakota/InputUpdateFromDakota.cpp
===================================================================
--- /issm/trunk/src/mex/InputUpdateFromDakota/InputUpdateFromDakota.cpp	(revision 4524)
+++ /issm/trunk/src/mex/InputUpdateFromDakota/InputUpdateFromDakota.cpp	(revision 4525)
@@ -47,4 +47,5 @@
 		pfield=mxGetCell(VARIABLESDESCRIPTORS,i);
 		stringlength = (mxGetM(pfield) * mxGetN(pfield) * sizeof(mxChar)) + 1 ;
+		string=(char*)xmalloc(stringlength);
 		mxGetString(pfield,string,stringlength);
 
Index: /issm/trunk/src/mex/Qmu/Qmu.cpp
===================================================================
--- /issm/trunk/src/mex/Qmu/Qmu.cpp	(revision 4524)
+++ /issm/trunk/src/mex/Qmu/Qmu.cpp	(revision 4525)
@@ -38,6 +38,10 @@
 	Qmux(femmodel,parameters);
 
+	/*Free ressources:*/
+	delete parameters;
+
 	/*end module: */
 	MODULEEND();
+
 
 }
Index: /issm/trunk/src/mex/Solver/Solver.cpp
===================================================================
--- /issm/trunk/src/mex/Solver/Solver.cpp	(revision 4524)
+++ /issm/trunk/src/mex/Solver/Solver.cpp	(revision 4525)
@@ -13,4 +13,8 @@
 	char* solver_string=NULL;
 	Parameters* parameters=NULL;
+		
+	/*Matlab solver: */
+	mxArray* array[2];
+	char* matlabstring="-ksp_type matlab";
 
 	/* output datasets: */
@@ -23,24 +27,40 @@
 	CheckNumMatlabArguments(nlhs,NLHS,nrhs,NRHS,__FUNCT__,&SolverUsage);
 
-	/*Input datasets: */
-	FetchData(&Kff,KFF);
-	FetchData(&pf,PF);
-	FetchData(&uf0,UF0);
+	/*First, check solver string: */
 	FetchParams(&parameters,PARAMETERS);
 	parameters->FindParam(&solver_string,SolverStringEnum);
+	
+	/*Fetch rest of data only if not running the matlab solver: */
+	if (strcmp(solver_string,matlabstring)!=0){
+		/*Input datasets: */
+		FetchData(&Kff,KFF);
+		FetchData(&pf,PF);
+		FetchData(&uf0,UF0);
+	}
 
-	/*!Reduce vector: */
-	Solverx(&uf, Kff, pf, uf0, solver_string);
+	/*Run solver code: */
+	if (strcmp(solver_string,matlabstring)!=0){
+		/*Petsc solver: */
+		Solverx(&uf, Kff, pf, uf0, solver_string);
+	}
+	else{
+		/*Matlab solver: */
+		array[0]=KFF;
+		array[1]=PF;
+		mexCallMATLAB(1,UF,2,array,"\\");
+	}
 
-	/*write output datasets: */
-	WriteData(UF,uf);
+	/*write output datasets if running Petsc solver: */
+	if (strcmp(solver_string,matlabstring)!=0) WriteData(UF,uf);
 
 	/*Free ressources: */
-	MatFree(&Kff);
-	VecFree(&pf);
-	VecFree(&uf0);
-	VecFree(&uf);
+	if (strcmp(solver_string,matlabstring)!=0){
+		MatFree(&Kff);
+		VecFree(&pf);
+		VecFree(&uf0);
+		VecFree(&uf);
+		delete parameters;
+	}
 	xfree((void**)&solver_string);
-	delete parameters;
 
 	/*end module: */
Index: /issm/trunk/test/Verification/test25_IceSheetIceFrontM2dDakota/Square.par
===================================================================
--- /issm/trunk/test/Verification/test25_IceSheetIceFrontM2dDakota/Square.par	(revision 4524)
+++ /issm/trunk/test/Verification/test25_IceSheetIceFrontM2dDakota/Square.par	(revision 4525)
@@ -63,2 +63,3 @@
 
 md.eps_rel=10^-10; %tighten for qmu analysese
+md.solverstring
