Index: /issm/trunk/src/c/modules/Mergesolutionfromftogx/Mergesolutionfromftogx.cpp
===================================================================
--- /issm/trunk/src/c/modules/Mergesolutionfromftogx/Mergesolutionfromftogx.cpp	(revision 3958)
+++ /issm/trunk/src/c/modules/Mergesolutionfromftogx/Mergesolutionfromftogx.cpp	(revision 3959)
@@ -5,5 +5,5 @@
 #include "./Mergesolutionfromftogx.h"
 
-void	Mergesolutionfromftogx( Vec* pug, Vec uf, Mat Gmn, Vec ys, NodeSets* nodesets){
+void	Mergesolutionfromftogx( Vec* pug, Vec uf, Mat Gmn, Vec ys, NodeSets* nodesets,bool flag_ys0){
 
 	/*output: */
@@ -12,8 +12,9 @@
 
 	/*intermediary*/
+	Vec ys0=NULL;
 	Vec u_m=NULL;
 	Vec u_n=NULL;
-	int  u_n_local_size;
-	int  Gmn_localm,Gmn_localn;
+	int u_n_local_size;
+	int Gmn_localm,Gmn_localn;
 	
 	
@@ -24,5 +25,17 @@
 	/*merge single point constraints into n set: */
 	if(ys){
-		VecMerge(u_n,ys,nodesets->GetPV_S(),nodesets->GetSSize());
+		if (flag_ys0){
+
+			/*Create ys0, full of 0: */
+			VecDuplicate(ys,&ys0);
+			VecSet(ys0,0.0);
+			VecAssemblyBegin(ys0);
+			VecAssemblyEnd(ys0);
+
+			VecMerge(u_n,ys0,nodesets->GetPV_S(),nodesets->GetSSize());
+		}
+		else{
+			VecMerge(u_n,ys,nodesets->GetPV_S(),nodesets->GetSSize());
+		}
 	}
 
@@ -41,4 +54,5 @@
 		
 	/*Free ressources:*/
+	VecFree(&ys0);
 	VecFree(&u_m);
 	VecFree(&u_n);
Index: /issm/trunk/src/c/modules/Mergesolutionfromftogx/Mergesolutionfromftogx.h
===================================================================
--- /issm/trunk/src/c/modules/Mergesolutionfromftogx/Mergesolutionfromftogx.h	(revision 3958)
+++ /issm/trunk/src/c/modules/Mergesolutionfromftogx/Mergesolutionfromftogx.h	(revision 3959)
@@ -9,5 +9,5 @@
 
 /* local prototypes: */
-void	Mergesolutionfromftogx( Vec* pug, Vec uf, Mat Gmn, Vec ys, NodeSets* nodesets);
+void	Mergesolutionfromftogx( Vec* pug, Vec uf, Mat Gmn, Vec ys, NodeSets* nodesets,bool flag_ys0=false);
 
 #endif  /* _MERGESOLUTIONFROMFTOGX_H */
Index: /issm/trunk/src/c/modules/Reduceloadfromgtofx/Reduceloadfromgtofx.cpp
===================================================================
--- /issm/trunk/src/c/modules/Reduceloadfromgtofx/Reduceloadfromgtofx.cpp	(revision 3958)
+++ /issm/trunk/src/c/modules/Reduceloadfromgtofx/Reduceloadfromgtofx.cpp	(revision 3959)
@@ -11,5 +11,5 @@
 #include "./Reduceloadfromgtofx.h"
 
-void	Reduceloadfromgtofx( Vec* ppf, Vec pg, Mat G_mn, Mat Kfs, Vec y_s, NodeSets* nodesets){
+void	Reduceloadfromgtofx( Vec* ppf, Vec pg, Mat G_mn, Mat Kfs, Vec y_s, NodeSets* nodesets,bool flag_ys0){
 
 	/*output: */
@@ -17,4 +17,5 @@
 
 	/*intermediary*/
+	Vec y_s0=NULL;
 	Vec pn=NULL;
 	Vec pm=NULL;
@@ -68,5 +69,17 @@
 			MatGetLocalSize(Kfs,&Kfsm,&Kfsn);
 			Kfsy_s=NewVecFromLocalSize(Kfsm);
-			MatMultPatch(Kfs,y_s,Kfsy_s);
+			if (flag_ys0){
+
+				/*Create y_s0, full of 0: */
+				VecDuplicate(y_s,&y_s0);
+				VecSet(y_s0,0.0);
+				VecAssemblyBegin(y_s0);
+				VecAssemblyEnd(y_s0);
+
+				MatMultPatch(Kfs,y_s0,Kfsy_s);
+			}
+			else{
+				MatMultPatch(Kfs,y_s,Kfsy_s);
+			}
 
 			a=-1;
@@ -85,4 +98,5 @@
 
 	/*Free ressources and return*/
+	VecFree(&y_s0);
 	VecFree(&pn);
 	VecFree(&pm);
Index: /issm/trunk/src/c/modules/Reduceloadfromgtofx/Reduceloadfromgtofx.h
===================================================================
--- /issm/trunk/src/c/modules/Reduceloadfromgtofx/Reduceloadfromgtofx.h	(revision 3958)
+++ /issm/trunk/src/c/modules/Reduceloadfromgtofx/Reduceloadfromgtofx.h	(revision 3959)
@@ -9,5 +9,5 @@
 
 /* local prototypes: */
-void	Reduceloadfromgtofx( Vec* ppf, Vec pg, Mat Gmn, Mat Kfs, Vec ys, NodeSets* nodesets);
+void	Reduceloadfromgtofx( Vec* ppf, Vec pg, Mat Gmn, Mat Kfs, Vec ys, NodeSets* nodesets, bool flag_ys0=false);
 
 #endif  /* _REDUCELOADFROMGTOFX_H */
Index: /issm/trunk/src/c/modules/Reducevectorgtosx/Reducevectorgtosx.cpp
===================================================================
--- /issm/trunk/src/c/modules/Reducevectorgtosx/Reducevectorgtosx.cpp	(revision 3958)
+++ /issm/trunk/src/c/modules/Reducevectorgtosx/Reducevectorgtosx.cpp	(revision 3959)
@@ -6,9 +6,8 @@
 #include "./Reducevectorgtosx.h"
 
-void Reducevectorgtosx( Vec* pys, Vec* pys0, Vec yg, NodeSets* nodesets){
+void Reducevectorgtosx( Vec* pys, Vec yg, NodeSets* nodesets){
 
 	/*output: */
 	Vec ys=NULL;
-	Vec ys0=NULL;
 
 	/*intermediary: */
@@ -26,18 +25,9 @@
 		}
 
-		/*Create ys0, full of 0: */
-		if(ys){
-			VecDuplicate(ys,&ys0);
-			VecSet(ys0,0.0);
-			VecAssemblyBegin(ys0);
-			VecAssemblyEnd(ys0);
-		}
-
 		/*Free ressources:*/
 		VecFree(&yn);
 	}
 	
-	/*Assign output pointers:*/
+	/*Assign output pointer:*/
 	*pys=ys;
-	*pys0=ys0;
 }
Index: /issm/trunk/src/c/modules/Reducevectorgtosx/Reducevectorgtosx.h
===================================================================
--- /issm/trunk/src/c/modules/Reducevectorgtosx/Reducevectorgtosx.h	(revision 3958)
+++ /issm/trunk/src/c/modules/Reducevectorgtosx/Reducevectorgtosx.h	(revision 3959)
@@ -10,5 +10,5 @@
 
 /* local prototypes: */
-void	Reducevectorgtosx( Vec* pys, Vec* pys0,Vec yg, NodeSets* nodesets);
+void	Reducevectorgtosx( Vec* pys, Vec yg, NodeSets* nodesets);
 
 #endif  /* _REDUCEVECTORGTOSX_H */
Index: /issm/trunk/src/c/solutions/ControlInitialization.cpp
===================================================================
--- /issm/trunk/src/c/solutions/ControlInitialization.cpp	(revision 3958)
+++ /issm/trunk/src/c/solutions/ControlInitialization.cpp	(revision 3959)
@@ -140,6 +140,6 @@
 	xfree((void**)&dofset);dofset=dofsetgen(3,dof012,4,numberofnodes*4); VecMerge(fem_ds->yg->vector,ug,dofset,3*numberofnodes);
 	
-	VecFree(&fem_ds->ys); VecFree(&fem_ds->ys0);
-	Reducevectorgtosx(&fem_ds->ys,&fem_ds->ys0, fem_ds->yg->vector,fem_ds->nodesets);
+	VecFree(&fem_ds->ys);
+	Reducevectorgtosx(&fem_ds->ys,fem_ds->yg->vector,fem_ds->nodesets);
 
 	//Compute Stokes velocities to speed up later runs
Index: /issm/trunk/src/c/solutions/diagnostic_core.cpp
===================================================================
--- /issm/trunk/src/c/solutions/diagnostic_core.cpp	(revision 3958)
+++ /issm/trunk/src/c/solutions/diagnostic_core.cpp	(revision 3959)
@@ -121,7 +121,7 @@
 		if(verbose)_printf_("%s\n"," update boundary conditions for macyeal pattyn using hutter results...");
 		if (ismacayealpattyn){
-			VecFree(&fem_dh->yg->vector); VecFree(&fem_dh->ys);VecFree(&fem_dh->ys0);
+			VecFree(&fem_dh->yg->vector); VecFree(&fem_dh->ys);
 			VecDuplicatePatch(&fem_dh->yg->vector,ug);
-			Reducevectorgtosx(&fem_dh->ys,&fem_dh->ys0, fem_dh->yg->vector,fem_dh->nodesets);
+			Reducevectorgtosx(&fem_dh->ys,fem_dh->yg->vector,fem_dh->nodesets);
 		}
 
@@ -165,6 +165,6 @@
 			xfree((void**)&dofset);dofset=dofsetgen(2,dof01,4,numberofnodes*4); VecMerge(fem_ds->yg->vector,ug,dofset,2*numberofnodes);
 			xfree((void**)&dofset);dofset=dofsetgen(1,dof2,4,numberofnodes*4); VecMerge(fem_ds->yg->vector,ug_vert,dofset,1*numberofnodes);
-			VecFree(&fem_ds->ys); VecFree(&fem_ds->ys0);
-			Reducevectorgtosx(&fem_ds->ys,&fem_ds->ys0, fem_ds->yg->vector,fem_ds->nodesets);
+			VecFree(&fem_ds->ys);
+			Reducevectorgtosx(&fem_ds->ys,fem_ds->yg->vector,fem_ds->nodesets);
 
 			if(verbose)_printf_("%s\n"," computing stokes velocities and pressure ...");
Index: /issm/trunk/src/c/solutions/gradjcompute_core.cpp
===================================================================
--- /issm/trunk/src/c/solutions/gradjcompute_core.cpp	(revision 3958)
+++ /issm/trunk/src/c/solutions/gradjcompute_core.cpp	(revision 3959)
@@ -76,5 +76,5 @@
 
 	_printf_("%s\n","      reduce adjoint load from g-set to f-set:");
-	Reduceloadfromgtofx(&du_f, du_g, femmodel->Gmn, K_fs0, femmodel->ys0, femmodel->nodesets);
+	Reduceloadfromgtofx(&du_f, du_g, femmodel->Gmn, K_fs0, femmodel->ys, femmodel->nodesets,true); //true means that ys0 flag is activated: all spc are 0
 	VecFree(&du_g);MatFree(&K_fs0);
 
@@ -84,5 +84,5 @@
 	
 	_printf_("%s\n","      merge back to g set:");
-	Mergesolutionfromftogx(&lambda_g, lambda_f,femmodel->Gmn,femmodel->ys0,femmodel->nodesets);
+	Mergesolutionfromftogx(&lambda_g, lambda_f,femmodel->Gmn,femmodel->ys,femmodel->nodesets,true);//true means that ys0 flag is activated: all spc are 0
 	VecFree(&lambda_f);
 
