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" 546b591159SAlp Dener #define TAOBQNLS "bqnls" 55ac9112b8SAlp Dener #define TAOBNCG "bncg" 56eb910715SAlp Dener #define TAOBNLS "bnls" 57fed79b8eSAlp Dener #define TAOBNTR "bntr" 58c14b763aSAlp Dener #define TAOBNTL "bntl" 59e0ed867bSAlp Dener #define TAOBQNKLS "bqnkls" 60e0ed867bSAlp Dener #define TAOBQNKTR "bqnktr" 61e0ed867bSAlp Dener #define TAOBQNKTL "bqnktl" 6258417fe7SBarry Smith #define TAOBQPIP "bqpip" 6358417fe7SBarry Smith #define TAOGPCG "gpcg" 6458417fe7SBarry Smith #define TAONM "nm" 6558417fe7SBarry Smith #define TAOPOUNDERS "pounders" 66737f463aSAlp Dener #define TAOBRGN "brgn" 6758417fe7SBarry Smith #define TAOLCL "lcl" 6858417fe7SBarry Smith #define TAOSSILS "ssils" 6958417fe7SBarry Smith #define TAOSSFLS "ssfls" 7058417fe7SBarry Smith #define TAOASILS "asils" 7158417fe7SBarry Smith #define TAOASFLS "asfls" 7258417fe7SBarry Smith #define TAOIPM "ipm" 7358417fe7SBarry Smith 74441846f8SBarry Smith PETSC_EXTERN PetscClassId TAO_CLASSID; 75441846f8SBarry Smith PETSC_EXTERN PetscFunctionList TaoList; 7621ec2d5cSBarry Smith 77a35d58b8SBarry Smith /*E 78a35d58b8SBarry Smith TaoConvergedReason - reason a TAO method was said to have converged or diverged 79a35d58b8SBarry Smith 80a35d58b8SBarry Smith Level: beginner 81a35d58b8SBarry Smith 82a35d58b8SBarry Smith The two most common reasons for divergence are 83a35d58b8SBarry Smith $ 1) an incorrectly coded or computed gradient or Hessian 84a35d58b8SBarry Smith $ 2) failure or lack of convergence in the linear system (in this case we recommend 85a35d58b8SBarry Smith $ testing with -pc_type lu to eliminate the linear solver as the cause of the problem). 86a35d58b8SBarry Smith 8795452b02SPatrick Sanan Developer Notes: 8895452b02SPatrick Sanan this must match petsc/finclude/petsctao.h 89a35d58b8SBarry Smith 90a35d58b8SBarry Smith The string versions of these are in TAOConvergedReasons, if you change any value here you must 91a35d58b8SBarry Smith also adjust that array. 92a35d58b8SBarry Smith 93a35d58b8SBarry Smith .seealso: TAOSolve(), TaoGetConvergedReason(), KSPConvergedReason, SNESConvergedReason, TSConvergedReason 94a35d58b8SBarry Smith E*/ 9521ec2d5cSBarry Smith typedef enum {/* converged */ 9621ec2d5cSBarry Smith TAO_CONVERGED_GATOL = 3, /* ||g(X)|| < gatol */ 9721ec2d5cSBarry Smith TAO_CONVERGED_GRTOL = 4, /* ||g(X)|| / f(X) < grtol */ 9821ec2d5cSBarry Smith TAO_CONVERGED_GTTOL = 5, /* ||g(X)|| / ||g(X0)|| < gttol */ 9921ec2d5cSBarry Smith TAO_CONVERGED_STEPTOL = 6, /* step size small */ 10021ec2d5cSBarry Smith TAO_CONVERGED_MINF = 7, /* F < F_min */ 10121ec2d5cSBarry Smith TAO_CONVERGED_USER = 8, /* User defined */ 10221ec2d5cSBarry Smith /* diverged */ 10321ec2d5cSBarry Smith TAO_DIVERGED_MAXITS = -2, 10421ec2d5cSBarry Smith TAO_DIVERGED_NAN = -4, 10521ec2d5cSBarry Smith TAO_DIVERGED_MAXFCN = -5, 10621ec2d5cSBarry Smith TAO_DIVERGED_LS_FAILURE = -6, 10721ec2d5cSBarry Smith TAO_DIVERGED_TR_REDUCTION = -7, 10821ec2d5cSBarry Smith TAO_DIVERGED_USER = -8, /* User defined */ 10921ec2d5cSBarry Smith /* keep going */ 110e4cb33bbSBarry Smith TAO_CONTINUE_ITERATING = 0} TaoConvergedReason; 11121ec2d5cSBarry Smith 112e4cb33bbSBarry Smith PETSC_EXTERN const char **TaoConvergedReasons; 11321ec2d5cSBarry Smith 11421ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoInitializePackage(void); 11521ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoFinalizePackage(void); 116441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoCreate(MPI_Comm,Tao*); 117441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetFromOptions(Tao); 118441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetUp(Tao); 119b625d6c7SJed Brown PETSC_EXTERN PetscErrorCode TaoSetType(Tao,TaoType); 120b625d6c7SJed Brown PETSC_EXTERN PetscErrorCode TaoGetType(Tao,TaoType *); 121441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetApplicationContext(Tao, void*); 122441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetApplicationContext(Tao, void*); 123441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDestroy(Tao*); 12421ec2d5cSBarry Smith 125441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetOptionsPrefix(Tao,const char []); 126441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoView(Tao, PetscViewer); 127685405a1SBarry Smith PETSC_STATIC_INLINE PetscErrorCode TaoViewFromOptions(Tao A,PetscObject obj,const char name[]) {return PetscObjectViewFromOptions((PetscObject)A,obj,name);} 12821ec2d5cSBarry Smith 129441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSolve(Tao); 13021ec2d5cSBarry Smith 131441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoRegister(const char [],PetscErrorCode (*)(Tao)); 132441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoRegisterDestroy(void); 13321ec2d5cSBarry Smith 134e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetConvergedReason(Tao,TaoConvergedReason*); 135e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetSolutionStatus(Tao, PetscInt*, PetscReal*, PetscReal*, PetscReal*, PetscReal*, TaoConvergedReason*); 136e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConvergedReason(Tao,TaoConvergedReason); 137441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInitialVector(Tao, Vec); 138441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetSolutionVector(Tao, Vec*); 139441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetGradientVector(Tao, Vec*); 140a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoSetGradientNorm(Tao, Mat); 141a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoGetGradientNorm(Tao, Mat*); 142f5766c09SAlp Dener PETSC_EXTERN PetscErrorCode TaoGetLMVMMatrix(Tao, Mat*); 143a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMSetH0(Tao, Mat); 144a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMGetH0(Tao, Mat*); 145a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMGetH0KSP(Tao, KSP*); 146b39c12a9SAlp Dener PETSC_EXTERN PetscErrorCode TaoLMVMRecycle(Tao, PetscBool); 147441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetObjectiveRoutine(Tao, PetscErrorCode(*)(Tao, Vec, PetscReal*,void*), void*); 148441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetGradientRoutine(Tao, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*); 149441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetObjectiveAndGradientRoutine(Tao, PetscErrorCode(*)(Tao, Vec, PetscReal*, Vec, void*), void*); 150ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetHessianRoutine(Tao,Mat,Mat,PetscErrorCode(*)(Tao,Vec, Mat, Mat, void*), void*); 1514a48860cSAlp Dener PETSC_EXTERN PetscErrorCode TaoSetResidualRoutine(Tao, Vec, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*); 152737f463aSAlp Dener PETSC_EXTERN PetscErrorCode TaoSetResidualWeights(Tao, Vec, PetscInt, PetscInt*, PetscInt*, PetscReal*); 153441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConstraintsRoutine(Tao, Vec, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*); 154441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInequalityConstraintsRoutine(Tao, Vec, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*); 155441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetEqualityConstraintsRoutine(Tao, Vec, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*); 1564ffbe8acSAlp Dener PETSC_EXTERN PetscErrorCode TaoSetJacobianResidualRoutine(Tao, Mat, Mat, PetscErrorCode(*)(Tao, Vec, Mat, Mat, void*), void*); 157ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianRoutine(Tao,Mat,Mat, PetscErrorCode(*)(Tao,Vec, Mat, Mat, void*), void*); 158ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianStateRoutine(Tao,Mat,Mat,Mat, PetscErrorCode(*)(Tao,Vec, Mat, Mat, Mat, void*), void*); 15994ab13aaSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianDesignRoutine(Tao,Mat,PetscErrorCode(*)(Tao,Vec, Mat, void*), void*); 160ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianInequalityRoutine(Tao,Mat,Mat,PetscErrorCode(*)(Tao,Vec, Mat, Mat, void*), void*); 161ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianEqualityRoutine(Tao,Mat,Mat,PetscErrorCode(*)(Tao,Vec, Mat, Mat, void*), void*); 16221ec2d5cSBarry Smith 163737f463aSAlp Dener PETSC_DEPRECATED("Use TaoSetResidualRoutine()") PETSC_STATIC_INLINE PetscErrorCode TaoSetSeparableObjectiveRoutine(Tao tao, Vec res, PetscErrorCode (*func)(Tao, Vec, Vec, void*),void *ctx) 1644a48860cSAlp Dener { return TaoSetResidualRoutine(tao, res, func, ctx); } 1654a48860cSAlp Dener 166737f463aSAlp Dener PETSC_DEPRECATED("Use TaoSetResidualWeights()") PETSC_STATIC_INLINE PetscErrorCode TaoSetSeparableObjectiveWeights(Tao tao, Vec sigma_v, PetscInt n, PetscInt *rows, PetscInt *cols, PetscReal *vals) 167737f463aSAlp Dener { return TaoSetResidualWeights(tao, sigma_v, n, rows, cols, vals); } 168737f463aSAlp Dener 169441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetStateDesignIS(Tao, IS, IS); 17021ec2d5cSBarry Smith 171441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeObjective(Tao, Vec, PetscReal*); 1724a48860cSAlp Dener PETSC_EXTERN PetscErrorCode TaoComputeResidual(Tao, Vec, Vec); 173412cdd55SHong Zhang PETSC_EXTERN PetscErrorCode TaoTestGradient(Tao,Vec,Vec); 174441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeGradient(Tao, Vec, Vec); 175441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeObjectiveAndGradient(Tao, Vec, PetscReal*, Vec); 176441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeConstraints(Tao, Vec, Vec); 177441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeInequalityConstraints(Tao, Vec, Vec); 178441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeEqualityConstraints(Tao, Vec, Vec); 179441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeGradient(Tao, Vec, Vec, void*); 180441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsObjectiveDefined(Tao,PetscBool*); 181441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsGradientDefined(Tao,PetscBool*); 182441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsObjectiveAndGradientDefined(Tao,PetscBool*); 18321ec2d5cSBarry Smith 184737f463aSAlp Dener PETSC_DEPRECATED("Use TaoComputeResidual()") PETSC_STATIC_INLINE PetscErrorCode TaoComputeSeparableObjective(Tao tao, Vec X, Vec F) 1854a48860cSAlp Dener { return TaoComputeResidual(tao, X, F); } 1864a48860cSAlp Dener 18709baa881SHong Zhang PETSC_EXTERN PetscErrorCode TaoTestHessian(Tao); 188ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeHessian(Tao, Vec, Mat, Mat); 189737f463aSAlp Dener PETSC_EXTERN PetscErrorCode TaoComputeResidualJacobian(Tao, Vec, Mat, Mat); 190ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobian(Tao, Vec, Mat, Mat); 191ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianState(Tao, Vec, Mat, Mat, Mat); 192ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianEquality(Tao, Vec, Mat, Mat); 193ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianInequality(Tao, Vec, Mat, Mat); 19494ab13aaSBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianDesign(Tao, Vec, Mat); 19521ec2d5cSBarry Smith 196ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessian(Tao, Vec, Mat, Mat, void*); 197ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessianColor(Tao, Vec, Mat, Mat, void*); 198f4c1ad5cSStefano Zampini PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessianMFFD(Tao, Vec, Mat, Mat, void*); 199441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeDualVariables(Tao, Vec, Vec); 200441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetVariableBounds(Tao, Vec, Vec); 201441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetVariableBounds(Tao, Vec*, Vec*); 202441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetDualVariables(Tao, Vec*, Vec*); 203441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInequalityBounds(Tao, Vec, Vec); 204441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetInequalityBounds(Tao, Vec*, Vec*); 205441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetVariableBoundsRoutine(Tao, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*); 206441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeVariableBounds(Tao); 20721ec2d5cSBarry Smith 208e52336cbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetTolerances(Tao, PetscReal*, PetscReal*, PetscReal*); 209e52336cbSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetTolerances(Tao, PetscReal, PetscReal, PetscReal); 210441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetConstraintTolerances(Tao, PetscReal*, PetscReal*); 211441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConstraintTolerances(Tao, PetscReal, PetscReal); 212441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetFunctionLowerBound(Tao, PetscReal); 213441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInitialTrustRegionRadius(Tao, PetscReal); 214441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMaximumIterations(Tao, PetscInt); 215441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMaximumFunctionEvaluations(Tao, PetscInt); 216441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetFunctionLowerBound(Tao, PetscReal*); 217441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetInitialTrustRegionRadius(Tao, PetscReal*); 218441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetCurrentTrustRegionRadius(Tao, PetscReal*); 219441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetMaximumIterations(Tao, PetscInt*); 220770232b9SCe Qin PETSC_EXTERN PetscErrorCode TaoGetCurrentFunctionEvaluations(Tao, PetscInt*); 221441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetMaximumFunctionEvaluations(Tao, PetscInt*); 2228931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetIterationNumber(Tao, PetscInt*); 2238931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoSetIterationNumber(Tao, PetscInt); 2248931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetTotalIterationNumber(Tao, PetscInt*); 2258931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoSetTotalIterationNumber(Tao, PetscInt); 22679f5d8caSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetResidualNorm(Tao,PetscReal*); 22779f5d8caSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetObjective(Tao,PetscReal*); 2288931d482SJason Sarich 229441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoAppendOptionsPrefix(Tao, const char p[]); 230441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetOptionsPrefix(Tao, const char *p[]); 231441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoResetStatistics(Tao); 232*8fcddce6SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetUpdate(Tao, PetscErrorCode(*)(Tao, PetscInt, void*), void*); 23321ec2d5cSBarry Smith 234441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetKSP(Tao, KSP*); 235025e9500SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetLinearSolveIterations(Tao,PetscInt *); 236235fd6e6SBarry Smith 237235fd6e6SBarry Smith #include <petsctaolinesearch.h> 238235fd6e6SBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchUseTaoRoutines(TaoLineSearch, Tao); 239441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetLineSearch(Tao, TaoLineSearch*); 24021ec2d5cSBarry Smith 241ae93cb3cSJason Sarich PETSC_EXTERN PetscErrorCode TaoSetConvergenceHistory(Tao,PetscReal*,PetscReal*,PetscReal*,PetscInt*,PetscInt,PetscBool); 242ae93cb3cSJason Sarich PETSC_EXTERN PetscErrorCode TaoGetConvergenceHistory(Tao,PetscReal**,PetscReal**,PetscReal**,PetscInt**,PetscInt*); 243441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMonitor(Tao, PetscErrorCode (*)(Tao,void*),void *,PetscErrorCode (*)(void**)); 244441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoCancelMonitors(Tao); 24598ea980cSBarry Smith PETSC_EXTERN PetscErrorCode TaoMonitorDefault(Tao, void*); 24693c267acSSatish Balay PETSC_DEPRECATED ("Use TaoMonitorDefault()") PETSC_STATIC_INLINE PetscErrorCode TaoDefaultMonitor(Tao tao, void*ctx) {return TaoMonitorDefault(tao,ctx);} 2478d5ead36SAlp Dener PETSC_EXTERN PetscErrorCode TaoDefaultGMonitor(Tao, void*); 248441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultSMonitor(Tao, void*); 249441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultCMonitor(Tao, void*); 250441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSolutionMonitor(Tao, void*); 251737f463aSAlp Dener PETSC_EXTERN PetscErrorCode TaoResidualMonitor(Tao, void*); 252441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGradientMonitor(Tao, void*); 253441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoStepDirectionMonitor(Tao, void*); 254441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDrawSolutionMonitor(Tao, void*); 255441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDrawStepMonitor(Tao, void*); 256441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDrawGradientMonitor(Tao, void*); 257441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoAddLineSearchCounts(Tao); 25821ec2d5cSBarry Smith 259441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultConvergenceTest(Tao,void*); 260441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConvergenceTest(Tao, PetscErrorCode (*)(Tao, void*),void *); 26121ec2d5cSBarry Smith 262441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSQPCONSetStateDesignIS(Tao, IS, IS); 263441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoLCLSetStateDesignIS(Tao, IS, IS); 2643ecd9318SAlp Dener PETSC_EXTERN PetscErrorCode TaoMonitor(Tao, PetscInt, PetscReal, PetscReal, PetscReal, PetscReal); 265e882e171SHong Zhang typedef struct _n_TaoMonitorDrawCtx* TaoMonitorDrawCtx; 266e882e171SHong Zhang PETSC_EXTERN PetscErrorCode TaoMonitorDrawCtxCreate(MPI_Comm,const char[],const char[],int,int,int,int,PetscInt,TaoMonitorDrawCtx*); 267e882e171SHong Zhang PETSC_EXTERN PetscErrorCode TaoMonitorDrawCtxDestroy(TaoMonitorDrawCtx*); 268737f463aSAlp Dener 2698e85b1b3SXiang Huang PETSC_EXTERN PetscErrorCode TaoBRGNGetSubsolver(Tao,Tao *); 270a3c390cfSAlp Dener PETSC_EXTERN PetscErrorCode TaoBRGNSetRegularizerObjectiveAndGradientRoutine(Tao,PetscErrorCode (*)(Tao,Vec,PetscReal*,Vec,void*),void*); 271a3c390cfSAlp Dener PETSC_EXTERN PetscErrorCode TaoBRGNSetRegularizerHessianRoutine(Tao,Mat,PetscErrorCode (*)(Tao,Vec,Mat,void*),void*); 272a3c390cfSAlp Dener PETSC_EXTERN PetscErrorCode TaoBRGNSetRegularizerWeight(Tao,PetscReal); 2738ac80d48SXiang Huang PETSC_EXTERN PetscErrorCode TaoBRGNSetL1SmoothEpsilon(Tao,PetscReal); 2748e85b1b3SXiang Huang PETSC_EXTERN PetscErrorCode TaoBRGNSetDictionaryMatrix(Tao,Mat); 27521ec2d5cSBarry Smith #endif 276