Index: /issm/trunk/src/c/parallel/control_core.cpp
===================================================================
--- /issm/trunk/src/c/parallel/control_core.cpp	(revision 2224)
+++ /issm/trunk/src/c/parallel/control_core.cpp	(revision 2225)
@@ -25,4 +25,5 @@
 	Vec     u_g=NULL;
 	Vec     t_g=NULL;
+	Vec     m_g=NULL;
 	double  search_scalar;
 	char*   control_type=NULL;
@@ -96,9 +97,11 @@
 		/*In case we are running a steady state control method, compute new temperature field using new parameter 
 		 * distribution: */
-		steadystate_results=new DataSet(ResultsEnum());
-		steadystate_core(steadystate_results,model,inputs);
-		VecFree(&t_g); steadystate_results->FindResult(&t_g,"t_g");
-		delete steadystate_results;
-		inputs->Add("temperature",t_g,1,numberofnodes);
+		if (control_steady){
+			steadystate_results=new DataSet(ResultsEnum());
+			steadystate_core(steadystate_results,model,inputs);
+			VecFree(&t_g); steadystate_results->FindResult(&t_g,"t_g");
+			delete steadystate_results;
+			inputs->Add("temperature",t_g,1,numberofnodes);
+		}
 	
 		/*Update parameters: */
@@ -133,6 +136,4 @@
 		ControlConstrainx(param_g,numberofnodes,mincontrolconstraint,maxcontrolconstraint,control_type);
 		_printf_("%s\n","      done.");
-
-	
 		
 		_printf_("%s%i%s%g\n","      value of misfit J after optimization #",n+1,": ",J[n]);
@@ -174,13 +175,25 @@
 	/*Write results to disk: */
 	_printf_("%s\n","      preparing final velocity solution...");
-
 	/*Launch diagnostic with the last parameter distribution*/
-	inputs->Add(control_type,param_g,1,numberofnodes);
-	diagnostic_results=new DataSet(ResultsEnum()); 
-	diagnostic_core(diagnostic_results,model, inputs);
-
-	//extract u_g from diagnostic_results, and erase diagnostic_results;
-	diagnostic_results->FindResult(&u_g,"u_g");
-	delete diagnostic_results;
+	if (control_steady){
+		inputs->Add(control_type,param_g,1,numberofnodes);
+		steadystate_results=new DataSet(ResultsEnum());
+		steadystate_core(steadystate_results,model,inputs);
+
+		//extract u_g ,t_g and m_g from steadystate results, and erase diagnostic_results;
+		steadystate_results->FindResult(&u_g,"u_g");
+		steadystate_results->FindResult(&m_g,"m_g");
+		steadystate_results->FindResult(&t_g,"t_g");
+		delete steadystate_results;
+	}
+	else{
+		inputs->Add(control_type,param_g,1,numberofnodes);
+		diagnostic_results=new DataSet(ResultsEnum()); 
+		diagnostic_core(diagnostic_results,model, inputs);
+
+		//extract u_g from diagnostic_results, and erase diagnostic_results;
+		diagnostic_results->FindResult(&u_g,"u_g");
+		delete diagnostic_results;
+	}
 
 	/*Plug results into output dataset: */
@@ -191,4 +204,12 @@
 	result=new Result(results->Size()+1,0,1,"J",J,nsteps);
 	results->AddObject(result);
+	if (control_steady){
+		result=new Result(results->Size()+1,0,1,"u_g",u_g);
+		results->AddObject(result);
+		result=new Result(results->Size()+1,0,1,"t_g",t_g);
+		results->AddObject(result);
+		result=new Result(results->Size()+1,0,1,"m_g",m_g);
+		results->AddObject(result);
+	}
 
 	/*Free ressources: */
