xref: /petsc/include/petsctao.h (revision e0ed867b6c64a799ff0332d58c8126f3e917b638)
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"
58*e0ed867bSAlp Dener #define TAOBQNKLS   "bqnkls"
59*e0ed867bSAlp Dener #define TAOBQNKTR   "bqnktr"
60*e0ed867bSAlp Dener #define TAOBQNKTL   "bqnktl"
6158417fe7SBarry Smith #define TAOBQPIP    "bqpip"
6258417fe7SBarry Smith #define TAOGPCG     "gpcg"
6358417fe7SBarry Smith #define TAONM       "nm"
6458417fe7SBarry Smith #define TAOPOUNDERS "pounders"
6558417fe7SBarry Smith #define TAOLCL      "lcl"
6658417fe7SBarry Smith #define TAOSSILS    "ssils"
6758417fe7SBarry Smith #define TAOSSFLS    "ssfls"
6858417fe7SBarry Smith #define TAOASILS    "asils"
6958417fe7SBarry Smith #define TAOASFLS    "asfls"
7058417fe7SBarry Smith #define TAOIPM      "ipm"
7158417fe7SBarry Smith 
72441846f8SBarry Smith PETSC_EXTERN PetscClassId TAO_CLASSID;
73441846f8SBarry Smith PETSC_EXTERN PetscFunctionList TaoList;
7421ec2d5cSBarry Smith 
75a35d58b8SBarry Smith /*E
76a35d58b8SBarry Smith     TaoConvergedReason - reason a TAO method was said to have converged or diverged
77a35d58b8SBarry Smith 
78a35d58b8SBarry Smith    Level: beginner
79a35d58b8SBarry Smith 
80a35d58b8SBarry Smith    The two most common reasons for divergence are
81a35d58b8SBarry Smith $   1) an incorrectly coded or computed gradient or Hessian
82a35d58b8SBarry Smith $   2) failure or lack of convergence in the linear system (in this case we recommend
83a35d58b8SBarry Smith $      testing with -pc_type lu to eliminate the linear solver as the cause of the problem).
84a35d58b8SBarry Smith 
8595452b02SPatrick Sanan    Developer Notes:
8695452b02SPatrick Sanan     this must match petsc/finclude/petsctao.h
87a35d58b8SBarry Smith 
88a35d58b8SBarry Smith        The string versions of these are in TAOConvergedReasons, if you change any value here you must
89a35d58b8SBarry Smith      also adjust that array.
90a35d58b8SBarry Smith 
91a35d58b8SBarry Smith .seealso: TAOSolve(), TaoGetConvergedReason(), KSPConvergedReason, SNESConvergedReason, TSConvergedReason
92a35d58b8SBarry Smith E*/
9321ec2d5cSBarry Smith typedef enum {/* converged */
9421ec2d5cSBarry Smith   TAO_CONVERGED_GATOL         =  3, /* ||g(X)|| < gatol */
9521ec2d5cSBarry Smith   TAO_CONVERGED_GRTOL         =  4, /* ||g(X)|| / f(X)  < grtol */
9621ec2d5cSBarry Smith   TAO_CONVERGED_GTTOL         =  5, /* ||g(X)|| / ||g(X0)|| < gttol */
9721ec2d5cSBarry Smith   TAO_CONVERGED_STEPTOL       =  6, /* step size small */
9821ec2d5cSBarry Smith   TAO_CONVERGED_MINF          =  7, /* F < F_min */
9921ec2d5cSBarry Smith   TAO_CONVERGED_USER          =  8, /* User defined */
10021ec2d5cSBarry Smith   /* diverged */
10121ec2d5cSBarry Smith   TAO_DIVERGED_MAXITS         = -2,
10221ec2d5cSBarry Smith   TAO_DIVERGED_NAN            = -4,
10321ec2d5cSBarry Smith   TAO_DIVERGED_MAXFCN         = -5,
10421ec2d5cSBarry Smith   TAO_DIVERGED_LS_FAILURE     = -6,
10521ec2d5cSBarry Smith   TAO_DIVERGED_TR_REDUCTION   = -7,
10621ec2d5cSBarry Smith   TAO_DIVERGED_USER           = -8, /* User defined */
10721ec2d5cSBarry Smith   /* keep going */
108e4cb33bbSBarry Smith   TAO_CONTINUE_ITERATING      =  0} TaoConvergedReason;
10921ec2d5cSBarry Smith 
110e4cb33bbSBarry Smith PETSC_EXTERN const char **TaoConvergedReasons;
11121ec2d5cSBarry Smith 
11221ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoInitializePackage(void);
11321ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoFinalizePackage(void);
114441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoCreate(MPI_Comm,Tao*);
115441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetFromOptions(Tao);
116441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetUp(Tao);
117b625d6c7SJed Brown PETSC_EXTERN PetscErrorCode TaoSetType(Tao,TaoType);
118b625d6c7SJed Brown PETSC_EXTERN PetscErrorCode TaoGetType(Tao,TaoType *);
119441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetApplicationContext(Tao, void*);
120441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetApplicationContext(Tao, void*);
121441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDestroy(Tao*);
12221ec2d5cSBarry Smith 
123441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetOptionsPrefix(Tao,const char []);
124441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoView(Tao, PetscViewer);
125685405a1SBarry Smith PETSC_STATIC_INLINE PetscErrorCode TaoViewFromOptions(Tao A,PetscObject obj,const char name[]) {return PetscObjectViewFromOptions((PetscObject)A,obj,name);}
12621ec2d5cSBarry Smith 
127441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSolve(Tao);
12821ec2d5cSBarry Smith 
129441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoRegister(const char [],PetscErrorCode (*)(Tao));
130441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoRegisterDestroy(void);
13121ec2d5cSBarry Smith 
132e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetConvergedReason(Tao,TaoConvergedReason*);
133e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetSolutionStatus(Tao, PetscInt*, PetscReal*, PetscReal*, PetscReal*, PetscReal*, TaoConvergedReason*);
134e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConvergedReason(Tao,TaoConvergedReason);
135441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInitialVector(Tao, Vec);
136441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetSolutionVector(Tao, Vec*);
137441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetGradientVector(Tao, Vec*);
138a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoSetGradientNorm(Tao, Mat);
139a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoGetGradientNorm(Tao, Mat*);
140a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMSetH0(Tao, Mat);
141a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMGetH0(Tao, Mat*);
142a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMGetH0KSP(Tao, KSP*);
1430c51296cSAlp Dener PETSC_EXTERN PetscErrorCode TaoBLMVMSetH0(Tao, Mat);
1440c51296cSAlp Dener PETSC_EXTERN PetscErrorCode TaoBLMVMGetH0(Tao, Mat*);
1450c51296cSAlp Dener PETSC_EXTERN PetscErrorCode TaoBLMVMGetH0KSP(Tao, KSP*);
146441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetObjectiveRoutine(Tao, PetscErrorCode(*)(Tao, Vec, PetscReal*,void*), void*);
147441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetGradientRoutine(Tao, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*);
148441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetObjectiveAndGradientRoutine(Tao, PetscErrorCode(*)(Tao, Vec, PetscReal*, Vec, void*), void*);
149ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetHessianRoutine(Tao,Mat,Mat,PetscErrorCode(*)(Tao,Vec, Mat, Mat, void*), void*);
150441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetSeparableObjectiveRoutine(Tao, Vec, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*);
151125ddc8aSJason Sarich PETSC_EXTERN PetscErrorCode TaoSetSeparableObjectiveWeights(Tao, Vec, PetscInt, PetscInt*, PetscInt*, PetscReal*);
152441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConstraintsRoutine(Tao, Vec, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*);
153441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInequalityConstraintsRoutine(Tao, Vec, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*);
154441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetEqualityConstraintsRoutine(Tao, Vec, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*);
155ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianRoutine(Tao,Mat,Mat, PetscErrorCode(*)(Tao,Vec, Mat, Mat, void*), void*);
156ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianStateRoutine(Tao,Mat,Mat,Mat, PetscErrorCode(*)(Tao,Vec, Mat, Mat, Mat, void*), void*);
15794ab13aaSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianDesignRoutine(Tao,Mat,PetscErrorCode(*)(Tao,Vec, Mat, void*), void*);
158ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianInequalityRoutine(Tao,Mat,Mat,PetscErrorCode(*)(Tao,Vec, Mat, Mat, void*), void*);
159ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianEqualityRoutine(Tao,Mat,Mat,PetscErrorCode(*)(Tao,Vec, Mat, Mat, void*), void*);
16021ec2d5cSBarry Smith 
161441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetStateDesignIS(Tao, IS, IS);
16221ec2d5cSBarry Smith 
163441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeObjective(Tao, Vec, PetscReal*);
164441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeSeparableObjective(Tao, Vec, Vec);
165412cdd55SHong Zhang PETSC_EXTERN PetscErrorCode TaoTestGradient(Tao,Vec,Vec);
166441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeGradient(Tao, Vec, Vec);
167441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeObjectiveAndGradient(Tao, Vec, PetscReal*, Vec);
168441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeConstraints(Tao, Vec, Vec);
169441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeInequalityConstraints(Tao, Vec, Vec);
170441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeEqualityConstraints(Tao, Vec, Vec);
171441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeGradient(Tao, Vec, Vec, void*);
172441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsObjectiveDefined(Tao,PetscBool*);
173441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsGradientDefined(Tao,PetscBool*);
174441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsObjectiveAndGradientDefined(Tao,PetscBool*);
17521ec2d5cSBarry Smith 
17609baa881SHong Zhang PETSC_EXTERN PetscErrorCode TaoTestHessian(Tao);
177ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeHessian(Tao, Vec, Mat, Mat);
178ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobian(Tao, Vec, Mat, Mat);
179ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianState(Tao, Vec, Mat, Mat, Mat);
180ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianEquality(Tao, Vec, Mat, Mat);
181ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianInequality(Tao, Vec, Mat, Mat);
18294ab13aaSBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianDesign(Tao, Vec, Mat);
18321ec2d5cSBarry Smith 
184ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessian(Tao, Vec, Mat, Mat, void*);
185ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessianColor(Tao, Vec, Mat, Mat, void*);
186f4c1ad5cSStefano Zampini PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessianMFFD(Tao, Vec, Mat, Mat, void*);
187441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeDualVariables(Tao, Vec, Vec);
188441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetVariableBounds(Tao, Vec, Vec);
189441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetVariableBounds(Tao, Vec*, Vec*);
190441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetDualVariables(Tao, Vec*, Vec*);
191441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInequalityBounds(Tao, Vec, Vec);
192441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetInequalityBounds(Tao, Vec*, Vec*);
193441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetVariableBoundsRoutine(Tao, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*);
194441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeVariableBounds(Tao);
19521ec2d5cSBarry Smith 
196e52336cbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetTolerances(Tao, PetscReal*, PetscReal*, PetscReal*);
197e52336cbSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetTolerances(Tao, PetscReal, PetscReal, PetscReal);
198441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetConstraintTolerances(Tao, PetscReal*, PetscReal*);
199441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConstraintTolerances(Tao, PetscReal, PetscReal);
200441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetFunctionLowerBound(Tao, PetscReal);
201441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInitialTrustRegionRadius(Tao, PetscReal);
202441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMaximumIterations(Tao, PetscInt);
203441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMaximumFunctionEvaluations(Tao, PetscInt);
204441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetFunctionLowerBound(Tao, PetscReal*);
205441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetInitialTrustRegionRadius(Tao, PetscReal*);
206441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetCurrentTrustRegionRadius(Tao, PetscReal*);
207441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetMaximumIterations(Tao, PetscInt*);
208770232b9SCe Qin PETSC_EXTERN PetscErrorCode TaoGetCurrentFunctionEvaluations(Tao, PetscInt*);
209441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetMaximumFunctionEvaluations(Tao, PetscInt*);
2108931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetIterationNumber(Tao, PetscInt*);
2118931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoSetIterationNumber(Tao, PetscInt);
2128931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetTotalIterationNumber(Tao, PetscInt*);
2138931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoSetTotalIterationNumber(Tao, PetscInt);
21479f5d8caSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetResidualNorm(Tao,PetscReal*);
21579f5d8caSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetObjective(Tao,PetscReal*);
2168931d482SJason Sarich 
217441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoAppendOptionsPrefix(Tao, const char p[]);
218441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetOptionsPrefix(Tao, const char *p[]);
219441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoResetStatistics(Tao);
22021ec2d5cSBarry Smith 
221441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetKSP(Tao, KSP*);
222025e9500SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetLinearSolveIterations(Tao,PetscInt *);
223235fd6e6SBarry Smith 
224235fd6e6SBarry Smith #include <petsctaolinesearch.h>
225235fd6e6SBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchUseTaoRoutines(TaoLineSearch, Tao);
226441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetLineSearch(Tao, TaoLineSearch*);
22721ec2d5cSBarry Smith 
228ae93cb3cSJason Sarich PETSC_EXTERN PetscErrorCode TaoSetConvergenceHistory(Tao,PetscReal*,PetscReal*,PetscReal*,PetscInt*,PetscInt,PetscBool);
229ae93cb3cSJason Sarich PETSC_EXTERN PetscErrorCode TaoGetConvergenceHistory(Tao,PetscReal**,PetscReal**,PetscReal**,PetscInt**,PetscInt*);
230441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMonitor(Tao, PetscErrorCode (*)(Tao,void*),void *,PetscErrorCode (*)(void**));
231441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoCancelMonitors(Tao);
23298ea980cSBarry Smith PETSC_EXTERN PetscErrorCode TaoMonitorDefault(Tao, void*);
23393c267acSSatish Balay PETSC_DEPRECATED ("Use TaoMonitorDefault()") PETSC_STATIC_INLINE PetscErrorCode TaoDefaultMonitor(Tao tao, void*ctx) {return TaoMonitorDefault(tao,ctx);}
2348d5ead36SAlp Dener PETSC_EXTERN PetscErrorCode TaoDefaultGMonitor(Tao, void*);
235441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultSMonitor(Tao, void*);
236441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultCMonitor(Tao, void*);
237441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSolutionMonitor(Tao, void*);
238441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSeparableObjectiveMonitor(Tao, void*);
239441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGradientMonitor(Tao, void*);
240441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoStepDirectionMonitor(Tao, void*);
241441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDrawSolutionMonitor(Tao, void*);
242441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDrawStepMonitor(Tao, void*);
243441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDrawGradientMonitor(Tao, void*);
244441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoAddLineSearchCounts(Tao);
24521ec2d5cSBarry Smith 
246441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultConvergenceTest(Tao,void*);
247441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConvergenceTest(Tao, PetscErrorCode (*)(Tao, void*),void *);
24821ec2d5cSBarry Smith 
249441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSQPCONSetStateDesignIS(Tao, IS, IS);
250441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoLCLSetStateDesignIS(Tao, IS, IS);
2513ecd9318SAlp Dener PETSC_EXTERN PetscErrorCode TaoMonitor(Tao, PetscInt, PetscReal, PetscReal, PetscReal, PetscReal);
252e882e171SHong Zhang typedef struct _n_TaoMonitorDrawCtx* TaoMonitorDrawCtx;
253e882e171SHong Zhang PETSC_EXTERN PetscErrorCode TaoMonitorDrawCtxCreate(MPI_Comm,const char[],const char[],int,int,int,int,PetscInt,TaoMonitorDrawCtx*);
254e882e171SHong Zhang PETSC_EXTERN PetscErrorCode TaoMonitorDrawCtxDestroy(TaoMonitorDrawCtx*);
25521ec2d5cSBarry Smith #endif
256