Index: /issm/trunk/src/c/parallel/objectivefunctionC.cpp
===================================================================
--- /issm/trunk/src/c/parallel/objectivefunctionC.cpp	(revision 3538)
+++ /issm/trunk/src/c/parallel/objectivefunctionC.cpp	(revision 3539)
@@ -22,4 +22,5 @@
 	Model*    model=NULL;
 	FemModel* femmodel=NULL;
+	DataSet* diagnostic_results=NULL;
 	double* param_g=NULL;
 	double* grad_g=NULL;
@@ -80,4 +81,5 @@
 	/*First, update param_g using search_scalar: */
 	for(i=0;i<numberofnodes;i++)param_g_copy[i]=param_g_copy[i]+search_scalar*optscal[n]*grad_g[i];
+	printf("numberofdofspernode: %i\n",numberofdofspernode);
 
 	/*Constrain:*/
@@ -88,7 +90,19 @@
 
 	/*Run diagnostic with updated parameters.*/
-	diagnostic_core_nonlinear(&u_g,NULL,NULL,NULL,femmodel,inputs,DiagnosticAnalysisEnum(),sub_analysis_type);
-	VecToMPISerial(&u_g_double,u_g); VecFree(&u_g);
-	inputs->Add("velocity",u_g_double,numberofdofspernode,numberofnodes);
+	if(!control_steady){
+		diagnostic_core_nonlinear(&u_g,NULL,NULL,NULL,femmodel,inputs,DiagnosticAnalysisEnum(),sub_analysis_type);
+		VecToMPISerial(&u_g_double,u_g); VecFree(&u_g);
+		inputs->Add("velocity",u_g_double,numberofdofspernode,numberofnodes);
+	}
+	else{
+		//We need a 3D velocity!! (vz is required for the next thermal run)
+		diagnostic_results=new DataSet(ResultsEnum()); 
+		diagnostic_core(diagnostic_results,model, inputs);
+
+		//extract u_g and add it to input (3d velocity needed by thermal_core)
+		diagnostic_results->FindResult(&u_g,"u_g");
+		inputs->Add("velocity",u_g,3,numberofnodes);
+		delete diagnostic_results;
+	}
 
 	/*Compute misfit for this velocity field.*/
