xref: /petsc/include/petsctao.h (revision f22e26b7d737c5cdcd73df02e4242cc95dbd88f5)
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 
1747450a7bSBarry 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 
2247450a7bSBarry Smith   Options database Key:
2347450a7bSBarry Smith . -different_hessian - Tao will use a copy of the Hessian operator for masking.  By default Tao will directly alter the Hessian operator.
2447450a7bSBarry Smith 
251eb8069cSJason Sarich   Level: intermediate
2621ec2d5cSBarry Smith 
2747450a7bSBarry 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 
4147450a7bSBarry 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 
5047450a7bSBarry 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:
65aaa8cc7dSPierre Jolivet   Most basic implementation of `TAOADMM`. Generally slower than adaptive or adaptive relaxed version.
666285c0a3SHansol  Suh 
6747450a7bSBarry 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:
7647450a7bSBarry Smith   Adaptively updates spectral penalty of `TAOADMM` by using both steepest descent and minimum gradient.
776285c0a3SHansol  Suh 
7847450a7bSBarry 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 
8947450a7bSBarry Smith .seealso: [](chapter_tao), `Tao`, `TaoADMMSetUpdateType()`, `TAO_ADMM_UPDATE_BASIC`, `TAO_ADMM_UPDATE_ADAPTIVE`
906285c0a3SHansol  Suh M*/
916285c0a3SHansol  Suh 
926285c0a3SHansol  Suh /*E
9347450a7bSBarry Smith      TaoADMMRegularizerType - Determine regularizer routine - either user provided or soft threshold for `TAOADMM`
946285c0a3SHansol  Suh 
956285c0a3SHansol  Suh   Level: advanced
966285c0a3SHansol  Suh 
9747450a7bSBarry 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 
11347450a7bSBarry 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 
12447450a7bSBarry 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 
13747450a7bSBarry 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 
14847450a7bSBarry Smith   Values:
14947450a7bSBarry Smith +    `TAONLS` - nls Newton's method with line search for unconstrained minimization
15047450a7bSBarry Smith .    `TAONTR` - ntr Newton's method with trust region for unconstrained minimization
15147450a7bSBarry Smith .    `TAONTL` - ntl Newton's method with trust region, line search for unconstrained minimization
15247450a7bSBarry Smith .    `TAOLMVM` - lmvm Limited memory variable metric method for unconstrained minimization
15347450a7bSBarry Smith .    `TAOCG` - cg Nonlinear conjugate gradient method for unconstrained minimization
15447450a7bSBarry Smith .    `TAONM` - nm Nelder-Mead algorithm for derivate-free unconstrained minimization
15547450a7bSBarry Smith .    `TAOTRON` - tron Newton Trust Region method for bound constrained minimization
15647450a7bSBarry Smith .    `TAOGPCG` - gpcg Newton Trust Region method for quadratic bound constrained minimization
15747450a7bSBarry Smith .    `TAOBLMVM` - blmvm Limited memory variable metric method for bound constrained minimization
15847450a7bSBarry Smith .    `TAOLCL` - lcl Linearly constrained Lagrangian method for pde-constrained minimization
15947450a7bSBarry Smith -    `TAOPOUNDERS` - pounders Model-based algorithm for nonlinear least squares
16047450a7bSBarry Smith 
1611eb8069cSJason Sarich        Level: beginner
1621eb8069cSJason Sarich 
16347450a7bSBarry 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"
199f4f59681SStefano Zampini #define TAOSNES     "snes"
20058417fe7SBarry Smith 
201441846f8SBarry Smith PETSC_EXTERN PetscClassId      TAO_CLASSID;
202441846f8SBarry Smith PETSC_EXTERN PetscFunctionList TaoList;
20321ec2d5cSBarry Smith 
204a35d58b8SBarry Smith /*E
20565ba42b6SBarry Smith     TaoConvergedReason - reason a Tao method was said to have converged or diverged
206a35d58b8SBarry Smith 
20747450a7bSBarry Smith    Values:
20847450a7bSBarry Smith +  `TAO_CONVERGED_GATOL` - ||g(X)|| < gatol
20947450a7bSBarry Smith .  `TAO_CONVERGED_GRTOL` - ||g(X)|| / f(X)  < grtol
21047450a7bSBarry Smith .  `TAO_CONVERGED_GTTOL` - ||g(X)|| / ||g(X0)|| < gttol
21147450a7bSBarry Smith .  `TAO_CONVERGED_STEPTOL` - step size smaller than tolerance
21247450a7bSBarry Smith .  `TAO_CONVERGED_MINF` - F < F_min
21347450a7bSBarry Smith .  `TAO_CONVERGED_USER` - the user indicates the optimization has succeeded
21447450a7bSBarry Smith .  `TAO_DIVERGED_MAXITS` - the maximum number of iterations allowed has been achieved
21547450a7bSBarry Smith .  `TAO_DIVERGED_NAN` - not a number appeared in the computations
21647450a7bSBarry Smith .  `TAO_DIVERGED_MAXFCN` - the maximum number of function evaluations has been computed
21747450a7bSBarry Smith .  `TAO_DIVERGED_LS_FAILURE` - a linesearch failed
21847450a7bSBarry Smith .  `TAO_DIVERGED_TR_REDUCTION` - trust region failure
21947450a7bSBarry Smith .  `TAO_DIVERGED_USER` - the user has indicated the optimization has failed
22047450a7bSBarry Smith -  `TAO_CONTINUE_ITERATING` - the optimization is still running, `TaoSolve()`
22147450a7bSBarry Smith 
22247450a7bSBarry Smith    where
22347450a7bSBarry Smith +  X - current solution
22447450a7bSBarry Smith .  X0 - initial guess
22547450a7bSBarry Smith .  f(X) - current function value
22647450a7bSBarry Smith .  f(X*) - true solution (estimated)
22747450a7bSBarry Smith .  g(X) - current gradient
22847450a7bSBarry Smith .  its - current iterate number
22947450a7bSBarry Smith .  maxits - maximum number of iterates
23047450a7bSBarry Smith .  fevals - number of function evaluations
23147450a7bSBarry Smith -  max_funcsals - maximum number of function evaluations
23247450a7bSBarry Smith 
233a35d58b8SBarry Smith    Level: beginner
234a35d58b8SBarry Smith 
23547450a7bSBarry Smith    Note:
23647450a7bSBarry Smith    The two most common reasons for divergence are  an incorrectly coded or computed gradient or Hessian failure or lack of convergence
23747450a7bSBarry 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).
238a35d58b8SBarry Smith 
23947450a7bSBarry Smith    Developer Note:
24047450a7bSBarry Smith    The names in `KSPConvergedReason`, `SNESConvergedReason`, and `TaoConvergedReason` should be uniformized
241a35d58b8SBarry Smith 
24247450a7bSBarry Smith .seealso: [](chapter_tao), `Tao`, `TaoSolve()`, `TaoGetConvergedReason()`, `KSPConvergedReason`, `SNESConvergedReason`
243a35d58b8SBarry Smith E*/
24421ec2d5cSBarry Smith typedef enum {               /* converged */
24521ec2d5cSBarry Smith   TAO_CONVERGED_GATOL   = 3, /* ||g(X)|| < gatol */
24621ec2d5cSBarry Smith   TAO_CONVERGED_GRTOL   = 4, /* ||g(X)|| / f(X)  < grtol */
24721ec2d5cSBarry Smith   TAO_CONVERGED_GTTOL   = 5, /* ||g(X)|| / ||g(X0)|| < gttol */
24821ec2d5cSBarry Smith   TAO_CONVERGED_STEPTOL = 6, /* step size small */
24921ec2d5cSBarry Smith   TAO_CONVERGED_MINF    = 7, /* F < F_min */
25021ec2d5cSBarry Smith   TAO_CONVERGED_USER    = 8, /* User defined */
25121ec2d5cSBarry Smith   /* diverged */
25221ec2d5cSBarry Smith   TAO_DIVERGED_MAXITS       = -2,
25321ec2d5cSBarry Smith   TAO_DIVERGED_NAN          = -4,
25421ec2d5cSBarry Smith   TAO_DIVERGED_MAXFCN       = -5,
25521ec2d5cSBarry Smith   TAO_DIVERGED_LS_FAILURE   = -6,
25621ec2d5cSBarry Smith   TAO_DIVERGED_TR_REDUCTION = -7,
25721ec2d5cSBarry Smith   TAO_DIVERGED_USER         = -8, /* User defined */
25821ec2d5cSBarry Smith   /* keep going */
2599371c9d4SSatish Balay   TAO_CONTINUE_ITERATING = 0
2609371c9d4SSatish Balay } TaoConvergedReason;
26121ec2d5cSBarry Smith 
262e4cb33bbSBarry Smith PETSC_EXTERN const char **TaoConvergedReasons;
26321ec2d5cSBarry Smith 
26421ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoInitializePackage(void);
26521ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoFinalizePackage(void);
266441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoCreate(MPI_Comm, Tao *);
267441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetFromOptions(Tao);
268441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetUp(Tao);
269b625d6c7SJed Brown PETSC_EXTERN PetscErrorCode TaoSetType(Tao, TaoType);
270b625d6c7SJed Brown PETSC_EXTERN PetscErrorCode TaoGetType(Tao, TaoType *);
271441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetApplicationContext(Tao, void *);
272441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetApplicationContext(Tao, void *);
273441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDestroy(Tao *);
27421ec2d5cSBarry Smith 
275441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetOptionsPrefix(Tao, const char[]);
276441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoView(Tao, PetscViewer);
277fe2efc57SMark PETSC_EXTERN PetscErrorCode TaoViewFromOptions(Tao, PetscObject, const char[]);
27821ec2d5cSBarry Smith 
279441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSolve(Tao);
28021ec2d5cSBarry Smith 
281441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoRegister(const char[], PetscErrorCode (*)(Tao));
282441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoRegisterDestroy(void);
28321ec2d5cSBarry Smith 
284e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetConvergedReason(Tao, TaoConvergedReason *);
285e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetSolutionStatus(Tao, PetscInt *, PetscReal *, PetscReal *, PetscReal *, PetscReal *, TaoConvergedReason *);
286e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConvergedReason(Tao, TaoConvergedReason);
287a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetSolution(Tao, Vec);
288a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetSolution(Tao, Vec *);
289d71ae5a4SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use TaoSetSolution() (since version 3.17)") static inline PetscErrorCode TaoSetInitialVector(Tao t, Vec v)
290d71ae5a4SJacob Faibussowitsch {
2919371c9d4SSatish Balay   return TaoSetSolution(t, v);
2929371c9d4SSatish Balay }
293d71ae5a4SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use TaoGetSolution() (since version 3.17)") static inline PetscErrorCode TaoGetInitialVector(Tao t, Vec *v)
294d71ae5a4SJacob Faibussowitsch {
2959371c9d4SSatish Balay   return TaoGetSolution(t, v);
2969371c9d4SSatish Balay }
297a82e8c82SStefano Zampini 
298a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetObjective(Tao, PetscErrorCode (*)(Tao, Vec, PetscReal *, void *), void *);
299a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetObjective(Tao, PetscErrorCode (**)(Tao, Vec, PetscReal *, void *), void **);
300a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetGradient(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *);
301a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetGradient(Tao, Vec *, PetscErrorCode (**)(Tao, Vec, Vec, void *), void **);
302a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetObjectiveAndGradient(Tao, Vec, PetscErrorCode (*)(Tao, Vec, PetscReal *, Vec, void *), void *);
303a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetObjectiveAndGradient(Tao, Vec *, PetscErrorCode (**)(Tao, Vec, PetscReal *, Vec, void *), void **);
304a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetHessian(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *);
305a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetHessian(Tao, Mat *, Mat *, PetscErrorCode (**)(Tao, Vec, Mat, Mat, void *), void **);
306d71ae5a4SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use TaoSetObjective() (since version 3.17)") static inline PetscErrorCode TaoSetObjectiveRoutine(Tao t, PetscErrorCode (*f)(Tao, Vec, PetscReal *, void *), void *c)
307d71ae5a4SJacob Faibussowitsch {
3089371c9d4SSatish Balay   return TaoSetObjective(t, f, c);
3099371c9d4SSatish Balay }
310d71ae5a4SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use TaoGetGradient() (since version 3.17)") static inline PetscErrorCode TaoGetGradientVector(Tao t, Vec *v)
311d71ae5a4SJacob Faibussowitsch {
312*f22e26b7SPierre Jolivet   return TaoGetGradient(t, v, PETSC_NULLPTR, PETSC_NULLPTR);
3139371c9d4SSatish Balay }
314d71ae5a4SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use TaoSetGradient() (since version 3.17)") static inline PetscErrorCode TaoSetGradientRoutine(Tao t, PetscErrorCode (*f)(Tao, Vec, Vec, void *), void *c)
315d71ae5a4SJacob Faibussowitsch {
316*f22e26b7SPierre Jolivet   return TaoSetGradient(t, PETSC_NULLPTR, f, c);
3179371c9d4SSatish Balay }
318d71ae5a4SJacob 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)
319d71ae5a4SJacob Faibussowitsch {
320*f22e26b7SPierre Jolivet   return TaoSetObjectiveAndGradient(t, PETSC_NULLPTR, f, c);
3219371c9d4SSatish Balay }
322d71ae5a4SJacob 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)
323d71ae5a4SJacob Faibussowitsch {
3249371c9d4SSatish Balay   return TaoSetHessian(t, H, P, f, c);
3259371c9d4SSatish Balay }
326a82e8c82SStefano Zampini 
327a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoSetGradientNorm(Tao, Mat);
328a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoGetGradientNorm(Tao, Mat *);
329414d97d3SAlp Dener PETSC_EXTERN PetscErrorCode TaoSetLMVMMatrix(Tao, Mat);
330f5766c09SAlp Dener PETSC_EXTERN PetscErrorCode TaoGetLMVMMatrix(Tao, Mat *);
331414d97d3SAlp Dener PETSC_EXTERN PetscErrorCode TaoSetRecycleHistory(Tao, PetscBool);
332414d97d3SAlp Dener PETSC_EXTERN PetscErrorCode TaoGetRecycleHistory(Tao, PetscBool *);
333a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMSetH0(Tao, Mat);
334a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMGetH0(Tao, Mat *);
335a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMGetH0KSP(Tao, KSP *);
336b39c12a9SAlp Dener PETSC_EXTERN PetscErrorCode TaoLMVMRecycle(Tao, PetscBool);
3374a48860cSAlp Dener PETSC_EXTERN PetscErrorCode TaoSetResidualRoutine(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *);
338737f463aSAlp Dener PETSC_EXTERN PetscErrorCode TaoSetResidualWeights(Tao, Vec, PetscInt, PetscInt *, PetscInt *, PetscReal *);
339441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConstraintsRoutine(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *);
340441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInequalityConstraintsRoutine(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *);
341441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetEqualityConstraintsRoutine(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *);
3424ffbe8acSAlp Dener PETSC_EXTERN PetscErrorCode TaoSetJacobianResidualRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *);
343ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *);
344ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianStateRoutine(Tao, Mat, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, Mat, void *), void *);
34594ab13aaSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianDesignRoutine(Tao, Mat, PetscErrorCode (*)(Tao, Vec, Mat, void *), void *);
346ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianInequalityRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *);
347ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianEqualityRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *);
34821ec2d5cSBarry Smith 
349a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoPythonSetType(Tao, const char[]);
350ebead697SStefano Zampini PETSC_EXTERN PetscErrorCode TaoPythonGetType(Tao, const char *[]);
351a82e8c82SStefano Zampini 
35283a0a5c3SToby Isaac PETSC_EXTERN PetscErrorCode TaoShellSetSolve(Tao, PetscErrorCode (*)(Tao));
35383a0a5c3SToby Isaac PETSC_EXTERN PetscErrorCode TaoShellSetContext(Tao, void *);
3543ec1f749SStefano Zampini PETSC_EXTERN PetscErrorCode TaoShellGetContext(Tao, void *);
35583a0a5c3SToby Isaac 
356d71ae5a4SJacob 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)
357d71ae5a4SJacob Faibussowitsch {
3589371c9d4SSatish Balay   return TaoSetResidualRoutine(tao, res, func, ctx);
3599371c9d4SSatish Balay }
360d71ae5a4SJacob 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)
361d71ae5a4SJacob Faibussowitsch {
3629371c9d4SSatish Balay   return TaoSetResidualWeights(tao, sigma_v, n, rows, cols, vals);
3639371c9d4SSatish Balay }
364737f463aSAlp Dener 
365441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetStateDesignIS(Tao, IS, IS);
36621ec2d5cSBarry Smith 
367441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeObjective(Tao, Vec, PetscReal *);
3684a48860cSAlp Dener PETSC_EXTERN PetscErrorCode TaoComputeResidual(Tao, Vec, Vec);
369412cdd55SHong Zhang PETSC_EXTERN PetscErrorCode TaoTestGradient(Tao, Vec, Vec);
370441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeGradient(Tao, Vec, Vec);
371441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeObjectiveAndGradient(Tao, Vec, PetscReal *, Vec);
372441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeConstraints(Tao, Vec, Vec);
373441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeInequalityConstraints(Tao, Vec, Vec);
374441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeEqualityConstraints(Tao, Vec, Vec);
375441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeGradient(Tao, Vec, Vec, void *);
376441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsObjectiveDefined(Tao, PetscBool *);
377441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsGradientDefined(Tao, PetscBool *);
378441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsObjectiveAndGradientDefined(Tao, PetscBool *);
37921ec2d5cSBarry Smith 
380d71ae5a4SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use TaoComputeResidual() (since version 3.11)") static inline PetscErrorCode TaoComputeSeparableObjective(Tao tao, Vec X, Vec F)
381d71ae5a4SJacob Faibussowitsch {
3829371c9d4SSatish Balay   return TaoComputeResidual(tao, X, F);
3839371c9d4SSatish Balay }
3844a48860cSAlp Dener 
38509baa881SHong Zhang PETSC_EXTERN PetscErrorCode TaoTestHessian(Tao);
386ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeHessian(Tao, Vec, Mat, Mat);
387737f463aSAlp Dener PETSC_EXTERN PetscErrorCode TaoComputeResidualJacobian(Tao, Vec, Mat, Mat);
388ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobian(Tao, Vec, Mat, Mat);
389ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianState(Tao, Vec, Mat, Mat, Mat);
390ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianEquality(Tao, Vec, Mat, Mat);
391ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianInequality(Tao, Vec, Mat, Mat);
39294ab13aaSBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianDesign(Tao, Vec, Mat);
39321ec2d5cSBarry Smith 
394ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessian(Tao, Vec, Mat, Mat, void *);
395ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessianColor(Tao, Vec, Mat, Mat, void *);
396f4c1ad5cSStefano Zampini PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessianMFFD(Tao, Vec, Mat, Mat, void *);
397441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeDualVariables(Tao, Vec, Vec);
398441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetVariableBounds(Tao, Vec, Vec);
399441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetVariableBounds(Tao, Vec *, Vec *);
400441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetDualVariables(Tao, Vec *, Vec *);
401441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInequalityBounds(Tao, Vec, Vec);
402441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetInequalityBounds(Tao, Vec *, Vec *);
403441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetVariableBoundsRoutine(Tao, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *);
404441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeVariableBounds(Tao);
40521ec2d5cSBarry Smith 
406e52336cbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetTolerances(Tao, PetscReal *, PetscReal *, PetscReal *);
407e52336cbSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetTolerances(Tao, PetscReal, PetscReal, PetscReal);
408441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetConstraintTolerances(Tao, PetscReal *, PetscReal *);
409441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConstraintTolerances(Tao, PetscReal, PetscReal);
410441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetFunctionLowerBound(Tao, PetscReal);
411441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInitialTrustRegionRadius(Tao, PetscReal);
412441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMaximumIterations(Tao, PetscInt);
413441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMaximumFunctionEvaluations(Tao, PetscInt);
414441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetFunctionLowerBound(Tao, PetscReal *);
415441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetInitialTrustRegionRadius(Tao, PetscReal *);
416441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetCurrentTrustRegionRadius(Tao, PetscReal *);
417441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetMaximumIterations(Tao, PetscInt *);
418770232b9SCe Qin PETSC_EXTERN PetscErrorCode TaoGetCurrentFunctionEvaluations(Tao, PetscInt *);
419441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetMaximumFunctionEvaluations(Tao, PetscInt *);
4208931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetIterationNumber(Tao, PetscInt *);
4218931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoSetIterationNumber(Tao, PetscInt);
4228931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetTotalIterationNumber(Tao, PetscInt *);
4238931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoSetTotalIterationNumber(Tao, PetscInt);
42479f5d8caSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetResidualNorm(Tao, PetscReal *);
4258931d482SJason Sarich 
426b54963c9SStefano Zampini PETSC_EXTERN PetscErrorCode TaoAppendOptionsPrefix(Tao, const char[]);
427b54963c9SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetOptionsPrefix(Tao, const char *[]);
428441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoResetStatistics(Tao);
4298fcddce6SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetUpdate(Tao, PetscErrorCode (*)(Tao, PetscInt, void *), void *);
43021ec2d5cSBarry Smith 
431441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetKSP(Tao, KSP *);
432025e9500SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetLinearSolveIterations(Tao, PetscInt *);
4330f0abf79SStefano Zampini PETSC_EXTERN PetscErrorCode TaoKSPSetUseEW(Tao, PetscBool);
434235fd6e6SBarry Smith 
435235fd6e6SBarry Smith #include <petsctaolinesearch.h>
436b54963c9SStefano Zampini 
437441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetLineSearch(Tao, TaoLineSearch *);
43821ec2d5cSBarry Smith 
439ae93cb3cSJason Sarich PETSC_EXTERN PetscErrorCode TaoSetConvergenceHistory(Tao, PetscReal *, PetscReal *, PetscReal *, PetscInt *, PetscInt, PetscBool);
440ae93cb3cSJason Sarich PETSC_EXTERN PetscErrorCode TaoGetConvergenceHistory(Tao, PetscReal **, PetscReal **, PetscReal **, PetscInt **, PetscInt *);
441441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMonitor(Tao, PetscErrorCode (*)(Tao, void *), void *, PetscErrorCode (*)(void **));
442441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoCancelMonitors(Tao);
44398ea980cSBarry Smith PETSC_EXTERN PetscErrorCode TaoMonitorDefault(Tao, void *);
444d71ae5a4SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use TaoMonitorDefault() (since version 3.9)") static inline PetscErrorCode TaoDefaultMonitor(Tao tao, void *ctx)
445d71ae5a4SJacob Faibussowitsch {
4469371c9d4SSatish Balay   return TaoMonitorDefault(tao, ctx);
4479371c9d4SSatish Balay }
4488d5ead36SAlp Dener PETSC_EXTERN PetscErrorCode TaoDefaultGMonitor(Tao, void *);
449441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultSMonitor(Tao, void *);
450441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultCMonitor(Tao, void *);
451441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSolutionMonitor(Tao, void *);
452737f463aSAlp Dener PETSC_EXTERN PetscErrorCode TaoResidualMonitor(Tao, void *);
453441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGradientMonitor(Tao, void *);
454441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoStepDirectionMonitor(Tao, void *);
455441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDrawSolutionMonitor(Tao, void *);
456441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDrawStepMonitor(Tao, void *);
457441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDrawGradientMonitor(Tao, void *);
458441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoAddLineSearchCounts(Tao);
45921ec2d5cSBarry Smith 
460441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultConvergenceTest(Tao, void *);
461441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConvergenceTest(Tao, PetscErrorCode (*)(Tao, void *), void *);
46221ec2d5cSBarry Smith 
463441846f8SBarry Smith PETSC_EXTERN PetscErrorCode          TaoLCLSetStateDesignIS(Tao, IS, IS);
4643ecd9318SAlp Dener PETSC_EXTERN PetscErrorCode          TaoMonitor(Tao, PetscInt, PetscReal, PetscReal, PetscReal, PetscReal);
465e882e171SHong Zhang typedef struct _n_TaoMonitorDrawCtx *TaoMonitorDrawCtx;
466e882e171SHong Zhang PETSC_EXTERN PetscErrorCode          TaoMonitorDrawCtxCreate(MPI_Comm, const char[], const char[], int, int, int, int, PetscInt, TaoMonitorDrawCtx *);
467e882e171SHong Zhang PETSC_EXTERN PetscErrorCode          TaoMonitorDrawCtxDestroy(TaoMonitorDrawCtx *);
468737f463aSAlp Dener 
4698e85b1b3SXiang Huang PETSC_EXTERN PetscErrorCode TaoBRGNGetSubsolver(Tao, Tao *);
470a3c390cfSAlp Dener PETSC_EXTERN PetscErrorCode TaoBRGNSetRegularizerObjectiveAndGradientRoutine(Tao, PetscErrorCode (*)(Tao, Vec, PetscReal *, Vec, void *), void *);
471a3c390cfSAlp Dener PETSC_EXTERN PetscErrorCode TaoBRGNSetRegularizerHessianRoutine(Tao, Mat, PetscErrorCode (*)(Tao, Vec, Mat, void *), void *);
472a3c390cfSAlp Dener PETSC_EXTERN PetscErrorCode TaoBRGNSetRegularizerWeight(Tao, PetscReal);
4738ac80d48SXiang Huang PETSC_EXTERN PetscErrorCode TaoBRGNSetL1SmoothEpsilon(Tao, PetscReal);
4748e85b1b3SXiang Huang PETSC_EXTERN PetscErrorCode TaoBRGNSetDictionaryMatrix(Tao, Mat);
475cd1c4666STristan Konolige PETSC_EXTERN PetscErrorCode TaoBRGNGetDampingVector(Tao, Vec *);
4766285c0a3SHansol  Suh 
4776285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMGetMisfitSubsolver(Tao, Tao *);
4786285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMGetRegularizationSubsolver(Tao, Tao *);
4796285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMGetDualVector(Tao, Vec *);
4806285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMGetSpectralPenalty(Tao, PetscReal *);
4816285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetSpectralPenalty(Tao, PetscReal);
4826285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoGetADMMParentTao(Tao, Tao *);
4836285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetConstraintVectorRHS(Tao, Vec);
4846285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerCoefficient(Tao, PetscReal);
4856285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitConstraintJacobian(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *);
4866285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerConstraintJacobian(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *);
4876285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerHessianRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *);
4886285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerObjectiveAndGradientRoutine(Tao, PetscErrorCode (*)(Tao, Vec, PetscReal *, Vec, void *), void *);
4896285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitHessianRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *);
4906285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitObjectiveAndGradientRoutine(Tao, PetscErrorCode (*)(Tao, Vec, PetscReal *, Vec, void *), void *);
4916285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitHessianChangeStatus(Tao, PetscBool);
4926285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegHessianChangeStatus(Tao, PetscBool);
4936285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMinimumSpectralPenalty(Tao, PetscReal);
4946285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerType(Tao, TaoADMMRegularizerType);
4956285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMGetRegularizerType(Tao, TaoADMMRegularizerType *);
4966285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMSetUpdateType(Tao, TaoADMMUpdateType);
4976285c0a3SHansol  Suh PETSC_EXTERN PetscErrorCode TaoADMMGetUpdateType(Tao, TaoADMMUpdateType *);
498661095bbSAlp Dener 
499661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMGetType(Tao, TaoALMMType *);
500661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMSetType(Tao, TaoALMMType);
501661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMGetSubsolver(Tao, Tao *);
502661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMSetSubsolver(Tao, Tao);
503661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMGetMultipliers(Tao, Vec *);
504661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMSetMultipliers(Tao, Vec);
505661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMGetPrimalIS(Tao, IS *, IS *);
506661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMGetDualIS(Tao, IS *, IS *);
50721ec2d5cSBarry Smith #endif
508