xref: /petsc/include/petsctao.h (revision a496304597bacff3545e802853d69e8765312868)
1*a4963045SJacob Faibussowitsch #pragma once
221ec2d5cSBarry Smith 
3aad13602SShrirang Abhyankar #include <petscsnes.h>
421ec2d5cSBarry Smith 
5ac09b921SBarry Smith /* SUBMANSEC = Tao */
6ac09b921SBarry Smith 
7b54963c9SStefano Zampini PETSC_EXTERN PetscErrorCode VecFischer(Vec, Vec, Vec, Vec, Vec);
8b54963c9SStefano Zampini PETSC_EXTERN PetscErrorCode VecSFischer(Vec, Vec, Vec, Vec, PetscReal, Vec);
9b54963c9SStefano Zampini PETSC_EXTERN PetscErrorCode MatDFischer(Mat, Vec, Vec, Vec, Vec, Vec, Vec, Vec, Vec);
10b54963c9SStefano Zampini PETSC_EXTERN PetscErrorCode MatDSFischer(Mat, Vec, Vec, Vec, Vec, PetscReal, Vec, Vec, Vec, Vec, Vec);
118370d7cdSHansol Suh PETSC_EXTERN PetscErrorCode TaoSoftThreshold(Vec, PetscReal, PetscReal, Vec);
1221ec2d5cSBarry Smith 
1321ec2d5cSBarry Smith /*E
1416a05f60SBarry Smith   TaoSubsetType - Type representing the way TAO handles active sets
1521ec2d5cSBarry Smith 
1647450a7bSBarry Smith   Values:
1787497f52SBarry Smith + `TAO_SUBSET_SUBVEC` - Tao uses `MatCreateSubMatrix()` and `VecGetSubVector()`
1865ba42b6SBarry Smith . `TAO_SUBSET_MASK` - Matrices are zeroed out corresponding to active set entries
1965ba42b6SBarry Smith - `TAO_SUBSET_MATRIXFREE` - Same as `TAO_SUBSET_MASK` but it can be applied to matrix-free operators
2021ec2d5cSBarry Smith 
2147450a7bSBarry Smith   Options database Key:
2216a05f60SBarry Smith . -different_hessian - Tao will use a copy of the Hessian operator for masking.  By default TAO will directly alter the Hessian operator.
2347450a7bSBarry Smith 
241eb8069cSJason Sarich   Level: intermediate
2521ec2d5cSBarry Smith 
261cc06b55SBarry Smith .seealso: [](ch_tao), `TaoVecGetSubVec()`, `TaoMatGetSubMat()`, `Tao`, `TaoCreate()`, `TaoDestroy()`, `TaoSetType()`, `TaoType`
2721ec2d5cSBarry Smith E*/
289371c9d4SSatish Balay typedef enum {
299371c9d4SSatish Balay   TAO_SUBSET_SUBVEC,
309371c9d4SSatish Balay   TAO_SUBSET_MASK,
319371c9d4SSatish Balay   TAO_SUBSET_MATRIXFREE
329371c9d4SSatish Balay } TaoSubsetType;
3321ec2d5cSBarry Smith PETSC_EXTERN const char *const TaoSubsetTypes[];
3465ba42b6SBarry Smith 
351eb8069cSJason Sarich /*S
361eb8069cSJason Sarich      Tao - Abstract PETSc object that manages nonlinear optimization solves
371eb8069cSJason Sarich 
381eb8069cSJason Sarich    Level: advanced
391eb8069cSJason Sarich 
401cc06b55SBarry Smith .seealso: [](doc_taosolve), [](ch_tao), `TaoCreate()`, `TaoDestroy()`, `TaoSetType()`, `TaoType`
411eb8069cSJason Sarich S*/
4265ba42b6SBarry Smith typedef struct _p_Tao *Tao;
4321ec2d5cSBarry Smith 
446285c0a3SHansol  Suh /*E
4587497f52SBarry Smith      TaoADMMUpdateType - Determine spectral penalty update routine for Lagrange augmented term for `TAOADMM`.
466285c0a3SHansol  Suh 
476285c0a3SHansol  Suh   Level: advanced
486285c0a3SHansol  Suh 
491cc06b55SBarry Smith .seealso: [](ch_tao), `Tao`, `TAOADMM`, `TaoADMMSetUpdateType()`
506285c0a3SHansol  Suh E*/
519371c9d4SSatish Balay typedef enum {
529371c9d4SSatish Balay   TAO_ADMM_UPDATE_BASIC,
539371c9d4SSatish Balay   TAO_ADMM_UPDATE_ADAPTIVE,
549371c9d4SSatish Balay   TAO_ADMM_UPDATE_ADAPTIVE_RELAXED
559371c9d4SSatish Balay } TaoADMMUpdateType;
566285c0a3SHansol  Suh PETSC_EXTERN const char *const TaoADMMUpdateTypes[];
5765ba42b6SBarry Smith 
586285c0a3SHansol  Suh /*MC
596285c0a3SHansol  Suh      TAO_ADMM_UPDATE_BASIC - Use same spectral penalty set at the beginning. No update
606285c0a3SHansol  Suh 
616285c0a3SHansol  Suh   Level: advanced
626285c0a3SHansol  Suh 
6387497f52SBarry Smith   Note:
64aaa8cc7dSPierre Jolivet   Most basic implementation of `TAOADMM`. Generally slower than adaptive or adaptive relaxed version.
656285c0a3SHansol  Suh 
661cc06b55SBarry Smith .seealso: [](ch_tao), `Tao`, `TAOADMM`, `TaoADMMSetUpdateType()`, `TAO_ADMM_UPDATE_ADAPTIVE`, `TAO_ADMM_UPDATE_ADAPTIVE_RELAXED`
676285c0a3SHansol  Suh M*/
686285c0a3SHansol  Suh 
696285c0a3SHansol  Suh /*MC
706285c0a3SHansol  Suh      TAO_ADMM_UPDATE_ADAPTIVE - Adaptively update spectral penalty
716285c0a3SHansol  Suh 
726285c0a3SHansol  Suh   Level: advanced
736285c0a3SHansol  Suh 
7487497f52SBarry Smith   Note:
7547450a7bSBarry Smith   Adaptively updates spectral penalty of `TAOADMM` by using both steepest descent and minimum gradient.
766285c0a3SHansol  Suh 
771cc06b55SBarry Smith .seealso: [](ch_tao), `Tao`, `TAOADMM`, `TaoADMMSetUpdateType()`, `TAO_ADMM_UPDATE_BASIC`, `TAO_ADMM_UPDATE_ADAPTIVE_RELAXED`
786285c0a3SHansol  Suh M*/
796285c0a3SHansol  Suh 
806285c0a3SHansol  Suh /*MC
816285c0a3SHansol  Suh      ADMM_UPDATE_ADAPTIVE_RELAXED - Adaptively update spectral penalty, and relaxes parameter update
826285c0a3SHansol  Suh 
836285c0a3SHansol  Suh   Level: advanced
846285c0a3SHansol  Suh 
8587497f52SBarry Smith   Note:
8687497f52SBarry Smith   With adaptive spectral penalty update, it also relaxes x vector update by a factor.
876285c0a3SHansol  Suh 
881cc06b55SBarry Smith .seealso: [](ch_tao), `Tao`, `TaoADMMSetUpdateType()`, `TAO_ADMM_UPDATE_BASIC`, `TAO_ADMM_UPDATE_ADAPTIVE`
896285c0a3SHansol  Suh M*/
906285c0a3SHansol  Suh 
916285c0a3SHansol  Suh /*E
9247450a7bSBarry Smith      TaoADMMRegularizerType - Determine regularizer routine - either user provided or soft threshold for `TAOADMM`
936285c0a3SHansol  Suh 
946285c0a3SHansol  Suh   Level: advanced
956285c0a3SHansol  Suh 
961cc06b55SBarry Smith .seealso: [](ch_tao), `Tao`, `TAOADMM`, `TaoADMMSetRegularizerType()`
976285c0a3SHansol  Suh E*/
989371c9d4SSatish Balay typedef enum {
999371c9d4SSatish Balay   TAO_ADMM_REGULARIZER_USER,
1009371c9d4SSatish Balay   TAO_ADMM_REGULARIZER_SOFT_THRESH
1019371c9d4SSatish Balay } TaoADMMRegularizerType;
1026285c0a3SHansol  Suh PETSC_EXTERN const char *const TaoADMMRegularizerTypes[];
10365ba42b6SBarry Smith 
1046285c0a3SHansol  Suh /*MC
10587497f52SBarry Smith   TAO_ADMM_REGULARIZER_USER - User provided routines for regularizer part of `TAOADMM`
1066285c0a3SHansol  Suh 
1076285c0a3SHansol  Suh   Level: advanced
1086285c0a3SHansol  Suh 
10987497f52SBarry Smith   Note:
11087497f52SBarry Smith   User needs to provided appropriate routines and type for regularizer solver
1116285c0a3SHansol  Suh 
1121cc06b55SBarry Smith .seealso: [](ch_tao), `Tao`, `TAOADMM`, `TaoADMMSetRegularizerType()`, `TAO_ADMM_REGULARIZER_SOFT_THRESH`
1136285c0a3SHansol  Suh M*/
1146285c0a3SHansol  Suh 
1156285c0a3SHansol  Suh /*MC
11687497f52SBarry Smith   TAO_ADMM_REGULARIZER_SOFT_THRESH - Soft threshold to solve regularizer part of `TAOADMM`
1176285c0a3SHansol  Suh 
1186285c0a3SHansol  Suh   Level: advanced
1196285c0a3SHansol  Suh 
12087497f52SBarry Smith   Note:
12187497f52SBarry Smith   Utilizes built-in SoftThreshold routines
1226285c0a3SHansol  Suh 
1231cc06b55SBarry Smith .seealso: [](ch_tao), `Tao`, `TAOADMM`, `TaoSoftThreshold()`, `TaoADMMSetRegularizerObjectiveAndGradientRoutine()`,
124db781477SPatrick Sanan           `TaoADMMSetRegularizerHessianRoutine()`, `TaoADMMSetRegularizerType()`, `TAO_ADMM_REGULARIZER_USER`
1256285c0a3SHansol  Suh M*/
1266285c0a3SHansol  Suh 
127661095bbSAlp Dener /*E
12887497f52SBarry Smith      TaoALMMType - Determine the augmented Lagrangian formulation used in the `TAOALMM` subproblem.
129661095bbSAlp Dener 
130a1cb98faSBarry Smith    Values:
131a1cb98faSBarry Smith +  `TAO_ALMM_CLASSIC` - classic augmented Lagrangian definition including slack variables for inequality constraints
132a1cb98faSBarry Smith -  `TAO_ALMM_PHR`     - Powell-Hestenes-Rockafellar formulation without slack variables, uses pointwise min() for inequalities
133661095bbSAlp Dener 
134661095bbSAlp Dener   Level: advanced
135661095bbSAlp Dener 
1361cc06b55SBarry Smith .seealso: [](ch_tao), `Tao`, `TAOALMM`, `TaoALMMSetType()`, `TaoALMMGetType()`
137661095bbSAlp Dener E*/
1389371c9d4SSatish Balay typedef enum {
1399371c9d4SSatish Balay   TAO_ALMM_CLASSIC,
1409371c9d4SSatish Balay   TAO_ALMM_PHR
1419371c9d4SSatish Balay } TaoALMMType;
142661095bbSAlp Dener PETSC_EXTERN const char *const TaoALMMTypes[];
143661095bbSAlp Dener 
144d6e07cdcSHong Zhang /*E
145d6e07cdcSHong Zhang      TaoBNCGType - Determine the conjugate gradient update formula used in the TAOBNCG algorithm.
146d6e07cdcSHong Zhang 
147d6e07cdcSHong Zhang $  TAO_BNCG_GD         - basic gradient descent, no CG update
148d6e07cdcSHong Zhang $  TAO_BNCG_PCGD       - preconditioned/scaled gradient descent
149d6e07cdcSHong Zhang $  TAO_BNCG_HS         - Hestenes-Stiefel
150d6e07cdcSHong Zhang $  TAO_BNCG_FR         - Fletcher-Reeves
151d6e07cdcSHong Zhang $  TAO_BNCG_PRP        - Polak-Ribiere-Polyak (PRP)
152d6e07cdcSHong Zhang $  TAO_BNCG_PRP_PLUS   - Polak-Ribiere-Polyak "plus" (PRP+)
153d6e07cdcSHong Zhang $  TAO_BNCG_DY         - Dai-Yuan
154d6e07cdcSHong Zhang $  TAO_BNCG_HZ         - Hager-Zhang (CG_DESCENT 5.3)
155d6e07cdcSHong Zhang $  TAO_BNCG_DK         - Dai-Kou (2013)
156d6e07cdcSHong Zhang $  TAO_BNCG_KD         - Kou-Dai (2015)
157d6e07cdcSHong Zhang $  TAO_BNCG_SSML_BFGS  - Self-Scaling Memoryless BFGS (Perry-Shanno)
158d6e07cdcSHong Zhang $  TAO_BNCG_SSML_DFP   - Self-Scaling Memoryless DFP
159d6e07cdcSHong Zhang $  TAO_BNCG_SSML_BRDN  - Self-Scaling Memoryless (Symmetric) Broyden
160d6e07cdcSHong Zhang 
161d6e07cdcSHong Zhang   Level: advanced
162d6e07cdcSHong Zhang 
163d6e07cdcSHong Zhang .seealso: `Tao`, `TAOBNCG`, `TaoBNCGSetType()`, `TaoBNCGGetType()`
164d6e07cdcSHong Zhang E*/
165d6e07cdcSHong Zhang 
166d6e07cdcSHong Zhang typedef enum {
167d6e07cdcSHong Zhang   TAO_BNCG_GD,
168d6e07cdcSHong Zhang   TAO_BNCG_PCGD,
169d6e07cdcSHong Zhang   TAO_BNCG_HS,
170d6e07cdcSHong Zhang   TAO_BNCG_FR,
171d6e07cdcSHong Zhang   TAO_BNCG_PRP,
172d6e07cdcSHong Zhang   TAO_BNCG_PRP_PLUS,
173d6e07cdcSHong Zhang   TAO_BNCG_DY,
174d6e07cdcSHong Zhang   TAO_BNCG_HZ,
175d6e07cdcSHong Zhang   TAO_BNCG_DK,
176d6e07cdcSHong Zhang   TAO_BNCG_KD,
177d6e07cdcSHong Zhang   TAO_BNCG_SSML_BFGS,
178d6e07cdcSHong Zhang   TAO_BNCG_SSML_DFP,
179d6e07cdcSHong Zhang   TAO_BNCG_SSML_BRDN
180d6e07cdcSHong Zhang } TaoBNCGType;
181d6e07cdcSHong Zhang PETSC_EXTERN const char *const TaoBNCGTypes[];
182d6e07cdcSHong Zhang 
1831eb8069cSJason Sarich /*J
18487497f52SBarry Smith         TaoType - String with the name of a `Tao` method
1851eb8069cSJason Sarich 
18647450a7bSBarry Smith   Values:
18747450a7bSBarry Smith +    `TAONLS` - nls Newton's method with line search for unconstrained minimization
18847450a7bSBarry Smith .    `TAONTR` - ntr Newton's method with trust region for unconstrained minimization
18947450a7bSBarry Smith .    `TAONTL` - ntl Newton's method with trust region, line search for unconstrained minimization
19047450a7bSBarry Smith .    `TAOLMVM` - lmvm Limited memory variable metric method for unconstrained minimization
19147450a7bSBarry Smith .    `TAOCG` - cg Nonlinear conjugate gradient method for unconstrained minimization
19247450a7bSBarry Smith .    `TAONM` - nm Nelder-Mead algorithm for derivate-free unconstrained minimization
19347450a7bSBarry Smith .    `TAOTRON` - tron Newton Trust Region method for bound constrained minimization
19447450a7bSBarry Smith .    `TAOGPCG` - gpcg Newton Trust Region method for quadratic bound constrained minimization
19547450a7bSBarry Smith .    `TAOBLMVM` - blmvm Limited memory variable metric method for bound constrained minimization
19647450a7bSBarry Smith .    `TAOLCL` - lcl Linearly constrained Lagrangian method for pde-constrained minimization
19716a05f60SBarry Smith -    `TAOPOUNDERS` - Pounders Model-based algorithm for nonlinear least squares
19847450a7bSBarry Smith 
1991eb8069cSJason Sarich        Level: beginner
2001eb8069cSJason Sarich 
2011cc06b55SBarry Smith .seealso: [](doc_taosolve), [](ch_tao), `Tao`, `TaoCreate()`, `TaoSetType()`
2021eb8069cSJason Sarich J*/
203b625d6c7SJed Brown typedef const char *TaoType;
20458417fe7SBarry Smith #define TAOLMVM     "lmvm"
20558417fe7SBarry Smith #define TAONLS      "nls"
20658417fe7SBarry Smith #define TAONTR      "ntr"
20758417fe7SBarry Smith #define TAONTL      "ntl"
20858417fe7SBarry Smith #define TAOCG       "cg"
20958417fe7SBarry Smith #define TAOTRON     "tron"
21058417fe7SBarry Smith #define TAOOWLQN    "owlqn"
21158417fe7SBarry Smith #define TAOBMRM     "bmrm"
21258417fe7SBarry Smith #define TAOBLMVM    "blmvm"
2136b591159SAlp Dener #define TAOBQNLS    "bqnls"
214ac9112b8SAlp Dener #define TAOBNCG     "bncg"
215eb910715SAlp Dener #define TAOBNLS     "bnls"
216fed79b8eSAlp Dener #define TAOBNTR     "bntr"
217c14b763aSAlp Dener #define TAOBNTL     "bntl"
218e0ed867bSAlp Dener #define TAOBQNKLS   "bqnkls"
219e0ed867bSAlp Dener #define TAOBQNKTR   "bqnktr"
220e0ed867bSAlp Dener #define TAOBQNKTL   "bqnktl"
22158417fe7SBarry Smith #define TAOBQPIP    "bqpip"
22258417fe7SBarry Smith #define TAOGPCG     "gpcg"
22358417fe7SBarry Smith #define TAONM       "nm"
22458417fe7SBarry Smith #define TAOPOUNDERS "pounders"
225737f463aSAlp Dener #define TAOBRGN     "brgn"
22658417fe7SBarry Smith #define TAOLCL      "lcl"
22758417fe7SBarry Smith #define TAOSSILS    "ssils"
22858417fe7SBarry Smith #define TAOSSFLS    "ssfls"
22958417fe7SBarry Smith #define TAOASILS    "asils"
23058417fe7SBarry Smith #define TAOASFLS    "asfls"
23158417fe7SBarry Smith #define TAOIPM      "ipm"
232aad13602SShrirang Abhyankar #define TAOPDIPM    "pdipm"
23383a0a5c3SToby Isaac #define TAOSHELL    "shell"
2346285c0a3SHansol  Suh #define TAOADMM     "admm"
235661095bbSAlp Dener #define TAOALMM     "almm"
236a82e8c82SStefano Zampini #define TAOPYTHON   "python"
237f4f59681SStefano Zampini #define TAOSNES     "snes"
23858417fe7SBarry Smith 
239441846f8SBarry Smith PETSC_EXTERN PetscClassId      TAO_CLASSID;
240441846f8SBarry Smith PETSC_EXTERN PetscFunctionList TaoList;
24121ec2d5cSBarry Smith 
242a35d58b8SBarry Smith /*E
24316a05f60SBarry Smith     TaoConvergedReason - reason a `Tao` optimizer was said to have converged or diverged
244a35d58b8SBarry Smith 
24547450a7bSBarry Smith    Values:
24647450a7bSBarry Smith +  `TAO_CONVERGED_GATOL` - ||g(X)|| < gatol
24747450a7bSBarry Smith .  `TAO_CONVERGED_GRTOL` - ||g(X)|| / f(X)  < grtol
24847450a7bSBarry Smith .  `TAO_CONVERGED_GTTOL` - ||g(X)|| / ||g(X0)|| < gttol
24947450a7bSBarry Smith .  `TAO_CONVERGED_STEPTOL` - step size smaller than tolerance
25047450a7bSBarry Smith .  `TAO_CONVERGED_MINF` - F < F_min
25147450a7bSBarry Smith .  `TAO_CONVERGED_USER` - the user indicates the optimization has succeeded
25247450a7bSBarry Smith .  `TAO_DIVERGED_MAXITS` - the maximum number of iterations allowed has been achieved
25347450a7bSBarry Smith .  `TAO_DIVERGED_NAN` - not a number appeared in the computations
25447450a7bSBarry Smith .  `TAO_DIVERGED_MAXFCN` - the maximum number of function evaluations has been computed
25547450a7bSBarry Smith .  `TAO_DIVERGED_LS_FAILURE` - a linesearch failed
25647450a7bSBarry Smith .  `TAO_DIVERGED_TR_REDUCTION` - trust region failure
25747450a7bSBarry Smith .  `TAO_DIVERGED_USER` - the user has indicated the optimization has failed
25847450a7bSBarry Smith -  `TAO_CONTINUE_ITERATING` - the optimization is still running, `TaoSolve()`
25947450a7bSBarry Smith 
26047450a7bSBarry Smith    where
26147450a7bSBarry Smith +  X - current solution
26247450a7bSBarry Smith .  X0 - initial guess
26347450a7bSBarry Smith .  f(X) - current function value
26447450a7bSBarry Smith .  f(X*) - true solution (estimated)
26547450a7bSBarry Smith .  g(X) - current gradient
26647450a7bSBarry Smith .  its - current iterate number
26747450a7bSBarry Smith .  maxits - maximum number of iterates
26847450a7bSBarry Smith .  fevals - number of function evaluations
26947450a7bSBarry Smith -  max_funcsals - maximum number of function evaluations
27047450a7bSBarry Smith 
271a35d58b8SBarry Smith    Level: beginner
272a35d58b8SBarry Smith 
27347450a7bSBarry Smith    Note:
27447450a7bSBarry Smith    The two most common reasons for divergence are  an incorrectly coded or computed gradient or Hessian failure or lack of convergence
27547450a7bSBarry Smith    in the linear system solve (in this case we recommend testing with `-pc_type lu` to eliminate the linear solver as the cause of the problem).
276a35d58b8SBarry Smith 
27747450a7bSBarry Smith    Developer Note:
27847450a7bSBarry Smith    The names in `KSPConvergedReason`, `SNESConvergedReason`, and `TaoConvergedReason` should be uniformized
279a35d58b8SBarry Smith 
2801cc06b55SBarry Smith .seealso: [](ch_tao), `Tao`, `TaoSolve()`, `TaoGetConvergedReason()`, `KSPConvergedReason`, `SNESConvergedReason`
281a35d58b8SBarry Smith E*/
28221ec2d5cSBarry Smith typedef enum {               /* converged */
28321ec2d5cSBarry Smith   TAO_CONVERGED_GATOL   = 3, /* ||g(X)|| < gatol */
28421ec2d5cSBarry Smith   TAO_CONVERGED_GRTOL   = 4, /* ||g(X)|| / f(X)  < grtol */
28521ec2d5cSBarry Smith   TAO_CONVERGED_GTTOL   = 5, /* ||g(X)|| / ||g(X0)|| < gttol */
28621ec2d5cSBarry Smith   TAO_CONVERGED_STEPTOL = 6, /* step size small */
28721ec2d5cSBarry Smith   TAO_CONVERGED_MINF    = 7, /* F < F_min */
28821ec2d5cSBarry Smith   TAO_CONVERGED_USER    = 8, /* User defined */
28921ec2d5cSBarry Smith   /* diverged */
29021ec2d5cSBarry Smith   TAO_DIVERGED_MAXITS       = -2,
29121ec2d5cSBarry Smith   TAO_DIVERGED_NAN          = -4,
29221ec2d5cSBarry Smith   TAO_DIVERGED_MAXFCN       = -5,
29321ec2d5cSBarry Smith   TAO_DIVERGED_LS_FAILURE   = -6,
29421ec2d5cSBarry Smith   TAO_DIVERGED_TR_REDUCTION = -7,
29521ec2d5cSBarry Smith   TAO_DIVERGED_USER         = -8, /* User defined */
29621ec2d5cSBarry Smith   /* keep going */
2979371c9d4SSatish Balay   TAO_CONTINUE_ITERATING = 0
2989371c9d4SSatish Balay } TaoConvergedReason;
29921ec2d5cSBarry Smith 
300e4cb33bbSBarry Smith PETSC_EXTERN const char **TaoConvergedReasons;
30121ec2d5cSBarry Smith 
30221ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoInitializePackage(void);
30321ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoFinalizePackage(void);
304441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoCreate(MPI_Comm, Tao *);
305441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetFromOptions(Tao);
306441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetUp(Tao);
307b625d6c7SJed Brown PETSC_EXTERN PetscErrorCode TaoSetType(Tao, TaoType);
308b625d6c7SJed Brown PETSC_EXTERN PetscErrorCode TaoGetType(Tao, TaoType *);
309441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetApplicationContext(Tao, void *);
310441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetApplicationContext(Tao, void *);
311441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDestroy(Tao *);
31221ec2d5cSBarry Smith 
313441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetOptionsPrefix(Tao, const char[]);
314441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoView(Tao, PetscViewer);
315fe2efc57SMark PETSC_EXTERN PetscErrorCode TaoViewFromOptions(Tao, PetscObject, const char[]);
31621ec2d5cSBarry Smith 
317441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSolve(Tao);
31821ec2d5cSBarry Smith 
319441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoRegister(const char[], PetscErrorCode (*)(Tao));
320441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoRegisterDestroy(void);
32121ec2d5cSBarry Smith 
322e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetConvergedReason(Tao, TaoConvergedReason *);
323e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetSolutionStatus(Tao, PetscInt *, PetscReal *, PetscReal *, PetscReal *, PetscReal *, TaoConvergedReason *);
324e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConvergedReason(Tao, TaoConvergedReason);
325a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetSolution(Tao, Vec);
326a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetSolution(Tao, Vec *);
327edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 17, 0, "TaoSetSolution()", ) static inline PetscErrorCode TaoSetInitialVector(Tao t, Vec v)
328d71ae5a4SJacob Faibussowitsch {
3299371c9d4SSatish Balay   return TaoSetSolution(t, v);
3309371c9d4SSatish Balay }
331edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 17, 0, "TaoGetSolution()", ) static inline PetscErrorCode TaoGetInitialVector(Tao t, Vec *v)
332d71ae5a4SJacob Faibussowitsch {
3339371c9d4SSatish Balay   return TaoGetSolution(t, v);
3349371c9d4SSatish Balay }
335a82e8c82SStefano Zampini 
336a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetObjective(Tao, PetscErrorCode (*)(Tao, Vec, PetscReal *, void *), void *);
337a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetObjective(Tao, PetscErrorCode (**)(Tao, Vec, PetscReal *, void *), void **);
338a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetGradient(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *);
339a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetGradient(Tao, Vec *, PetscErrorCode (**)(Tao, Vec, Vec, void *), void **);
340a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetObjectiveAndGradient(Tao, Vec, PetscErrorCode (*)(Tao, Vec, PetscReal *, Vec, void *), void *);
341a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetObjectiveAndGradient(Tao, Vec *, PetscErrorCode (**)(Tao, Vec, PetscReal *, Vec, void *), void **);
342a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetHessian(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *);
343a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetHessian(Tao, Mat *, Mat *, PetscErrorCode (**)(Tao, Vec, Mat, Mat, void *), void **);
344edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 17, 0, "TaoSetObjective()", ) static inline PetscErrorCode TaoSetObjectiveRoutine(Tao t, PetscErrorCode (*f)(Tao, Vec, PetscReal *, void *), void *c)
345d71ae5a4SJacob Faibussowitsch {
3469371c9d4SSatish Balay   return TaoSetObjective(t, f, c);
3479371c9d4SSatish Balay }
348edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 17, 0, "TaoGetGradient()", ) static inline PetscErrorCode TaoGetGradientVector(Tao t, Vec *v)
349d71ae5a4SJacob Faibussowitsch {
350f22e26b7SPierre Jolivet   return TaoGetGradient(t, v, PETSC_NULLPTR, PETSC_NULLPTR);
3519371c9d4SSatish Balay }
352edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 17, 0, "TaoSetGradient()", ) static inline PetscErrorCode TaoSetGradientRoutine(Tao t, PetscErrorCode (*f)(Tao, Vec, Vec, void *), void *c)
353d71ae5a4SJacob Faibussowitsch {
354f22e26b7SPierre Jolivet   return TaoSetGradient(t, PETSC_NULLPTR, f, c);
3559371c9d4SSatish Balay }
356edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 17, 0, "TaoSetObjectiveAndGradient()", ) static inline PetscErrorCode TaoSetObjectiveAndGradientRoutine(Tao t, PetscErrorCode (*f)(Tao, Vec, PetscReal *, Vec, void *), void *c)
357d71ae5a4SJacob Faibussowitsch {
358f22e26b7SPierre Jolivet   return TaoSetObjectiveAndGradient(t, PETSC_NULLPTR, f, c);
3599371c9d4SSatish Balay }
360edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 17, 0, "TaoSetHessian()", ) static inline PetscErrorCode TaoSetHessianRoutine(Tao t, Mat H, Mat P, PetscErrorCode (*f)(Tao, Vec, Mat, Mat, void *), void *c)
361d71ae5a4SJacob Faibussowitsch {
3629371c9d4SSatish Balay   return TaoSetHessian(t, H, P, f, c);
3639371c9d4SSatish Balay }
364a82e8c82SStefano Zampini 
365a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoSetGradientNorm(Tao, Mat);
366a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoGetGradientNorm(Tao, Mat *);
367414d97d3SAlp Dener PETSC_EXTERN PetscErrorCode TaoSetLMVMMatrix(Tao, Mat);
368f5766c09SAlp Dener PETSC_EXTERN PetscErrorCode TaoGetLMVMMatrix(Tao, Mat *);
369414d97d3SAlp Dener PETSC_EXTERN PetscErrorCode TaoSetRecycleHistory(Tao, PetscBool);
370414d97d3SAlp Dener PETSC_EXTERN PetscErrorCode TaoGetRecycleHistory(Tao, PetscBool *);
371a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMSetH0(Tao, Mat);
372a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMGetH0(Tao, Mat *);
373a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMGetH0KSP(Tao, KSP *);
374b39c12a9SAlp Dener PETSC_EXTERN PetscErrorCode TaoLMVMRecycle(Tao, PetscBool);
3754a48860cSAlp Dener PETSC_EXTERN PetscErrorCode TaoSetResidualRoutine(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *);
376737f463aSAlp Dener PETSC_EXTERN PetscErrorCode TaoSetResidualWeights(Tao, Vec, PetscInt, PetscInt *, PetscInt *, PetscReal *);
377441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConstraintsRoutine(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *);
378441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInequalityConstraintsRoutine(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *);
379441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetEqualityConstraintsRoutine(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *);
3804ffbe8acSAlp Dener PETSC_EXTERN PetscErrorCode TaoSetJacobianResidualRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *);
381ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *);
382ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianStateRoutine(Tao, Mat, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, Mat, void *), void *);
38394ab13aaSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianDesignRoutine(Tao, Mat, PetscErrorCode (*)(Tao, Vec, Mat, void *), void *);
384ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianInequalityRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *);
385ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianEqualityRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *);
38621ec2d5cSBarry Smith 
387a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoPythonSetType(Tao, const char[]);
388ebead697SStefano Zampini PETSC_EXTERN PetscErrorCode TaoPythonGetType(Tao, const char *[]);
389a82e8c82SStefano Zampini 
39083a0a5c3SToby Isaac PETSC_EXTERN PetscErrorCode TaoShellSetSolve(Tao, PetscErrorCode (*)(Tao));
39183a0a5c3SToby Isaac PETSC_EXTERN PetscErrorCode TaoShellSetContext(Tao, void *);
3923ec1f749SStefano Zampini PETSC_EXTERN PetscErrorCode TaoShellGetContext(Tao, void *);
39383a0a5c3SToby Isaac 
394edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 11, 0, "TaoSetResidualRoutine()", ) static inline PetscErrorCode TaoSetSeparableObjectiveRoutine(Tao tao, Vec res, PetscErrorCode (*func)(Tao, Vec, Vec, void *), void *ctx)
395d71ae5a4SJacob Faibussowitsch {
3969371c9d4SSatish Balay   return TaoSetResidualRoutine(tao, res, func, ctx);
3979371c9d4SSatish Balay }
398edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 11, 0, "TaoSetResidualWeights()", ) static inline PetscErrorCode TaoSetSeparableObjectiveWeights(Tao tao, Vec sigma_v, PetscInt n, PetscInt *rows, PetscInt *cols, PetscReal *vals)
399d71ae5a4SJacob Faibussowitsch {
4009371c9d4SSatish Balay   return TaoSetResidualWeights(tao, sigma_v, n, rows, cols, vals);
4019371c9d4SSatish Balay }
402737f463aSAlp Dener 
403441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetStateDesignIS(Tao, IS, IS);
40421ec2d5cSBarry Smith 
405441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeObjective(Tao, Vec, PetscReal *);
4064a48860cSAlp Dener PETSC_EXTERN PetscErrorCode TaoComputeResidual(Tao, Vec, Vec);
407412cdd55SHong Zhang PETSC_EXTERN PetscErrorCode TaoTestGradient(Tao, Vec, Vec);
408441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeGradient(Tao, Vec, Vec);
409441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeObjectiveAndGradient(Tao, Vec, PetscReal *, Vec);
410441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeConstraints(Tao, Vec, Vec);
411441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeInequalityConstraints(Tao, Vec, Vec);
412441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeEqualityConstraints(Tao, Vec, Vec);
413441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeGradient(Tao, Vec, Vec, void *);
414441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsObjectiveDefined(Tao, PetscBool *);
415441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsGradientDefined(Tao, PetscBool *);
416441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsObjectiveAndGradientDefined(Tao, PetscBool *);
41721ec2d5cSBarry Smith 
418edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 11, 0, "TaoComputeResidual()", ) static inline PetscErrorCode TaoComputeSeparableObjective(Tao tao, Vec X, Vec F)
419d71ae5a4SJacob Faibussowitsch {
4209371c9d4SSatish Balay   return TaoComputeResidual(tao, X, F);
4219371c9d4SSatish Balay }
4224a48860cSAlp Dener 
42309baa881SHong Zhang PETSC_EXTERN PetscErrorCode TaoTestHessian(Tao);
424ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeHessian(Tao, Vec, Mat, Mat);
425737f463aSAlp Dener PETSC_EXTERN PetscErrorCode TaoComputeResidualJacobian(Tao, Vec, Mat, Mat);
426ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobian(Tao, Vec, Mat, Mat);
427ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianState(Tao, Vec, Mat, Mat, Mat);
428ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianEquality(Tao, Vec, Mat, Mat);
429ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianInequality(Tao, Vec, Mat, Mat);
43094ab13aaSBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianDesign(Tao, Vec, Mat);
43121ec2d5cSBarry Smith 
432ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessian(Tao, Vec, Mat, Mat, void *);
433ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessianColor(Tao, Vec, Mat, Mat, void *);
434f4c1ad5cSStefano Zampini PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessianMFFD(Tao, Vec, Mat, Mat, void *);
435441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeDualVariables(Tao, Vec, Vec);
436441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetVariableBounds(Tao, Vec, Vec);
437441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetVariableBounds(Tao, Vec *, Vec *);
438441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetDualVariables(Tao, Vec *, Vec *);
439441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInequalityBounds(Tao, Vec, Vec);
440441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetInequalityBounds(Tao, Vec *, Vec *);
441441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetVariableBoundsRoutine(Tao, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *);
442441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeVariableBounds(Tao);
44321ec2d5cSBarry Smith 
444e52336cbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetTolerances(Tao, PetscReal *, PetscReal *, PetscReal *);
445e52336cbSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetTolerances(Tao, PetscReal, PetscReal, PetscReal);
446441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetConstraintTolerances(Tao, PetscReal *, PetscReal *);
447441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConstraintTolerances(Tao, PetscReal, PetscReal);
448441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetFunctionLowerBound(Tao, PetscReal);
449441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInitialTrustRegionRadius(Tao, PetscReal);
450441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMaximumIterations(Tao, PetscInt);
451441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMaximumFunctionEvaluations(Tao, PetscInt);
452441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetFunctionLowerBound(Tao, PetscReal *);
453441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetInitialTrustRegionRadius(Tao, PetscReal *);
454441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetCurrentTrustRegionRadius(Tao, PetscReal *);
455441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetMaximumIterations(Tao, PetscInt *);
456770232b9SCe Qin PETSC_EXTERN PetscErrorCode TaoGetCurrentFunctionEvaluations(Tao, PetscInt *);
457441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetMaximumFunctionEvaluations(Tao, PetscInt *);
4588931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetIterationNumber(Tao, PetscInt *);
4598931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoSetIterationNumber(Tao, PetscInt);
4608931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetTotalIterationNumber(Tao, PetscInt *);
4618931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoSetTotalIterationNumber(Tao, PetscInt);
46279f5d8caSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetResidualNorm(Tao, PetscReal *);
4638931d482SJason Sarich 
464b54963c9SStefano Zampini PETSC_EXTERN PetscErrorCode TaoAppendOptionsPrefix(Tao, const char[]);
465b54963c9SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetOptionsPrefix(Tao, const char *[]);
466441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoResetStatistics(Tao);
4678fcddce6SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetUpdate(Tao, PetscErrorCode (*)(Tao, PetscInt, void *), void *);
46821ec2d5cSBarry Smith 
469441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetKSP(Tao, KSP *);
470025e9500SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetLinearSolveIterations(Tao, PetscInt *);
4710f0abf79SStefano Zampini PETSC_EXTERN PetscErrorCode TaoKSPSetUseEW(Tao, PetscBool);
472235fd6e6SBarry Smith 
473235fd6e6SBarry Smith #include <petsctaolinesearch.h>
474b54963c9SStefano Zampini 
475441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetLineSearch(Tao, TaoLineSearch *);
47621ec2d5cSBarry Smith 
477ae93cb3cSJason Sarich PETSC_EXTERN PetscErrorCode TaoSetConvergenceHistory(Tao, PetscReal *, PetscReal *, PetscReal *, PetscInt *, PetscInt, PetscBool);
478ae93cb3cSJason Sarich PETSC_EXTERN PetscErrorCode TaoGetConvergenceHistory(Tao, PetscReal **, PetscReal **, PetscReal **, PetscInt **, PetscInt *);
479441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMonitor(Tao, PetscErrorCode (*)(Tao, void *), void *, PetscErrorCode (*)(void **));
480441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoCancelMonitors(Tao);
48198ea980cSBarry Smith PETSC_EXTERN PetscErrorCode TaoMonitorDefault(Tao, void *);
482edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 9, 0, "TaoMonitorDefault()", ) static inline PetscErrorCode TaoDefaultMonitor(Tao tao, void *ctx)
483d71ae5a4SJacob Faibussowitsch {
4849371c9d4SSatish Balay   return TaoMonitorDefault(tao, ctx);
4859371c9d4SSatish Balay }
4868d5ead36SAlp Dener PETSC_EXTERN PetscErrorCode TaoDefaultGMonitor(Tao, void *);
487441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultSMonitor(Tao, void *);
488441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultCMonitor(Tao, void *);
489441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSolutionMonitor(Tao, void *);
490737f463aSAlp Dener PETSC_EXTERN PetscErrorCode TaoResidualMonitor(Tao, void *);
491441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGradientMonitor(Tao, void *);
492441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoStepDirectionMonitor(Tao, void *);
493441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDrawSolutionMonitor(Tao, void *);
494441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDrawStepMonitor(Tao, void *);
495441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDrawGradientMonitor(Tao, void *);
496441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoAddLineSearchCounts(Tao);
49721ec2d5cSBarry Smith 
498441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultConvergenceTest(Tao, void *);
499441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConvergenceTest(Tao, PetscErrorCode (*)(Tao, void *), void *);
50021ec2d5cSBarry Smith 
501441846f8SBarry Smith PETSC_EXTERN PetscErrorCode          TaoLCLSetStateDesignIS(Tao, IS, IS);
5023ecd9318SAlp Dener PETSC_EXTERN PetscErrorCode          TaoMonitor(Tao, PetscInt, PetscReal, PetscReal, PetscReal, PetscReal);
503e882e171SHong Zhang typedef struct _n_TaoMonitorDrawCtx *TaoMonitorDrawCtx;
504e882e171SHong Zhang PETSC_EXTERN PetscErrorCode          TaoMonitorDrawCtxCreate(MPI_Comm, const char[], const char[], int, int, int, int, PetscInt, TaoMonitorDrawCtx *);
505e882e171SHong Zhang PETSC_EXTERN PetscErrorCode          TaoMonitorDrawCtxDestroy(TaoMonitorDrawCtx *);
506737f463aSAlp Dener 
5078e85b1b3SXiang Huang PETSC_EXTERN PetscErrorCode TaoBRGNGetSubsolver(Tao, Tao *);
508a3c390cfSAlp Dener PETSC_EXTERN PetscErrorCode TaoBRGNSetRegularizerObjectiveAndGradientRoutine(Tao, PetscErrorCode (*)(Tao, Vec, PetscReal *, Vec, void *), void *);
509a3c390cfSAlp Dener PETSC_EXTERN PetscErrorCode TaoBRGNSetRegularizerHessianRoutine(Tao, Mat, PetscErrorCode (*)(Tao, Vec, Mat, void *), void *);
510a3c390cfSAlp Dener PETSC_EXTERN PetscErrorCode TaoBRGNSetRegularizerWeight(Tao, PetscReal);
5118ac80d48SXiang Huang PETSC_EXTERN PetscErrorCode TaoBRGNSetL1SmoothEpsilon(Tao, PetscReal);
5128e85b1b3SXiang Huang PETSC_EXTERN PetscErrorCode TaoBRGNSetDictionaryMatrix(Tao, Mat);
513cd1c4666STristan Konolige PETSC_EXTERN PetscErrorCode TaoBRGNGetDampingVector(Tao, Vec *);
514d6e07cdcSHong Zhang PETSC_EXTERN PetscErrorCode TaoBNCGSetType(Tao, TaoBNCGType);
515d6e07cdcSHong Zhang PETSC_EXTERN PetscErrorCode TaoBNCGGetType(Tao, TaoBNCGType *);
5166285c0a3SHansol  Suh 
5176285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMGetMisfitSubsolver(Tao, Tao *);
5186285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMGetRegularizationSubsolver(Tao, Tao *);
5196285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMGetDualVector(Tao, Vec *);
5206285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMGetSpectralPenalty(Tao, PetscReal *);
5216285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetSpectralPenalty(Tao, PetscReal);
5226285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoGetADMMParentTao(Tao, Tao *);
5236285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetConstraintVectorRHS(Tao, Vec);
5246285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerCoefficient(Tao, PetscReal);
525b4623fecSHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMGetRegularizerCoefficient(Tao, PetscReal *);
5266285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitConstraintJacobian(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *);
5276285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerConstraintJacobian(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *);
5286285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerHessianRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *);
5296285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerObjectiveAndGradientRoutine(Tao, PetscErrorCode (*)(Tao, Vec, PetscReal *, Vec, void *), void *);
5306285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitHessianRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *);
5316285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitObjectiveAndGradientRoutine(Tao, PetscErrorCode (*)(Tao, Vec, PetscReal *, Vec, void *), void *);
5326285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitHessianChangeStatus(Tao, PetscBool);
5336285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegHessianChangeStatus(Tao, PetscBool);
5346285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMinimumSpectralPenalty(Tao, PetscReal);
5356285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerType(Tao, TaoADMMRegularizerType);
5366285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMGetRegularizerType(Tao, TaoADMMRegularizerType *);
5376285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetUpdateType(Tao, TaoADMMUpdateType);
5386285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMGetUpdateType(Tao, TaoADMMUpdateType *);
539661095bbSAlp Dener 
540661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMGetType(Tao, TaoALMMType *);
541661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMSetType(Tao, TaoALMMType);
542661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMGetSubsolver(Tao, Tao *);
543661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMSetSubsolver(Tao, Tao);
544661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMGetMultipliers(Tao, Vec *);
545661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMSetMultipliers(Tao, Vec);
546661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMGetPrimalIS(Tao, IS *, IS *);
547661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMGetDualIS(Tao, IS *, IS *);
5483b242c63SJacob Faibussowitsch 
5493b242c63SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode TaoVecGetSubVec(Vec, IS, TaoSubsetType, PetscReal, Vec *);
5503b242c63SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode TaoMatGetSubMat(Mat, IS, Vec, TaoSubsetType, Mat *);
5513b242c63SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode TaoGradientNorm(Tao, Vec, NormType, PetscReal *);
5523b242c63SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode TaoEstimateActiveBounds(Vec, Vec, Vec, Vec, Vec, Vec, PetscReal, PetscReal *, IS *, IS *, IS *, IS *, IS *);
5533b242c63SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode TaoBoundStep(Vec, Vec, Vec, IS, IS, IS, PetscReal, Vec);
5543b242c63SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode TaoBoundSolution(Vec, Vec, Vec, PetscReal, PetscInt *, Vec);
555