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 14*0b4b7b1cSBarry Smith TaoSubsetType - Type representing the way the `Tao` solvers handle 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: 22*0b4b7b1cSBarry 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 36*0b4b7b1cSBarry Smith Tao - Abstract PETSc object that manages optimization solvers. 371eb8069cSJason Sarich 381eb8069cSJason Sarich Level: advanced 391eb8069cSJason Sarich 40*0b4b7b1cSBarry Smith Note: 41*0b4b7b1cSBarry Smith `Tao` is the object, while TAO, which stands for Toolkit for Advanced Optimization, is the software package. 42*0b4b7b1cSBarry Smith 431cc06b55SBarry Smith .seealso: [](doc_taosolve), [](ch_tao), `TaoCreate()`, `TaoDestroy()`, `TaoSetType()`, `TaoType` 441eb8069cSJason Sarich S*/ 4565ba42b6SBarry Smith typedef struct _p_Tao *Tao; 4621ec2d5cSBarry Smith 476285c0a3SHansol Suh /*E 48*0b4b7b1cSBarry Smith TaoADMMUpdateType - Determine the spectral penalty update routine for the Lagrange augmented term for `TAOADMM`. 496285c0a3SHansol Suh 506285c0a3SHansol Suh Level: advanced 516285c0a3SHansol Suh 521cc06b55SBarry Smith .seealso: [](ch_tao), `Tao`, `TAOADMM`, `TaoADMMSetUpdateType()` 536285c0a3SHansol Suh E*/ 549371c9d4SSatish Balay typedef enum { 559371c9d4SSatish Balay TAO_ADMM_UPDATE_BASIC, 569371c9d4SSatish Balay TAO_ADMM_UPDATE_ADAPTIVE, 579371c9d4SSatish Balay TAO_ADMM_UPDATE_ADAPTIVE_RELAXED 589371c9d4SSatish Balay } TaoADMMUpdateType; 596285c0a3SHansol Suh PETSC_EXTERN const char *const TaoADMMUpdateTypes[]; 6065ba42b6SBarry Smith 616285c0a3SHansol Suh /*MC 62*0b4b7b1cSBarry Smith TAO_ADMM_UPDATE_BASIC - Use same spectral penalty set at the beginning. This never performs an update to the penalty 636285c0a3SHansol Suh 646285c0a3SHansol Suh Level: advanced 656285c0a3SHansol Suh 6687497f52SBarry Smith Note: 67aaa8cc7dSPierre Jolivet Most basic implementation of `TAOADMM`. Generally slower than adaptive or adaptive relaxed version. 686285c0a3SHansol Suh 691cc06b55SBarry Smith .seealso: [](ch_tao), `Tao`, `TAOADMM`, `TaoADMMSetUpdateType()`, `TAO_ADMM_UPDATE_ADAPTIVE`, `TAO_ADMM_UPDATE_ADAPTIVE_RELAXED` 706285c0a3SHansol Suh M*/ 716285c0a3SHansol Suh 726285c0a3SHansol Suh /*MC 73*0b4b7b1cSBarry Smith TAO_ADMM_UPDATE_ADAPTIVE - Adaptively update the spectral penalty 746285c0a3SHansol Suh 756285c0a3SHansol Suh Level: advanced 766285c0a3SHansol Suh 7787497f52SBarry Smith Note: 7847450a7bSBarry Smith Adaptively updates spectral penalty of `TAOADMM` by using both steepest descent and minimum gradient. 796285c0a3SHansol Suh 801cc06b55SBarry Smith .seealso: [](ch_tao), `Tao`, `TAOADMM`, `TaoADMMSetUpdateType()`, `TAO_ADMM_UPDATE_BASIC`, `TAO_ADMM_UPDATE_ADAPTIVE_RELAXED` 816285c0a3SHansol Suh M*/ 826285c0a3SHansol Suh 836285c0a3SHansol Suh /*MC 846285c0a3SHansol Suh ADMM_UPDATE_ADAPTIVE_RELAXED - Adaptively update spectral penalty, and relaxes parameter update 856285c0a3SHansol Suh 866285c0a3SHansol Suh Level: advanced 876285c0a3SHansol Suh 8887497f52SBarry Smith Note: 89*0b4b7b1cSBarry Smith With adaptive spectral penalty update, it also relaxes the `x` vector update by a factor. 906285c0a3SHansol Suh 911cc06b55SBarry Smith .seealso: [](ch_tao), `Tao`, `TaoADMMSetUpdateType()`, `TAO_ADMM_UPDATE_BASIC`, `TAO_ADMM_UPDATE_ADAPTIVE` 926285c0a3SHansol Suh M*/ 936285c0a3SHansol Suh 946285c0a3SHansol Suh /*E 9547450a7bSBarry Smith TaoADMMRegularizerType - Determine regularizer routine - either user provided or soft threshold for `TAOADMM` 966285c0a3SHansol Suh 976285c0a3SHansol Suh Level: advanced 986285c0a3SHansol Suh 991cc06b55SBarry Smith .seealso: [](ch_tao), `Tao`, `TAOADMM`, `TaoADMMSetRegularizerType()` 1006285c0a3SHansol Suh E*/ 1019371c9d4SSatish Balay typedef enum { 1029371c9d4SSatish Balay TAO_ADMM_REGULARIZER_USER, 1039371c9d4SSatish Balay TAO_ADMM_REGULARIZER_SOFT_THRESH 1049371c9d4SSatish Balay } TaoADMMRegularizerType; 1056285c0a3SHansol Suh PETSC_EXTERN const char *const TaoADMMRegularizerTypes[]; 10665ba42b6SBarry Smith 1076285c0a3SHansol Suh /*MC 10887497f52SBarry Smith TAO_ADMM_REGULARIZER_USER - User provided routines for regularizer part of `TAOADMM` 1096285c0a3SHansol Suh 1106285c0a3SHansol Suh Level: advanced 1116285c0a3SHansol Suh 11287497f52SBarry Smith Note: 11387497f52SBarry Smith User needs to provided appropriate routines and type for regularizer solver 1146285c0a3SHansol Suh 1151cc06b55SBarry Smith .seealso: [](ch_tao), `Tao`, `TAOADMM`, `TaoADMMSetRegularizerType()`, `TAO_ADMM_REGULARIZER_SOFT_THRESH` 1166285c0a3SHansol Suh M*/ 1176285c0a3SHansol Suh 1186285c0a3SHansol Suh /*MC 11987497f52SBarry Smith TAO_ADMM_REGULARIZER_SOFT_THRESH - Soft threshold to solve regularizer part of `TAOADMM` 1206285c0a3SHansol Suh 1216285c0a3SHansol Suh Level: advanced 1226285c0a3SHansol Suh 12387497f52SBarry Smith Note: 12487497f52SBarry Smith Utilizes built-in SoftThreshold routines 1256285c0a3SHansol Suh 1261cc06b55SBarry Smith .seealso: [](ch_tao), `Tao`, `TAOADMM`, `TaoSoftThreshold()`, `TaoADMMSetRegularizerObjectiveAndGradientRoutine()`, 127db781477SPatrick Sanan `TaoADMMSetRegularizerHessianRoutine()`, `TaoADMMSetRegularizerType()`, `TAO_ADMM_REGULARIZER_USER` 1286285c0a3SHansol Suh M*/ 1296285c0a3SHansol Suh 130661095bbSAlp Dener /*E 13187497f52SBarry Smith TaoALMMType - Determine the augmented Lagrangian formulation used in the `TAOALMM` subproblem. 132661095bbSAlp Dener 133a1cb98faSBarry Smith Values: 134a1cb98faSBarry Smith + `TAO_ALMM_CLASSIC` - classic augmented Lagrangian definition including slack variables for inequality constraints 135*0b4b7b1cSBarry Smith - `TAO_ALMM_PHR` - Powell-Hestenes-Rockafellar formulation without slack variables, uses pointwise `min()` for inequalities 136661095bbSAlp Dener 137661095bbSAlp Dener Level: advanced 138661095bbSAlp Dener 1391cc06b55SBarry Smith .seealso: [](ch_tao), `Tao`, `TAOALMM`, `TaoALMMSetType()`, `TaoALMMGetType()` 140661095bbSAlp Dener E*/ 1419371c9d4SSatish Balay typedef enum { 1429371c9d4SSatish Balay TAO_ALMM_CLASSIC, 1439371c9d4SSatish Balay TAO_ALMM_PHR 1449371c9d4SSatish Balay } TaoALMMType; 145661095bbSAlp Dener PETSC_EXTERN const char *const TaoALMMTypes[]; 146661095bbSAlp Dener 147d6e07cdcSHong Zhang /*E 148*0b4b7b1cSBarry Smith TaoBNCGType - Determine the conjugate gradient update formula used in the `TAOBNCG` algorithm. 149d6e07cdcSHong Zhang 15095bd0b28SBarry Smith Values: 151*0b4b7b1cSBarry Smith + `TAO_BNCG_GD` - basic gradient descent, no CG update 152*0b4b7b1cSBarry Smith . `TAO_BNCG_PCGD` - preconditioned/scaled gradient descent 153*0b4b7b1cSBarry Smith . `TAO_BNCG_HS` - Hestenes-Stiefel 154*0b4b7b1cSBarry Smith . `TAO_BNCG_FR` - Fletcher-Reeves 155*0b4b7b1cSBarry Smith . `TAO_BNCG_PRP` - Polak-Ribiere-Polyak (PRP) 156*0b4b7b1cSBarry Smith . `TAO_BNCG_PRP_PLUS` - Polak-Ribiere-Polyak "plus" (PRP+) 157*0b4b7b1cSBarry Smith . `TAO_BNCG_DY` - Dai-Yuan 158*0b4b7b1cSBarry Smith . `TAO_BNCG_HZ` - Hager-Zhang (CG_DESCENT 5.3) 159*0b4b7b1cSBarry Smith . `TAO_BNCG_DK` - Dai-Kou (2013) 160*0b4b7b1cSBarry Smith . `TAO_BNCG_KD` - Kou-Dai (2015) 161*0b4b7b1cSBarry Smith . `TAO_BNCG_SSML_BFGS` - Self-Scaling Memoryless BFGS (Perry-Shanno) 162*0b4b7b1cSBarry Smith . `TAO_BNCG_SSML_DFP` - Self-Scaling Memoryless DFP 163*0b4b7b1cSBarry Smith - `TAO_BNCG_SSML_BRDN` - Self-Scaling Memoryless (Symmetric) Broyden 164af27ebaaSBarry Smith 165d6e07cdcSHong Zhang Level: advanced 166d6e07cdcSHong Zhang 167d6e07cdcSHong Zhang .seealso: `Tao`, `TAOBNCG`, `TaoBNCGSetType()`, `TaoBNCGGetType()` 168d6e07cdcSHong Zhang E*/ 169d6e07cdcSHong Zhang 170d6e07cdcSHong Zhang typedef enum { 171d6e07cdcSHong Zhang TAO_BNCG_GD, 172d6e07cdcSHong Zhang TAO_BNCG_PCGD, 173d6e07cdcSHong Zhang TAO_BNCG_HS, 174d6e07cdcSHong Zhang TAO_BNCG_FR, 175d6e07cdcSHong Zhang TAO_BNCG_PRP, 176d6e07cdcSHong Zhang TAO_BNCG_PRP_PLUS, 177d6e07cdcSHong Zhang TAO_BNCG_DY, 178d6e07cdcSHong Zhang TAO_BNCG_HZ, 179d6e07cdcSHong Zhang TAO_BNCG_DK, 180d6e07cdcSHong Zhang TAO_BNCG_KD, 181d6e07cdcSHong Zhang TAO_BNCG_SSML_BFGS, 182d6e07cdcSHong Zhang TAO_BNCG_SSML_DFP, 183d6e07cdcSHong Zhang TAO_BNCG_SSML_BRDN 184d6e07cdcSHong Zhang } TaoBNCGType; 185d6e07cdcSHong Zhang PETSC_EXTERN const char *const TaoBNCGTypes[]; 186d6e07cdcSHong Zhang 1871eb8069cSJason Sarich /*J 18887497f52SBarry Smith TaoType - String with the name of a `Tao` method 1891eb8069cSJason Sarich 19047450a7bSBarry Smith Values: 19147450a7bSBarry Smith + `TAONLS` - nls Newton's method with line search for unconstrained minimization 19247450a7bSBarry Smith . `TAONTR` - ntr Newton's method with trust region for unconstrained minimization 19347450a7bSBarry Smith . `TAONTL` - ntl Newton's method with trust region, line search for unconstrained minimization 19447450a7bSBarry Smith . `TAOLMVM` - lmvm Limited memory variable metric method for unconstrained minimization 19547450a7bSBarry Smith . `TAOCG` - cg Nonlinear conjugate gradient method for unconstrained minimization 19647450a7bSBarry Smith . `TAONM` - nm Nelder-Mead algorithm for derivate-free unconstrained minimization 19747450a7bSBarry Smith . `TAOTRON` - tron Newton Trust Region method for bound constrained minimization 19847450a7bSBarry Smith . `TAOGPCG` - gpcg Newton Trust Region method for quadratic bound constrained minimization 19947450a7bSBarry Smith . `TAOBLMVM` - blmvm Limited memory variable metric method for bound constrained minimization 20047450a7bSBarry Smith . `TAOLCL` - lcl Linearly constrained Lagrangian method for pde-constrained minimization 20116a05f60SBarry Smith - `TAOPOUNDERS` - Pounders Model-based algorithm for nonlinear least squares 20247450a7bSBarry Smith 2031eb8069cSJason Sarich Level: beginner 2041eb8069cSJason Sarich 2051cc06b55SBarry Smith .seealso: [](doc_taosolve), [](ch_tao), `Tao`, `TaoCreate()`, `TaoSetType()` 2061eb8069cSJason Sarich J*/ 207b625d6c7SJed Brown typedef const char *TaoType; 20858417fe7SBarry Smith #define TAOLMVM "lmvm" 20958417fe7SBarry Smith #define TAONLS "nls" 21058417fe7SBarry Smith #define TAONTR "ntr" 21158417fe7SBarry Smith #define TAONTL "ntl" 21258417fe7SBarry Smith #define TAOCG "cg" 21358417fe7SBarry Smith #define TAOTRON "tron" 21458417fe7SBarry Smith #define TAOOWLQN "owlqn" 21558417fe7SBarry Smith #define TAOBMRM "bmrm" 21658417fe7SBarry Smith #define TAOBLMVM "blmvm" 2176b591159SAlp Dener #define TAOBQNLS "bqnls" 218ac9112b8SAlp Dener #define TAOBNCG "bncg" 219eb910715SAlp Dener #define TAOBNLS "bnls" 220fed79b8eSAlp Dener #define TAOBNTR "bntr" 221c14b763aSAlp Dener #define TAOBNTL "bntl" 222e0ed867bSAlp Dener #define TAOBQNKLS "bqnkls" 223e0ed867bSAlp Dener #define TAOBQNKTR "bqnktr" 224e0ed867bSAlp Dener #define TAOBQNKTL "bqnktl" 22558417fe7SBarry Smith #define TAOBQPIP "bqpip" 22658417fe7SBarry Smith #define TAOGPCG "gpcg" 22758417fe7SBarry Smith #define TAONM "nm" 22858417fe7SBarry Smith #define TAOPOUNDERS "pounders" 229737f463aSAlp Dener #define TAOBRGN "brgn" 23058417fe7SBarry Smith #define TAOLCL "lcl" 23158417fe7SBarry Smith #define TAOSSILS "ssils" 23258417fe7SBarry Smith #define TAOSSFLS "ssfls" 23358417fe7SBarry Smith #define TAOASILS "asils" 23458417fe7SBarry Smith #define TAOASFLS "asfls" 23558417fe7SBarry Smith #define TAOIPM "ipm" 236aad13602SShrirang Abhyankar #define TAOPDIPM "pdipm" 23783a0a5c3SToby Isaac #define TAOSHELL "shell" 2386285c0a3SHansol Suh #define TAOADMM "admm" 239661095bbSAlp Dener #define TAOALMM "almm" 240a82e8c82SStefano Zampini #define TAOPYTHON "python" 241f4f59681SStefano Zampini #define TAOSNES "snes" 24258417fe7SBarry Smith 243441846f8SBarry Smith PETSC_EXTERN PetscClassId TAO_CLASSID; 244441846f8SBarry Smith PETSC_EXTERN PetscFunctionList TaoList; 24521ec2d5cSBarry Smith 246a35d58b8SBarry Smith /*E 24716a05f60SBarry Smith TaoConvergedReason - reason a `Tao` optimizer was said to have converged or diverged 248a35d58b8SBarry Smith 24947450a7bSBarry Smith Values: 250af27ebaaSBarry Smith + `TAO_CONVERGED_GATOL` - $||g(X)|| < gatol$ 251af27ebaaSBarry Smith . `TAO_CONVERGED_GRTOL` - $||g(X)|| / f(X) < grtol$ 252af27ebaaSBarry Smith . `TAO_CONVERGED_GTTOL` - $||g(X)|| / ||g(X0)|| < gttol$ 25347450a7bSBarry Smith . `TAO_CONVERGED_STEPTOL` - step size smaller than tolerance 254af27ebaaSBarry Smith . `TAO_CONVERGED_MINF` - $F < F_min$ 25547450a7bSBarry Smith . `TAO_CONVERGED_USER` - the user indicates the optimization has succeeded 25647450a7bSBarry Smith . `TAO_DIVERGED_MAXITS` - the maximum number of iterations allowed has been achieved 25747450a7bSBarry Smith . `TAO_DIVERGED_NAN` - not a number appeared in the computations 25847450a7bSBarry Smith . `TAO_DIVERGED_MAXFCN` - the maximum number of function evaluations has been computed 25947450a7bSBarry Smith . `TAO_DIVERGED_LS_FAILURE` - a linesearch failed 26047450a7bSBarry Smith . `TAO_DIVERGED_TR_REDUCTION` - trust region failure 26147450a7bSBarry Smith . `TAO_DIVERGED_USER` - the user has indicated the optimization has failed 26247450a7bSBarry Smith - `TAO_CONTINUE_ITERATING` - the optimization is still running, `TaoSolve()` 26347450a7bSBarry Smith 26447450a7bSBarry Smith where 26547450a7bSBarry Smith + X - current solution 26647450a7bSBarry Smith . X0 - initial guess 26747450a7bSBarry Smith . f(X) - current function value 26847450a7bSBarry Smith . f(X*) - true solution (estimated) 26947450a7bSBarry Smith . g(X) - current gradient 27047450a7bSBarry Smith . its - current iterate number 27147450a7bSBarry Smith . maxits - maximum number of iterates 27247450a7bSBarry Smith . fevals - number of function evaluations 27347450a7bSBarry Smith - max_funcsals - maximum number of function evaluations 27447450a7bSBarry Smith 275a35d58b8SBarry Smith Level: beginner 276a35d58b8SBarry Smith 27747450a7bSBarry Smith Note: 27847450a7bSBarry Smith The two most common reasons for divergence are an incorrectly coded or computed gradient or Hessian failure or lack of convergence 27947450a7bSBarry 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). 280a35d58b8SBarry Smith 28147450a7bSBarry Smith Developer Note: 28247450a7bSBarry Smith The names in `KSPConvergedReason`, `SNESConvergedReason`, and `TaoConvergedReason` should be uniformized 283a35d58b8SBarry Smith 2841cc06b55SBarry Smith .seealso: [](ch_tao), `Tao`, `TaoSolve()`, `TaoGetConvergedReason()`, `KSPConvergedReason`, `SNESConvergedReason` 285a35d58b8SBarry Smith E*/ 28621ec2d5cSBarry Smith typedef enum { /* converged */ 28721ec2d5cSBarry Smith TAO_CONVERGED_GATOL = 3, /* ||g(X)|| < gatol */ 28821ec2d5cSBarry Smith TAO_CONVERGED_GRTOL = 4, /* ||g(X)|| / f(X) < grtol */ 28921ec2d5cSBarry Smith TAO_CONVERGED_GTTOL = 5, /* ||g(X)|| / ||g(X0)|| < gttol */ 29021ec2d5cSBarry Smith TAO_CONVERGED_STEPTOL = 6, /* step size small */ 29121ec2d5cSBarry Smith TAO_CONVERGED_MINF = 7, /* F < F_min */ 29221ec2d5cSBarry Smith TAO_CONVERGED_USER = 8, /* User defined */ 29321ec2d5cSBarry Smith /* diverged */ 29421ec2d5cSBarry Smith TAO_DIVERGED_MAXITS = -2, 29521ec2d5cSBarry Smith TAO_DIVERGED_NAN = -4, 29621ec2d5cSBarry Smith TAO_DIVERGED_MAXFCN = -5, 29721ec2d5cSBarry Smith TAO_DIVERGED_LS_FAILURE = -6, 29821ec2d5cSBarry Smith TAO_DIVERGED_TR_REDUCTION = -7, 29921ec2d5cSBarry Smith TAO_DIVERGED_USER = -8, /* User defined */ 30021ec2d5cSBarry Smith /* keep going */ 3019371c9d4SSatish Balay TAO_CONTINUE_ITERATING = 0 3029371c9d4SSatish Balay } TaoConvergedReason; 30321ec2d5cSBarry Smith 304e4cb33bbSBarry Smith PETSC_EXTERN const char **TaoConvergedReasons; 30521ec2d5cSBarry Smith 30621ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoInitializePackage(void); 30721ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoFinalizePackage(void); 308441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoCreate(MPI_Comm, Tao *); 309441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetFromOptions(Tao); 310441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetUp(Tao); 311b625d6c7SJed Brown PETSC_EXTERN PetscErrorCode TaoSetType(Tao, TaoType); 312b625d6c7SJed Brown PETSC_EXTERN PetscErrorCode TaoGetType(Tao, TaoType *); 313441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetApplicationContext(Tao, void *); 314441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetApplicationContext(Tao, void *); 315441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDestroy(Tao *); 316606f75f6SBarry Smith PETSC_EXTERN PetscErrorCode TaoParametersInitialize(Tao); 31721ec2d5cSBarry Smith 318441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetOptionsPrefix(Tao, const char[]); 319441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoView(Tao, PetscViewer); 320fe2efc57SMark PETSC_EXTERN PetscErrorCode TaoViewFromOptions(Tao, PetscObject, const char[]); 32121ec2d5cSBarry Smith 322441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSolve(Tao); 32321ec2d5cSBarry Smith 324441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoRegister(const char[], PetscErrorCode (*)(Tao)); 325441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoRegisterDestroy(void); 32621ec2d5cSBarry Smith 327e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetConvergedReason(Tao, TaoConvergedReason *); 328e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetSolutionStatus(Tao, PetscInt *, PetscReal *, PetscReal *, PetscReal *, PetscReal *, TaoConvergedReason *); 329e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConvergedReason(Tao, TaoConvergedReason); 330a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetSolution(Tao, Vec); 331a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetSolution(Tao, Vec *); 332a82e8c82SStefano Zampini 333a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetObjective(Tao, PetscErrorCode (*)(Tao, Vec, PetscReal *, void *), void *); 334a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetObjective(Tao, PetscErrorCode (**)(Tao, Vec, PetscReal *, void *), void **); 335a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetGradient(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *); 336a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetGradient(Tao, Vec *, PetscErrorCode (**)(Tao, Vec, Vec, void *), void **); 337a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetObjectiveAndGradient(Tao, Vec, PetscErrorCode (*)(Tao, Vec, PetscReal *, Vec, void *), void *); 338a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetObjectiveAndGradient(Tao, Vec *, PetscErrorCode (**)(Tao, Vec, PetscReal *, Vec, void *), void **); 339a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetHessian(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *); 340a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetHessian(Tao, Mat *, Mat *, PetscErrorCode (**)(Tao, Vec, Mat, Mat, void *), void **); 341a82e8c82SStefano Zampini 342a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoSetGradientNorm(Tao, Mat); 343a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoGetGradientNorm(Tao, Mat *); 344414d97d3SAlp Dener PETSC_EXTERN PetscErrorCode TaoSetLMVMMatrix(Tao, Mat); 345f5766c09SAlp Dener PETSC_EXTERN PetscErrorCode TaoGetLMVMMatrix(Tao, Mat *); 346414d97d3SAlp Dener PETSC_EXTERN PetscErrorCode TaoSetRecycleHistory(Tao, PetscBool); 347414d97d3SAlp Dener PETSC_EXTERN PetscErrorCode TaoGetRecycleHistory(Tao, PetscBool *); 348a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMSetH0(Tao, Mat); 349a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMGetH0(Tao, Mat *); 350a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMGetH0KSP(Tao, KSP *); 351b39c12a9SAlp Dener PETSC_EXTERN PetscErrorCode TaoLMVMRecycle(Tao, PetscBool); 3524a48860cSAlp Dener PETSC_EXTERN PetscErrorCode TaoSetResidualRoutine(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *); 353737f463aSAlp Dener PETSC_EXTERN PetscErrorCode TaoSetResidualWeights(Tao, Vec, PetscInt, PetscInt *, PetscInt *, PetscReal *); 354441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConstraintsRoutine(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *); 355441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInequalityConstraintsRoutine(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *); 356441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetEqualityConstraintsRoutine(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *); 3574ffbe8acSAlp Dener PETSC_EXTERN PetscErrorCode TaoSetJacobianResidualRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *); 358ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *); 359ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianStateRoutine(Tao, Mat, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, Mat, void *), void *); 36094ab13aaSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianDesignRoutine(Tao, Mat, PetscErrorCode (*)(Tao, Vec, Mat, void *), void *); 361ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianInequalityRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *); 362ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianEqualityRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *); 36321ec2d5cSBarry Smith 364a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoPythonSetType(Tao, const char[]); 365ebead697SStefano Zampini PETSC_EXTERN PetscErrorCode TaoPythonGetType(Tao, const char *[]); 366a82e8c82SStefano Zampini 36783a0a5c3SToby Isaac PETSC_EXTERN PetscErrorCode TaoShellSetSolve(Tao, PetscErrorCode (*)(Tao)); 36883a0a5c3SToby Isaac PETSC_EXTERN PetscErrorCode TaoShellSetContext(Tao, void *); 3693ec1f749SStefano Zampini PETSC_EXTERN PetscErrorCode TaoShellGetContext(Tao, void *); 37083a0a5c3SToby Isaac 371441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetStateDesignIS(Tao, IS, IS); 37221ec2d5cSBarry Smith 373441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeObjective(Tao, Vec, PetscReal *); 3744a48860cSAlp Dener PETSC_EXTERN PetscErrorCode TaoComputeResidual(Tao, Vec, Vec); 375412cdd55SHong Zhang PETSC_EXTERN PetscErrorCode TaoTestGradient(Tao, Vec, Vec); 376441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeGradient(Tao, Vec, Vec); 377441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeObjectiveAndGradient(Tao, Vec, PetscReal *, Vec); 378441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeConstraints(Tao, Vec, Vec); 379441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeInequalityConstraints(Tao, Vec, Vec); 380441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeEqualityConstraints(Tao, Vec, Vec); 381441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeGradient(Tao, Vec, Vec, void *); 382441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsObjectiveDefined(Tao, PetscBool *); 383441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsGradientDefined(Tao, PetscBool *); 384441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsObjectiveAndGradientDefined(Tao, PetscBool *); 38521ec2d5cSBarry Smith 38609baa881SHong Zhang PETSC_EXTERN PetscErrorCode TaoTestHessian(Tao); 387ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeHessian(Tao, Vec, Mat, Mat); 388737f463aSAlp Dener PETSC_EXTERN PetscErrorCode TaoComputeResidualJacobian(Tao, Vec, Mat, Mat); 389ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobian(Tao, Vec, Mat, Mat); 390ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianState(Tao, Vec, Mat, Mat, Mat); 391ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianEquality(Tao, Vec, Mat, Mat); 392ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianInequality(Tao, Vec, Mat, Mat); 39394ab13aaSBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianDesign(Tao, Vec, Mat); 39421ec2d5cSBarry Smith 395ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessian(Tao, Vec, Mat, Mat, void *); 396ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessianColor(Tao, Vec, Mat, Mat, void *); 397f4c1ad5cSStefano Zampini PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessianMFFD(Tao, Vec, Mat, Mat, void *); 398441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeDualVariables(Tao, Vec, Vec); 399441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetVariableBounds(Tao, Vec, Vec); 400441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetVariableBounds(Tao, Vec *, Vec *); 401441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetDualVariables(Tao, Vec *, Vec *); 402441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInequalityBounds(Tao, Vec, Vec); 403441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetInequalityBounds(Tao, Vec *, Vec *); 404441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetVariableBoundsRoutine(Tao, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *); 405441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeVariableBounds(Tao); 40621ec2d5cSBarry Smith 407e52336cbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetTolerances(Tao, PetscReal *, PetscReal *, PetscReal *); 408e52336cbSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetTolerances(Tao, PetscReal, PetscReal, PetscReal); 409441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetConstraintTolerances(Tao, PetscReal *, PetscReal *); 410441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConstraintTolerances(Tao, PetscReal, PetscReal); 411441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetFunctionLowerBound(Tao, PetscReal); 412441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInitialTrustRegionRadius(Tao, PetscReal); 413441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMaximumIterations(Tao, PetscInt); 414441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMaximumFunctionEvaluations(Tao, PetscInt); 415441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetFunctionLowerBound(Tao, PetscReal *); 416441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetInitialTrustRegionRadius(Tao, PetscReal *); 417441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetCurrentTrustRegionRadius(Tao, PetscReal *); 418441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetMaximumIterations(Tao, PetscInt *); 419770232b9SCe Qin PETSC_EXTERN PetscErrorCode TaoGetCurrentFunctionEvaluations(Tao, PetscInt *); 420441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetMaximumFunctionEvaluations(Tao, PetscInt *); 4218931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetIterationNumber(Tao, PetscInt *); 4228931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoSetIterationNumber(Tao, PetscInt); 4238931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetTotalIterationNumber(Tao, PetscInt *); 4248931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoSetTotalIterationNumber(Tao, PetscInt); 42579f5d8caSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetResidualNorm(Tao, PetscReal *); 4268931d482SJason Sarich 427b54963c9SStefano Zampini PETSC_EXTERN PetscErrorCode TaoAppendOptionsPrefix(Tao, const char[]); 428b54963c9SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetOptionsPrefix(Tao, const char *[]); 429441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoResetStatistics(Tao); 4308fcddce6SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetUpdate(Tao, PetscErrorCode (*)(Tao, PetscInt, void *), void *); 43121ec2d5cSBarry Smith 432441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetKSP(Tao, KSP *); 433025e9500SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetLinearSolveIterations(Tao, PetscInt *); 4340f0abf79SStefano Zampini PETSC_EXTERN PetscErrorCode TaoKSPSetUseEW(Tao, PetscBool); 435235fd6e6SBarry Smith 436235fd6e6SBarry Smith #include <petsctaolinesearch.h> 437b54963c9SStefano Zampini 438441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetLineSearch(Tao, TaoLineSearch *); 43921ec2d5cSBarry Smith 440ae93cb3cSJason Sarich PETSC_EXTERN PetscErrorCode TaoSetConvergenceHistory(Tao, PetscReal *, PetscReal *, PetscReal *, PetscInt *, PetscInt, PetscBool); 441ae93cb3cSJason Sarich PETSC_EXTERN PetscErrorCode TaoGetConvergenceHistory(Tao, PetscReal **, PetscReal **, PetscReal **, PetscInt **, PetscInt *); 44210978b7dSBarry Smith PETSC_EXTERN PetscErrorCode TaoMonitorSet(Tao, PetscErrorCode (*)(Tao, void *), void *, PetscErrorCode (*)(void **)); 443b2dc45ddSPierre Jolivet PETSC_EXTERN PetscErrorCode TaoMonitorCancel(Tao); 44498ea980cSBarry Smith PETSC_EXTERN PetscErrorCode TaoMonitorDefault(Tao, void *); 44510978b7dSBarry Smith PETSC_EXTERN PetscErrorCode TaoMonitorGlobalization(Tao, void *); 44610978b7dSBarry Smith PETSC_EXTERN PetscErrorCode TaoMonitorDefaultShort(Tao, void *); 44710978b7dSBarry Smith PETSC_EXTERN PetscErrorCode TaoMonitorConstraintNorm(Tao, void *); 44810978b7dSBarry Smith PETSC_EXTERN PetscErrorCode TaoMonitorSolution(Tao, void *); 44910978b7dSBarry Smith PETSC_EXTERN PetscErrorCode TaoMonitorResidual(Tao, void *); 45010978b7dSBarry Smith PETSC_EXTERN PetscErrorCode TaoMonitorGradient(Tao, void *); 45110978b7dSBarry Smith PETSC_EXTERN PetscErrorCode TaoMonitorStep(Tao, void *); 45210978b7dSBarry Smith PETSC_EXTERN PetscErrorCode TaoMonitorSolutionDraw(Tao, void *); 45310978b7dSBarry Smith PETSC_EXTERN PetscErrorCode TaoMonitorStepDraw(Tao, void *); 45410978b7dSBarry Smith PETSC_EXTERN PetscErrorCode TaoMonitorGradientDraw(Tao, void *); 455441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoAddLineSearchCounts(Tao); 45621ec2d5cSBarry Smith 457441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultConvergenceTest(Tao, void *); 458441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConvergenceTest(Tao, PetscErrorCode (*)(Tao, void *), void *); 45921ec2d5cSBarry Smith 460441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoLCLSetStateDesignIS(Tao, IS, IS); 4613ecd9318SAlp Dener PETSC_EXTERN PetscErrorCode TaoMonitor(Tao, PetscInt, PetscReal, PetscReal, PetscReal, PetscReal); 462e882e171SHong Zhang typedef struct _n_TaoMonitorDrawCtx *TaoMonitorDrawCtx; 463e882e171SHong Zhang PETSC_EXTERN PetscErrorCode TaoMonitorDrawCtxCreate(MPI_Comm, const char[], const char[], int, int, int, int, PetscInt, TaoMonitorDrawCtx *); 464e882e171SHong Zhang PETSC_EXTERN PetscErrorCode TaoMonitorDrawCtxDestroy(TaoMonitorDrawCtx *); 465737f463aSAlp Dener 4668e85b1b3SXiang Huang PETSC_EXTERN PetscErrorCode TaoBRGNGetSubsolver(Tao, Tao *); 467a3c390cfSAlp Dener PETSC_EXTERN PetscErrorCode TaoBRGNSetRegularizerObjectiveAndGradientRoutine(Tao, PetscErrorCode (*)(Tao, Vec, PetscReal *, Vec, void *), void *); 468a3c390cfSAlp Dener PETSC_EXTERN PetscErrorCode TaoBRGNSetRegularizerHessianRoutine(Tao, Mat, PetscErrorCode (*)(Tao, Vec, Mat, void *), void *); 469a3c390cfSAlp Dener PETSC_EXTERN PetscErrorCode TaoBRGNSetRegularizerWeight(Tao, PetscReal); 4708ac80d48SXiang Huang PETSC_EXTERN PetscErrorCode TaoBRGNSetL1SmoothEpsilon(Tao, PetscReal); 4718e85b1b3SXiang Huang PETSC_EXTERN PetscErrorCode TaoBRGNSetDictionaryMatrix(Tao, Mat); 472cd1c4666STristan Konolige PETSC_EXTERN PetscErrorCode TaoBRGNGetDampingVector(Tao, Vec *); 473d6e07cdcSHong Zhang PETSC_EXTERN PetscErrorCode TaoBNCGSetType(Tao, TaoBNCGType); 474d6e07cdcSHong Zhang PETSC_EXTERN PetscErrorCode TaoBNCGGetType(Tao, TaoBNCGType *); 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); 484b4623fecSHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMGetRegularizerCoefficient(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 *); 5073b242c63SJacob Faibussowitsch 5083b242c63SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode TaoVecGetSubVec(Vec, IS, TaoSubsetType, PetscReal, Vec *); 5093b242c63SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode TaoMatGetSubMat(Mat, IS, Vec, TaoSubsetType, Mat *); 5103b242c63SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode TaoGradientNorm(Tao, Vec, NormType, PetscReal *); 5113b242c63SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode TaoEstimateActiveBounds(Vec, Vec, Vec, Vec, Vec, Vec, PetscReal, PetscReal *, IS *, IS *, IS *, IS *, IS *); 5123b242c63SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode TaoBoundStep(Vec, Vec, Vec, IS, IS, IS, PetscReal, Vec); 5133b242c63SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode TaoBoundSolution(Vec, Vec, Vec, PetscReal, PetscInt *, Vec); 51410978b7dSBarry Smith 515cc4c1da9SBarry Smith PETSC_EXTERN PetscErrorCode MatCreateSubMatrixFree(Mat, IS, IS, Mat *); 516cc4c1da9SBarry Smith 51710978b7dSBarry Smith #include <petsctao_deprecations.h> 518