121ec2d5cSBarry Smith #ifndef __TAO_H 221ec2d5cSBarry Smith #define __TAO_H 321ec2d5cSBarry Smith 421ec2d5cSBarry Smith #include <petscksp.h> 521ec2d5cSBarry Smith 621ec2d5cSBarry Smith PetscErrorCode VecFischer(Vec, Vec, Vec, Vec, Vec); 721ec2d5cSBarry Smith PetscErrorCode VecSFischer(Vec, Vec, Vec, Vec, PetscReal, Vec); 8235fd6e6SBarry Smith PetscErrorCode MatDFischer(Mat, Vec, Vec, Vec, Vec, Vec, Vec, Vec, Vec); 9235fd6e6SBarry Smith PetscErrorCode MatDSFischer(Mat, Vec, Vec, Vec, Vec, PetscReal, Vec, Vec, Vec, Vec, Vec); 1021ec2d5cSBarry Smith 1121ec2d5cSBarry Smith 1221ec2d5cSBarry Smith /*E 1321ec2d5cSBarry Smith TaoSubsetType - PetscInt representing the way TAO handles active sets 1421ec2d5cSBarry Smith 157dae84e0SHong Zhang + TAO_SUBSET_SUBVEC - TAO uses PETSc's MatCreateSubMatrix and VecGetSubVector 1621ec2d5cSBarry Smith . TAO_SUBSET_MASK - Matrices are zeroed out corresponding to active set entries 1721ec2d5cSBarry Smith - TAO_SUBSET_MATRIXFREE - Same as TAO_SUBSET_MASK, but can be applied to matrix-free operators 1821ec2d5cSBarry Smith 1921ec2d5cSBarry Smith Options database keys: 2021ec2d5cSBarry Smith . -different_hessian - TAO will use a copy of the hessian operator for masking. By default 2121ec2d5cSBarry Smith TAO will directly alter the hessian operator. 221eb8069cSJason Sarich Level: intermediate 2321ec2d5cSBarry Smith 2421ec2d5cSBarry Smith E*/ 251eb8069cSJason Sarich 2621ec2d5cSBarry Smith typedef enum {TAO_SUBSET_SUBVEC,TAO_SUBSET_MASK,TAO_SUBSET_MATRIXFREE} TaoSubsetType; 2721ec2d5cSBarry Smith PETSC_EXTERN const char *const TaoSubsetTypes[]; 281eb8069cSJason Sarich /*S 291eb8069cSJason Sarich Tao - Abstract PETSc object that manages nonlinear optimization solves 301eb8069cSJason Sarich 311eb8069cSJason Sarich Level: advanced 321eb8069cSJason Sarich 331eb8069cSJason Sarich .seealso TaoCreate(), TaoDestroy(), TaoSetType(), TaoType 341eb8069cSJason Sarich S*/ 3521ec2d5cSBarry Smith 36441846f8SBarry Smith typedef struct _p_Tao* Tao; 371eb8069cSJason Sarich 381eb8069cSJason Sarich /*J 391eb8069cSJason Sarich TaoType - String with the name of a TAO method 401eb8069cSJason Sarich 411eb8069cSJason Sarich Level: beginner 421eb8069cSJason Sarich 431eb8069cSJason Sarich J*/ 44441846f8SBarry Smith #define TaoType char* 4558417fe7SBarry Smith #define TAOLMVM "lmvm" 4658417fe7SBarry Smith #define TAONLS "nls" 4758417fe7SBarry Smith #define TAONTR "ntr" 4858417fe7SBarry Smith #define TAONTL "ntl" 4958417fe7SBarry Smith #define TAOCG "cg" 50*baa3a814SAlp Dener #define TAOPGD "pgd" 5158417fe7SBarry Smith #define TAOTRON "tron" 5258417fe7SBarry Smith #define TAOOWLQN "owlqn" 5358417fe7SBarry Smith #define TAOBMRM "bmrm" 5458417fe7SBarry Smith #define TAOBLMVM "blmvm" 5558417fe7SBarry Smith #define TAOBQPIP "bqpip" 5658417fe7SBarry Smith #define TAOGPCG "gpcg" 5758417fe7SBarry Smith #define TAONM "nm" 5858417fe7SBarry Smith #define TAOPOUNDERS "pounders" 5958417fe7SBarry Smith #define TAOLCL "lcl" 6058417fe7SBarry Smith #define TAOSSILS "ssils" 6158417fe7SBarry Smith #define TAOSSFLS "ssfls" 6258417fe7SBarry Smith #define TAOASILS "asils" 6358417fe7SBarry Smith #define TAOASFLS "asfls" 6458417fe7SBarry Smith #define TAOIPM "ipm" 6558417fe7SBarry Smith #define TAOTEST "test" 6658417fe7SBarry Smith 67441846f8SBarry Smith PETSC_EXTERN PetscClassId TAO_CLASSID; 68441846f8SBarry Smith PETSC_EXTERN PetscFunctionList TaoList; 6921ec2d5cSBarry Smith 70a35d58b8SBarry Smith /*E 71a35d58b8SBarry Smith TaoConvergedReason - reason a TAO method was said to have converged or diverged 72a35d58b8SBarry Smith 73a35d58b8SBarry Smith Level: beginner 74a35d58b8SBarry Smith 75a35d58b8SBarry Smith The two most common reasons for divergence are 76a35d58b8SBarry Smith $ 1) an incorrectly coded or computed gradient or Hessian 77a35d58b8SBarry Smith $ 2) failure or lack of convergence in the linear system (in this case we recommend 78a35d58b8SBarry Smith $ testing with -pc_type lu to eliminate the linear solver as the cause of the problem). 79a35d58b8SBarry Smith 80a35d58b8SBarry Smith Developer Notes: this must match petsc/finclude/petsctao.h 81a35d58b8SBarry Smith 82a35d58b8SBarry Smith The string versions of these are in TAOConvergedReasons, if you change any value here you must 83a35d58b8SBarry Smith also adjust that array. 84a35d58b8SBarry Smith 85a35d58b8SBarry Smith .seealso: TAOSolve(), TaoGetConvergedReason(), KSPConvergedReason, SNESConvergedReason, TSConvergedReason 86a35d58b8SBarry Smith E*/ 8721ec2d5cSBarry Smith typedef enum {/* converged */ 8821ec2d5cSBarry Smith TAO_CONVERGED_GATOL = 3, /* ||g(X)|| < gatol */ 8921ec2d5cSBarry Smith TAO_CONVERGED_GRTOL = 4, /* ||g(X)|| / f(X) < grtol */ 9021ec2d5cSBarry Smith TAO_CONVERGED_GTTOL = 5, /* ||g(X)|| / ||g(X0)|| < gttol */ 9121ec2d5cSBarry Smith TAO_CONVERGED_STEPTOL = 6, /* step size small */ 9221ec2d5cSBarry Smith TAO_CONVERGED_MINF = 7, /* F < F_min */ 9321ec2d5cSBarry Smith TAO_CONVERGED_USER = 8, /* User defined */ 9421ec2d5cSBarry Smith /* diverged */ 9521ec2d5cSBarry Smith TAO_DIVERGED_MAXITS = -2, 9621ec2d5cSBarry Smith TAO_DIVERGED_NAN = -4, 9721ec2d5cSBarry Smith TAO_DIVERGED_MAXFCN = -5, 9821ec2d5cSBarry Smith TAO_DIVERGED_LS_FAILURE = -6, 9921ec2d5cSBarry Smith TAO_DIVERGED_TR_REDUCTION = -7, 10021ec2d5cSBarry Smith TAO_DIVERGED_USER = -8, /* User defined */ 10121ec2d5cSBarry Smith /* keep going */ 102e4cb33bbSBarry Smith TAO_CONTINUE_ITERATING = 0} TaoConvergedReason; 10321ec2d5cSBarry Smith 104e4cb33bbSBarry Smith PETSC_EXTERN const char **TaoConvergedReasons; 10521ec2d5cSBarry Smith 10621ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoInitializePackage(void); 10721ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoFinalizePackage(void); 108441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoCreate(MPI_Comm,Tao*); 109441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetFromOptions(Tao); 110441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetUp(Tao); 111441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetType(Tao, const TaoType); 112441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetType(Tao, const TaoType *); 113441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetApplicationContext(Tao, void*); 114441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetApplicationContext(Tao, void*); 115441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDestroy(Tao*); 11621ec2d5cSBarry Smith 117441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetOptionsPrefix(Tao,const char []); 118441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoView(Tao, PetscViewer); 119685405a1SBarry Smith PETSC_STATIC_INLINE PetscErrorCode TaoViewFromOptions(Tao A,PetscObject obj,const char name[]) {return PetscObjectViewFromOptions((PetscObject)A,obj,name);} 12021ec2d5cSBarry Smith 121441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSolve(Tao); 12221ec2d5cSBarry Smith 123441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoRegister(const char [],PetscErrorCode (*)(Tao)); 124441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoRegisterDestroy(void); 12521ec2d5cSBarry Smith 126e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetConvergedReason(Tao,TaoConvergedReason*); 127e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetSolutionStatus(Tao, PetscInt*, PetscReal*, PetscReal*, PetscReal*, PetscReal*, TaoConvergedReason*); 128e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConvergedReason(Tao,TaoConvergedReason); 129441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInitialVector(Tao, Vec); 130441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetSolutionVector(Tao, Vec*); 131441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetGradientVector(Tao, Vec*); 132a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoSetGradientNorm(Tao, Mat); 133a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoGetGradientNorm(Tao, Mat*); 134a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMSetH0(Tao, Mat); 135a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMGetH0(Tao, Mat*); 136a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMGetH0KSP(Tao, KSP*); 137441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetObjectiveRoutine(Tao, PetscErrorCode(*)(Tao, Vec, PetscReal*,void*), void*); 138441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetGradientRoutine(Tao, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*); 139441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetObjectiveAndGradientRoutine(Tao, PetscErrorCode(*)(Tao, Vec, PetscReal*, Vec, void*), void*); 140ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetHessianRoutine(Tao,Mat,Mat,PetscErrorCode(*)(Tao,Vec, Mat, Mat, void*), void*); 141441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetSeparableObjectiveRoutine(Tao, Vec, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*); 142125ddc8aSJason Sarich PETSC_EXTERN PetscErrorCode TaoSetSeparableObjectiveWeights(Tao, Vec, PetscInt, PetscInt*, PetscInt*, PetscReal*); 143441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConstraintsRoutine(Tao, Vec, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*); 144441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInequalityConstraintsRoutine(Tao, Vec, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*); 145441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetEqualityConstraintsRoutine(Tao, Vec, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*); 146ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianRoutine(Tao,Mat,Mat, PetscErrorCode(*)(Tao,Vec, Mat, Mat, void*), void*); 147ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianStateRoutine(Tao,Mat,Mat,Mat, PetscErrorCode(*)(Tao,Vec, Mat, Mat, Mat, void*), void*); 14894ab13aaSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianDesignRoutine(Tao,Mat,PetscErrorCode(*)(Tao,Vec, Mat, void*), void*); 149ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianInequalityRoutine(Tao,Mat,Mat,PetscErrorCode(*)(Tao,Vec, Mat, Mat, void*), void*); 150ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianEqualityRoutine(Tao,Mat,Mat,PetscErrorCode(*)(Tao,Vec, Mat, Mat, void*), void*); 15121ec2d5cSBarry Smith 152441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetStateDesignIS(Tao, IS, IS); 15321ec2d5cSBarry Smith 154441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeObjective(Tao, Vec, PetscReal*); 155441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeSeparableObjective(Tao, Vec, Vec); 156441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeGradient(Tao, Vec, Vec); 157441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeObjectiveAndGradient(Tao, Vec, PetscReal*, Vec); 158441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeConstraints(Tao, Vec, Vec); 159441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeInequalityConstraints(Tao, Vec, Vec); 160441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeEqualityConstraints(Tao, Vec, Vec); 161441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeGradient(Tao, Vec, Vec, void*); 162441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsObjectiveDefined(Tao,PetscBool*); 163441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsGradientDefined(Tao,PetscBool*); 164441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsObjectiveAndGradientDefined(Tao,PetscBool*); 16521ec2d5cSBarry Smith 166ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeHessian(Tao, Vec, Mat, Mat); 167ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobian(Tao, Vec, Mat, Mat); 168ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianState(Tao, Vec, Mat, Mat, Mat); 169ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianEquality(Tao, Vec, Mat, Mat); 170ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianInequality(Tao, Vec, Mat, Mat); 17194ab13aaSBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianDesign(Tao, Vec, Mat); 17221ec2d5cSBarry Smith 173ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessian(Tao, Vec, Mat, Mat, void*); 174ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessianColor(Tao, Vec, Mat, Mat, void*); 175f4c1ad5cSStefano Zampini PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessianMFFD(Tao, Vec, Mat, Mat, void*); 176441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeDualVariables(Tao, Vec, Vec); 177441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetVariableBounds(Tao, Vec, Vec); 178441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetVariableBounds(Tao, Vec*, Vec*); 179441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetDualVariables(Tao, Vec*, Vec*); 180441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInequalityBounds(Tao, Vec, Vec); 181441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetInequalityBounds(Tao, Vec*, Vec*); 182441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetVariableBoundsRoutine(Tao, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*); 183441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeVariableBounds(Tao); 18421ec2d5cSBarry Smith 185e52336cbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetTolerances(Tao, PetscReal*, PetscReal*, PetscReal*); 186e52336cbSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetTolerances(Tao, PetscReal, PetscReal, PetscReal); 187441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetConstraintTolerances(Tao, PetscReal*, PetscReal*); 188441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConstraintTolerances(Tao, PetscReal, PetscReal); 189441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetFunctionLowerBound(Tao, PetscReal); 190441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInitialTrustRegionRadius(Tao, PetscReal); 191441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMaximumIterations(Tao, PetscInt); 192441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMaximumFunctionEvaluations(Tao, PetscInt); 193441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetFunctionLowerBound(Tao, PetscReal*); 194441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetInitialTrustRegionRadius(Tao, PetscReal*); 195441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetCurrentTrustRegionRadius(Tao, PetscReal*); 196441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetMaximumIterations(Tao, PetscInt*); 197770232b9SCe Qin PETSC_EXTERN PetscErrorCode TaoGetCurrentFunctionEvaluations(Tao, PetscInt*); 198441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetMaximumFunctionEvaluations(Tao, PetscInt*); 1998931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetIterationNumber(Tao, PetscInt*); 2008931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoSetIterationNumber(Tao, PetscInt); 2018931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetTotalIterationNumber(Tao, PetscInt*); 2028931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoSetTotalIterationNumber(Tao, PetscInt); 20379f5d8caSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetResidualNorm(Tao,PetscReal*); 20479f5d8caSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetObjective(Tao,PetscReal*); 2058931d482SJason Sarich 206441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoAppendOptionsPrefix(Tao, const char p[]); 207441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetOptionsPrefix(Tao, const char *p[]); 208441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoResetStatistics(Tao); 20921ec2d5cSBarry Smith 210441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetKSP(Tao, KSP*); 211025e9500SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetLinearSolveIterations(Tao,PetscInt *); 212235fd6e6SBarry Smith 213235fd6e6SBarry Smith #include <petsctaolinesearch.h> 214235fd6e6SBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchUseTaoRoutines(TaoLineSearch, Tao); 215441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetLineSearch(Tao, TaoLineSearch*); 21621ec2d5cSBarry Smith 217ae93cb3cSJason Sarich PETSC_EXTERN PetscErrorCode TaoSetConvergenceHistory(Tao,PetscReal*,PetscReal*,PetscReal*,PetscInt*,PetscInt,PetscBool); 218ae93cb3cSJason Sarich PETSC_EXTERN PetscErrorCode TaoGetConvergenceHistory(Tao,PetscReal**,PetscReal**,PetscReal**,PetscInt**,PetscInt*); 219441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMonitor(Tao, PetscErrorCode (*)(Tao,void*),void *,PetscErrorCode (*)(void**)); 220441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoCancelMonitors(Tao); 22198ea980cSBarry Smith PETSC_EXTERN PetscErrorCode TaoMonitorDefault(Tao, void*); 222441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultSMonitor(Tao, void*); 223441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultCMonitor(Tao, void*); 224441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSolutionMonitor(Tao, void*); 225441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSeparableObjectiveMonitor(Tao, void*); 226441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGradientMonitor(Tao, void*); 227441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoStepDirectionMonitor(Tao, void*); 228441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDrawSolutionMonitor(Tao, void*); 229441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDrawStepMonitor(Tao, void*); 230441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDrawGradientMonitor(Tao, void*); 231441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoAddLineSearchCounts(Tao); 23221ec2d5cSBarry Smith 233441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultConvergenceTest(Tao,void*); 234441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConvergenceTest(Tao, PetscErrorCode (*)(Tao, void*),void *); 23521ec2d5cSBarry Smith 236441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSQPCONSetStateDesignIS(Tao, IS, IS); 237441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoLCLSetStateDesignIS(Tao, IS, IS); 2386e6473c1SLisandro Dalcin PETSC_EXTERN PetscErrorCode TaoMonitor(Tao, PetscInt, PetscReal, PetscReal, PetscReal, PetscReal, TaoConvergedReason*); 239e882e171SHong Zhang typedef struct _n_TaoMonitorDrawCtx* TaoMonitorDrawCtx; 240e882e171SHong Zhang PETSC_EXTERN PetscErrorCode TaoMonitorDrawCtxCreate(MPI_Comm,const char[],const char[],int,int,int,int,PetscInt,TaoMonitorDrawCtx*); 241e882e171SHong Zhang PETSC_EXTERN PetscErrorCode TaoMonitorDrawCtxDestroy(TaoMonitorDrawCtx*); 24221ec2d5cSBarry Smith #endif 243