Index: /issm/trunk-jpl/src/c/solutions/controltao_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutions/controltao_core.cpp	(revision 11702)
+++ /issm/trunk-jpl/src/c/solutions/controltao_core.cpp	(revision 11703)
@@ -13,5 +13,5 @@
 #include "../solvers/solvers.h"
 
-#if defined (_HAVE_TAO_) && (_PETSC_MAJOR_ == 3 && _PETSC_MINOR_ == 2)
+#if defined (_HAVE_TAO_) && defined (_HAVE_PETSC_) && (_PETSC_MAJOR_ == 3 && _PETSC_MINOR_ == 2)
 #include <tao.h>
 
@@ -33,7 +33,7 @@
 	double    *dummy          = NULL;
 	int       *control_list   = NULL;
-	Vec        X              = NULL;
-	Vec        XL             = NULL;
-	Vec        XU             = NULL;
+	Vector    *X              = NULL;
+	Vector    *XL             = NULL;
+	Vector    *XU             = NULL;
 
 	/*Initialize TAO*/
@@ -68,8 +68,8 @@
 	GetVectorFromControlInputsx(&XL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");
 	GetVectorFromControlInputsx(&XU,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");
-	TaoSetInitialVector(tao,X);
-	TaoSetVariableBounds(tao,XL,XU);
-	VecFree(&XL);
-	VecFree(&XU);
+	TaoSetInitialVector(tao,X->vector);
+	TaoSetVariableBounds(tao,XL->vector,XU->vector);
+	xdelete(&XL);
+	xdelete(&XU);
 
 	user.femmodel=femmodel;
@@ -80,5 +80,5 @@
 	TaoSolve(tao);
 	TaoView(tao,PETSC_VIEWER_STDOUT_WORLD);
-	TaoGetSolutionVector(tao,&X);
+	TaoGetSolutionVector(tao,&X->vector);
 	SetControlInputsFromVectorx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,X);
 	for(int i=0;i<num_controls;i++){
@@ -95,9 +95,9 @@
 	/*Clean up and return*/
 	xfree((void**)&control_list);
-	VecFree(&X);
+	xdelete(&X);
 	TaoDestroy(&tao);
 	TaoFinalize();
 }
-int FormFunctionGradient(TaoSolver tao, Vec X, double *fcn,Vec G,void *userCtx){
+int FormFunctionGradient(TaoSolver tao, Vec Xpetsc, double *fcn,Vec G,void *userCtx){
 
 	/*Retreive arguments*/
@@ -107,5 +107,9 @@
 	int      *cost_functions = NULL;
 	double   *cost_functionsd= NULL;
-	Vec       gradient       = NULL;
+	Vector   *gradient       = NULL;
+	Vector   *X              = NULL;
+
+	/*Convert input to Vec*/
+	X=new Vector(Xpetsc);
 
 	/*Set new variable*/
@@ -136,5 +140,5 @@
 	/*Compute gradient*/
 	Gradjx(&gradient,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
-	VecCopy(gradient,G); VecFree(&gradient);
+	VecCopy(gradient->vector,G); xdelete(&gradient);
 	VecScale(G,-1.);
 
