xref: /petsc/include/petsctao.h (revision 79f5d8ca3868d863653cbc51029f4e819bdb5366)
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"
5058417fe7SBarry Smith #define TAOTRON     "tron"
5158417fe7SBarry Smith #define TAOOWLQN    "owlqn"
5258417fe7SBarry Smith #define TAOBMRM     "bmrm"
5358417fe7SBarry Smith #define TAOBLMVM    "blmvm"
5458417fe7SBarry Smith #define TAOBQPIP    "bqpip"
5558417fe7SBarry Smith #define TAOGPCG     "gpcg"
5658417fe7SBarry Smith #define TAONM       "nm"
5758417fe7SBarry Smith #define TAOPOUNDERS "pounders"
5858417fe7SBarry Smith #define TAOLCL      "lcl"
5958417fe7SBarry Smith #define TAOSSILS    "ssils"
6058417fe7SBarry Smith #define TAOSSFLS    "ssfls"
6158417fe7SBarry Smith #define TAOASILS    "asils"
6258417fe7SBarry Smith #define TAOASFLS    "asfls"
6358417fe7SBarry Smith #define TAOIPM      "ipm"
6458417fe7SBarry Smith #define TAOTEST     "test"
6558417fe7SBarry Smith 
66441846f8SBarry Smith PETSC_EXTERN PetscClassId TAO_CLASSID;
67441846f8SBarry Smith PETSC_EXTERN PetscFunctionList TaoList;
6821ec2d5cSBarry Smith 
69a35d58b8SBarry Smith /*E
70a35d58b8SBarry Smith     TaoConvergedReason - reason a TAO method was said to have converged or diverged
71a35d58b8SBarry Smith 
72a35d58b8SBarry Smith    Level: beginner
73a35d58b8SBarry Smith 
74a35d58b8SBarry Smith    The two most common reasons for divergence are
75a35d58b8SBarry Smith $   1) an incorrectly coded or computed gradient or Hessian
76a35d58b8SBarry Smith $   2) failure or lack of convergence in the linear system (in this case we recommend
77a35d58b8SBarry Smith $      testing with -pc_type lu to eliminate the linear solver as the cause of the problem).
78a35d58b8SBarry Smith 
79a35d58b8SBarry Smith    Developer Notes: this must match petsc/finclude/petsctao.h
80a35d58b8SBarry Smith 
81a35d58b8SBarry Smith        The string versions of these are in TAOConvergedReasons, if you change any value here you must
82a35d58b8SBarry Smith      also adjust that array.
83a35d58b8SBarry Smith 
84a35d58b8SBarry Smith .seealso: TAOSolve(), TaoGetConvergedReason(), KSPConvergedReason, SNESConvergedReason, TSConvergedReason
85a35d58b8SBarry Smith E*/
8621ec2d5cSBarry Smith typedef enum {/* converged */
8721ec2d5cSBarry Smith   TAO_CONVERGED_GATOL         =  3, /* ||g(X)|| < gatol */
8821ec2d5cSBarry Smith   TAO_CONVERGED_GRTOL         =  4, /* ||g(X)|| / f(X)  < grtol */
8921ec2d5cSBarry Smith   TAO_CONVERGED_GTTOL         =  5, /* ||g(X)|| / ||g(X0)|| < gttol */
9021ec2d5cSBarry Smith   TAO_CONVERGED_STEPTOL       =  6, /* step size small */
9121ec2d5cSBarry Smith   TAO_CONVERGED_MINF          =  7, /* F < F_min */
9221ec2d5cSBarry Smith   TAO_CONVERGED_USER          =  8, /* User defined */
9321ec2d5cSBarry Smith   /* diverged */
9421ec2d5cSBarry Smith   TAO_DIVERGED_MAXITS         = -2,
9521ec2d5cSBarry Smith   TAO_DIVERGED_NAN            = -4,
9621ec2d5cSBarry Smith   TAO_DIVERGED_MAXFCN         = -5,
9721ec2d5cSBarry Smith   TAO_DIVERGED_LS_FAILURE     = -6,
9821ec2d5cSBarry Smith   TAO_DIVERGED_TR_REDUCTION   = -7,
9921ec2d5cSBarry Smith   TAO_DIVERGED_USER           = -8, /* User defined */
10021ec2d5cSBarry Smith   /* keep going */
101e4cb33bbSBarry Smith   TAO_CONTINUE_ITERATING      =  0} TaoConvergedReason;
10221ec2d5cSBarry Smith 
103e4cb33bbSBarry Smith PETSC_EXTERN const char **TaoConvergedReasons;
10421ec2d5cSBarry Smith 
10521ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoInitializePackage(void);
10621ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoFinalizePackage(void);
107441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoCreate(MPI_Comm,Tao*);
108441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetFromOptions(Tao);
109441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetUp(Tao);
110441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetType(Tao, const TaoType);
111441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetType(Tao, const TaoType *);
112441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetApplicationContext(Tao, void*);
113441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetApplicationContext(Tao, void*);
114441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDestroy(Tao*);
11521ec2d5cSBarry Smith 
116441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetOptionsPrefix(Tao,const char []);
117441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoView(Tao, PetscViewer);
118685405a1SBarry Smith PETSC_STATIC_INLINE PetscErrorCode TaoViewFromOptions(Tao A,PetscObject obj,const char name[]) {return PetscObjectViewFromOptions((PetscObject)A,obj,name);}
11921ec2d5cSBarry Smith 
120441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSolve(Tao);
12121ec2d5cSBarry Smith 
122441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoRegister(const char [],PetscErrorCode (*)(Tao));
123441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoRegisterDestroy(void);
12421ec2d5cSBarry Smith 
125e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetConvergedReason(Tao,TaoConvergedReason*);
126e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetSolutionStatus(Tao, PetscInt*, PetscReal*, PetscReal*, PetscReal*, PetscReal*, TaoConvergedReason*);
127e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConvergedReason(Tao,TaoConvergedReason);
128441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInitialVector(Tao, Vec);
129441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetSolutionVector(Tao, Vec*);
130441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetGradientVector(Tao, Vec*);
131a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoSetGradientNorm(Tao, Mat);
132a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoGetGradientNorm(Tao, Mat*);
133a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMSetH0(Tao, Mat);
134a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMGetH0(Tao, Mat*);
135a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMGetH0KSP(Tao, KSP*);
136441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetObjectiveRoutine(Tao, PetscErrorCode(*)(Tao, Vec, PetscReal*,void*), void*);
137441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetGradientRoutine(Tao, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*);
138441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetObjectiveAndGradientRoutine(Tao, PetscErrorCode(*)(Tao, Vec, PetscReal*, Vec, void*), void*);
139ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetHessianRoutine(Tao,Mat,Mat,PetscErrorCode(*)(Tao,Vec, Mat, Mat, void*), void*);
140441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetSeparableObjectiveRoutine(Tao, Vec, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*);
141125ddc8aSJason Sarich PETSC_EXTERN PetscErrorCode TaoSetSeparableObjectiveWeights(Tao, Vec, PetscInt, PetscInt*, PetscInt*, PetscReal*);
142441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConstraintsRoutine(Tao, Vec, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*);
143441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInequalityConstraintsRoutine(Tao, Vec, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*);
144441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetEqualityConstraintsRoutine(Tao, Vec, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*);
145ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianRoutine(Tao,Mat,Mat, PetscErrorCode(*)(Tao,Vec, Mat, Mat, void*), void*);
146ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianStateRoutine(Tao,Mat,Mat,Mat, PetscErrorCode(*)(Tao,Vec, Mat, Mat, Mat, void*), void*);
14794ab13aaSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianDesignRoutine(Tao,Mat,PetscErrorCode(*)(Tao,Vec, Mat, void*), void*);
148ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianInequalityRoutine(Tao,Mat,Mat,PetscErrorCode(*)(Tao,Vec, Mat, Mat, void*), void*);
149ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianEqualityRoutine(Tao,Mat,Mat,PetscErrorCode(*)(Tao,Vec, Mat, Mat, void*), void*);
15021ec2d5cSBarry Smith 
151441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetStateDesignIS(Tao, IS, IS);
15221ec2d5cSBarry Smith 
153441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeObjective(Tao, Vec, PetscReal*);
154441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeSeparableObjective(Tao, Vec, Vec);
155441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeGradient(Tao, Vec, Vec);
156441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeObjectiveAndGradient(Tao, Vec, PetscReal*, Vec);
157441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeConstraints(Tao, Vec, Vec);
158441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeInequalityConstraints(Tao, Vec, Vec);
159441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeEqualityConstraints(Tao, Vec, Vec);
160441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeGradient(Tao, Vec, Vec, void*);
161441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsObjectiveDefined(Tao,PetscBool*);
162441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsGradientDefined(Tao,PetscBool*);
163441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsObjectiveAndGradientDefined(Tao,PetscBool*);
16421ec2d5cSBarry Smith 
165ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeHessian(Tao, Vec, Mat, Mat);
166ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobian(Tao, Vec, Mat, Mat);
167ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianState(Tao, Vec, Mat, Mat, Mat);
168ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianEquality(Tao, Vec, Mat, Mat);
169ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianInequality(Tao, Vec, Mat, Mat);
17094ab13aaSBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianDesign(Tao, Vec, Mat);
17121ec2d5cSBarry Smith 
172ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessian(Tao, Vec, Mat, Mat, void*);
173ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessianColor(Tao, Vec, Mat, Mat, void*);
174f4c1ad5cSStefano Zampini PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessianMFFD(Tao, Vec, Mat, Mat, void*);
175441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeDualVariables(Tao, Vec, Vec);
176441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetVariableBounds(Tao, Vec, Vec);
177441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetVariableBounds(Tao, Vec*, Vec*);
178441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetDualVariables(Tao, Vec*, Vec*);
179441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInequalityBounds(Tao, Vec, Vec);
180441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetInequalityBounds(Tao, Vec*, Vec*);
181441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetVariableBoundsRoutine(Tao, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*);
182441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeVariableBounds(Tao);
18321ec2d5cSBarry Smith 
184e52336cbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetTolerances(Tao, PetscReal*, PetscReal*, PetscReal*);
185e52336cbSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetTolerances(Tao, PetscReal, PetscReal, PetscReal);
186441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetConstraintTolerances(Tao, PetscReal*, PetscReal*);
187441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConstraintTolerances(Tao, PetscReal, PetscReal);
188441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetFunctionLowerBound(Tao, PetscReal);
189441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInitialTrustRegionRadius(Tao, PetscReal);
190441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMaximumIterations(Tao, PetscInt);
191441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMaximumFunctionEvaluations(Tao, PetscInt);
192441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetFunctionLowerBound(Tao, PetscReal*);
193441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetInitialTrustRegionRadius(Tao, PetscReal*);
194441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetCurrentTrustRegionRadius(Tao, PetscReal*);
195441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetMaximumIterations(Tao, PetscInt*);
196770232b9SCe Qin PETSC_EXTERN PetscErrorCode TaoGetCurrentFunctionEvaluations(Tao, PetscInt*);
197441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetMaximumFunctionEvaluations(Tao, PetscInt*);
1988931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetIterationNumber(Tao, PetscInt*);
1998931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoSetIterationNumber(Tao, PetscInt);
2008931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetTotalIterationNumber(Tao, PetscInt*);
2018931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoSetTotalIterationNumber(Tao, PetscInt);
202*79f5d8caSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetResidualNorm(Tao,PetscReal*);
203*79f5d8caSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetObjective(Tao,PetscReal*);
2048931d482SJason Sarich 
205441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoAppendOptionsPrefix(Tao, const char p[]);
206441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetOptionsPrefix(Tao, const char *p[]);
207441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoResetStatistics(Tao);
20821ec2d5cSBarry Smith 
209441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetKSP(Tao, KSP*);
210025e9500SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetLinearSolveIterations(Tao,PetscInt *);
211235fd6e6SBarry Smith 
212235fd6e6SBarry Smith #include <petsctaolinesearch.h>
213235fd6e6SBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchUseTaoRoutines(TaoLineSearch, Tao);
214441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetLineSearch(Tao, TaoLineSearch*);
21521ec2d5cSBarry Smith 
216ae93cb3cSJason Sarich PETSC_EXTERN PetscErrorCode TaoSetConvergenceHistory(Tao,PetscReal*,PetscReal*,PetscReal*,PetscInt*,PetscInt,PetscBool);
217ae93cb3cSJason Sarich PETSC_EXTERN PetscErrorCode TaoGetConvergenceHistory(Tao,PetscReal**,PetscReal**,PetscReal**,PetscInt**,PetscInt*);
218441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMonitor(Tao, PetscErrorCode (*)(Tao,void*),void *,PetscErrorCode (*)(void**));
219441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoCancelMonitors(Tao);
220441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultMonitor(Tao, void*);
221441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultSMonitor(Tao, void*);
222441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultCMonitor(Tao, void*);
223441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSolutionMonitor(Tao, void*);
224441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSeparableObjectiveMonitor(Tao, void*);
225441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGradientMonitor(Tao, void*);
226441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoStepDirectionMonitor(Tao, void*);
227441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDrawSolutionMonitor(Tao, void*);
228441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDrawStepMonitor(Tao, void*);
229441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDrawGradientMonitor(Tao, void*);
230441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoAddLineSearchCounts(Tao);
23121ec2d5cSBarry Smith 
232441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultConvergenceTest(Tao,void*);
233441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConvergenceTest(Tao, PetscErrorCode (*)(Tao, void*),void *);
23421ec2d5cSBarry Smith 
235441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSQPCONSetStateDesignIS(Tao, IS, IS);
236441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoLCLSetStateDesignIS(Tao, IS, IS);
2376e6473c1SLisandro Dalcin PETSC_EXTERN PetscErrorCode TaoMonitor(Tao, PetscInt, PetscReal, PetscReal, PetscReal, PetscReal, TaoConvergedReason*);
238e882e171SHong Zhang typedef struct _n_TaoMonitorDrawCtx* TaoMonitorDrawCtx;
239e882e171SHong Zhang PETSC_EXTERN PetscErrorCode TaoMonitorDrawCtxCreate(MPI_Comm,const char[],const char[],int,int,int,int,PetscInt,TaoMonitorDrawCtx*);
240e882e171SHong Zhang PETSC_EXTERN PetscErrorCode TaoMonitorDrawCtxDestroy(TaoMonitorDrawCtx*);
24121ec2d5cSBarry Smith #endif
242