Index: /issm/trunk-jpl/src/c/solutions/controltao_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutions/controltao_core.cpp	(revision 11266)
+++ /issm/trunk-jpl/src/c/solutions/controltao_core.cpp	(revision 11267)
@@ -13,10 +13,9 @@
 #include "../solvers/solvers.h"
 
-
-#if defined (_HAVE_TAO_) && (_PETSC_MAJOR_ < 3 || (_PETSC_MAJOR_ == 3 && _PETSC_MINOR_ < 2))
-#include "tao.h"
+#if defined (_HAVE_TAO_) && (_PETSC_MAJOR_ == 3 && _PETSC_MINOR_ == 2)
+#include <tao.h>
 
 /*Local prototype*/
-int FormFunctionGradient(TAO_APPLICATION,Vec,double *,Vec,void*);
+int FormFunctionGradient(TaoSolver tao,Vec,double *,Vec,void*);
 typedef struct {
 	FemModel* femmodel;
@@ -26,15 +25,11 @@
 
 	/*TAO*/
-	int                i,n,info;
-	//TaoMethod          method = "tao_blmvm";
-	//TaoMethod        method = "tao_lmvm";
-	TaoMethod        method = "tao_cg";
-	TaoTerminateReason reason;
-	TAO_SOLVER         tao;
-	TAO_APPLICATION    controlapp;
-	Vec                initial_solution = NULL;
-	AppCtx             user;
-	PetscInt           iter;
-	double             ff,gnorm;
+	int                        i,n,info;
+	TaoSolverTerminationReason reason;
+	TaoSolver                  tao;
+	Vec                        initial_solution = NULL;
+	AppCtx                     user;
+	PetscInt                   iter;
+	double                     ff                 ,gnorm;
 
 	/*Initialize TAO*/
@@ -62,19 +57,15 @@
 	/*Set up and solve TAO*/
 	GetVectorFromInputsx(&initial_solution,femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,MaterialsRheologyBbarEnum,VertexEnum);
-	info = TaoCreate(PETSC_COMM_WORLD,method,&tao); if(info) _error_("STOP");
-	info = TaoApplicationCreate(PETSC_COMM_WORLD,&controlapp); if(info) _error_("STOP");
-	info = TaoAppSetInitialSolutionVec(controlapp,initial_solution);  if(info) _error_("STOP");
-	info = TaoAppSetObjectiveAndGradientRoutine(controlapp,FormFunctionGradient,(void*)&user);  if(info) _error_("STOP");
-	info = TaoSetOptions(controlapp,tao);  if(info) _error_("STOP");
-	info = TaoSolveApplication(controlapp,tao); //if(info) _error_("STOP");
+	info = TaoCreate(PETSC_COMM_WORLD,&tao); if(info) _error_("STOP");
+	info = TaoSetType(tao,"tao_cg"); if(info) _error_("STOP");
+	info = TaoSetInitialVector(tao,initial_solution);  if(info) _error_("STOP");
+	info = TaoSetObjectiveAndGradientRoutine(tao,FormFunctionGradient,(void*)&user);  if(info) _error_("STOP");
+	info = TaoSetFromOptions(tao);  if(info) _error_("STOP");
+	info = TaoSolve(tao); //if(info) _error_("STOP");
 
 	/*Get solution status*/
 	info = TaoGetSolutionStatus(tao,&iter,&ff,&gnorm,0,0,&reason); //CHKERRQ(info);
-	switch(reason){ /*http://www.mcs.anl.gov/research/projects/tao/docs/manualpages/solver/TaoGetTerminationReason.html*/
-		case TAO_CONVERGED_ATOL:       _printf_(true,"TAO_CONVERGED_ATOL (res <= atol)\n"); break;
-		case TAO_CONVERGED_RTOL:       _printf_(true,"TAO_CONVERGED_RTOL (res/res0 <= rtol)\n"); break;
-		case TAO_CONVERGED_TRTOL:      _printf_(true,"TAO_CONVERGED_TRTOL (xdiff <= trtol) \n"); break;
-		case TAO_CONVERGED_MINF:       _printf_(true,"TAO_CONVERGED_MINF  (f <= fmin)\n"); break;
-		case TAO_CONVERGED_USER:       _printf_(true,"TAO_CONVERGED_USER (user defined)\n"); break;
+	switch(reason){
+		/*http://www.mcs.anl.gov/research/projects/tao/docs/manpages/taosolver/TaoGetTerminationReason.html*/
 		case TAO_DIVERGED_MAXITS:      _printf_(true,"TAO_DIVERGED_MAXITS (its>maxits)\n"); break;
 		case TAO_DIVERGED_NAN:         _printf_(true,"TAO_DIVERGED_NAN (Numerical problems)\n"); break;
@@ -92,9 +83,8 @@
 	 _printf_(true,"TAO found a solution");
 	}
-	info = TaoView(tao);  if(info) _error_("STOP");
+	info = TaoView(tao,PETSC_VIEWER_STDOUT_SELF);  if(info) _error_("STOP");
 
 	/*Clean up*/
-	info = TaoDestroy(tao);  if(info) _error_("STOP");
-	info = TaoAppDestroy(controlapp);  if(info) _error_("STOP");
+	info = TaoDestroy(&tao);  if(info) _error_("STOP");
 	VecFree(&initial_solution);
 
@@ -103,5 +93,5 @@
 }
 
-int FormFunctionGradient(TAO_APPLICATION taoapp, Vec X, double *fcn,Vec G,void *userCtx){
+int FormFunctionGradient(TaoSolver tao, Vec X, double *fcn,Vec G,void *userCtx){
 
 	/*Retreive arguments*/
Index: /issm/trunk-jpl/src/c/solutions/issm.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutions/issm.cpp	(revision 11266)
+++ /issm/trunk-jpl/src/c/solutions/issm.cpp	(revision 11267)
@@ -96,5 +96,9 @@
 	else if(control_analysis){
 		#ifdef _HAVE_CONTROL_
+		#ifdef _HAVE_TAO_
+		controltao_core(femmodel);
+		#else
 		control_core(femmodel);
+		#endif
 		#else
 		_error_("ISSM was not compiled with control support, cannot carry out dakota analysis!");
