Index: /issm/trunk/src/c/parallel/control_core.cpp
===================================================================
--- /issm/trunk/src/c/parallel/control_core.cpp	(revision 2759)
+++ /issm/trunk/src/c/parallel/control_core.cpp	(revision 2760)
@@ -113,27 +113,32 @@
 		gradjcompute_results->FindResult(&grad_g,"grad_g");
 		delete gradjcompute_results;
-		_printf_("%s\n","      done.");
-
-		_printf_("%s\n","      normalizing directions...");
-		Orthx(&new_grad_g,grad_g,grad_g_old);
+
+		/*Normalize if last gradient not satisfying (search_scalar==0)*/
+		if (n>0 && search_scalar==0){
+			_printf_("%s","      normalizing directions...");
+			Orthx(&new_grad_g,grad_g,grad_g_old);
+			_printf_("%s\n"," done.");
+		}
+		else{ 
+			VecDuplicate(grad_g,&new_grad_g);
+			VecCopy(grad_g,new_grad_g);
+		}
 		VecFree(&grad_g); VecFree(&grad_g_old); 
 		grad_g_old=new_grad_g;
 		VecToMPISerial(&grad_g_double,new_grad_g);
-		_printf_("%s\n","      done.");
-
-		_printf_("%s\n","      optimizing along gradient direction...");
+
+		_printf_("%s\n","      optimizing along gradient direction");
 		optargs.model=model;
 		optargs.param_g=param_g; optargs.grad_g=grad_g_double; optargs.inputs=inputs;optargs.n=n;
 		optpars.xmin=0; optpars.xmax=1; optpars.tolerance=tolx; optpars.maxiter=(int)maxiter[n];optpars.cm_jump=cm_jump[n];
 		BrentSearch(&search_scalar,J+n,&optpars,&objectivefunctionC,&optargs);
-		_printf_("%s\n","      done.");
-
-		_printf_("%s\n","      updating parameter using optimized search scalar...");
+
+		_printf_("%s","      updating parameter using optimized search scalar...");
 		for(i=0;i<numberofnodes;i++)param_g[i]=param_g[i]+search_scalar*optscal[n]*grad_g_double[i];
-		_printf_("%s\n","      done.");
-
-		_printf_("%s\n","      constraining the new distribution...");    
+		_printf_("%s\n"," done.");
+
+		_printf_("%s","      constraining the new distribution...");    
 		ControlConstrainx(param_g,numberofnodes,cm_min,cm_max,control_type);
-		_printf_("%s\n","      done.");
+		_printf_("%s\n"," done.");
 		
 		_printf_("%s%i%s%g\n","      value of misfit J after optimization #",n+1,": ",J[n]);
@@ -167,12 +172,12 @@
 		//some temporary saving
 		if (((n+1)%5)==0){
-			_printf_("%s\n","      saving temporary results...");
+			_printf_("%s","      saving temporary results...");
 			ControlRestart(model,param_g);
-			_printf_("%s\n","      done.");
+			_printf_("%s\n"," done.");
 		}
 	}
 
 	/*Write results to disk: */
-	_printf_("%s\n","      preparing final velocity solution...");
+	_printf_("%s","      preparing final velocity solution");
 	/*Launch diagnostic with the last parameter distribution*/
 	if (control_steady){
