Index: /issm/trunk/src/c/parallel/control_core.cpp
===================================================================
--- /issm/trunk/src/c/parallel/control_core.cpp	(revision 1827)
+++ /issm/trunk/src/c/parallel/control_core.cpp	(revision 1828)
@@ -9,5 +9,5 @@
 #include "../issm.h"
 
-void control_core(DataSet* results,FemModel* fems, ParameterInputs* inputs){
+void control_core(DataSet* results,Model* model, ParameterInputs* inputs){
 
 	extern int my_rank;
@@ -49,5 +49,6 @@
 
 	/*Process models*/
-	ControlInitialization(&fem_model,fems,inputs);
+	ControlInitialization(model,inputs);
+	fem_model=model->Active();
 
 	/*Recover parameters used throughout the solution:*/
@@ -98,5 +99,5 @@
 
 		_printf_("%s\n","      optimizing along gradient direction...");
-		optargs.femmodel=fem_model;
+		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];
@@ -120,5 +121,5 @@
 		/*if (((n+1)%5)==0){
 			_printf_("%s\n","      saving temporary results...");
-			ControlTemporaryResults(fems,param_g,J,n,inputs);
+			ControlTemporaryResults(model,param_g,J,n,inputs);
 			_printf_("%s\n","      done.");
 		}*/
@@ -131,5 +132,5 @@
 	inputs->Add(control_type,param_g,1,numberofnodes);
 	diagnostic_results=new DataSet(ResultsEnum()); 
-	diagnostic_core(diagnostic_results,fems, inputs);
+	diagnostic_core(diagnostic_results,model, inputs);
 
 	//extract u_g from diagnostic_results, and erase diagnostic_results;
