xref: /petsc/include/petsctao.h (revision cc4c1da905d89950b196b027190941013bd3e15a)
1a4963045SJacob 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 
14795bd0b28SBarry Smith   Values:
148af27ebaaSBarry Smith +  TAO_BNCG_GD         - basic gradient descent, no CG update
149af27ebaaSBarry Smith .  TAO_BNCG_PCGD       - preconditioned/scaled gradient descent
150af27ebaaSBarry Smith .  TAO_BNCG_HS         - Hestenes-Stiefel
151af27ebaaSBarry Smith .  TAO_BNCG_FR         - Fletcher-Reeves
152af27ebaaSBarry Smith .  TAO_BNCG_PRP        - Polak-Ribiere-Polyak (PRP)
153af27ebaaSBarry Smith .  TAO_BNCG_PRP_PLUS   - Polak-Ribiere-Polyak "plus" (PRP+)
154af27ebaaSBarry Smith .  TAO_BNCG_DY         - Dai-Yuan
155af27ebaaSBarry Smith .  TAO_BNCG_HZ         - Hager-Zhang (CG_DESCENT 5.3)
156af27ebaaSBarry Smith .  TAO_BNCG_DK         - Dai-Kou (2013)
157af27ebaaSBarry Smith .  TAO_BNCG_KD         - Kou-Dai (2015)
158af27ebaaSBarry Smith .  TAO_BNCG_SSML_BFGS  - Self-Scaling Memoryless BFGS (Perry-Shanno)
159af27ebaaSBarry Smith .  TAO_BNCG_SSML_DFP   - Self-Scaling Memoryless DFP
160af27ebaaSBarry Smith -  TAO_BNCG_SSML_BRDN  - Self-Scaling Memoryless (Symmetric) Broyden
161af27ebaaSBarry Smith 
162d6e07cdcSHong Zhang   Level: advanced
163d6e07cdcSHong Zhang 
164d6e07cdcSHong Zhang .seealso: `Tao`, `TAOBNCG`, `TaoBNCGSetType()`, `TaoBNCGGetType()`
165d6e07cdcSHong Zhang E*/
166d6e07cdcSHong Zhang 
167d6e07cdcSHong Zhang typedef enum {
168d6e07cdcSHong Zhang   TAO_BNCG_GD,
169d6e07cdcSHong Zhang   TAO_BNCG_PCGD,
170d6e07cdcSHong Zhang   TAO_BNCG_HS,
171d6e07cdcSHong Zhang   TAO_BNCG_FR,
172d6e07cdcSHong Zhang   TAO_BNCG_PRP,
173d6e07cdcSHong Zhang   TAO_BNCG_PRP_PLUS,
174d6e07cdcSHong Zhang   TAO_BNCG_DY,
175d6e07cdcSHong Zhang   TAO_BNCG_HZ,
176d6e07cdcSHong Zhang   TAO_BNCG_DK,
177d6e07cdcSHong Zhang   TAO_BNCG_KD,
178d6e07cdcSHong Zhang   TAO_BNCG_SSML_BFGS,
179d6e07cdcSHong Zhang   TAO_BNCG_SSML_DFP,
180d6e07cdcSHong Zhang   TAO_BNCG_SSML_BRDN
181d6e07cdcSHong Zhang } TaoBNCGType;
182d6e07cdcSHong Zhang PETSC_EXTERN const char *const TaoBNCGTypes[];
183d6e07cdcSHong Zhang 
1841eb8069cSJason Sarich /*J
18587497f52SBarry Smith   TaoType - String with the name of a `Tao` method
1861eb8069cSJason Sarich 
18747450a7bSBarry Smith   Values:
18847450a7bSBarry Smith + `TAONLS`      - nls Newton's method with line search for unconstrained minimization
18947450a7bSBarry Smith . `TAONTR`      - ntr Newton's method with trust region for unconstrained minimization
19047450a7bSBarry Smith . `TAONTL`      - ntl Newton's method with trust region, line search for unconstrained minimization
19147450a7bSBarry Smith . `TAOLMVM`     - lmvm Limited memory variable metric method for unconstrained minimization
19247450a7bSBarry Smith . `TAOCG`       - cg Nonlinear conjugate gradient method for unconstrained minimization
19347450a7bSBarry Smith . `TAONM`       - nm Nelder-Mead algorithm for derivate-free unconstrained minimization
19447450a7bSBarry Smith . `TAOTRON`     - tron Newton Trust Region method for bound constrained minimization
19547450a7bSBarry Smith . `TAOGPCG`     - gpcg Newton Trust Region method for quadratic bound constrained minimization
19647450a7bSBarry Smith . `TAOBLMVM`    - blmvm Limited memory variable metric method for bound constrained minimization
19747450a7bSBarry Smith . `TAOLCL`      - lcl Linearly constrained Lagrangian method for pde-constrained minimization
19816a05f60SBarry Smith - `TAOPOUNDERS` - Pounders Model-based algorithm for nonlinear least squares
19947450a7bSBarry Smith 
2001eb8069cSJason Sarich   Level: beginner
2011eb8069cSJason Sarich 
2021cc06b55SBarry Smith .seealso: [](doc_taosolve), [](ch_tao), `Tao`, `TaoCreate()`, `TaoSetType()`
2031eb8069cSJason Sarich J*/
204b625d6c7SJed Brown typedef const char *TaoType;
20558417fe7SBarry Smith #define TAOLMVM     "lmvm"
20658417fe7SBarry Smith #define TAONLS      "nls"
20758417fe7SBarry Smith #define TAONTR      "ntr"
20858417fe7SBarry Smith #define TAONTL      "ntl"
20958417fe7SBarry Smith #define TAOCG       "cg"
21058417fe7SBarry Smith #define TAOTRON     "tron"
21158417fe7SBarry Smith #define TAOOWLQN    "owlqn"
21258417fe7SBarry Smith #define TAOBMRM     "bmrm"
21358417fe7SBarry Smith #define TAOBLMVM    "blmvm"
2146b591159SAlp Dener #define TAOBQNLS    "bqnls"
215ac9112b8SAlp Dener #define TAOBNCG     "bncg"
216eb910715SAlp Dener #define TAOBNLS     "bnls"
217fed79b8eSAlp Dener #define TAOBNTR     "bntr"
218c14b763aSAlp Dener #define TAOBNTL     "bntl"
219e0ed867bSAlp Dener #define TAOBQNKLS   "bqnkls"
220e0ed867bSAlp Dener #define TAOBQNKTR   "bqnktr"
221e0ed867bSAlp Dener #define TAOBQNKTL   "bqnktl"
22258417fe7SBarry Smith #define TAOBQPIP    "bqpip"
22358417fe7SBarry Smith #define TAOGPCG     "gpcg"
22458417fe7SBarry Smith #define TAONM       "nm"
22558417fe7SBarry Smith #define TAOPOUNDERS "pounders"
226737f463aSAlp Dener #define TAOBRGN     "brgn"
22758417fe7SBarry Smith #define TAOLCL      "lcl"
22858417fe7SBarry Smith #define TAOSSILS    "ssils"
22958417fe7SBarry Smith #define TAOSSFLS    "ssfls"
23058417fe7SBarry Smith #define TAOASILS    "asils"
23158417fe7SBarry Smith #define TAOASFLS    "asfls"
23258417fe7SBarry Smith #define TAOIPM      "ipm"
233aad13602SShrirang Abhyankar #define TAOPDIPM    "pdipm"
23483a0a5c3SToby Isaac #define TAOSHELL    "shell"
2356285c0a3SHansol  Suh #define TAOADMM     "admm"
236661095bbSAlp Dener #define TAOALMM     "almm"
237a82e8c82SStefano Zampini #define TAOPYTHON   "python"
238f4f59681SStefano Zampini #define TAOSNES     "snes"
23958417fe7SBarry Smith 
240441846f8SBarry Smith PETSC_EXTERN PetscClassId      TAO_CLASSID;
241441846f8SBarry Smith PETSC_EXTERN PetscFunctionList TaoList;
24221ec2d5cSBarry Smith 
243a35d58b8SBarry Smith /*E
24416a05f60SBarry Smith     TaoConvergedReason - reason a `Tao` optimizer was said to have converged or diverged
245a35d58b8SBarry Smith 
24647450a7bSBarry Smith    Values:
247af27ebaaSBarry Smith +  `TAO_CONVERGED_GATOL`       - $||g(X)|| < gatol$
248af27ebaaSBarry Smith .  `TAO_CONVERGED_GRTOL`       - $||g(X)|| / f(X)  < grtol$
249af27ebaaSBarry Smith .  `TAO_CONVERGED_GTTOL`       - $||g(X)|| / ||g(X0)|| < gttol$
25047450a7bSBarry Smith .  `TAO_CONVERGED_STEPTOL`     - step size smaller than tolerance
251af27ebaaSBarry Smith .  `TAO_CONVERGED_MINF`        - $F < F_min$
25247450a7bSBarry Smith .  `TAO_CONVERGED_USER`        - the user indicates the optimization has succeeded
25347450a7bSBarry Smith .  `TAO_DIVERGED_MAXITS`       - the maximum number of iterations allowed has been achieved
25447450a7bSBarry Smith .  `TAO_DIVERGED_NAN`          - not a number appeared in the computations
25547450a7bSBarry Smith .  `TAO_DIVERGED_MAXFCN`       - the maximum number of function evaluations has been computed
25647450a7bSBarry Smith .  `TAO_DIVERGED_LS_FAILURE`   - a linesearch failed
25747450a7bSBarry Smith .  `TAO_DIVERGED_TR_REDUCTION` - trust region failure
25847450a7bSBarry Smith .  `TAO_DIVERGED_USER`         - the user has indicated the optimization has failed
25947450a7bSBarry Smith -  `TAO_CONTINUE_ITERATING`    - the optimization is still running, `TaoSolve()`
26047450a7bSBarry Smith 
26147450a7bSBarry Smith    where
26247450a7bSBarry Smith +  X            - current solution
26347450a7bSBarry Smith .  X0           - initial guess
26447450a7bSBarry Smith .  f(X)         - current function value
26547450a7bSBarry Smith .  f(X*)        - true solution (estimated)
26647450a7bSBarry Smith .  g(X)         - current gradient
26747450a7bSBarry Smith .  its          - current iterate number
26847450a7bSBarry Smith .  maxits       - maximum number of iterates
26947450a7bSBarry Smith .  fevals       - number of function evaluations
27047450a7bSBarry Smith -  max_funcsals - maximum number of function evaluations
27147450a7bSBarry Smith 
272a35d58b8SBarry Smith    Level: beginner
273a35d58b8SBarry Smith 
27447450a7bSBarry Smith    Note:
27547450a7bSBarry Smith    The two most common reasons for divergence are  an incorrectly coded or computed gradient or Hessian failure or lack of convergence
27647450a7bSBarry 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).
277a35d58b8SBarry Smith 
27847450a7bSBarry Smith    Developer Note:
27947450a7bSBarry Smith    The names in `KSPConvergedReason`, `SNESConvergedReason`, and `TaoConvergedReason` should be uniformized
280a35d58b8SBarry Smith 
2811cc06b55SBarry Smith .seealso: [](ch_tao), `Tao`, `TaoSolve()`, `TaoGetConvergedReason()`, `KSPConvergedReason`, `SNESConvergedReason`
282a35d58b8SBarry Smith E*/
28321ec2d5cSBarry Smith typedef enum {               /* converged */
28421ec2d5cSBarry Smith   TAO_CONVERGED_GATOL   = 3, /* ||g(X)|| < gatol */
28521ec2d5cSBarry Smith   TAO_CONVERGED_GRTOL   = 4, /* ||g(X)|| / f(X)  < grtol */
28621ec2d5cSBarry Smith   TAO_CONVERGED_GTTOL   = 5, /* ||g(X)|| / ||g(X0)|| < gttol */
28721ec2d5cSBarry Smith   TAO_CONVERGED_STEPTOL = 6, /* step size small */
28821ec2d5cSBarry Smith   TAO_CONVERGED_MINF    = 7, /* F < F_min */
28921ec2d5cSBarry Smith   TAO_CONVERGED_USER    = 8, /* User defined */
29021ec2d5cSBarry Smith   /* diverged */
29121ec2d5cSBarry Smith   TAO_DIVERGED_MAXITS       = -2,
29221ec2d5cSBarry Smith   TAO_DIVERGED_NAN          = -4,
29321ec2d5cSBarry Smith   TAO_DIVERGED_MAXFCN       = -5,
29421ec2d5cSBarry Smith   TAO_DIVERGED_LS_FAILURE   = -6,
29521ec2d5cSBarry Smith   TAO_DIVERGED_TR_REDUCTION = -7,
29621ec2d5cSBarry Smith   TAO_DIVERGED_USER         = -8, /* User defined */
29721ec2d5cSBarry Smith   /* keep going */
2989371c9d4SSatish Balay   TAO_CONTINUE_ITERATING = 0
2999371c9d4SSatish Balay } TaoConvergedReason;
30021ec2d5cSBarry Smith 
301e4cb33bbSBarry Smith PETSC_EXTERN const char **TaoConvergedReasons;
30221ec2d5cSBarry Smith 
30321ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoInitializePackage(void);
30421ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoFinalizePackage(void);
305441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoCreate(MPI_Comm, Tao *);
306441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetFromOptions(Tao);
307441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetUp(Tao);
308b625d6c7SJed Brown PETSC_EXTERN PetscErrorCode TaoSetType(Tao, TaoType);
309b625d6c7SJed Brown PETSC_EXTERN PetscErrorCode TaoGetType(Tao, TaoType *);
310441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetApplicationContext(Tao, void *);
311441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetApplicationContext(Tao, void *);
312441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDestroy(Tao *);
31321ec2d5cSBarry Smith 
314441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetOptionsPrefix(Tao, const char[]);
315441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoView(Tao, PetscViewer);
316fe2efc57SMark PETSC_EXTERN PetscErrorCode TaoViewFromOptions(Tao, PetscObject, const char[]);
31721ec2d5cSBarry Smith 
318441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSolve(Tao);
31921ec2d5cSBarry Smith 
320441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoRegister(const char[], PetscErrorCode (*)(Tao));
321441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoRegisterDestroy(void);
32221ec2d5cSBarry Smith 
323e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetConvergedReason(Tao, TaoConvergedReason *);
324e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetSolutionStatus(Tao, PetscInt *, PetscReal *, PetscReal *, PetscReal *, PetscReal *, TaoConvergedReason *);
325e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConvergedReason(Tao, TaoConvergedReason);
326a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetSolution(Tao, Vec);
327a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetSolution(Tao, Vec *);
328a82e8c82SStefano Zampini 
329a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetObjective(Tao, PetscErrorCode (*)(Tao, Vec, PetscReal *, void *), void *);
330a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetObjective(Tao, PetscErrorCode (**)(Tao, Vec, PetscReal *, void *), void **);
331a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetGradient(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *);
332a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetGradient(Tao, Vec *, PetscErrorCode (**)(Tao, Vec, Vec, void *), void **);
333a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetObjectiveAndGradient(Tao, Vec, PetscErrorCode (*)(Tao, Vec, PetscReal *, Vec, void *), void *);
334a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetObjectiveAndGradient(Tao, Vec *, PetscErrorCode (**)(Tao, Vec, PetscReal *, Vec, void *), void **);
335a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetHessian(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *);
336a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetHessian(Tao, Mat *, Mat *, PetscErrorCode (**)(Tao, Vec, Mat, Mat, void *), void **);
337a82e8c82SStefano Zampini 
338a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoSetGradientNorm(Tao, Mat);
339a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoGetGradientNorm(Tao, Mat *);
340414d97d3SAlp Dener PETSC_EXTERN PetscErrorCode TaoSetLMVMMatrix(Tao, Mat);
341f5766c09SAlp Dener PETSC_EXTERN PetscErrorCode TaoGetLMVMMatrix(Tao, Mat *);
342414d97d3SAlp Dener PETSC_EXTERN PetscErrorCode TaoSetRecycleHistory(Tao, PetscBool);
343414d97d3SAlp Dener PETSC_EXTERN PetscErrorCode TaoGetRecycleHistory(Tao, PetscBool *);
344a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMSetH0(Tao, Mat);
345a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMGetH0(Tao, Mat *);
346a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMGetH0KSP(Tao, KSP *);
347b39c12a9SAlp Dener PETSC_EXTERN PetscErrorCode TaoLMVMRecycle(Tao, PetscBool);
3484a48860cSAlp Dener PETSC_EXTERN PetscErrorCode TaoSetResidualRoutine(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *);
349737f463aSAlp Dener PETSC_EXTERN PetscErrorCode TaoSetResidualWeights(Tao, Vec, PetscInt, PetscInt *, PetscInt *, PetscReal *);
350441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConstraintsRoutine(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *);
351441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInequalityConstraintsRoutine(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *);
352441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetEqualityConstraintsRoutine(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *);
3534ffbe8acSAlp Dener PETSC_EXTERN PetscErrorCode TaoSetJacobianResidualRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *);
354ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *);
355ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianStateRoutine(Tao, Mat, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, Mat, void *), void *);
35694ab13aaSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianDesignRoutine(Tao, Mat, PetscErrorCode (*)(Tao, Vec, Mat, void *), void *);
357ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianInequalityRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *);
358ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianEqualityRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *);
35921ec2d5cSBarry Smith 
360a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoPythonSetType(Tao, const char[]);
361ebead697SStefano Zampini PETSC_EXTERN PetscErrorCode TaoPythonGetType(Tao, const char *[]);
362a82e8c82SStefano Zampini 
36383a0a5c3SToby Isaac PETSC_EXTERN PetscErrorCode TaoShellSetSolve(Tao, PetscErrorCode (*)(Tao));
36483a0a5c3SToby Isaac PETSC_EXTERN PetscErrorCode TaoShellSetContext(Tao, void *);
3653ec1f749SStefano Zampini PETSC_EXTERN PetscErrorCode TaoShellGetContext(Tao, void *);
36683a0a5c3SToby Isaac 
367441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetStateDesignIS(Tao, IS, IS);
36821ec2d5cSBarry Smith 
369441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeObjective(Tao, Vec, PetscReal *);
3704a48860cSAlp Dener PETSC_EXTERN PetscErrorCode TaoComputeResidual(Tao, Vec, Vec);
371412cdd55SHong Zhang PETSC_EXTERN PetscErrorCode TaoTestGradient(Tao, Vec, Vec);
372441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeGradient(Tao, Vec, Vec);
373441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeObjectiveAndGradient(Tao, Vec, PetscReal *, Vec);
374441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeConstraints(Tao, Vec, Vec);
375441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeInequalityConstraints(Tao, Vec, Vec);
376441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeEqualityConstraints(Tao, Vec, Vec);
377441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeGradient(Tao, Vec, Vec, void *);
378441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsObjectiveDefined(Tao, PetscBool *);
379441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsGradientDefined(Tao, PetscBool *);
380441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsObjectiveAndGradientDefined(Tao, PetscBool *);
38121ec2d5cSBarry Smith 
38209baa881SHong Zhang PETSC_EXTERN PetscErrorCode TaoTestHessian(Tao);
383ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeHessian(Tao, Vec, Mat, Mat);
384737f463aSAlp Dener PETSC_EXTERN PetscErrorCode TaoComputeResidualJacobian(Tao, Vec, Mat, Mat);
385ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobian(Tao, Vec, Mat, Mat);
386ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianState(Tao, Vec, Mat, Mat, Mat);
387ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianEquality(Tao, Vec, Mat, Mat);
388ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianInequality(Tao, Vec, Mat, Mat);
38994ab13aaSBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianDesign(Tao, Vec, Mat);
39021ec2d5cSBarry Smith 
391ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessian(Tao, Vec, Mat, Mat, void *);
392ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessianColor(Tao, Vec, Mat, Mat, void *);
393f4c1ad5cSStefano Zampini PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessianMFFD(Tao, Vec, Mat, Mat, void *);
394441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeDualVariables(Tao, Vec, Vec);
395441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetVariableBounds(Tao, Vec, Vec);
396441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetVariableBounds(Tao, Vec *, Vec *);
397441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetDualVariables(Tao, Vec *, Vec *);
398441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInequalityBounds(Tao, Vec, Vec);
399441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetInequalityBounds(Tao, Vec *, Vec *);
400441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetVariableBoundsRoutine(Tao, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *);
401441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeVariableBounds(Tao);
40221ec2d5cSBarry Smith 
403e52336cbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetTolerances(Tao, PetscReal *, PetscReal *, PetscReal *);
404e52336cbSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetTolerances(Tao, PetscReal, PetscReal, PetscReal);
405441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetConstraintTolerances(Tao, PetscReal *, PetscReal *);
406441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConstraintTolerances(Tao, PetscReal, PetscReal);
407441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetFunctionLowerBound(Tao, PetscReal);
408441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInitialTrustRegionRadius(Tao, PetscReal);
409441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMaximumIterations(Tao, PetscInt);
410441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMaximumFunctionEvaluations(Tao, PetscInt);
411441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetFunctionLowerBound(Tao, PetscReal *);
412441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetInitialTrustRegionRadius(Tao, PetscReal *);
413441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetCurrentTrustRegionRadius(Tao, PetscReal *);
414441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetMaximumIterations(Tao, PetscInt *);
415770232b9SCe Qin PETSC_EXTERN PetscErrorCode TaoGetCurrentFunctionEvaluations(Tao, PetscInt *);
416441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetMaximumFunctionEvaluations(Tao, PetscInt *);
4178931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetIterationNumber(Tao, PetscInt *);
4188931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoSetIterationNumber(Tao, PetscInt);
4198931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetTotalIterationNumber(Tao, PetscInt *);
4208931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoSetTotalIterationNumber(Tao, PetscInt);
42179f5d8caSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetResidualNorm(Tao, PetscReal *);
4228931d482SJason Sarich 
423b54963c9SStefano Zampini PETSC_EXTERN PetscErrorCode TaoAppendOptionsPrefix(Tao, const char[]);
424b54963c9SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetOptionsPrefix(Tao, const char *[]);
425441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoResetStatistics(Tao);
4268fcddce6SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetUpdate(Tao, PetscErrorCode (*)(Tao, PetscInt, void *), void *);
42721ec2d5cSBarry Smith 
428441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetKSP(Tao, KSP *);
429025e9500SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetLinearSolveIterations(Tao, PetscInt *);
4300f0abf79SStefano Zampini PETSC_EXTERN PetscErrorCode TaoKSPSetUseEW(Tao, PetscBool);
431235fd6e6SBarry Smith 
432235fd6e6SBarry Smith #include <petsctaolinesearch.h>
433b54963c9SStefano Zampini 
434441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetLineSearch(Tao, TaoLineSearch *);
43521ec2d5cSBarry Smith 
436ae93cb3cSJason Sarich PETSC_EXTERN PetscErrorCode TaoSetConvergenceHistory(Tao, PetscReal *, PetscReal *, PetscReal *, PetscInt *, PetscInt, PetscBool);
437ae93cb3cSJason Sarich PETSC_EXTERN PetscErrorCode TaoGetConvergenceHistory(Tao, PetscReal **, PetscReal **, PetscReal **, PetscInt **, PetscInt *);
43810978b7dSBarry Smith PETSC_EXTERN PetscErrorCode TaoMonitorSet(Tao, PetscErrorCode (*)(Tao, void *), void *, PetscErrorCode (*)(void **));
439b2dc45ddSPierre Jolivet PETSC_EXTERN PetscErrorCode TaoMonitorCancel(Tao);
44098ea980cSBarry Smith PETSC_EXTERN PetscErrorCode TaoMonitorDefault(Tao, void *);
44110978b7dSBarry Smith PETSC_EXTERN PetscErrorCode TaoMonitorGlobalization(Tao, void *);
44210978b7dSBarry Smith PETSC_EXTERN PetscErrorCode TaoMonitorDefaultShort(Tao, void *);
44310978b7dSBarry Smith PETSC_EXTERN PetscErrorCode TaoMonitorConstraintNorm(Tao, void *);
44410978b7dSBarry Smith PETSC_EXTERN PetscErrorCode TaoMonitorSolution(Tao, void *);
44510978b7dSBarry Smith PETSC_EXTERN PetscErrorCode TaoMonitorResidual(Tao, void *);
44610978b7dSBarry Smith PETSC_EXTERN PetscErrorCode TaoMonitorGradient(Tao, void *);
44710978b7dSBarry Smith PETSC_EXTERN PetscErrorCode TaoMonitorStep(Tao, void *);
44810978b7dSBarry Smith PETSC_EXTERN PetscErrorCode TaoMonitorSolutionDraw(Tao, void *);
44910978b7dSBarry Smith PETSC_EXTERN PetscErrorCode TaoMonitorStepDraw(Tao, void *);
45010978b7dSBarry Smith PETSC_EXTERN PetscErrorCode TaoMonitorGradientDraw(Tao, void *);
451441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoAddLineSearchCounts(Tao);
45221ec2d5cSBarry Smith 
453441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultConvergenceTest(Tao, void *);
454441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConvergenceTest(Tao, PetscErrorCode (*)(Tao, void *), void *);
45521ec2d5cSBarry Smith 
456441846f8SBarry Smith PETSC_EXTERN PetscErrorCode          TaoLCLSetStateDesignIS(Tao, IS, IS);
4573ecd9318SAlp Dener PETSC_EXTERN PetscErrorCode          TaoMonitor(Tao, PetscInt, PetscReal, PetscReal, PetscReal, PetscReal);
458e882e171SHong Zhang typedef struct _n_TaoMonitorDrawCtx *TaoMonitorDrawCtx;
459e882e171SHong Zhang PETSC_EXTERN PetscErrorCode          TaoMonitorDrawCtxCreate(MPI_Comm, const char[], const char[], int, int, int, int, PetscInt, TaoMonitorDrawCtx *);
460e882e171SHong Zhang PETSC_EXTERN PetscErrorCode          TaoMonitorDrawCtxDestroy(TaoMonitorDrawCtx *);
461737f463aSAlp Dener 
4628e85b1b3SXiang Huang PETSC_EXTERN PetscErrorCode TaoBRGNGetSubsolver(Tao, Tao *);
463a3c390cfSAlp Dener PETSC_EXTERN PetscErrorCode TaoBRGNSetRegularizerObjectiveAndGradientRoutine(Tao, PetscErrorCode (*)(Tao, Vec, PetscReal *, Vec, void *), void *);
464a3c390cfSAlp Dener PETSC_EXTERN PetscErrorCode TaoBRGNSetRegularizerHessianRoutine(Tao, Mat, PetscErrorCode (*)(Tao, Vec, Mat, void *), void *);
465a3c390cfSAlp Dener PETSC_EXTERN PetscErrorCode TaoBRGNSetRegularizerWeight(Tao, PetscReal);
4668ac80d48SXiang Huang PETSC_EXTERN PetscErrorCode TaoBRGNSetL1SmoothEpsilon(Tao, PetscReal);
4678e85b1b3SXiang Huang PETSC_EXTERN PetscErrorCode TaoBRGNSetDictionaryMatrix(Tao, Mat);
468cd1c4666STristan Konolige PETSC_EXTERN PetscErrorCode TaoBRGNGetDampingVector(Tao, Vec *);
469d6e07cdcSHong Zhang PETSC_EXTERN PetscErrorCode TaoBNCGSetType(Tao, TaoBNCGType);
470d6e07cdcSHong Zhang PETSC_EXTERN PetscErrorCode TaoBNCGGetType(Tao, TaoBNCGType *);
4716285c0a3SHansol  Suh 
4726285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMGetMisfitSubsolver(Tao, Tao *);
4736285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMGetRegularizationSubsolver(Tao, Tao *);
4746285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMGetDualVector(Tao, Vec *);
4756285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMGetSpectralPenalty(Tao, PetscReal *);
4766285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetSpectralPenalty(Tao, PetscReal);
4776285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoGetADMMParentTao(Tao, Tao *);
4786285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetConstraintVectorRHS(Tao, Vec);
4796285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerCoefficient(Tao, PetscReal);
480b4623fecSHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMGetRegularizerCoefficient(Tao, PetscReal *);
4816285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitConstraintJacobian(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *);
4826285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerConstraintJacobian(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *);
4836285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerHessianRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *);
4846285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerObjectiveAndGradientRoutine(Tao, PetscErrorCode (*)(Tao, Vec, PetscReal *, Vec, void *), void *);
4856285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitHessianRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *);
4866285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitObjectiveAndGradientRoutine(Tao, PetscErrorCode (*)(Tao, Vec, PetscReal *, Vec, void *), void *);
4876285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitHessianChangeStatus(Tao, PetscBool);
4886285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegHessianChangeStatus(Tao, PetscBool);
4896285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMinimumSpectralPenalty(Tao, PetscReal);
4906285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerType(Tao, TaoADMMRegularizerType);
4916285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMGetRegularizerType(Tao, TaoADMMRegularizerType *);
4926285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetUpdateType(Tao, TaoADMMUpdateType);
4936285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMGetUpdateType(Tao, TaoADMMUpdateType *);
494661095bbSAlp Dener 
495661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMGetType(Tao, TaoALMMType *);
496661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMSetType(Tao, TaoALMMType);
497661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMGetSubsolver(Tao, Tao *);
498661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMSetSubsolver(Tao, Tao);
499661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMGetMultipliers(Tao, Vec *);
500661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMSetMultipliers(Tao, Vec);
501661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMGetPrimalIS(Tao, IS *, IS *);
502661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMGetDualIS(Tao, IS *, IS *);
5033b242c63SJacob Faibussowitsch 
5043b242c63SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode TaoVecGetSubVec(Vec, IS, TaoSubsetType, PetscReal, Vec *);
5053b242c63SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode TaoMatGetSubMat(Mat, IS, Vec, TaoSubsetType, Mat *);
5063b242c63SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode TaoGradientNorm(Tao, Vec, NormType, PetscReal *);
5073b242c63SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode TaoEstimateActiveBounds(Vec, Vec, Vec, Vec, Vec, Vec, PetscReal, PetscReal *, IS *, IS *, IS *, IS *, IS *);
5083b242c63SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode TaoBoundStep(Vec, Vec, Vec, IS, IS, IS, PetscReal, Vec);
5093b242c63SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode TaoBoundSolution(Vec, Vec, Vec, PetscReal, PetscInt *, Vec);
51010978b7dSBarry Smith 
511*cc4c1da9SBarry Smith PETSC_EXTERN PetscErrorCode MatCreateSubMatrixFree(Mat, IS, IS, Mat *);
512*cc4c1da9SBarry Smith 
51310978b7dSBarry Smith #include <petsctao_deprecations.h>
514