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*/ 44b625d6c7SJed Brown typedef const char *TaoType; 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" 5058417fe7SBarry Smith #define TAOTRON "tron" 5158417fe7SBarry Smith #define TAOOWLQN "owlqn" 5258417fe7SBarry Smith #define TAOBMRM "bmrm" 5358417fe7SBarry Smith #define TAOBLMVM "blmvm" 54ac9112b8SAlp Dener #define TAOBNCG "bncg" 55eb910715SAlp Dener #define TAOBNLS "bnls" 56fed79b8eSAlp Dener #define TAOBNTR "bntr" 57c14b763aSAlp Dener #define TAOBNTL "bntl" 5858417fe7SBarry Smith #define TAOBQPIP "bqpip" 5958417fe7SBarry Smith #define TAOGPCG "gpcg" 6058417fe7SBarry Smith #define TAONM "nm" 6158417fe7SBarry Smith #define TAOPOUNDERS "pounders" 6258417fe7SBarry Smith #define TAOLCL "lcl" 6358417fe7SBarry Smith #define TAOSSILS "ssils" 6458417fe7SBarry Smith #define TAOSSFLS "ssfls" 6558417fe7SBarry Smith #define TAOASILS "asils" 6658417fe7SBarry Smith #define TAOASFLS "asfls" 6758417fe7SBarry Smith #define TAOIPM "ipm" 6858417fe7SBarry Smith 69441846f8SBarry Smith PETSC_EXTERN PetscClassId TAO_CLASSID; 70441846f8SBarry Smith PETSC_EXTERN PetscFunctionList TaoList; 7121ec2d5cSBarry Smith 72a35d58b8SBarry Smith /*E 73a35d58b8SBarry Smith TaoConvergedReason - reason a TAO method was said to have converged or diverged 74a35d58b8SBarry Smith 75a35d58b8SBarry Smith Level: beginner 76a35d58b8SBarry Smith 77a35d58b8SBarry Smith The two most common reasons for divergence are 78a35d58b8SBarry Smith $ 1) an incorrectly coded or computed gradient or Hessian 79a35d58b8SBarry Smith $ 2) failure or lack of convergence in the linear system (in this case we recommend 80a35d58b8SBarry Smith $ testing with -pc_type lu to eliminate the linear solver as the cause of the problem). 81a35d58b8SBarry Smith 8295452b02SPatrick Sanan Developer Notes: 8395452b02SPatrick Sanan this must match petsc/finclude/petsctao.h 84a35d58b8SBarry Smith 85a35d58b8SBarry Smith The string versions of these are in TAOConvergedReasons, if you change any value here you must 86a35d58b8SBarry Smith also adjust that array. 87a35d58b8SBarry Smith 88a35d58b8SBarry Smith .seealso: TAOSolve(), TaoGetConvergedReason(), KSPConvergedReason, SNESConvergedReason, TSConvergedReason 89a35d58b8SBarry Smith E*/ 9021ec2d5cSBarry Smith typedef enum {/* converged */ 9121ec2d5cSBarry Smith TAO_CONVERGED_GATOL = 3, /* ||g(X)|| < gatol */ 9221ec2d5cSBarry Smith TAO_CONVERGED_GRTOL = 4, /* ||g(X)|| / f(X) < grtol */ 9321ec2d5cSBarry Smith TAO_CONVERGED_GTTOL = 5, /* ||g(X)|| / ||g(X0)|| < gttol */ 9421ec2d5cSBarry Smith TAO_CONVERGED_STEPTOL = 6, /* step size small */ 9521ec2d5cSBarry Smith TAO_CONVERGED_MINF = 7, /* F < F_min */ 9621ec2d5cSBarry Smith TAO_CONVERGED_USER = 8, /* User defined */ 9721ec2d5cSBarry Smith /* diverged */ 9821ec2d5cSBarry Smith TAO_DIVERGED_MAXITS = -2, 9921ec2d5cSBarry Smith TAO_DIVERGED_NAN = -4, 10021ec2d5cSBarry Smith TAO_DIVERGED_MAXFCN = -5, 10121ec2d5cSBarry Smith TAO_DIVERGED_LS_FAILURE = -6, 10221ec2d5cSBarry Smith TAO_DIVERGED_TR_REDUCTION = -7, 10321ec2d5cSBarry Smith TAO_DIVERGED_USER = -8, /* User defined */ 10421ec2d5cSBarry Smith /* keep going */ 105e4cb33bbSBarry Smith TAO_CONTINUE_ITERATING = 0} TaoConvergedReason; 10621ec2d5cSBarry Smith 107e4cb33bbSBarry Smith PETSC_EXTERN const char **TaoConvergedReasons; 10821ec2d5cSBarry Smith 10921ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoInitializePackage(void); 11021ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoFinalizePackage(void); 111441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoCreate(MPI_Comm,Tao*); 112441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetFromOptions(Tao); 113441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetUp(Tao); 114b625d6c7SJed Brown PETSC_EXTERN PetscErrorCode TaoSetType(Tao,TaoType); 115b625d6c7SJed Brown PETSC_EXTERN PetscErrorCode TaoGetType(Tao,TaoType *); 116441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetApplicationContext(Tao, void*); 117441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetApplicationContext(Tao, void*); 118441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDestroy(Tao*); 11921ec2d5cSBarry Smith 120441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetOptionsPrefix(Tao,const char []); 121441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoView(Tao, PetscViewer); 122685405a1SBarry Smith PETSC_STATIC_INLINE PetscErrorCode TaoViewFromOptions(Tao A,PetscObject obj,const char name[]) {return PetscObjectViewFromOptions((PetscObject)A,obj,name);} 12321ec2d5cSBarry Smith 124441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSolve(Tao); 12521ec2d5cSBarry Smith 126441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoRegister(const char [],PetscErrorCode (*)(Tao)); 127441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoRegisterDestroy(void); 12821ec2d5cSBarry Smith 129e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetConvergedReason(Tao,TaoConvergedReason*); 130e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetSolutionStatus(Tao, PetscInt*, PetscReal*, PetscReal*, PetscReal*, PetscReal*, TaoConvergedReason*); 131e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConvergedReason(Tao,TaoConvergedReason); 132441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInitialVector(Tao, Vec); 133441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetSolutionVector(Tao, Vec*); 134441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetGradientVector(Tao, Vec*); 135a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoSetGradientNorm(Tao, Mat); 136a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoGetGradientNorm(Tao, Mat*); 137a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMSetH0(Tao, Mat); 138a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMGetH0(Tao, Mat*); 139a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMGetH0KSP(Tao, KSP*); 140*0c51296cSAlp Dener PETSC_EXTERN PetscErrorCode TaoBLMVMSetH0(Tao, Mat); 141*0c51296cSAlp Dener PETSC_EXTERN PetscErrorCode TaoBLMVMGetH0(Tao, Mat*); 142*0c51296cSAlp Dener PETSC_EXTERN PetscErrorCode TaoBLMVMGetH0KSP(Tao, KSP*); 143441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetObjectiveRoutine(Tao, PetscErrorCode(*)(Tao, Vec, PetscReal*,void*), void*); 144441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetGradientRoutine(Tao, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*); 145441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetObjectiveAndGradientRoutine(Tao, PetscErrorCode(*)(Tao, Vec, PetscReal*, Vec, void*), void*); 146ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetHessianRoutine(Tao,Mat,Mat,PetscErrorCode(*)(Tao,Vec, Mat, Mat, void*), void*); 147441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetSeparableObjectiveRoutine(Tao, Vec, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*); 148125ddc8aSJason Sarich PETSC_EXTERN PetscErrorCode TaoSetSeparableObjectiveWeights(Tao, Vec, PetscInt, PetscInt*, PetscInt*, PetscReal*); 149441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConstraintsRoutine(Tao, Vec, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*); 150441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInequalityConstraintsRoutine(Tao, Vec, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*); 151441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetEqualityConstraintsRoutine(Tao, Vec, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*); 152ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianRoutine(Tao,Mat,Mat, PetscErrorCode(*)(Tao,Vec, Mat, Mat, void*), void*); 153ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianStateRoutine(Tao,Mat,Mat,Mat, PetscErrorCode(*)(Tao,Vec, Mat, Mat, Mat, void*), void*); 15494ab13aaSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianDesignRoutine(Tao,Mat,PetscErrorCode(*)(Tao,Vec, Mat, void*), void*); 155ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianInequalityRoutine(Tao,Mat,Mat,PetscErrorCode(*)(Tao,Vec, Mat, Mat, void*), void*); 156ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianEqualityRoutine(Tao,Mat,Mat,PetscErrorCode(*)(Tao,Vec, Mat, Mat, void*), void*); 15721ec2d5cSBarry Smith 158441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetStateDesignIS(Tao, IS, IS); 15921ec2d5cSBarry Smith 160441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeObjective(Tao, Vec, PetscReal*); 161441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeSeparableObjective(Tao, Vec, Vec); 162412cdd55SHong Zhang PETSC_EXTERN PetscErrorCode TaoTestGradient(Tao,Vec,Vec); 163441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeGradient(Tao, Vec, Vec); 164441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeObjectiveAndGradient(Tao, Vec, PetscReal*, Vec); 165441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeConstraints(Tao, Vec, Vec); 166441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeInequalityConstraints(Tao, Vec, Vec); 167441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeEqualityConstraints(Tao, Vec, Vec); 168441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeGradient(Tao, Vec, Vec, void*); 169441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsObjectiveDefined(Tao,PetscBool*); 170441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsGradientDefined(Tao,PetscBool*); 171441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsObjectiveAndGradientDefined(Tao,PetscBool*); 17221ec2d5cSBarry Smith 17309baa881SHong Zhang PETSC_EXTERN PetscErrorCode TaoTestHessian(Tao); 174ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeHessian(Tao, Vec, Mat, Mat); 175ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobian(Tao, Vec, Mat, Mat); 176ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianState(Tao, Vec, Mat, Mat, Mat); 177ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianEquality(Tao, Vec, Mat, Mat); 178ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianInequality(Tao, Vec, Mat, Mat); 17994ab13aaSBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianDesign(Tao, Vec, Mat); 18021ec2d5cSBarry Smith 181ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessian(Tao, Vec, Mat, Mat, void*); 182ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessianColor(Tao, Vec, Mat, Mat, void*); 183f4c1ad5cSStefano Zampini PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessianMFFD(Tao, Vec, Mat, Mat, void*); 184441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeDualVariables(Tao, Vec, Vec); 185441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetVariableBounds(Tao, Vec, Vec); 186441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetVariableBounds(Tao, Vec*, Vec*); 187441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetDualVariables(Tao, Vec*, Vec*); 188441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInequalityBounds(Tao, Vec, Vec); 189441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetInequalityBounds(Tao, Vec*, Vec*); 190441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetVariableBoundsRoutine(Tao, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*); 191441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeVariableBounds(Tao); 19221ec2d5cSBarry Smith 193e52336cbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetTolerances(Tao, PetscReal*, PetscReal*, PetscReal*); 194e52336cbSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetTolerances(Tao, PetscReal, PetscReal, PetscReal); 195441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetConstraintTolerances(Tao, PetscReal*, PetscReal*); 196441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConstraintTolerances(Tao, PetscReal, PetscReal); 197441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetFunctionLowerBound(Tao, PetscReal); 198441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInitialTrustRegionRadius(Tao, PetscReal); 199441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMaximumIterations(Tao, PetscInt); 200441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMaximumFunctionEvaluations(Tao, PetscInt); 201441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetFunctionLowerBound(Tao, PetscReal*); 202441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetInitialTrustRegionRadius(Tao, PetscReal*); 203441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetCurrentTrustRegionRadius(Tao, PetscReal*); 204441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetMaximumIterations(Tao, PetscInt*); 205770232b9SCe Qin PETSC_EXTERN PetscErrorCode TaoGetCurrentFunctionEvaluations(Tao, PetscInt*); 206441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetMaximumFunctionEvaluations(Tao, PetscInt*); 2078931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetIterationNumber(Tao, PetscInt*); 2088931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoSetIterationNumber(Tao, PetscInt); 2098931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetTotalIterationNumber(Tao, PetscInt*); 2108931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoSetTotalIterationNumber(Tao, PetscInt); 21179f5d8caSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetResidualNorm(Tao,PetscReal*); 21279f5d8caSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetObjective(Tao,PetscReal*); 2138931d482SJason Sarich 214441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoAppendOptionsPrefix(Tao, const char p[]); 215441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetOptionsPrefix(Tao, const char *p[]); 216441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoResetStatistics(Tao); 21721ec2d5cSBarry Smith 218441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetKSP(Tao, KSP*); 219025e9500SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetLinearSolveIterations(Tao,PetscInt *); 220235fd6e6SBarry Smith 221235fd6e6SBarry Smith #include <petsctaolinesearch.h> 222235fd6e6SBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchUseTaoRoutines(TaoLineSearch, Tao); 223441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetLineSearch(Tao, TaoLineSearch*); 22421ec2d5cSBarry Smith 225ae93cb3cSJason Sarich PETSC_EXTERN PetscErrorCode TaoSetConvergenceHistory(Tao,PetscReal*,PetscReal*,PetscReal*,PetscInt*,PetscInt,PetscBool); 226ae93cb3cSJason Sarich PETSC_EXTERN PetscErrorCode TaoGetConvergenceHistory(Tao,PetscReal**,PetscReal**,PetscReal**,PetscInt**,PetscInt*); 227441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMonitor(Tao, PetscErrorCode (*)(Tao,void*),void *,PetscErrorCode (*)(void**)); 228441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoCancelMonitors(Tao); 22998ea980cSBarry Smith PETSC_EXTERN PetscErrorCode TaoMonitorDefault(Tao, void*); 23093c267acSSatish Balay PETSC_DEPRECATED ("Use TaoMonitorDefault()") PETSC_STATIC_INLINE PetscErrorCode TaoDefaultMonitor(Tao tao, void*ctx) {return TaoMonitorDefault(tao,ctx);} 2318d5ead36SAlp Dener PETSC_EXTERN PetscErrorCode TaoDefaultGMonitor(Tao, void*); 232441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultSMonitor(Tao, void*); 233441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultCMonitor(Tao, void*); 234441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSolutionMonitor(Tao, void*); 235441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSeparableObjectiveMonitor(Tao, void*); 236441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGradientMonitor(Tao, void*); 237441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoStepDirectionMonitor(Tao, void*); 238441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDrawSolutionMonitor(Tao, void*); 239441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDrawStepMonitor(Tao, void*); 240441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDrawGradientMonitor(Tao, void*); 241441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoAddLineSearchCounts(Tao); 24221ec2d5cSBarry Smith 243441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultConvergenceTest(Tao,void*); 244441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConvergenceTest(Tao, PetscErrorCode (*)(Tao, void*),void *); 24521ec2d5cSBarry Smith 246441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSQPCONSetStateDesignIS(Tao, IS, IS); 247441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoLCLSetStateDesignIS(Tao, IS, IS); 2483ecd9318SAlp Dener PETSC_EXTERN PetscErrorCode TaoMonitor(Tao, PetscInt, PetscReal, PetscReal, PetscReal, PetscReal); 249e882e171SHong Zhang typedef struct _n_TaoMonitorDrawCtx* TaoMonitorDrawCtx; 250e882e171SHong Zhang PETSC_EXTERN PetscErrorCode TaoMonitorDrawCtxCreate(MPI_Comm,const char[],const char[],int,int,int,int,PetscInt,TaoMonitorDrawCtx*); 251e882e171SHong Zhang PETSC_EXTERN PetscErrorCode TaoMonitorDrawCtxDestroy(TaoMonitorDrawCtx*); 25221ec2d5cSBarry Smith #endif 253