Index: /issm/trunk/src/c/DataSet/DataSet.cpp
===================================================================
--- /issm/trunk/src/c/DataSet/DataSet.cpp	(revision 1183)
+++ /issm/trunk/src/c/DataSet/DataSet.cpp	(revision 1184)
@@ -1243,5 +1243,5 @@
 
 
-void  DataSet::Du(Vec du_g,double*  u_g,double* u_g_obs,void* inputs,int analysis_type,int sub_analysis_type){
+void  DataSet::Du(Vec du_g,double*  u_g,void* inputs,int analysis_type,int sub_analysis_type){
 
 
@@ -1254,5 +1254,5 @@
 
 			element=(Element*)(*object);
-			element->Du(du_g,u_g,u_g_obs,inputs,analysis_type,sub_analysis_type);
+			element->Du(du_g,u_g,inputs,analysis_type,sub_analysis_type);
 		}
 	}
@@ -1279,5 +1279,5 @@
 }		
 		
-void  DataSet::Misfit(double* pJ, double* u_g,double* u_g_obs,void* inputs,int analysis_type,int sub_analysis_type){
+void  DataSet::Misfit(double* pJ, double* u_g,void* inputs,int analysis_type,int sub_analysis_type){
 
 	double J=0;;
@@ -1291,5 +1291,5 @@
 
 			element=(Element*)(*object);
-			J+=element->Misfit(u_g,u_g_obs,inputs,analysis_type,sub_analysis_type);
+			J+=element->Misfit(u_g,inputs,analysis_type,sub_analysis_type);
 
 		}
Index: /issm/trunk/src/c/DataSet/DataSet.h
===================================================================
--- /issm/trunk/src/c/DataSet/DataSet.h	(revision 1183)
+++ /issm/trunk/src/c/DataSet/DataSet.h	(revision 1184)
@@ -73,7 +73,7 @@
 		void  MeltingConstraints(int* pnum_unstable_constraints,void* inputs,int analysis_type,int sub_analysis_type);
 		DataSet* Copy(void);
-		void  Du(Vec du_g,double*  u_g,double* u_g_obs,void* inputs,int analysis_type,int sub_analysis_type);
+		void  Du(Vec du_g,double*  u_g,void* inputs,int analysis_type,int sub_analysis_type);
 		void  Gradj(Vec grad_g,double*  u_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type,char* control_type);
-		void  Misfit(double* pJ, double* u_g,double* u_g_obs,void* inputs,int analysis_type,int sub_analysis_type);
+		void  Misfit(double* pJ, double* u_g,void* inputs,int analysis_type,int sub_analysis_type);
 		void  FieldDepthAverageAtBase(Vec field,double* field_serial,char* fieldname);
 		int   DeleteObject(Object* object);
Index: /issm/trunk/src/c/Dux/Dux.cpp
===================================================================
--- /issm/trunk/src/c/Dux/Dux.cpp	(revision 1183)
+++ /issm/trunk/src/c/Dux/Dux.cpp	(revision 1184)
@@ -14,5 +14,5 @@
 
 void Dux( Vec* pdu_g, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials, 
-		double* u_g, double* u_g_obs, ParameterInputs* inputs,int analysis_type,int sub_analysis_type){
+		double* u_g,ParameterInputs* inputs,int analysis_type,int sub_analysis_type){
 
 	int i;
@@ -33,5 +33,5 @@
 
 	/*Compute velocity difference: */
-	elements->Du(du_g, u_g,u_g_obs,inputs,analysis_type,sub_analysis_type);
+	elements->Du(du_g, u_g,inputs,analysis_type,sub_analysis_type);
 
 	/*Assemble vector: */
Index: /issm/trunk/src/c/Dux/Dux.h
===================================================================
--- /issm/trunk/src/c/Dux/Dux.h	(revision 1183)
+++ /issm/trunk/src/c/Dux/Dux.h	(revision 1184)
@@ -10,5 +10,5 @@
 /* local prototypes: */
 void Dux( Vec* pdu_g, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials, 
-		double* u_g, double* u_g_obs, ParameterInputs* inputs,int analysis_type,int sub_analysis_type);
+		double* u_g,ParameterInputs* inputs,int analysis_type,int sub_analysis_type);
 
 #endif  /* _DUX_H */
Index: /issm/trunk/src/c/Misfitx/Misfitx.cpp
===================================================================
--- /issm/trunk/src/c/Misfitx/Misfitx.cpp	(revision 1183)
+++ /issm/trunk/src/c/Misfitx/Misfitx.cpp	(revision 1184)
@@ -14,5 +14,5 @@
 
 void Misfitx( double* pJ, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials, 
-		double* u_g, double* u_g_obs, ParameterInputs* inputs,int analysis_type,int sub_analysis_type){
+		double* u_g, ParameterInputs* inputs,int analysis_type,int sub_analysis_type){
 	
 	/*output: */
@@ -24,5 +24,5 @@
 
 	/*Compute gradients: */
-	elements->Misfit(&J, u_g,u_g_obs,inputs,analysis_type,sub_analysis_type);
+	elements->Misfit(&J, u_g,inputs,analysis_type,sub_analysis_type);
 
 	/*Sum all J from all cpus of the cluster:*/
Index: /issm/trunk/src/c/Misfitx/Misfitx.h
===================================================================
--- /issm/trunk/src/c/Misfitx/Misfitx.h	(revision 1183)
+++ /issm/trunk/src/c/Misfitx/Misfitx.h	(revision 1184)
@@ -10,5 +10,5 @@
 /* local prototypes: */
 void Misfitx( double* pJ, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials, 
-		double* u_g, double* u_g_obs, ParameterInputs* inputs,int analysis_type,int sub_analysis_type);
+			double* u_g, ParameterInputs* inputs,int analysis_type,int sub_analysis_type);
 
 #endif  /* _MISFITX_H */
Index: /issm/trunk/src/c/objects/Beam.cpp
===================================================================
--- /issm/trunk/src/c/objects/Beam.cpp	(revision 1183)
+++ /issm/trunk/src/c/objects/Beam.cpp	(revision 1184)
@@ -566,5 +566,5 @@
 #undef __FUNCT__ 
 #define __FUNCT__ "Beam::Du"
-void  Beam::Du(_p_Vec*, double*, double*, void*, int,int){
+void  Beam::Du(_p_Vec*, double*, void*, int,int){
 	throw ErrorException(__FUNCT__," not supported yet!");
 }
@@ -586,5 +586,5 @@
 #undef __FUNCT__ 
 #define __FUNCT__ "Beam::Misfit"
-double Beam::Misfit(double*, double*, void*, int,int ){
+double Beam::Misfit(double*, void*, int,int ){
 	throw ErrorException(__FUNCT__," not supported yet!");
 }
Index: /issm/trunk/src/c/objects/Beam.h
===================================================================
--- /issm/trunk/src/c/objects/Beam.h	(revision 1183)
+++ /issm/trunk/src/c/objects/Beam.h	(revision 1184)
@@ -79,9 +79,9 @@
 		void  GetBedList(double*);
 		void  GetThicknessList(double* thickness_list);
-		void  Du(_p_Vec*, double*, double*, void*, int,int);
+		void  Du(_p_Vec*, double*, void*, int,int);
 		void  Gradj(_p_Vec*, double*, double*, void*, int, int,char*);
 		void  GradjDrag(_p_Vec*, double*, double*, void*, int,int );
 		void  GradjB(_p_Vec*, double*, double*, void*, int,int );
-		double Misfit(double*, double*, void*, int,int );
+		double Misfit(double*, void*, int,int );
 		void  GetNodalFunctions(double* l1l2, double gauss_coord);
 		void  GetParameterValue(double* pvalue, double* value_list,double gauss_coord);
Index: /issm/trunk/src/c/objects/Element.h
===================================================================
--- /issm/trunk/src/c/objects/Element.h	(revision 1183)
+++ /issm/trunk/src/c/objects/Element.h	(revision 1184)
@@ -34,10 +34,10 @@
 		virtual void  GetThicknessList(double* thickness_list)=0;
 		virtual void  GetBedList(double* bed_list)=0;
-		virtual void  Du(Vec du_g,double* u_g,double* u_g_obs,void* inputs,int analysis_type,int sub_analysis_type)=0;
+		virtual void  Du(Vec du_g,double* u_g,void* inputs,int analysis_type,int sub_analysis_type)=0;
 		virtual void  Gradj(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type,char* control_type)=0;
 		virtual void  GradjDrag(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type)=0;
 		virtual void  GradjB(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type)=0;
-        virtual double Misfit(double* u_g,double* u_g_obs,void* inputs,int analysis_type,int sub_analysis_type)=0;
-        virtual void  ComputePressure(Vec p_g)=0;
+		virtual double Misfit(double* u_g,void* inputs,int analysis_type,int sub_analysis_type)=0;
+		virtual void  ComputePressure(Vec p_g)=0;
 
 		int           Enum();
Index: /issm/trunk/src/c/objects/OptArgs.h
===================================================================
--- /issm/trunk/src/c/objects/OptArgs.h	(revision 1183)
+++ /issm/trunk/src/c/objects/OptArgs.h	(revision 1184)
@@ -16,5 +16,4 @@
 	mxArray* inputs;
 	mxArray* param_g;
-	mxArray* u_g_obs;
 	mxArray* grad_g;
 	mxArray* n;
@@ -32,5 +31,4 @@
 	FemModel* femmodel;
 	double* param_g;
-	double* u_g_obs;
 	double* grad_g;
 	ParameterInputs* inputs;
Index: /issm/trunk/src/c/objects/Penta.cpp
===================================================================
--- /issm/trunk/src/c/objects/Penta.cpp	(revision 1183)
+++ /issm/trunk/src/c/objects/Penta.cpp	(revision 1184)
@@ -1176,5 +1176,5 @@
 #undef __FUNCT__ 
 #define __FUNCT__ "Penta::Du"
-void  Penta::Du(Vec du_g,double* u_g,double* u_g_obs,void* inputs,int analysis_type,int sub_analysis_type){
+void  Penta::Du(Vec du_g,double* u_g,void* inputs,int analysis_type,int sub_analysis_type){
 
 	int i;
@@ -1192,5 +1192,5 @@
 		 * and compute Du*/
 		tria=(Tria*)SpawnTria(0,1,2); //grids 0, 1 and 2 make the new tria (lower face).
-		tria->Du(du_g,u_g,u_g_obs,inputs,analysis_type,sub_analysis_type);
+		tria->Du(du_g,u_g,inputs,analysis_type,sub_analysis_type);
 		delete tria;
 		return;
@@ -1199,5 +1199,5 @@
 		
 		tria=(Tria*)SpawnTria(3,4,5); //grids 3, 4 and 5 make the new tria (upper face).
-		tria->Du(du_g,u_g,u_g_obs,inputs,analysis_type,sub_analysis_type);
+		tria->Du(du_g,u_g,inputs,analysis_type,sub_analysis_type);
 		delete tria;
 		return;
@@ -1246,5 +1246,5 @@
 #undef __FUNCT__ 
 #define __FUNCT__ "Penta::Misfit"
-double Penta::Misfit(double* velocity,double* obs_velocity,void* inputs,int analysis_type,int sub_analysis_type){
+double Penta::Misfit(double* velocity,void* inputs,int analysis_type,int sub_analysis_type){
 	
 	double J;
@@ -1262,5 +1262,5 @@
 		 * and compute Misfit*/
 		tria=(Tria*)SpawnTria(0,1,2); //grids 0, 1 and 2 make the new tria (lower face).
-		J=tria->Misfit( velocity,obs_velocity,inputs,analysis_type,sub_analysis_type);
+		J=tria->Misfit( velocity,inputs,analysis_type,sub_analysis_type);
 		delete tria;
 		return J;
@@ -1269,5 +1269,5 @@
 
 		tria=(Tria*)SpawnTria(3,4,5); //grids 3, 4 and 5 make the new tria (upper face).
-		J=tria->Misfit( velocity,obs_velocity,inputs,analysis_type,sub_analysis_type);
+		J=tria->Misfit( velocity,inputs,analysis_type,sub_analysis_type);
 		delete tria;
 		return J;
Index: /issm/trunk/src/c/objects/Penta.h
===================================================================
--- /issm/trunk/src/c/objects/Penta.h	(revision 1183)
+++ /issm/trunk/src/c/objects/Penta.h	(revision 1184)
@@ -86,9 +86,9 @@
 		void  GetNodes(void** nodes);
 		int   GetOnBed();
-		void  Du(Vec du_g,double* u_g,double* u_g_obs,void* inputs,int analysis_type,int sub_analysis_type);
+		void  Du(Vec du_g,double* u_g,void* inputs,int analysis_type,int sub_analysis_type);
 		void  Gradj(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type,char* control_type);
 		void  GradjDrag(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type);
 		void  GradjB(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type);
-        double Misfit(double* u_g,double* u_g_obs,void* inputs,int analysis_type,int sub_analysis_type);
+		double Misfit(double* u_g,void* inputs,int analysis_type,int sub_analysis_type);
 		
 		void          GetThicknessList(double* thickness_list);
Index: /issm/trunk/src/c/objects/Sing.cpp
===================================================================
--- /issm/trunk/src/c/objects/Sing.cpp	(revision 1183)
+++ /issm/trunk/src/c/objects/Sing.cpp	(revision 1184)
@@ -450,5 +450,5 @@
 #undef __FUNCT__ 
 #define __FUNCT__ "Sing::Du"
-void  Sing::Du(_p_Vec*, double*, double*, void*, int,int){
+void  Sing::Du(_p_Vec*, double*, void*, int,int){
 	throw ErrorException(__FUNCT__," not supported yet!");
 }
@@ -470,5 +470,5 @@
 #undef __FUNCT__ 
 #define __FUNCT__ "Sing::Misfit"
-double Sing::Misfit(double*, double*, void*, int,int){
+double Sing::Misfit(double*, void*, int,int){
 	throw ErrorException(__FUNCT__," not supported yet!");
 }
Index: /issm/trunk/src/c/objects/Sing.h
===================================================================
--- /issm/trunk/src/c/objects/Sing.h	(revision 1183)
+++ /issm/trunk/src/c/objects/Sing.h	(revision 1184)
@@ -74,9 +74,9 @@
 		void  GetBedList(double*);
 		void  GetThicknessList(double* thickness_list);
-		void  Du(_p_Vec*, double*, double*, void*, int,int);
+		void  Du(_p_Vec*, double*, void*, int,int);
 		void  Gradj(_p_Vec*, double*, double*, void*, int, int,char*);
 		void  GradjDrag(_p_Vec*, double*, double*, void*, int,int);
 		void  GradjB(_p_Vec*, double*, double*, void*, int,int);
-		double Misfit(double*, double*, void*, int,int);
+		double Misfit(double*, void*, int,int);
 
 
Index: /issm/trunk/src/c/objects/Tria.cpp
===================================================================
--- /issm/trunk/src/c/objects/Tria.cpp	(revision 1183)
+++ /issm/trunk/src/c/objects/Tria.cpp	(revision 1184)
@@ -2007,5 +2007,5 @@
 #undef __FUNCT__ 
 #define __FUNCT__ "Tria::Du"
-void Tria::Du(Vec du_g,double* velocity,double* obs_velocity,void* vinputs,int analysis_type,int sub_analysis_type){
+void Tria::Du(Vec du_g,double* velocity,void* vinputs,int analysis_type,int sub_analysis_type){
 
 	int i;
@@ -2018,8 +2018,11 @@
 	int          doflist[numdof];
 	int          numberofdofspernode;
+	int          dofs2[2]={0,1};
 
 	/* grid data: */
+	double vxvy_list[numgrids][2];
 	double vx_list[numgrids];
 	double vy_list[numgrids];
+	double obs_vxvy_list[numgrids][2];
 	double obs_vx_list[numgrids];
 	double obs_vy_list[numgrids];
@@ -2074,4 +2077,12 @@
 	/* Recover input data: */
 	if(!inputs->Recover("fit",&fit)) throw ErrorException(__FUNCT__," missing fit input parameter");
+	if(!inputs->Recover("velocity_obs",&obs_vxvy_list[0][0],2,dofs2,numgrids,(void**)nodes)){
+		throw ErrorException(__FUNCT__,"missing velocity_obs input parameter");
+	}
+
+	for(i=0;i<numgrids;i++){
+		obs_vx_list[i]=obs_vxvy_list[i][0];
+		obs_vy_list[i]=obs_vxvy_list[i][1];
+	}
 
 	/*Initialize velocities: */
@@ -2079,6 +2090,6 @@
 		vx_list[i]=velocity[doflist[i*numberofdofspernode+0]];
 		vy_list[i]=velocity[doflist[i*numberofdofspernode+1]];
-		obs_vx_list[i]=obs_velocity[doflist[i*numberofdofspernode+0]];
-		obs_vy_list[i]=obs_velocity[doflist[i*numberofdofspernode+1]];
+		//obs_vx_list[i]=obs_velocity[doflist[i*numberofdofspernode+0]];
+		//obs_vy_list[i]=obs_velocity[doflist[i*numberofdofspernode+1]];
 	}
 
@@ -2561,5 +2572,5 @@
 #undef __FUNCT__ 
 #define __FUNCT__ "Tria::Misfit"
-double Tria::Misfit(double* velocity,double* obs_velocity,void* vinputs,int analysis_type,int sub_analysis_type){
+double Tria::Misfit(double* velocity,void* vinputs,int analysis_type,int sub_analysis_type){
 
 	int i;
@@ -2572,4 +2583,5 @@
 	const int    numdof=2*numgrids;
 	const int    NDOF2=2;
+	int          dofs2[2]={0,1};
 	double       xyz_list[numgrids][3];
 	int          doflist[numdof];
@@ -2577,6 +2589,8 @@
 
 	/* grid data: */
+	double vxvy_list[numgrids][2];
 	double vx_list[numgrids];
 	double vy_list[numgrids];
+	double obs_vxvy_list[numgrids][2];
 	double obs_vx_list[numgrids];
 	double obs_vy_list[numgrids];
@@ -2617,4 +2631,12 @@
 	/* Recover input data: */
 	if(!inputs->Recover("fit",&fit)) throw ErrorException(__FUNCT__," missing fit input parameter");
+	if(!inputs->Recover("velocity_obs",&obs_vxvy_list[0][0],2,dofs2,numgrids,(void**)nodes)){
+		throw ErrorException(__FUNCT__,"missing velocity_obs input parameter");
+	}
+
+	for(i=0;i<numgrids;i++){
+		obs_vx_list[i]=obs_vxvy_list[i][0];
+		obs_vy_list[i]=obs_vxvy_list[i][1];
+	}
 
 	/*Initialize velocities: */
@@ -2622,6 +2644,4 @@
 		vx_list[i]=velocity[doflist[i*numberofdofspernode+0]];
 		vy_list[i]=velocity[doflist[i*numberofdofspernode+1]];
-		obs_vx_list[i]=obs_velocity[doflist[i*numberofdofspernode+0]];
-		obs_vy_list[i]=obs_velocity[doflist[i*numberofdofspernode+1]];
 	}
 	
Index: /issm/trunk/src/c/objects/Tria.h
===================================================================
--- /issm/trunk/src/c/objects/Tria.h	(revision 1183)
+++ /issm/trunk/src/c/objects/Tria.h	(revision 1184)
@@ -93,9 +93,9 @@
 		void  GetJacobianInvert(double*  Jinv, double* xyz_list,double* gauss_l1l2l3);
 		void  GetJacobian(double* J, double* xyz_list,double* gauss_l1l2l3);
-		void  Du(Vec du_g,double* u_g,double* u_g_obs,void* inputs,int analysis_type,int sub_analysis_type);
+		void  Du(Vec du_g,double* u_g,void* inputs,int analysis_type,int sub_analysis_type);
 		void  Gradj(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type,char* control_type);
 		void  GradjDrag(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type);
 		void  GradjB(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type);
-        double Misfit(double* u_g,double* u_g_obs,void* inputs,int analysis_type,int sub_analysis_type);
+		double Misfit(double* u_g,void* inputs,int analysis_type,int sub_analysis_type);
 
 		void  CreatePVectorDiagnosticHoriz(Vec pg,void* inputs,int analysis_type,int sub_analysis_type);
Index: /issm/trunk/src/c/parallel/GradJCompute.cpp
===================================================================
--- /issm/trunk/src/c/parallel/GradJCompute.cpp	(revision 1183)
+++ /issm/trunk/src/c/parallel/GradJCompute.cpp	(revision 1184)
@@ -15,5 +15,5 @@
 #endif
 
-Vec GradJCompute(ParameterInputs* inputs,FemModel* femmodel,double* u_g_obs){
+Vec GradJCompute(ParameterInputs* inputs,FemModel* femmodel){
 	
 	
@@ -54,5 +54,5 @@
 
 	_printf_("%s\n","      buid Du, difference between observed velocity and model velocity:");
-	Dux( &du_g, femmodel->elements,femmodel->nodes,femmodel->loads,femmodel->materials,u_g_double,u_g_obs, inputs,analysis_type,sub_analysis_type);
+	Dux( &du_g, femmodel->elements,femmodel->nodes,femmodel->loads,femmodel->materials,u_g_double,inputs,analysis_type,sub_analysis_type);
 
 	_printf_("%s\n","      reduce adjoint load from g-set to f-set:");
Index: /issm/trunk/src/c/parallel/control.cpp
===================================================================
--- /issm/trunk/src/c/parallel/control.cpp	(revision 1183)
+++ /issm/trunk/src/c/parallel/control.cpp	(revision 1184)
@@ -36,4 +36,5 @@
 	/*Intermediary: */
 	double* u_g_initial=NULL;
+	double* u_g_obs=NULL;
 	Param*  param=NULL;
 
@@ -72,11 +73,16 @@
 	_printf_("initialize inputs:\n");
 	femmodels[0].parameters->FindParam((void*)&u_g_initial,"u_g");
+	femmodels[0].parameters->FindParam((void*)&u_g_obs,"u_g_obs");
 	femmodels[0].parameters->FindParam((void*)&numberofnodes,"numberofnodes");
 
 	inputs=new ParameterInputs;
 	inputs->Add("velocity",u_g_initial,3,numberofnodes);
+	inputs->Add("velocity_obs",u_g_obs,2,numberofnodes);
 
 	/*erase velocities: */
 	param=(Param*)femmodels[0].parameters->FindParamObject("u_g");
+	femmodels[0].parameters->DeleteObject((Object*)param);
+
+	param=(Param*)femmodels[0].parameters->FindParamObject("u_g_obs");
 	femmodels[0].parameters->DeleteObject((Object*)param);
 
Index: /issm/trunk/src/c/parallel/control_core.cpp
===================================================================
--- /issm/trunk/src/c/parallel/control_core.cpp	(revision 1183)
+++ /issm/trunk/src/c/parallel/control_core.cpp	(revision 1184)
@@ -26,5 +26,4 @@
 	double* fit=NULL;
 	double* optscal=NULL;
-	double* u_g_obs=NULL;
 	int     gsize;
 	double* maxiter=NULL;
@@ -77,5 +76,4 @@
 	fem_dh->parameters->FindParam((void*)&maxcontrolconstraint,"maxcontrolconstraint");
 	fem_dh->parameters->FindParam((void*)&param_g,"param_g");
-	fem_dh->parameters->FindParam((void*)&u_g_obs,"u_g_obs");
 	fem_dh->parameters->FindParam((void*)&analysis_type,"analysis_type");
 	fem_dh->parameters->FindParam((void*)&sub_analysis_type,"sub_analysis_type");
@@ -88,7 +86,4 @@
 	/*erase useless parameters: */
 	param=(Param*)fem_dh->parameters->FindParamObject("param_g");
-	fem_dh->parameters->DeleteObject((Object*)param);
-
-	param=(Param*)fem_dh->parameters->FindParamObject("u_g_obs");
 	fem_dh->parameters->DeleteObject((Object*)param);
 
@@ -107,5 +102,5 @@
 
 		_printf_("%s\n","      computing gradJ...");
-		grad_g=GradJCompute(inputs,fem_dh,u_g_obs);
+		grad_g=GradJCompute(inputs,fem_dh);
 		_printf_("%s\n","      done.");
 
@@ -118,5 +113,5 @@
 
 		_printf_("%s\n","      optimizing along gradient direction...");
-		optargs.femmodel=fem_dh; optargs.param_g=param_g; optargs.u_g_obs=u_g_obs; optargs.grad_g=grad_g_double; optargs.inputs=inputs;optargs.n=n;
+		optargs.femmodel=fem_dh; 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];
 		BrentSearch(&search_scalar,J+n,&optpars,&objectivefunctionC,&optargs);
Index: /issm/trunk/src/c/parallel/objectivefunctionC.cpp
===================================================================
--- /issm/trunk/src/c/parallel/objectivefunctionC.cpp	(revision 1183)
+++ /issm/trunk/src/c/parallel/objectivefunctionC.cpp	(revision 1184)
@@ -25,5 +25,4 @@
 	FemModel* femmodel=NULL;
 	double* param_g=NULL;
-	double* u_g_obs=NULL;
 	double* grad_g=NULL;
 	ParameterInputs* inputs=NULL;
@@ -48,5 +47,4 @@
 	femmodel=optargs->femmodel;
 	param_g=optargs->param_g;
-	u_g_obs=optargs->u_g_obs;
 	grad_g=optargs->grad_g;
 	inputs=optargs->inputs;
@@ -83,5 +81,5 @@
 	inputs->Add("fit",fit[n]);
 	Misfitx( &J, femmodel->elements,femmodel->nodes, femmodel->loads, femmodel->materials, 
-		u_g_double,u_g_obs, inputs,analysis_type,sub_analysis_type);
+		u_g_double,inputs,analysis_type,sub_analysis_type);
 
 	/*Free ressources:*/
Index: /issm/trunk/src/c/parallel/parallel.h
===================================================================
--- /issm/trunk/src/c/parallel/parallel.h	(revision 1183)
+++ /issm/trunk/src/c/parallel/parallel.h	(revision 1184)
@@ -9,5 +9,5 @@
 #include "../io/io.h"
 
-Vec GradJCompute(ParameterInputs* inputs,FemModel* femmodel,double* u_g_obs);
+Vec GradJCompute(ParameterInputs* inputs,FemModel* femmodel);
 
 void diagnostic_core(DataSet* results,FemModel* fems, ParameterInputs* inputs);
Index: /issm/trunk/src/c/shared/Numerics/OptFunc.cpp
===================================================================
--- /issm/trunk/src/c/shared/Numerics/OptFunc.cpp	(revision 1183)
+++ /issm/trunk/src/c/shared/Numerics/OptFunc.cpp	(revision 1184)
@@ -23,8 +23,7 @@
 	double J;
 
-	mxArray*   inputs[9];
+	mxArray*   inputs[8];
 	mxArray*   psearch_scalar=NULL;
 	mxArray*   mxJ=NULL;
-
 
 	psearch_scalar=mxCreateDoubleScalar(scalar);
@@ -33,11 +32,10 @@
 	inputs[2]=optargs->inputs;
 	inputs[3]=optargs->param_g;
-	inputs[4]=optargs->u_g_obs;
-	inputs[5]=optargs->grad_g;
-	inputs[6]=optargs->n;
-	inputs[7]=optargs->analysis_type;
-	inputs[8]=optargs->sub_analysis_type;
+	inputs[4]=optargs->grad_g;
+	inputs[5]=optargs->n;
+	inputs[6]=optargs->analysis_type;
+	inputs[7]=optargs->sub_analysis_type;
 
-	mexCallMATLAB( 1, &mxJ, 9, (mxArray**)inputs, optargs->function_name);
+	mexCallMATLAB( 1, &mxJ, 8, (mxArray**)inputs, optargs->function_name);
 
 	/*extract misfit from mxArray*/
Index: /issm/trunk/src/m/solutions/cielo/GradJCompute.m
===================================================================
--- /issm/trunk/src/m/solutions/cielo/GradJCompute.m	(revision 1183)
+++ /issm/trunk/src/m/solutions/cielo/GradJCompute.m	(revision 1184)
@@ -1,3 +1,3 @@
-function [u_g grad_g]=GradJCompute(m,inputs, u_g_obs,analysis_type,sub_analysis_type);
+function [u_g grad_g]=GradJCompute(m,inputs,analysis_type,sub_analysis_type);
 
 %Recover solution for this stiffness and right hand side: 
@@ -7,5 +7,5 @@
 %Buid Du, difference between observed velocity and model velocity.
 displaystring(m.parameters.debug,'%s','          computing Du...');
-[Du_g]=Du(m.elements,m.nodes,m.loads,m.materials,m.parameters, u_g,u_g_obs,inputs,analysis_type,sub_analysis_type);
+[Du_g]=Du(m.elements,m.nodes,m.loads,m.materials,m.parameters, u_g,inputs,analysis_type,sub_analysis_type);
 
 %Reduce adjoint load from g-set to f-set
Index: /issm/trunk/src/m/solutions/cielo/control.m
===================================================================
--- /issm/trunk/src/m/solutions/cielo/control.m	(revision 1183)
+++ /issm/trunk/src/m/solutions/cielo/control.m	(revision 1184)
@@ -33,4 +33,5 @@
 	inputs=inputlist;
 	inputs=add(inputs,'velocity',models.dh.parameters.u_g,'doublevec',3,models.dh.parameters.numberofnodes);
+	inputs=add(inputs,'velocity_obs',models.dh.parameters.u_g_obs,'doublevec',2,models.dh.parameters.numberofnodes);
 
 	%compute solution
Index: /issm/trunk/src/m/solutions/cielo/control_core.m
===================================================================
--- /issm/trunk/src/m/solutions/cielo/control_core.m	(revision 1183)
+++ /issm/trunk/src/m/solutions/cielo/control_core.m	(revision 1184)
@@ -16,6 +16,5 @@
 isstokes=m_dh.parameters.isstokes;
 
-%initialize control parameters, gradients and observations
-u_g_obs=m_dh.parameters.u_g_obs;
+%initialize control parameters
 param_g=models.dh.parameters.param_g;
 
@@ -38,5 +37,5 @@
 
 	displaystring(debug,'\n%s',['      computing gradJ...']);
-	[u_g c(n).grad_g]=GradJCompute(m_dh,inputs,u_g_obs,'diagnostic','horiz');
+	[u_g c(n).grad_g]=GradJCompute(m_dh,inputs,'diagnostic','horiz');
 	inputs=add(inputs,'velocity',u_g,'doublevec',2,m_dh.parameters.numberofnodes);
 
@@ -54,5 +53,5 @@
 
 	displaystring(debug,'\n%s',['      optimizing along gradient direction...']);
-	[search_scalar c(n).J]=ControlOptimization('objectivefunctionC',0,1,options,m_dh,inputs,param_g,u_g_obs,c(n).grad_g,n,'diagnostic','horiz');
+	[search_scalar c(n).J]=ControlOptimization('objectivefunctionC',0,1,options,m_dh,inputs,param_g,c(n).grad_g,n,'diagnostic','horiz');
 
 	displaystring(debug,'\n%s',['      updating parameter using optimized search scalar...']);
Index: /issm/trunk/src/m/solutions/cielo/objectivefunctionC.m
===================================================================
--- /issm/trunk/src/m/solutions/cielo/objectivefunctionC.m	(revision 1183)
+++ /issm/trunk/src/m/solutions/cielo/objectivefunctionC.m	(revision 1184)
@@ -1,3 +1,3 @@
-function J =objectivefunctionC(search_scalar,m,inputs,p_g,u_g_obs,grad_g,n,analysis_type,sub_analysis_type);
+function J =objectivefunctionC(search_scalar,m,inputs,p_g,grad_g,n,analysis_type,sub_analysis_type);
         
 %recover some parameters
@@ -16,3 +16,3 @@
 
 %Compute misfit for this velocity field. 
-J=Misfit(m.elements,m.nodes,m.loads,m.materials,m.parameters, u_g, u_g_obs,inputs,analysis_type,sub_analysis_type);
+J=Misfit(m.elements,m.nodes,m.loads,m.materials,m.parameters, u_g,inputs,analysis_type,sub_analysis_type);
Index: /issm/trunk/src/mex/ControlOptimization/ControlOptimization.cpp
===================================================================
--- /issm/trunk/src/mex/ControlOptimization/ControlOptimization.cpp	(revision 1183)
+++ /issm/trunk/src/mex/ControlOptimization/ControlOptimization.cpp	(revision 1184)
@@ -26,5 +26,4 @@
 	mxArray* m=NULL;
 	mxArray* pg=NULL;
-	mxArray* u_g_obs=NULL;
 	mxArray* grad_g=NULL;
 	mxArray* n=NULL;
@@ -47,5 +46,4 @@
 	optargs.param_g=PG; 
 	optargs.inputs=INPUTS;
-	optargs.u_g_obs=VELOBS;
 	optargs.grad_g=GRADIENT;
 	optargs.n=STEP;
@@ -74,5 +72,5 @@
 {
 	_printf_("\n");
-	_printf_("   usage: [search_scalar J] = %s(function_name,xmin,xmax,options,m,inputs,p_g,u_g_obs,grad_g,step,analysis_type,sub_analysis_type)\n",__FUNCT__);
+	_printf_("   usage: [search_scalar J] = %s(function_name,xmin,xmax,options,m,inputs,p_g,grad_g,step,analysis_type,sub_analysis_type)\n",__FUNCT__);
 	_printf_("\n");
 }
Index: /issm/trunk/src/mex/ControlOptimization/ControlOptimization.h
===================================================================
--- /issm/trunk/src/mex/ControlOptimization/ControlOptimization.h	(revision 1183)
+++ /issm/trunk/src/mex/ControlOptimization/ControlOptimization.h	(revision 1184)
@@ -24,9 +24,8 @@
 #define INPUTS (mxArray*)prhs[5]
 #define PG (mxArray*)prhs[6]
-#define VELOBS (mxArray*)prhs[7]
-#define GRADIENT (mxArray*)prhs[8]
-#define STEP (mxArray*)prhs[9]
-#define ANALYSIS (mxArray*)prhs[10]
-#define SUBANALYSIS (mxArray*)prhs[11]
+#define GRADIENT (mxArray*)prhs[7]
+#define STEP (mxArray*)prhs[8]
+#define ANALYSIS (mxArray*)prhs[9]
+#define SUBANALYSIS (mxArray*)prhs[10]
 
 /* serial output macros: */
@@ -38,5 +37,5 @@
 #define NLHS  2
 #undef NRHS
-#define NRHS  12
+#define NRHS  11
 
 
Index: /issm/trunk/src/mex/Du/Du.cpp
===================================================================
--- /issm/trunk/src/mex/Du/Du.cpp	(revision 1183)
+++ /issm/trunk/src/mex/Du/Du.cpp	(revision 1184)
@@ -16,5 +16,4 @@
 	DataSet* materials=NULL;
 	double*  u_g=NULL;
-	double*  u_g_obs=NULL;
 	ParameterInputs* inputs=NULL;
 	char*             analysis_type_string=NULL;
@@ -39,5 +38,4 @@
 	FetchData((void**)&materials,NULL,NULL,MATERIALS,"DataSet",NULL);
 	FetchData((void**)&u_g,NULL,NULL,UG,"Vector","Vec");
-	FetchData((void**)&u_g_obs,NULL,NULL,UGOBS,"Vector","Vec");
 	FetchData((void**)&analysis_type_string,NULL,NULL,ANALYSIS,"String",NULL);
 	analysis_type=AnalysisTypeAsEnum(analysis_type_string);
@@ -50,5 +48,5 @@
 
 	/*!Call core code: */
-	Dux(&du_g, elements,nodes,loads,materials,u_g,u_g_obs,inputs,analysis_type,sub_analysis_type);
+	Dux(&du_g, elements,nodes,loads,materials,u_g,inputs,analysis_type,sub_analysis_type);
 
 	/*write output : */
@@ -61,5 +59,4 @@
 	delete materials;
 	xfree((void**)&u_g);
-	xfree((void**)&u_g_obs);
 	VecFree(&du_g);
 	delete inputs;
@@ -74,5 +71,5 @@
 {
 	_printf_("\n");
-	_printf_("   usage: [du_g] = %s(elements, nodes,loads, materials, parameters, u_g, u_g_obs,inputs);\n",__FUNCT__);
+	_printf_("   usage: [du_g] = %s(lements, nodes,loads, materials, parameters, u_g,inputs);\n",__FUNCT__);
 	_printf_("\n");
 }
Index: /issm/trunk/src/mex/Du/Du.h
===================================================================
--- /issm/trunk/src/mex/Du/Du.h	(revision 1183)
+++ /issm/trunk/src/mex/Du/Du.h	(revision 1184)
@@ -23,8 +23,7 @@
 #define PARAMETERS (mxArray*)prhs[4]
 #define UG (mxArray*)prhs[5]
-#define UGOBS (mxArray*)prhs[6]
-#define INPUTS (mxArray*)prhs[7]
-#define ANALYSIS (mxArray*)prhs[8]
-#define SUBANALYSIS (mxArray*)prhs[9]
+#define INPUTS (mxArray*)prhs[6]
+#define ANALYSIS (mxArray*)prhs[7]
+#define SUBANALYSIS (mxArray*)prhs[8]
 
 /* serial output macros: */
@@ -35,5 +34,5 @@
 #define NLHS  1
 #undef NRHS
-#define NRHS  10
+#define NRHS  9
 
 
Index: /issm/trunk/src/mex/Misfit/Misfit.cpp
===================================================================
--- /issm/trunk/src/mex/Misfit/Misfit.cpp	(revision 1183)
+++ /issm/trunk/src/mex/Misfit/Misfit.cpp	(revision 1184)
@@ -16,5 +16,4 @@
 	DataSet* materials=NULL;
 	double*  u_g=NULL;
-	double*  u_g_obs=NULL;
 	ParameterInputs* inputs=NULL;
 	char*             analysis_type_string=NULL;
@@ -38,5 +37,4 @@
 	FetchData((void**)&materials,NULL,NULL,MATERIALS,"DataSet",NULL);
 	FetchData((void**)&u_g,NULL,NULL,UG,"Vector","Vec");
-	FetchData((void**)&u_g_obs,NULL,NULL,UGOBS,"Vector","Vec");
 	FetchData((void**)&analysis_type_string,NULL,NULL,ANALYSIS,"String",NULL);
 	analysis_type=AnalysisTypeAsEnum(analysis_type_string);
@@ -49,5 +47,5 @@
 
 	/*!Call core code: */
-	Misfitx(&J, elements,nodes,loads,materials,u_g,u_g_obs,inputs,analysis_type,sub_analysis_type);
+	Misfitx(&J, elements,nodes,loads,materials,u_g,inputs,analysis_type,sub_analysis_type);
 
 	/*write output : */
@@ -60,5 +58,4 @@
 	delete materials;
 	xfree((void**)&u_g);
-	xfree((void**)&u_g_obs);
 	delete inputs;
 	xfree((void**)&analysis_type_string);
@@ -72,5 +69,5 @@
 {
 	_printf_("\n");
-	_printf_("   usage: [J] = %s(elements, nodes,loads, materials, parameters, u_g, u_g_obs,inputs);\n",__FUNCT__);
+	_printf_("   usage: [J] = %s(elements, nodes,loads, materials, parameters, u_g,inputs);\n",__FUNCT__);
 	_printf_("\n");
 }
Index: /issm/trunk/src/mex/Misfit/Misfit.h
===================================================================
--- /issm/trunk/src/mex/Misfit/Misfit.h	(revision 1183)
+++ /issm/trunk/src/mex/Misfit/Misfit.h	(revision 1184)
@@ -23,8 +23,7 @@
 #define PARAMETERS (mxArray*)prhs[4]
 #define UG (mxArray*)prhs[5]
-#define UGOBS (mxArray*)prhs[6]
-#define INPUTS (mxArray*)prhs[7]
-#define ANALYSIS (mxArray*)prhs[8]
-#define SUBANALYSIS (mxArray*)prhs[9]
+#define INPUTS (mxArray*)prhs[6]
+#define ANALYSIS (mxArray*)prhs[7]
+#define SUBANALYSIS (mxArray*)prhs[8]
 
 /* serial output macros: */
@@ -35,5 +34,5 @@
 #define NLHS  1
 #undef NRHS
-#define NRHS  10
+#define NRHS  9
 
 
