xref: /petsc/include/petsctao.h (revision 47450a7baf26d24688d7bf4590d13280814a31c3)
16524c165SJacob Faibussowitsch #ifndef PETSCTAO_H
23028902dSLisandro Dalcin #define PETSCTAO_H
321ec2d5cSBarry Smith 
4aad13602SShrirang Abhyankar #include <petscsnes.h>
521ec2d5cSBarry Smith 
6ac09b921SBarry Smith /* SUBMANSEC = Tao */
7ac09b921SBarry Smith 
8b54963c9SStefano Zampini PETSC_EXTERN PetscErrorCode VecFischer(Vec, Vec, Vec, Vec, Vec);
9b54963c9SStefano Zampini PETSC_EXTERN PetscErrorCode VecSFischer(Vec, Vec, Vec, Vec, PetscReal, Vec);
10b54963c9SStefano Zampini PETSC_EXTERN PetscErrorCode MatDFischer(Mat, Vec, Vec, Vec, Vec, Vec, Vec, Vec, Vec);
11b54963c9SStefano Zampini PETSC_EXTERN PetscErrorCode MatDSFischer(Mat, Vec, Vec, Vec, Vec, PetscReal, Vec, Vec, Vec, Vec, Vec);
128370d7cdSHansol Suh PETSC_EXTERN PetscErrorCode TaoSoftThreshold(Vec, PetscReal, PetscReal, Vec);
1321ec2d5cSBarry Smith 
1421ec2d5cSBarry Smith /*E
1565ba42b6SBarry Smith   TaoSubsetType - Type representing the way Tao handles active sets
1621ec2d5cSBarry Smith 
17*47450a7bSBarry Smith   Values:
1887497f52SBarry Smith + `TAO_SUBSET_SUBVEC` - Tao uses `MatCreateSubMatrix()` and `VecGetSubVector()`
1965ba42b6SBarry Smith . `TAO_SUBSET_MASK` - Matrices are zeroed out corresponding to active set entries
2065ba42b6SBarry Smith - `TAO_SUBSET_MATRIXFREE` - Same as `TAO_SUBSET_MASK` but it can be applied to matrix-free operators
2121ec2d5cSBarry Smith 
22*47450a7bSBarry Smith   Options database Key:
23*47450a7bSBarry Smith . -different_hessian - Tao will use a copy of the Hessian operator for masking.  By default Tao will directly alter the Hessian operator.
24*47450a7bSBarry Smith 
251eb8069cSJason Sarich   Level: intermediate
2621ec2d5cSBarry Smith 
27*47450a7bSBarry Smith .seealso: [](chapter_tao), `Tao`, `TaoCreate()`, `TaoDestroy()`, `TaoSetType()`, `TaoType`
2821ec2d5cSBarry Smith E*/
299371c9d4SSatish Balay typedef enum {
309371c9d4SSatish Balay   TAO_SUBSET_SUBVEC,
319371c9d4SSatish Balay   TAO_SUBSET_MASK,
329371c9d4SSatish Balay   TAO_SUBSET_MATRIXFREE
339371c9d4SSatish Balay } TaoSubsetType;
3421ec2d5cSBarry Smith PETSC_EXTERN const char *const TaoSubsetTypes[];
3565ba42b6SBarry Smith 
361eb8069cSJason Sarich /*S
371eb8069cSJason Sarich      Tao - Abstract PETSc object that manages nonlinear optimization solves
381eb8069cSJason Sarich 
391eb8069cSJason Sarich    Level: advanced
401eb8069cSJason Sarich 
41*47450a7bSBarry Smith .seealso: [](chapter_tao), `Tao`, `TaoCreate()`, `TaoDestroy()`, `TaoSetType()`, `TaoType`
421eb8069cSJason Sarich S*/
4365ba42b6SBarry Smith typedef struct _p_Tao *Tao;
4421ec2d5cSBarry Smith 
456285c0a3SHansol  Suh /*E
4687497f52SBarry Smith      TaoADMMUpdateType - Determine spectral penalty update routine for Lagrange augmented term for `TAOADMM`.
476285c0a3SHansol  Suh 
486285c0a3SHansol  Suh   Level: advanced
496285c0a3SHansol  Suh 
50*47450a7bSBarry Smith .seealso: [](chapter_tao), `Tao`, `TAOADMM`, `TaoADMMSetUpdateType()`
516285c0a3SHansol  Suh E*/
529371c9d4SSatish Balay typedef enum {
539371c9d4SSatish Balay   TAO_ADMM_UPDATE_BASIC,
549371c9d4SSatish Balay   TAO_ADMM_UPDATE_ADAPTIVE,
559371c9d4SSatish Balay   TAO_ADMM_UPDATE_ADAPTIVE_RELAXED
569371c9d4SSatish Balay } TaoADMMUpdateType;
576285c0a3SHansol  Suh PETSC_EXTERN const char *const TaoADMMUpdateTypes[];
5865ba42b6SBarry Smith 
596285c0a3SHansol  Suh /*MC
606285c0a3SHansol  Suh      TAO_ADMM_UPDATE_BASIC - Use same spectral penalty set at the beginning. No update
616285c0a3SHansol  Suh 
626285c0a3SHansol  Suh   Level: advanced
636285c0a3SHansol  Suh 
6487497f52SBarry Smith   Note:
65*47450a7bSBarry Smith   Most basic implementatio of `TAOADMM`. Generally slower than adaptive or adaptive relaxed version.
666285c0a3SHansol  Suh 
67*47450a7bSBarry Smith .seealso: [](chapter_tao), `Tao`, `TAOADMM`, `TaoADMMSetUpdateType()`, `TAO_ADMM_UPDATE_ADAPTIVE`, `TAO_ADMM_UPDATE_ADAPTIVE_RELAXED`
686285c0a3SHansol  Suh M*/
696285c0a3SHansol  Suh 
706285c0a3SHansol  Suh /*MC
716285c0a3SHansol  Suh      TAO_ADMM_UPDATE_ADAPTIVE - Adaptively update spectral penalty
726285c0a3SHansol  Suh 
736285c0a3SHansol  Suh   Level: advanced
746285c0a3SHansol  Suh 
7587497f52SBarry Smith   Note:
76*47450a7bSBarry Smith   Adaptively updates spectral penalty of `TAOADMM` by using both steepest descent and minimum gradient.
776285c0a3SHansol  Suh 
78*47450a7bSBarry Smith .seealso: [](chapter_tao), `Tao`, `TAOADMM`, `TaoADMMSetUpdateType()`, `TAO_ADMM_UPDATE_BASIC`, `TAO_ADMM_UPDATE_ADAPTIVE_RELAXED`
796285c0a3SHansol  Suh M*/
806285c0a3SHansol  Suh 
816285c0a3SHansol  Suh /*MC
826285c0a3SHansol  Suh      ADMM_UPDATE_ADAPTIVE_RELAXED - Adaptively update spectral penalty, and relaxes parameter update
836285c0a3SHansol  Suh 
846285c0a3SHansol  Suh   Level: advanced
856285c0a3SHansol  Suh 
8687497f52SBarry Smith   Note:
8787497f52SBarry Smith   With adaptive spectral penalty update, it also relaxes x vector update by a factor.
886285c0a3SHansol  Suh 
89*47450a7bSBarry Smith .seealso: [](chapter_tao), `Tao`, `TaoADMMSetUpdateType()`, `TAO_ADMM_UPDATE_BASIC`, `TAO_ADMM_UPDATE_ADAPTIVE`
906285c0a3SHansol  Suh M*/
916285c0a3SHansol  Suh 
926285c0a3SHansol  Suh /*E
93*47450a7bSBarry Smith      TaoADMMRegularizerType - Determine regularizer routine - either user provided or soft threshold for `TAOADMM`
946285c0a3SHansol  Suh 
956285c0a3SHansol  Suh   Level: advanced
966285c0a3SHansol  Suh 
97*47450a7bSBarry Smith .seealso: [](chapter_tao), `Tao`, `TAOADMM`, `TaoADMMSetRegularizerType()`
986285c0a3SHansol  Suh E*/
999371c9d4SSatish Balay typedef enum {
1009371c9d4SSatish Balay   TAO_ADMM_REGULARIZER_USER,
1019371c9d4SSatish Balay   TAO_ADMM_REGULARIZER_SOFT_THRESH
1029371c9d4SSatish Balay } TaoADMMRegularizerType;
1036285c0a3SHansol  Suh PETSC_EXTERN const char *const TaoADMMRegularizerTypes[];
10465ba42b6SBarry Smith 
1056285c0a3SHansol  Suh /*MC
10687497f52SBarry Smith   TAO_ADMM_REGULARIZER_USER - User provided routines for regularizer part of `TAOADMM`
1076285c0a3SHansol  Suh 
1086285c0a3SHansol  Suh   Level: advanced
1096285c0a3SHansol  Suh 
11087497f52SBarry Smith   Note:
11187497f52SBarry Smith   User needs to provided appropriate routines and type for regularizer solver
1126285c0a3SHansol  Suh 
113*47450a7bSBarry Smith .seealso: [](chapter_tao), `Tao`, `TAOADMM`, `TaoADMMSetRegularizerType()`, `TAO_ADMM_REGULARIZER_SOFT_THRESH`
1146285c0a3SHansol  Suh M*/
1156285c0a3SHansol  Suh 
1166285c0a3SHansol  Suh /*MC
11787497f52SBarry Smith   TAO_ADMM_REGULARIZER_SOFT_THRESH - Soft threshold to solve regularizer part of `TAOADMM`
1186285c0a3SHansol  Suh 
1196285c0a3SHansol  Suh   Level: advanced
1206285c0a3SHansol  Suh 
12187497f52SBarry Smith   Note:
12287497f52SBarry Smith   Utilizes built-in SoftThreshold routines
1236285c0a3SHansol  Suh 
124*47450a7bSBarry Smith .seealso: [](chapter_tao), `Tao`, `TAOADMM`, `TaoSoftThreshold()`, `TaoADMMSetRegularizerObjectiveAndGradientRoutine()`,
125db781477SPatrick Sanan           `TaoADMMSetRegularizerHessianRoutine()`, `TaoADMMSetRegularizerType()`, `TAO_ADMM_REGULARIZER_USER`
1266285c0a3SHansol  Suh M*/
1276285c0a3SHansol  Suh 
128661095bbSAlp Dener /*E
12987497f52SBarry Smith      TaoALMMType - Determine the augmented Lagrangian formulation used in the `TAOALMM` subproblem.
130661095bbSAlp Dener 
131a1cb98faSBarry Smith    Values:
132a1cb98faSBarry Smith +  `TAO_ALMM_CLASSIC` - classic augmented Lagrangian definition including slack variables for inequality constraints
133a1cb98faSBarry Smith -  `TAO_ALMM_PHR`     - Powell-Hestenes-Rockafellar formulation without slack variables, uses pointwise min() for inequalities
134661095bbSAlp Dener 
135661095bbSAlp Dener   Level: advanced
136661095bbSAlp Dener 
137*47450a7bSBarry Smith .seealso: [](chapter_tao), `Tao`, `TAOALMM`, `TaoALMMSetType()`, `TaoALMMGetType()`
138661095bbSAlp Dener E*/
1399371c9d4SSatish Balay typedef enum {
1409371c9d4SSatish Balay   TAO_ALMM_CLASSIC,
1419371c9d4SSatish Balay   TAO_ALMM_PHR
1429371c9d4SSatish Balay } TaoALMMType;
143661095bbSAlp Dener PETSC_EXTERN const char *const TaoALMMTypes[];
144661095bbSAlp Dener 
1451eb8069cSJason Sarich /*J
14687497f52SBarry Smith         TaoType - String with the name of a `Tao` method
1471eb8069cSJason Sarich 
148*47450a7bSBarry Smith   Values:
149*47450a7bSBarry Smith +    `TAONLS` - nls Newton's method with line search for unconstrained minimization
150*47450a7bSBarry Smith .    `TAONTR` - ntr Newton's method with trust region for unconstrained minimization
151*47450a7bSBarry Smith .    `TAONTL` - ntl Newton's method with trust region, line search for unconstrained minimization
152*47450a7bSBarry Smith .    `TAOLMVM` - lmvm Limited memory variable metric method for unconstrained minimization
153*47450a7bSBarry Smith .    `TAOCG` - cg Nonlinear conjugate gradient method for unconstrained minimization
154*47450a7bSBarry Smith .    `TAONM` - nm Nelder-Mead algorithm for derivate-free unconstrained minimization
155*47450a7bSBarry Smith .    `TAOTRON` - tron Newton Trust Region method for bound constrained minimization
156*47450a7bSBarry Smith .    `TAOGPCG` - gpcg Newton Trust Region method for quadratic bound constrained minimization
157*47450a7bSBarry Smith .    `TAOBLMVM` - blmvm Limited memory variable metric method for bound constrained minimization
158*47450a7bSBarry Smith .    `TAOLCL` - lcl Linearly constrained Lagrangian method for pde-constrained minimization
159*47450a7bSBarry Smith -    `TAOPOUNDERS` - pounders Model-based algorithm for nonlinear least squares
160*47450a7bSBarry Smith 
1611eb8069cSJason Sarich        Level: beginner
1621eb8069cSJason Sarich 
163*47450a7bSBarry Smith .seealso: [](chapter_tao), `Tao`, `TaoCreate()`, `TaoSetType()`
1641eb8069cSJason Sarich J*/
165b625d6c7SJed Brown typedef const char *TaoType;
16658417fe7SBarry Smith #define TAOLMVM     "lmvm"
16758417fe7SBarry Smith #define TAONLS      "nls"
16858417fe7SBarry Smith #define TAONTR      "ntr"
16958417fe7SBarry Smith #define TAONTL      "ntl"
17058417fe7SBarry Smith #define TAOCG       "cg"
17158417fe7SBarry Smith #define TAOTRON     "tron"
17258417fe7SBarry Smith #define TAOOWLQN    "owlqn"
17358417fe7SBarry Smith #define TAOBMRM     "bmrm"
17458417fe7SBarry Smith #define TAOBLMVM    "blmvm"
1756b591159SAlp Dener #define TAOBQNLS    "bqnls"
176ac9112b8SAlp Dener #define TAOBNCG     "bncg"
177eb910715SAlp Dener #define TAOBNLS     "bnls"
178fed79b8eSAlp Dener #define TAOBNTR     "bntr"
179c14b763aSAlp Dener #define TAOBNTL     "bntl"
180e0ed867bSAlp Dener #define TAOBQNKLS   "bqnkls"
181e0ed867bSAlp Dener #define TAOBQNKTR   "bqnktr"
182e0ed867bSAlp Dener #define TAOBQNKTL   "bqnktl"
18358417fe7SBarry Smith #define TAOBQPIP    "bqpip"
18458417fe7SBarry Smith #define TAOGPCG     "gpcg"
18558417fe7SBarry Smith #define TAONM       "nm"
18658417fe7SBarry Smith #define TAOPOUNDERS "pounders"
187737f463aSAlp Dener #define TAOBRGN     "brgn"
18858417fe7SBarry Smith #define TAOLCL      "lcl"
18958417fe7SBarry Smith #define TAOSSILS    "ssils"
19058417fe7SBarry Smith #define TAOSSFLS    "ssfls"
19158417fe7SBarry Smith #define TAOASILS    "asils"
19258417fe7SBarry Smith #define TAOASFLS    "asfls"
19358417fe7SBarry Smith #define TAOIPM      "ipm"
194aad13602SShrirang Abhyankar #define TAOPDIPM    "pdipm"
19583a0a5c3SToby Isaac #define TAOSHELL    "shell"
1966285c0a3SHansol  Suh #define TAOADMM     "admm"
197661095bbSAlp Dener #define TAOALMM     "almm"
198a82e8c82SStefano Zampini #define TAOPYTHON   "python"
19958417fe7SBarry Smith 
200441846f8SBarry Smith PETSC_EXTERN PetscClassId      TAO_CLASSID;
201441846f8SBarry Smith PETSC_EXTERN PetscFunctionList TaoList;
20221ec2d5cSBarry Smith 
203a35d58b8SBarry Smith /*E
20465ba42b6SBarry Smith     TaoConvergedReason - reason a Tao method was said to have converged or diverged
205a35d58b8SBarry Smith 
206*47450a7bSBarry Smith    Values:
207*47450a7bSBarry Smith +  `TAO_CONVERGED_GATOL` - ||g(X)|| < gatol
208*47450a7bSBarry Smith .  `TAO_CONVERGED_GRTOL` - ||g(X)|| / f(X)  < grtol
209*47450a7bSBarry Smith .  `TAO_CONVERGED_GTTOL` - ||g(X)|| / ||g(X0)|| < gttol
210*47450a7bSBarry Smith .  `TAO_CONVERGED_STEPTOL` - step size smaller than tolerance
211*47450a7bSBarry Smith .  `TAO_CONVERGED_MINF` - F < F_min
212*47450a7bSBarry Smith .  `TAO_CONVERGED_USER` - the user indicates the optimization has succeeded
213*47450a7bSBarry Smith .  `TAO_DIVERGED_MAXITS` - the maximum number of iterations allowed has been achieved
214*47450a7bSBarry Smith .  `TAO_DIVERGED_NAN` - not a number appeared in the computations
215*47450a7bSBarry Smith .  `TAO_DIVERGED_MAXFCN` - the maximum number of function evaluations has been computed
216*47450a7bSBarry Smith .  `TAO_DIVERGED_LS_FAILURE` - a linesearch failed
217*47450a7bSBarry Smith .  `TAO_DIVERGED_TR_REDUCTION` - trust region failure
218*47450a7bSBarry Smith .  `TAO_DIVERGED_USER` - the user has indicated the optimization has failed
219*47450a7bSBarry Smith -  `TAO_CONTINUE_ITERATING` - the optimization is still running, `TaoSolve()`
220*47450a7bSBarry Smith 
221*47450a7bSBarry Smith    where
222*47450a7bSBarry Smith +  X - current solution
223*47450a7bSBarry Smith .  X0 - initial guess
224*47450a7bSBarry Smith .  f(X) - current function value
225*47450a7bSBarry Smith .  f(X*) - true solution (estimated)
226*47450a7bSBarry Smith .  g(X) - current gradient
227*47450a7bSBarry Smith .  its - current iterate number
228*47450a7bSBarry Smith .  maxits - maximum number of iterates
229*47450a7bSBarry Smith .  fevals - number of function evaluations
230*47450a7bSBarry Smith -  max_funcsals - maximum number of function evaluations
231*47450a7bSBarry Smith 
232a35d58b8SBarry Smith    Level: beginner
233a35d58b8SBarry Smith 
234*47450a7bSBarry Smith    Note:
235*47450a7bSBarry Smith    The two most common reasons for divergence are  an incorrectly coded or computed gradient or Hessian failure or lack of convergence
236*47450a7bSBarry 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).
237a35d58b8SBarry Smith 
238*47450a7bSBarry Smith    Developer Note:
239*47450a7bSBarry Smith    The names in `KSPConvergedReason`, `SNESConvergedReason`, and `TaoConvergedReason` should be uniformized
240a35d58b8SBarry Smith 
241*47450a7bSBarry Smith .seealso: [](chapter_tao), `Tao`, `TaoSolve()`, `TaoGetConvergedReason()`, `KSPConvergedReason`, `SNESConvergedReason`
242a35d58b8SBarry Smith E*/
24321ec2d5cSBarry Smith typedef enum {               /* converged */
24421ec2d5cSBarry Smith   TAO_CONVERGED_GATOL   = 3, /* ||g(X)|| < gatol */
24521ec2d5cSBarry Smith   TAO_CONVERGED_GRTOL   = 4, /* ||g(X)|| / f(X)  < grtol */
24621ec2d5cSBarry Smith   TAO_CONVERGED_GTTOL   = 5, /* ||g(X)|| / ||g(X0)|| < gttol */
24721ec2d5cSBarry Smith   TAO_CONVERGED_STEPTOL = 6, /* step size small */
24821ec2d5cSBarry Smith   TAO_CONVERGED_MINF    = 7, /* F < F_min */
24921ec2d5cSBarry Smith   TAO_CONVERGED_USER    = 8, /* User defined */
25021ec2d5cSBarry Smith   /* diverged */
25121ec2d5cSBarry Smith   TAO_DIVERGED_MAXITS       = -2,
25221ec2d5cSBarry Smith   TAO_DIVERGED_NAN          = -4,
25321ec2d5cSBarry Smith   TAO_DIVERGED_MAXFCN       = -5,
25421ec2d5cSBarry Smith   TAO_DIVERGED_LS_FAILURE   = -6,
25521ec2d5cSBarry Smith   TAO_DIVERGED_TR_REDUCTION = -7,
25621ec2d5cSBarry Smith   TAO_DIVERGED_USER         = -8, /* User defined */
25721ec2d5cSBarry Smith   /* keep going */
2589371c9d4SSatish Balay   TAO_CONTINUE_ITERATING = 0
2599371c9d4SSatish Balay } TaoConvergedReason;
26021ec2d5cSBarry Smith 
261e4cb33bbSBarry Smith PETSC_EXTERN const char **TaoConvergedReasons;
26221ec2d5cSBarry Smith 
26321ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoInitializePackage(void);
26421ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoFinalizePackage(void);
265441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoCreate(MPI_Comm, Tao *);
266441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetFromOptions(Tao);
267441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetUp(Tao);
268b625d6c7SJed Brown PETSC_EXTERN PetscErrorCode TaoSetType(Tao, TaoType);
269b625d6c7SJed Brown PETSC_EXTERN PetscErrorCode TaoGetType(Tao, TaoType *);
270441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetApplicationContext(Tao, void *);
271441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetApplicationContext(Tao, void *);
272441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDestroy(Tao *);
27321ec2d5cSBarry Smith 
274441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetOptionsPrefix(Tao, const char[]);
275441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoView(Tao, PetscViewer);
276fe2efc57SMark PETSC_EXTERN PetscErrorCode TaoViewFromOptions(Tao, PetscObject, const char[]);
27721ec2d5cSBarry Smith 
278441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSolve(Tao);
27921ec2d5cSBarry Smith 
280441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoRegister(const char[], PetscErrorCode (*)(Tao));
281441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoRegisterDestroy(void);
28221ec2d5cSBarry Smith 
283e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetConvergedReason(Tao, TaoConvergedReason *);
284e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetSolutionStatus(Tao, PetscInt *, PetscReal *, PetscReal *, PetscReal *, PetscReal *, TaoConvergedReason *);
285e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConvergedReason(Tao, TaoConvergedReason);
286a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetSolution(Tao, Vec);
287a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetSolution(Tao, Vec *);
288d71ae5a4SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use TaoSetSolution() (since version 3.17)") static inline PetscErrorCode TaoSetInitialVector(Tao t, Vec v)
289d71ae5a4SJacob Faibussowitsch {
2909371c9d4SSatish Balay   return TaoSetSolution(t, v);
2919371c9d4SSatish Balay }
292d71ae5a4SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use TaoGetSolution() (since version 3.17)") static inline PetscErrorCode TaoGetInitialVector(Tao t, Vec *v)
293d71ae5a4SJacob Faibussowitsch {
2949371c9d4SSatish Balay   return TaoGetSolution(t, v);
2959371c9d4SSatish Balay }
296a82e8c82SStefano Zampini 
297a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetObjective(Tao, PetscErrorCode (*)(Tao, Vec, PetscReal *, void *), void *);
298a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetObjective(Tao, PetscErrorCode (**)(Tao, Vec, PetscReal *, void *), void **);
299a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetGradient(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *);
300a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetGradient(Tao, Vec *, PetscErrorCode (**)(Tao, Vec, Vec, void *), void **);
301a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetObjectiveAndGradient(Tao, Vec, PetscErrorCode (*)(Tao, Vec, PetscReal *, Vec, void *), void *);
302a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetObjectiveAndGradient(Tao, Vec *, PetscErrorCode (**)(Tao, Vec, PetscReal *, Vec, void *), void **);
303a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetHessian(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *);
304a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetHessian(Tao, Mat *, Mat *, PetscErrorCode (**)(Tao, Vec, Mat, Mat, void *), void **);
305d71ae5a4SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use TaoSetObjective() (since version 3.17)") static inline PetscErrorCode TaoSetObjectiveRoutine(Tao t, PetscErrorCode (*f)(Tao, Vec, PetscReal *, void *), void *c)
306d71ae5a4SJacob Faibussowitsch {
3079371c9d4SSatish Balay   return TaoSetObjective(t, f, c);
3089371c9d4SSatish Balay }
309d71ae5a4SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use TaoGetGradient() (since version 3.17)") static inline PetscErrorCode TaoGetGradientVector(Tao t, Vec *v)
310d71ae5a4SJacob Faibussowitsch {
3119371c9d4SSatish Balay   return TaoGetGradient(t, v, NULL, NULL);
3129371c9d4SSatish Balay }
313d71ae5a4SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use TaoSetGradient() (since version 3.17)") static inline PetscErrorCode TaoSetGradientRoutine(Tao t, PetscErrorCode (*f)(Tao, Vec, Vec, void *), void *c)
314d71ae5a4SJacob Faibussowitsch {
3159371c9d4SSatish Balay   return TaoSetGradient(t, NULL, f, c);
3169371c9d4SSatish Balay }
317d71ae5a4SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use TaoSetObjectiveAndGradient() (since version 3.17)") static inline PetscErrorCode TaoSetObjectiveAndGradientRoutine(Tao t, PetscErrorCode (*f)(Tao, Vec, PetscReal *, Vec, void *), void *c)
318d71ae5a4SJacob Faibussowitsch {
3199371c9d4SSatish Balay   return TaoSetObjectiveAndGradient(t, NULL, f, c);
3209371c9d4SSatish Balay }
321d71ae5a4SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use TaoSetHessian() (since version 3.17)") static inline PetscErrorCode TaoSetHessianRoutine(Tao t, Mat H, Mat P, PetscErrorCode (*f)(Tao, Vec, Mat, Mat, void *), void *c)
322d71ae5a4SJacob Faibussowitsch {
3239371c9d4SSatish Balay   return TaoSetHessian(t, H, P, f, c);
3249371c9d4SSatish Balay }
325a82e8c82SStefano Zampini 
326a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoSetGradientNorm(Tao, Mat);
327a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoGetGradientNorm(Tao, Mat *);
328414d97d3SAlp Dener PETSC_EXTERN PetscErrorCode TaoSetLMVMMatrix(Tao, Mat);
329f5766c09SAlp Dener PETSC_EXTERN PetscErrorCode TaoGetLMVMMatrix(Tao, Mat *);
330414d97d3SAlp Dener PETSC_EXTERN PetscErrorCode TaoSetRecycleHistory(Tao, PetscBool);
331414d97d3SAlp Dener PETSC_EXTERN PetscErrorCode TaoGetRecycleHistory(Tao, PetscBool *);
332a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMSetH0(Tao, Mat);
333a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMGetH0(Tao, Mat *);
334a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMGetH0KSP(Tao, KSP *);
335b39c12a9SAlp Dener PETSC_EXTERN PetscErrorCode TaoLMVMRecycle(Tao, PetscBool);
3364a48860cSAlp Dener PETSC_EXTERN PetscErrorCode TaoSetResidualRoutine(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *);
337737f463aSAlp Dener PETSC_EXTERN PetscErrorCode TaoSetResidualWeights(Tao, Vec, PetscInt, PetscInt *, PetscInt *, PetscReal *);
338441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConstraintsRoutine(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *);
339441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInequalityConstraintsRoutine(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *);
340441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetEqualityConstraintsRoutine(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *);
3414ffbe8acSAlp Dener PETSC_EXTERN PetscErrorCode TaoSetJacobianResidualRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *);
342ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *);
343ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianStateRoutine(Tao, Mat, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, Mat, void *), void *);
34494ab13aaSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianDesignRoutine(Tao, Mat, PetscErrorCode (*)(Tao, Vec, Mat, void *), void *);
345ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianInequalityRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *);
346ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianEqualityRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *);
34721ec2d5cSBarry Smith 
348a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoPythonSetType(Tao, const char[]);
349ebead697SStefano Zampini PETSC_EXTERN PetscErrorCode TaoPythonGetType(Tao, const char *[]);
350a82e8c82SStefano Zampini 
35183a0a5c3SToby Isaac PETSC_EXTERN PetscErrorCode TaoShellSetSolve(Tao, PetscErrorCode (*)(Tao));
35283a0a5c3SToby Isaac PETSC_EXTERN PetscErrorCode TaoShellSetContext(Tao, void *);
3533ec1f749SStefano Zampini PETSC_EXTERN PetscErrorCode TaoShellGetContext(Tao, void *);
35483a0a5c3SToby Isaac 
355d71ae5a4SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use TaoSetResidualRoutine() (since version 3.11)") static inline PetscErrorCode TaoSetSeparableObjectiveRoutine(Tao tao, Vec res, PetscErrorCode (*func)(Tao, Vec, Vec, void *), void *ctx)
356d71ae5a4SJacob Faibussowitsch {
3579371c9d4SSatish Balay   return TaoSetResidualRoutine(tao, res, func, ctx);
3589371c9d4SSatish Balay }
359d71ae5a4SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use TaoSetResidualWeights() (since version 3.11)") static inline PetscErrorCode TaoSetSeparableObjectiveWeights(Tao tao, Vec sigma_v, PetscInt n, PetscInt *rows, PetscInt *cols, PetscReal *vals)
360d71ae5a4SJacob Faibussowitsch {
3619371c9d4SSatish Balay   return TaoSetResidualWeights(tao, sigma_v, n, rows, cols, vals);
3629371c9d4SSatish Balay }
363737f463aSAlp Dener 
364441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetStateDesignIS(Tao, IS, IS);
36521ec2d5cSBarry Smith 
366441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeObjective(Tao, Vec, PetscReal *);
3674a48860cSAlp Dener PETSC_EXTERN PetscErrorCode TaoComputeResidual(Tao, Vec, Vec);
368412cdd55SHong Zhang PETSC_EXTERN PetscErrorCode TaoTestGradient(Tao, Vec, Vec);
369441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeGradient(Tao, Vec, Vec);
370441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeObjectiveAndGradient(Tao, Vec, PetscReal *, Vec);
371441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeConstraints(Tao, Vec, Vec);
372441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeInequalityConstraints(Tao, Vec, Vec);
373441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeEqualityConstraints(Tao, Vec, Vec);
374441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeGradient(Tao, Vec, Vec, void *);
375441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsObjectiveDefined(Tao, PetscBool *);
376441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsGradientDefined(Tao, PetscBool *);
377441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsObjectiveAndGradientDefined(Tao, PetscBool *);
37821ec2d5cSBarry Smith 
379d71ae5a4SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use TaoComputeResidual() (since version 3.11)") static inline PetscErrorCode TaoComputeSeparableObjective(Tao tao, Vec X, Vec F)
380d71ae5a4SJacob Faibussowitsch {
3819371c9d4SSatish Balay   return TaoComputeResidual(tao, X, F);
3829371c9d4SSatish Balay }
3834a48860cSAlp Dener 
38409baa881SHong Zhang PETSC_EXTERN PetscErrorCode TaoTestHessian(Tao);
385ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeHessian(Tao, Vec, Mat, Mat);
386737f463aSAlp Dener PETSC_EXTERN PetscErrorCode TaoComputeResidualJacobian(Tao, Vec, Mat, Mat);
387ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobian(Tao, Vec, Mat, Mat);
388ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianState(Tao, Vec, Mat, Mat, Mat);
389ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianEquality(Tao, Vec, Mat, Mat);
390ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianInequality(Tao, Vec, Mat, Mat);
39194ab13aaSBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianDesign(Tao, Vec, Mat);
39221ec2d5cSBarry Smith 
393ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessian(Tao, Vec, Mat, Mat, void *);
394ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessianColor(Tao, Vec, Mat, Mat, void *);
395f4c1ad5cSStefano Zampini PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessianMFFD(Tao, Vec, Mat, Mat, void *);
396441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeDualVariables(Tao, Vec, Vec);
397441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetVariableBounds(Tao, Vec, Vec);
398441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetVariableBounds(Tao, Vec *, Vec *);
399441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetDualVariables(Tao, Vec *, Vec *);
400441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInequalityBounds(Tao, Vec, Vec);
401441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetInequalityBounds(Tao, Vec *, Vec *);
402441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetVariableBoundsRoutine(Tao, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *);
403441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeVariableBounds(Tao);
40421ec2d5cSBarry Smith 
405e52336cbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetTolerances(Tao, PetscReal *, PetscReal *, PetscReal *);
406e52336cbSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetTolerances(Tao, PetscReal, PetscReal, PetscReal);
407441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetConstraintTolerances(Tao, PetscReal *, PetscReal *);
408441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConstraintTolerances(Tao, PetscReal, PetscReal);
409441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetFunctionLowerBound(Tao, PetscReal);
410441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInitialTrustRegionRadius(Tao, PetscReal);
411441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMaximumIterations(Tao, PetscInt);
412441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMaximumFunctionEvaluations(Tao, PetscInt);
413441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetFunctionLowerBound(Tao, PetscReal *);
414441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetInitialTrustRegionRadius(Tao, PetscReal *);
415441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetCurrentTrustRegionRadius(Tao, PetscReal *);
416441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetMaximumIterations(Tao, PetscInt *);
417770232b9SCe Qin PETSC_EXTERN PetscErrorCode TaoGetCurrentFunctionEvaluations(Tao, PetscInt *);
418441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetMaximumFunctionEvaluations(Tao, PetscInt *);
4198931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetIterationNumber(Tao, PetscInt *);
4208931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoSetIterationNumber(Tao, PetscInt);
4218931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetTotalIterationNumber(Tao, PetscInt *);
4228931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoSetTotalIterationNumber(Tao, PetscInt);
42379f5d8caSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetResidualNorm(Tao, PetscReal *);
4248931d482SJason Sarich 
425b54963c9SStefano Zampini PETSC_EXTERN PetscErrorCode TaoAppendOptionsPrefix(Tao, const char[]);
426b54963c9SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetOptionsPrefix(Tao, const char *[]);
427441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoResetStatistics(Tao);
4288fcddce6SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetUpdate(Tao, PetscErrorCode (*)(Tao, PetscInt, void *), void *);
42921ec2d5cSBarry Smith 
430441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetKSP(Tao, KSP *);
431025e9500SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetLinearSolveIterations(Tao, PetscInt *);
4320f0abf79SStefano Zampini PETSC_EXTERN PetscErrorCode TaoKSPSetUseEW(Tao, PetscBool);
433235fd6e6SBarry Smith 
434235fd6e6SBarry Smith #include <petsctaolinesearch.h>
435b54963c9SStefano Zampini 
436441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetLineSearch(Tao, TaoLineSearch *);
43721ec2d5cSBarry Smith 
438ae93cb3cSJason Sarich PETSC_EXTERN PetscErrorCode TaoSetConvergenceHistory(Tao, PetscReal *, PetscReal *, PetscReal *, PetscInt *, PetscInt, PetscBool);
439ae93cb3cSJason Sarich PETSC_EXTERN PetscErrorCode TaoGetConvergenceHistory(Tao, PetscReal **, PetscReal **, PetscReal **, PetscInt **, PetscInt *);
440441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMonitor(Tao, PetscErrorCode (*)(Tao, void *), void *, PetscErrorCode (*)(void **));
441441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoCancelMonitors(Tao);
44298ea980cSBarry Smith PETSC_EXTERN PetscErrorCode TaoMonitorDefault(Tao, void *);
443d71ae5a4SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use TaoMonitorDefault() (since version 3.9)") static inline PetscErrorCode TaoDefaultMonitor(Tao tao, void *ctx)
444d71ae5a4SJacob Faibussowitsch {
4459371c9d4SSatish Balay   return TaoMonitorDefault(tao, ctx);
4469371c9d4SSatish Balay }
4478d5ead36SAlp Dener PETSC_EXTERN PetscErrorCode TaoDefaultGMonitor(Tao, void *);
448441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultSMonitor(Tao, void *);
449441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultCMonitor(Tao, void *);
450441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSolutionMonitor(Tao, void *);
451737f463aSAlp Dener PETSC_EXTERN PetscErrorCode TaoResidualMonitor(Tao, void *);
452441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGradientMonitor(Tao, void *);
453441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoStepDirectionMonitor(Tao, void *);
454441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDrawSolutionMonitor(Tao, void *);
455441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDrawStepMonitor(Tao, void *);
456441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDrawGradientMonitor(Tao, void *);
457441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoAddLineSearchCounts(Tao);
45821ec2d5cSBarry Smith 
459441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultConvergenceTest(Tao, void *);
460441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConvergenceTest(Tao, PetscErrorCode (*)(Tao, void *), void *);
46121ec2d5cSBarry Smith 
462441846f8SBarry Smith PETSC_EXTERN PetscErrorCode          TaoLCLSetStateDesignIS(Tao, IS, IS);
4633ecd9318SAlp Dener PETSC_EXTERN PetscErrorCode          TaoMonitor(Tao, PetscInt, PetscReal, PetscReal, PetscReal, PetscReal);
464e882e171SHong Zhang typedef struct _n_TaoMonitorDrawCtx *TaoMonitorDrawCtx;
465e882e171SHong Zhang PETSC_EXTERN PetscErrorCode          TaoMonitorDrawCtxCreate(MPI_Comm, const char[], const char[], int, int, int, int, PetscInt, TaoMonitorDrawCtx *);
466e882e171SHong Zhang PETSC_EXTERN PetscErrorCode          TaoMonitorDrawCtxDestroy(TaoMonitorDrawCtx *);
467737f463aSAlp Dener 
4688e85b1b3SXiang Huang PETSC_EXTERN PetscErrorCode TaoBRGNGetSubsolver(Tao, Tao *);
469a3c390cfSAlp Dener PETSC_EXTERN PetscErrorCode TaoBRGNSetRegularizerObjectiveAndGradientRoutine(Tao, PetscErrorCode (*)(Tao, Vec, PetscReal *, Vec, void *), void *);
470a3c390cfSAlp Dener PETSC_EXTERN PetscErrorCode TaoBRGNSetRegularizerHessianRoutine(Tao, Mat, PetscErrorCode (*)(Tao, Vec, Mat, void *), void *);
471a3c390cfSAlp Dener PETSC_EXTERN PetscErrorCode TaoBRGNSetRegularizerWeight(Tao, PetscReal);
4728ac80d48SXiang Huang PETSC_EXTERN PetscErrorCode TaoBRGNSetL1SmoothEpsilon(Tao, PetscReal);
4738e85b1b3SXiang Huang PETSC_EXTERN PetscErrorCode TaoBRGNSetDictionaryMatrix(Tao, Mat);
474cd1c4666STristan Konolige PETSC_EXTERN PetscErrorCode TaoBRGNGetDampingVector(Tao, Vec *);
4756285c0a3SHansol  Suh 
4766285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMGetMisfitSubsolver(Tao, Tao *);
4776285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMGetRegularizationSubsolver(Tao, Tao *);
4786285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMGetDualVector(Tao, Vec *);
4796285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMGetSpectralPenalty(Tao, PetscReal *);
4806285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetSpectralPenalty(Tao, PetscReal);
4816285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoGetADMMParentTao(Tao, Tao *);
4826285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetConstraintVectorRHS(Tao, Vec);
4836285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerCoefficient(Tao, PetscReal);
4846285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitConstraintJacobian(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *);
4856285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerConstraintJacobian(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *);
4866285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerHessianRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *);
4876285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerObjectiveAndGradientRoutine(Tao, PetscErrorCode (*)(Tao, Vec, PetscReal *, Vec, void *), void *);
4886285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitHessianRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *);
4896285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitObjectiveAndGradientRoutine(Tao, PetscErrorCode (*)(Tao, Vec, PetscReal *, Vec, void *), void *);
4906285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitHessianChangeStatus(Tao, PetscBool);
4916285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegHessianChangeStatus(Tao, PetscBool);
4926285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMinimumSpectralPenalty(Tao, PetscReal);
4936285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerType(Tao, TaoADMMRegularizerType);
4946285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMGetRegularizerType(Tao, TaoADMMRegularizerType *);
4956285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetUpdateType(Tao, TaoADMMUpdateType);
4966285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMGetUpdateType(Tao, TaoADMMUpdateType *);
497661095bbSAlp Dener 
498661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMGetType(Tao, TaoALMMType *);
499661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMSetType(Tao, TaoALMMType);
500661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMGetSubsolver(Tao, Tao *);
501661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMSetSubsolver(Tao, Tao);
502661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMGetMultipliers(Tao, Vec *);
503661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMSetMultipliers(Tao, Vec);
504661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMGetPrimalIS(Tao, IS *, IS *);
505661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMGetDualIS(Tao, IS *, IS *);
50621ec2d5cSBarry Smith #endif
507