Index: /issm/trunk-jpl/src/c/cores/controladm1qn3_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/controladm1qn3_core.cpp	(revision 22632)
+++ /issm/trunk-jpl/src/c/cores/controladm1qn3_core.cpp	(revision 22633)
@@ -123,5 +123,4 @@
 	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
 	solutioncore(femmodel);
-
 
 	/*Reset the time to zero for next optimization*/
@@ -276,6 +275,7 @@
 	_assert_(JlistN==num_responses+1);
 
-	/*Compute objective function*/
+	/*Compute objective function and broadcast it to other cpus*/
 	*pf = reCast<double>(J);
+	ISSM_MPI_Bcast(pf,1,ISSM_MPI_PDOUBLE,0,IssmComm::GetComm());
 	_printf0_("f(x) = "<<setw(12)<<setprecision(7)<<*pf<<"  |  ");
 
@@ -410,11 +410,8 @@
 	/*Initialize Gradient and cost function of M1QN3*/
 	indic = 4; /*gradient required*/
-	printf("-------------- file: controladm1qn3_core.cpp line: %i\n",__LINE__); 
 	simul_ad(&indic,&n,X,&f,G,izs,rzs,(void*)&mystruct);
-	printf("-------------- file: controladm1qn3_core.cpp line: %i\n",__LINE__); 
 	/*Estimation of the expected decrease in f during the first iteration*/
 	double df1=f;
 
-printf("-------------- file: controladm1qn3_core.cpp line: %i\n",__LINE__); 
 	/*Call M1QN3 solver*/
 	m1qn3_(simul_ptr,prosca,&ctonbe_,&ctcabe_,
@@ -422,5 +419,4 @@
 				&gttol,normtype,&impres,&io,imode,&omode,&niter,&nsim,iz,dz,&ndz,
 				&reverse,&indic,izs,rzs,(void*)&mystruct);
-	printf("-------------- file: controladm1qn3_core.cpp line: %i\n",__LINE__); 
 	switch(int(omode)){
 		case 0:  _printf0_("   Stop requested (indic = 0)\n"); break;
@@ -434,13 +430,11 @@
 		default: _printf0_("   Unknown end condition\n");
 	}
+
 	/*Constrain solution vector*/
 	double  *XL = NULL;
-	printf("-------------- file: controladm1qn3_core.cpp line: %i\n",__LINE__); 
 	double  *XU = NULL;
 	GetPassiveVectorFromControlInputsx(&XL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");
-	printf("-------------- file: controladm1qn3_core.cpp line: %i\n",__LINE__); 
 	GetPassiveVectorFromControlInputsx(&XU,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");
 
-	printf("-------------- file: controladm1qn3_core.cpp line: %i\n",__LINE__); 
 	for(int i=0;i<numberofvertices;i++){
 		for(int c=0;c<num_controls;c++){
@@ -465,7 +459,16 @@
 
 	/*Add last cost function to results*/
+
+	if (solution_type == TransientSolutionEnum){
+		int step = 1;
+		femmodel->parameters->SetParam(step,StepEnum);
+		femmodel->OutputControlsx(&femmodel->results);
+		femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,JEnum,mystruct.Jlist,(*mystruct.i),mystruct.N,1,0));
+	}
+	else{
+		femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,JEnum,mystruct.Jlist,(*mystruct.i),mystruct.N,0,0));
+
 	femmodel->OutputControlsx(&femmodel->results);
-	femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,JEnum,mystruct.Jlist,(*mystruct.i),mystruct.N,0,0));
-
+	}
 	/*Finalize*/
 	if(VerboseControl()) _printf0_("   preparing final solution\n");
@@ -474,5 +477,4 @@
 	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
 	solutioncore(femmodel);
-
 
 	/*Clean-up and return*/
