1a4963045SJacob Faibussowitsch #pragma once 221ec2d5cSBarry Smith 3aad13602SShrirang Abhyankar #include <petscsnes.h> 421ec2d5cSBarry Smith 5ac09b921SBarry Smith /* SUBMANSEC = Tao */ 6ac09b921SBarry Smith 7b54963c9SStefano Zampini PETSC_EXTERN PetscErrorCode MatDSFischer(Mat, Vec, Vec, Vec, Vec, PetscReal, Vec, Vec, Vec, Vec, Vec); 88370d7cdSHansol Suh PETSC_EXTERN PetscErrorCode TaoSoftThreshold(Vec, PetscReal, PetscReal, Vec); 921ec2d5cSBarry Smith 1021ec2d5cSBarry Smith /*E 110b4b7b1cSBarry Smith TaoSubsetType - Type representing the way the `Tao` solvers handle active sets 1221ec2d5cSBarry Smith 1347450a7bSBarry Smith Values: 1487497f52SBarry Smith + `TAO_SUBSET_SUBVEC` - Tao uses `MatCreateSubMatrix()` and `VecGetSubVector()` 1565ba42b6SBarry Smith . `TAO_SUBSET_MASK` - Matrices are zeroed out corresponding to active set entries 1665ba42b6SBarry Smith - `TAO_SUBSET_MATRIXFREE` - Same as `TAO_SUBSET_MASK` but it can be applied to matrix-free operators 1721ec2d5cSBarry Smith 1847450a7bSBarry Smith Options database Key: 190b4b7b1cSBarry Smith . -different_hessian - `Tao` will use a copy of the Hessian operator for masking. By default `Tao` will directly alter the Hessian operator. 2047450a7bSBarry Smith 211eb8069cSJason Sarich Level: intermediate 2221ec2d5cSBarry Smith 231cc06b55SBarry Smith .seealso: [](ch_tao), `TaoVecGetSubVec()`, `TaoMatGetSubMat()`, `Tao`, `TaoCreate()`, `TaoDestroy()`, `TaoSetType()`, `TaoType` 2421ec2d5cSBarry Smith E*/ 259371c9d4SSatish Balay typedef enum { 269371c9d4SSatish Balay TAO_SUBSET_SUBVEC, 279371c9d4SSatish Balay TAO_SUBSET_MASK, 289371c9d4SSatish Balay TAO_SUBSET_MATRIXFREE 299371c9d4SSatish Balay } TaoSubsetType; 3021ec2d5cSBarry Smith PETSC_EXTERN const char *const TaoSubsetTypes[]; 3165ba42b6SBarry Smith 321eb8069cSJason Sarich /*S 330b4b7b1cSBarry Smith Tao - Abstract PETSc object that manages optimization solvers. 341eb8069cSJason Sarich 351eb8069cSJason Sarich Level: advanced 361eb8069cSJason Sarich 370b4b7b1cSBarry Smith Note: 380b4b7b1cSBarry Smith `Tao` is the object, while TAO, which stands for Toolkit for Advanced Optimization, is the software package. 390b4b7b1cSBarry Smith 401cc06b55SBarry Smith .seealso: [](doc_taosolve), [](ch_tao), `TaoCreate()`, `TaoDestroy()`, `TaoSetType()`, `TaoType` 411eb8069cSJason Sarich S*/ 4265ba42b6SBarry Smith typedef struct _p_Tao *Tao; 4321ec2d5cSBarry Smith 446285c0a3SHansol Suh /*E 450b4b7b1cSBarry Smith TaoADMMUpdateType - Determine the spectral penalty update routine for the Lagrange augmented term for `TAOADMM`. 466285c0a3SHansol Suh 476285c0a3SHansol Suh Level: advanced 486285c0a3SHansol Suh 491cc06b55SBarry Smith .seealso: [](ch_tao), `Tao`, `TAOADMM`, `TaoADMMSetUpdateType()` 506285c0a3SHansol Suh E*/ 519371c9d4SSatish Balay typedef enum { 529371c9d4SSatish Balay TAO_ADMM_UPDATE_BASIC, 539371c9d4SSatish Balay TAO_ADMM_UPDATE_ADAPTIVE, 549371c9d4SSatish Balay TAO_ADMM_UPDATE_ADAPTIVE_RELAXED 559371c9d4SSatish Balay } TaoADMMUpdateType; 566285c0a3SHansol Suh PETSC_EXTERN const char *const TaoADMMUpdateTypes[]; 5765ba42b6SBarry Smith 586285c0a3SHansol Suh /*MC 590b4b7b1cSBarry Smith TAO_ADMM_UPDATE_BASIC - Use same spectral penalty set at the beginning. This never performs an update to the penalty 606285c0a3SHansol Suh 616285c0a3SHansol Suh Level: advanced 626285c0a3SHansol Suh 6387497f52SBarry Smith Note: 64aaa8cc7dSPierre Jolivet Most basic implementation of `TAOADMM`. Generally slower than adaptive or adaptive relaxed version. 656285c0a3SHansol Suh 661cc06b55SBarry Smith .seealso: [](ch_tao), `Tao`, `TAOADMM`, `TaoADMMSetUpdateType()`, `TAO_ADMM_UPDATE_ADAPTIVE`, `TAO_ADMM_UPDATE_ADAPTIVE_RELAXED` 676285c0a3SHansol Suh M*/ 686285c0a3SHansol Suh 696285c0a3SHansol Suh /*MC 700b4b7b1cSBarry Smith TAO_ADMM_UPDATE_ADAPTIVE - Adaptively update the spectral penalty 716285c0a3SHansol Suh 726285c0a3SHansol Suh Level: advanced 736285c0a3SHansol Suh 7487497f52SBarry Smith Note: 7547450a7bSBarry Smith Adaptively updates spectral penalty of `TAOADMM` by using both steepest descent and minimum gradient. 766285c0a3SHansol Suh 771cc06b55SBarry Smith .seealso: [](ch_tao), `Tao`, `TAOADMM`, `TaoADMMSetUpdateType()`, `TAO_ADMM_UPDATE_BASIC`, `TAO_ADMM_UPDATE_ADAPTIVE_RELAXED` 786285c0a3SHansol Suh M*/ 796285c0a3SHansol Suh 806285c0a3SHansol Suh /*MC 816285c0a3SHansol Suh ADMM_UPDATE_ADAPTIVE_RELAXED - Adaptively update spectral penalty, and relaxes parameter update 826285c0a3SHansol Suh 836285c0a3SHansol Suh Level: advanced 846285c0a3SHansol Suh 8587497f52SBarry Smith Note: 860b4b7b1cSBarry Smith With adaptive spectral penalty update, it also relaxes the `x` vector update by a factor. 876285c0a3SHansol Suh 881cc06b55SBarry Smith .seealso: [](ch_tao), `Tao`, `TaoADMMSetUpdateType()`, `TAO_ADMM_UPDATE_BASIC`, `TAO_ADMM_UPDATE_ADAPTIVE` 896285c0a3SHansol Suh M*/ 906285c0a3SHansol Suh 916285c0a3SHansol Suh /*E 9247450a7bSBarry Smith TaoADMMRegularizerType - Determine regularizer routine - either user provided or soft threshold for `TAOADMM` 936285c0a3SHansol Suh 946285c0a3SHansol Suh Level: advanced 956285c0a3SHansol Suh 961cc06b55SBarry Smith .seealso: [](ch_tao), `Tao`, `TAOADMM`, `TaoADMMSetRegularizerType()` 976285c0a3SHansol Suh E*/ 989371c9d4SSatish Balay typedef enum { 999371c9d4SSatish Balay TAO_ADMM_REGULARIZER_USER, 1009371c9d4SSatish Balay TAO_ADMM_REGULARIZER_SOFT_THRESH 1019371c9d4SSatish Balay } TaoADMMRegularizerType; 1026285c0a3SHansol Suh PETSC_EXTERN const char *const TaoADMMRegularizerTypes[]; 10365ba42b6SBarry Smith 1046285c0a3SHansol Suh /*MC 10587497f52SBarry Smith TAO_ADMM_REGULARIZER_USER - User provided routines for regularizer part of `TAOADMM` 1066285c0a3SHansol Suh 1076285c0a3SHansol Suh Level: advanced 1086285c0a3SHansol Suh 10987497f52SBarry Smith Note: 11087497f52SBarry Smith User needs to provided appropriate routines and type for regularizer solver 1116285c0a3SHansol Suh 1121cc06b55SBarry Smith .seealso: [](ch_tao), `Tao`, `TAOADMM`, `TaoADMMSetRegularizerType()`, `TAO_ADMM_REGULARIZER_SOFT_THRESH` 1136285c0a3SHansol Suh M*/ 1146285c0a3SHansol Suh 1156285c0a3SHansol Suh /*MC 11687497f52SBarry Smith TAO_ADMM_REGULARIZER_SOFT_THRESH - Soft threshold to solve regularizer part of `TAOADMM` 1176285c0a3SHansol Suh 1186285c0a3SHansol Suh Level: advanced 1196285c0a3SHansol Suh 12087497f52SBarry Smith Note: 12187497f52SBarry Smith Utilizes built-in SoftThreshold routines 1226285c0a3SHansol Suh 1231cc06b55SBarry Smith .seealso: [](ch_tao), `Tao`, `TAOADMM`, `TaoSoftThreshold()`, `TaoADMMSetRegularizerObjectiveAndGradientRoutine()`, 124db781477SPatrick Sanan `TaoADMMSetRegularizerHessianRoutine()`, `TaoADMMSetRegularizerType()`, `TAO_ADMM_REGULARIZER_USER` 1256285c0a3SHansol Suh M*/ 1266285c0a3SHansol Suh 127661095bbSAlp Dener /*E 12887497f52SBarry Smith TaoALMMType - Determine the augmented Lagrangian formulation used in the `TAOALMM` subproblem. 129661095bbSAlp Dener 130a1cb98faSBarry Smith Values: 131a1cb98faSBarry Smith + `TAO_ALMM_CLASSIC` - classic augmented Lagrangian definition including slack variables for inequality constraints 1320b4b7b1cSBarry Smith - `TAO_ALMM_PHR` - Powell-Hestenes-Rockafellar formulation without slack variables, uses pointwise `min()` for inequalities 133661095bbSAlp Dener 134661095bbSAlp Dener Level: advanced 135661095bbSAlp Dener 1361cc06b55SBarry Smith .seealso: [](ch_tao), `Tao`, `TAOALMM`, `TaoALMMSetType()`, `TaoALMMGetType()` 137661095bbSAlp Dener E*/ 1389371c9d4SSatish Balay typedef enum { 1399371c9d4SSatish Balay TAO_ALMM_CLASSIC, 1409371c9d4SSatish Balay TAO_ALMM_PHR 1419371c9d4SSatish Balay } TaoALMMType; 142661095bbSAlp Dener PETSC_EXTERN const char *const TaoALMMTypes[]; 143661095bbSAlp Dener 144d6e07cdcSHong Zhang /*E 1450b4b7b1cSBarry Smith TaoBNCGType - Determine the conjugate gradient update formula used in the `TAOBNCG` algorithm. 146d6e07cdcSHong Zhang 14795bd0b28SBarry Smith Values: 1480b4b7b1cSBarry Smith + `TAO_BNCG_GD` - basic gradient descent, no CG update 1490b4b7b1cSBarry Smith . `TAO_BNCG_PCGD` - preconditioned/scaled gradient descent 1500b4b7b1cSBarry Smith . `TAO_BNCG_HS` - Hestenes-Stiefel 1510b4b7b1cSBarry Smith . `TAO_BNCG_FR` - Fletcher-Reeves 1520b4b7b1cSBarry Smith . `TAO_BNCG_PRP` - Polak-Ribiere-Polyak (PRP) 1530b4b7b1cSBarry Smith . `TAO_BNCG_PRP_PLUS` - Polak-Ribiere-Polyak "plus" (PRP+) 1540b4b7b1cSBarry Smith . `TAO_BNCG_DY` - Dai-Yuan 1550b4b7b1cSBarry Smith . `TAO_BNCG_HZ` - Hager-Zhang (CG_DESCENT 5.3) 1560b4b7b1cSBarry Smith . `TAO_BNCG_DK` - Dai-Kou (2013) 1570b4b7b1cSBarry Smith . `TAO_BNCG_KD` - Kou-Dai (2015) 1580b4b7b1cSBarry Smith . `TAO_BNCG_SSML_BFGS` - Self-Scaling Memoryless BFGS (Perry-Shanno) 1590b4b7b1cSBarry Smith . `TAO_BNCG_SSML_DFP` - Self-Scaling Memoryless DFP 1600b4b7b1cSBarry Smith - `TAO_BNCG_SSML_BRDN` - Self-Scaling Memoryless (Symmetric) Broyden 161af27ebaaSBarry Smith 162d6e07cdcSHong Zhang Level: advanced 163d6e07cdcSHong Zhang 164d6e07cdcSHong Zhang .seealso: `Tao`, `TAOBNCG`, `TaoBNCGSetType()`, `TaoBNCGGetType()` 165d6e07cdcSHong Zhang E*/ 166d6e07cdcSHong Zhang 167d6e07cdcSHong Zhang typedef enum { 168d6e07cdcSHong Zhang TAO_BNCG_GD, 169d6e07cdcSHong Zhang TAO_BNCG_PCGD, 170d6e07cdcSHong Zhang TAO_BNCG_HS, 171d6e07cdcSHong Zhang TAO_BNCG_FR, 172d6e07cdcSHong Zhang TAO_BNCG_PRP, 173d6e07cdcSHong Zhang TAO_BNCG_PRP_PLUS, 174d6e07cdcSHong Zhang TAO_BNCG_DY, 175d6e07cdcSHong Zhang TAO_BNCG_HZ, 176d6e07cdcSHong Zhang TAO_BNCG_DK, 177d6e07cdcSHong Zhang TAO_BNCG_KD, 178d6e07cdcSHong Zhang TAO_BNCG_SSML_BFGS, 179d6e07cdcSHong Zhang TAO_BNCG_SSML_DFP, 180d6e07cdcSHong Zhang TAO_BNCG_SSML_BRDN 181d6e07cdcSHong Zhang } TaoBNCGType; 182d6e07cdcSHong Zhang PETSC_EXTERN const char *const TaoBNCGTypes[]; 183d6e07cdcSHong Zhang 1841eb8069cSJason Sarich /*J 18587497f52SBarry Smith TaoType - String with the name of a `Tao` method 1861eb8069cSJason Sarich 18747450a7bSBarry Smith Values: 18847450a7bSBarry Smith + `TAONLS` - nls Newton's method with line search for unconstrained minimization 18947450a7bSBarry Smith . `TAONTR` - ntr Newton's method with trust region for unconstrained minimization 19047450a7bSBarry Smith . `TAONTL` - ntl Newton's method with trust region, line search for unconstrained minimization 19147450a7bSBarry Smith . `TAOLMVM` - lmvm Limited memory variable metric method for unconstrained minimization 19247450a7bSBarry Smith . `TAOCG` - cg Nonlinear conjugate gradient method for unconstrained minimization 19347450a7bSBarry Smith . `TAONM` - nm Nelder-Mead algorithm for derivate-free unconstrained minimization 19447450a7bSBarry Smith . `TAOTRON` - tron Newton Trust Region method for bound constrained minimization 19547450a7bSBarry Smith . `TAOGPCG` - gpcg Newton Trust Region method for quadratic bound constrained minimization 19647450a7bSBarry Smith . `TAOBLMVM` - blmvm Limited memory variable metric method for bound constrained minimization 19747450a7bSBarry Smith . `TAOLCL` - lcl Linearly constrained Lagrangian method for pde-constrained minimization 19816a05f60SBarry Smith - `TAOPOUNDERS` - Pounders Model-based algorithm for nonlinear least squares 19947450a7bSBarry Smith 2001eb8069cSJason Sarich Level: beginner 2011eb8069cSJason Sarich 2021cc06b55SBarry Smith .seealso: [](doc_taosolve), [](ch_tao), `Tao`, `TaoCreate()`, `TaoSetType()` 2031eb8069cSJason Sarich J*/ 204b625d6c7SJed Brown typedef const char *TaoType; 20558417fe7SBarry Smith #define TAOLMVM "lmvm" 20658417fe7SBarry Smith #define TAONLS "nls" 20758417fe7SBarry Smith #define TAONTR "ntr" 20858417fe7SBarry Smith #define TAONTL "ntl" 20958417fe7SBarry Smith #define TAOCG "cg" 21058417fe7SBarry Smith #define TAOTRON "tron" 21158417fe7SBarry Smith #define TAOOWLQN "owlqn" 21258417fe7SBarry Smith #define TAOBMRM "bmrm" 21358417fe7SBarry Smith #define TAOBLMVM "blmvm" 2146b591159SAlp Dener #define TAOBQNLS "bqnls" 215ac9112b8SAlp Dener #define TAOBNCG "bncg" 216eb910715SAlp Dener #define TAOBNLS "bnls" 217fed79b8eSAlp Dener #define TAOBNTR "bntr" 218c14b763aSAlp Dener #define TAOBNTL "bntl" 219e0ed867bSAlp Dener #define TAOBQNKLS "bqnkls" 220e0ed867bSAlp Dener #define TAOBQNKTR "bqnktr" 221e0ed867bSAlp Dener #define TAOBQNKTL "bqnktl" 22258417fe7SBarry Smith #define TAOBQPIP "bqpip" 22358417fe7SBarry Smith #define TAOGPCG "gpcg" 22458417fe7SBarry Smith #define TAONM "nm" 22558417fe7SBarry Smith #define TAOPOUNDERS "pounders" 226737f463aSAlp Dener #define TAOBRGN "brgn" 22758417fe7SBarry Smith #define TAOLCL "lcl" 22858417fe7SBarry Smith #define TAOSSILS "ssils" 22958417fe7SBarry Smith #define TAOSSFLS "ssfls" 23058417fe7SBarry Smith #define TAOASILS "asils" 23158417fe7SBarry Smith #define TAOASFLS "asfls" 23258417fe7SBarry Smith #define TAOIPM "ipm" 233aad13602SShrirang Abhyankar #define TAOPDIPM "pdipm" 23483a0a5c3SToby Isaac #define TAOSHELL "shell" 2356285c0a3SHansol Suh #define TAOADMM "admm" 236661095bbSAlp Dener #define TAOALMM "almm" 237a82e8c82SStefano Zampini #define TAOPYTHON "python" 238f4f59681SStefano Zampini #define TAOSNES "snes" 23958417fe7SBarry Smith 240441846f8SBarry Smith PETSC_EXTERN PetscClassId TAO_CLASSID; 241441846f8SBarry Smith PETSC_EXTERN PetscFunctionList TaoList; 24221ec2d5cSBarry Smith 243a35d58b8SBarry Smith /*E 24416a05f60SBarry Smith TaoConvergedReason - reason a `Tao` optimizer was said to have converged or diverged 245a35d58b8SBarry Smith 24647450a7bSBarry Smith Values: 247af27ebaaSBarry Smith + `TAO_CONVERGED_GATOL` - $||g(X)|| < gatol$ 248af27ebaaSBarry Smith . `TAO_CONVERGED_GRTOL` - $||g(X)|| / f(X) < grtol$ 249af27ebaaSBarry Smith . `TAO_CONVERGED_GTTOL` - $||g(X)|| / ||g(X0)|| < gttol$ 25047450a7bSBarry Smith . `TAO_CONVERGED_STEPTOL` - step size smaller than tolerance 251af27ebaaSBarry Smith . `TAO_CONVERGED_MINF` - $F < F_min$ 25247450a7bSBarry Smith . `TAO_CONVERGED_USER` - the user indicates the optimization has succeeded 25347450a7bSBarry Smith . `TAO_DIVERGED_MAXITS` - the maximum number of iterations allowed has been achieved 25447450a7bSBarry Smith . `TAO_DIVERGED_NAN` - not a number appeared in the computations 25547450a7bSBarry Smith . `TAO_DIVERGED_MAXFCN` - the maximum number of function evaluations has been computed 25647450a7bSBarry Smith . `TAO_DIVERGED_LS_FAILURE` - a linesearch failed 25747450a7bSBarry Smith . `TAO_DIVERGED_TR_REDUCTION` - trust region failure 25847450a7bSBarry Smith . `TAO_DIVERGED_USER` - the user has indicated the optimization has failed 25947450a7bSBarry Smith - `TAO_CONTINUE_ITERATING` - the optimization is still running, `TaoSolve()` 26047450a7bSBarry Smith 26147450a7bSBarry Smith where 26247450a7bSBarry Smith + X - current solution 26347450a7bSBarry Smith . X0 - initial guess 26447450a7bSBarry Smith . f(X) - current function value 26547450a7bSBarry Smith . f(X*) - true solution (estimated) 26647450a7bSBarry Smith . g(X) - current gradient 26747450a7bSBarry Smith . its - current iterate number 26847450a7bSBarry Smith . maxits - maximum number of iterates 26947450a7bSBarry Smith . fevals - number of function evaluations 27047450a7bSBarry Smith - max_funcsals - maximum number of function evaluations 27147450a7bSBarry Smith 272a35d58b8SBarry Smith Level: beginner 273a35d58b8SBarry Smith 27447450a7bSBarry Smith Note: 27547450a7bSBarry Smith The two most common reasons for divergence are an incorrectly coded or computed gradient or Hessian failure or lack of convergence 27647450a7bSBarry Smith in the linear system solve (in this case we recommend testing with `-pc_type lu` to eliminate the linear solver as the cause of the problem). 277a35d58b8SBarry Smith 27847450a7bSBarry Smith Developer Note: 27947450a7bSBarry Smith The names in `KSPConvergedReason`, `SNESConvergedReason`, and `TaoConvergedReason` should be uniformized 280a35d58b8SBarry Smith 2811cc06b55SBarry Smith .seealso: [](ch_tao), `Tao`, `TaoSolve()`, `TaoGetConvergedReason()`, `KSPConvergedReason`, `SNESConvergedReason` 282a35d58b8SBarry Smith E*/ 28321ec2d5cSBarry Smith typedef enum { /* converged */ 28421ec2d5cSBarry Smith TAO_CONVERGED_GATOL = 3, /* ||g(X)|| < gatol */ 28521ec2d5cSBarry Smith TAO_CONVERGED_GRTOL = 4, /* ||g(X)|| / f(X) < grtol */ 28621ec2d5cSBarry Smith TAO_CONVERGED_GTTOL = 5, /* ||g(X)|| / ||g(X0)|| < gttol */ 28721ec2d5cSBarry Smith TAO_CONVERGED_STEPTOL = 6, /* step size small */ 28821ec2d5cSBarry Smith TAO_CONVERGED_MINF = 7, /* F < F_min */ 28921ec2d5cSBarry Smith TAO_CONVERGED_USER = 8, /* User defined */ 29021ec2d5cSBarry Smith /* diverged */ 29121ec2d5cSBarry Smith TAO_DIVERGED_MAXITS = -2, 29221ec2d5cSBarry Smith TAO_DIVERGED_NAN = -4, 29321ec2d5cSBarry Smith TAO_DIVERGED_MAXFCN = -5, 29421ec2d5cSBarry Smith TAO_DIVERGED_LS_FAILURE = -6, 29521ec2d5cSBarry Smith TAO_DIVERGED_TR_REDUCTION = -7, 29621ec2d5cSBarry Smith TAO_DIVERGED_USER = -8, /* User defined */ 29721ec2d5cSBarry Smith /* keep going */ 2989371c9d4SSatish Balay TAO_CONTINUE_ITERATING = 0 2999371c9d4SSatish Balay } TaoConvergedReason; 30021ec2d5cSBarry Smith 301e4cb33bbSBarry Smith PETSC_EXTERN const char **TaoConvergedReasons; 30221ec2d5cSBarry Smith 30321ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoInitializePackage(void); 30421ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoFinalizePackage(void); 305441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoCreate(MPI_Comm, Tao *); 306441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetFromOptions(Tao); 307441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetUp(Tao); 308b625d6c7SJed Brown PETSC_EXTERN PetscErrorCode TaoSetType(Tao, TaoType); 309b625d6c7SJed Brown PETSC_EXTERN PetscErrorCode TaoGetType(Tao, TaoType *); 3102a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetApplicationContext(Tao, PetscCtx); 3112a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetApplicationContext(Tao, PetscCtxRt); 312441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDestroy(Tao *); 313606f75f6SBarry Smith PETSC_EXTERN PetscErrorCode TaoParametersInitialize(Tao); 31421ec2d5cSBarry Smith 315441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetOptionsPrefix(Tao, const char[]); 316441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoView(Tao, PetscViewer); 317fe2efc57SMark PETSC_EXTERN PetscErrorCode TaoViewFromOptions(Tao, PetscObject, const char[]); 31821ec2d5cSBarry Smith 319441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSolve(Tao); 32021ec2d5cSBarry Smith 321441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoRegister(const char[], PetscErrorCode (*)(Tao)); 322441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoRegisterDestroy(void); 32321ec2d5cSBarry Smith 324e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetConvergedReason(Tao, TaoConvergedReason *); 325e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetSolutionStatus(Tao, PetscInt *, PetscReal *, PetscReal *, PetscReal *, PetscReal *, TaoConvergedReason *); 326e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConvergedReason(Tao, TaoConvergedReason); 327a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetSolution(Tao, Vec); 328a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetSolution(Tao, Vec *); 329a82e8c82SStefano Zampini 3302a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetObjective(Tao, PetscErrorCode (*)(Tao, Vec, PetscReal *, PetscCtx), PetscCtx); 3312a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetObjective(Tao, PetscErrorCode (**)(Tao, Vec, PetscReal *, PetscCtx), PetscCtxRt); 3322a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetGradient(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, PetscCtx), PetscCtx); 3332a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetGradient(Tao, Vec *, PetscErrorCode (**)(Tao, Vec, Vec, PetscCtx), PetscCtxRt); 3342a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetObjectiveAndGradient(Tao, Vec, PetscErrorCode (*)(Tao, Vec, PetscReal *, Vec, PetscCtx), PetscCtx); 3352a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetObjectiveAndGradient(Tao, Vec *, PetscErrorCode (**)(Tao, Vec, PetscReal *, Vec, PetscCtx), PetscCtxRt); 3362a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetHessian(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, PetscCtx), PetscCtx); 3372a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetHessian(Tao, Mat *, Mat *, PetscErrorCode (**)(Tao, Vec, Mat, Mat, PetscCtx), PetscCtxRt); 338a82e8c82SStefano Zampini 339a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoSetGradientNorm(Tao, Mat); 340a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoGetGradientNorm(Tao, Mat *); 341414d97d3SAlp Dener PETSC_EXTERN PetscErrorCode TaoSetLMVMMatrix(Tao, Mat); 342f5766c09SAlp Dener PETSC_EXTERN PetscErrorCode TaoGetLMVMMatrix(Tao, Mat *); 343414d97d3SAlp Dener PETSC_EXTERN PetscErrorCode TaoSetRecycleHistory(Tao, PetscBool); 344414d97d3SAlp Dener PETSC_EXTERN PetscErrorCode TaoGetRecycleHistory(Tao, PetscBool *); 345a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMSetH0(Tao, Mat); 346a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMGetH0(Tao, Mat *); 347a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMGetH0KSP(Tao, KSP *); 348b39c12a9SAlp Dener PETSC_EXTERN PetscErrorCode TaoLMVMRecycle(Tao, PetscBool); 3492a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetResidualRoutine(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, PetscCtx), PetscCtx); 350737f463aSAlp Dener PETSC_EXTERN PetscErrorCode TaoSetResidualWeights(Tao, Vec, PetscInt, PetscInt *, PetscInt *, PetscReal *); 3512a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConstraintsRoutine(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, PetscCtx), PetscCtx); 3522a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInequalityConstraintsRoutine(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, PetscCtx), PetscCtx); 3532a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetInequalityConstraintsRoutine(Tao, Vec *, PetscErrorCode (**)(Tao, Vec, Vec, PetscCtx), PetscCtxRt); 3542a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetEqualityConstraintsRoutine(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, PetscCtx), PetscCtx); 3552a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetEqualityConstraintsRoutine(Tao, Vec *, PetscErrorCode (**)(Tao, Vec, Vec, PetscCtx), PetscCtxRt); 3562a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianResidualRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, PetscCtx), PetscCtx); 3572a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, PetscCtx), PetscCtx); 3582a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianStateRoutine(Tao, Mat, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, Mat, PetscCtx), PetscCtx); 3592a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianDesignRoutine(Tao, Mat, PetscErrorCode (*)(Tao, Vec, Mat, PetscCtx), PetscCtx); 3602a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianInequalityRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, PetscCtx), PetscCtx); 3612a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetJacobianInequalityRoutine(Tao, Mat *, Mat *, PetscErrorCode (**)(Tao, Vec, Mat, Mat, PetscCtx), PetscCtxRt); 3622a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianEqualityRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, PetscCtx), PetscCtx); 3632a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetJacobianEqualityRoutine(Tao, Mat *, Mat *, PetscErrorCode (**)(Tao, Vec, Mat, Mat, PetscCtx), PetscCtxRt); 36421ec2d5cSBarry Smith 365a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoPythonSetType(Tao, const char[]); 366ebead697SStefano Zampini PETSC_EXTERN PetscErrorCode TaoPythonGetType(Tao, const char *[]); 367a82e8c82SStefano Zampini 36883a0a5c3SToby Isaac PETSC_EXTERN PetscErrorCode TaoShellSetSolve(Tao, PetscErrorCode (*)(Tao)); 3692a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoShellSetContext(Tao, PetscCtx); 3702a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoShellGetContext(Tao, PetscCtxRt); 37183a0a5c3SToby Isaac 372441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetStateDesignIS(Tao, IS, IS); 37321ec2d5cSBarry Smith 374441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeObjective(Tao, Vec, PetscReal *); 3754a48860cSAlp Dener PETSC_EXTERN PetscErrorCode TaoComputeResidual(Tao, Vec, Vec); 376412cdd55SHong Zhang PETSC_EXTERN PetscErrorCode TaoTestGradient(Tao, Vec, Vec); 377441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeGradient(Tao, Vec, Vec); 378441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeObjectiveAndGradient(Tao, Vec, PetscReal *, Vec); 379441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeConstraints(Tao, Vec, Vec); 380441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeInequalityConstraints(Tao, Vec, Vec); 381441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeEqualityConstraints(Tao, Vec, Vec); 3822a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeGradient(Tao, Vec, Vec, PetscCtx); 383441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsObjectiveDefined(Tao, PetscBool *); 384441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsGradientDefined(Tao, PetscBool *); 385441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsObjectiveAndGradientDefined(Tao, PetscBool *); 38621ec2d5cSBarry Smith 38709baa881SHong Zhang PETSC_EXTERN PetscErrorCode TaoTestHessian(Tao); 388ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeHessian(Tao, Vec, Mat, Mat); 389737f463aSAlp Dener PETSC_EXTERN PetscErrorCode TaoComputeResidualJacobian(Tao, Vec, Mat, Mat); 390ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobian(Tao, Vec, Mat, Mat); 391ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianState(Tao, Vec, Mat, Mat, Mat); 392ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianEquality(Tao, Vec, Mat, Mat); 393ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianInequality(Tao, Vec, Mat, Mat); 39494ab13aaSBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianDesign(Tao, Vec, Mat); 39521ec2d5cSBarry Smith 3962a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessian(Tao, Vec, Mat, Mat, PetscCtx); 3972a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessianColor(Tao, Vec, Mat, Mat, PetscCtx); 3982a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessianMFFD(Tao, Vec, Mat, Mat, PetscCtx); 399441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeDualVariables(Tao, Vec, Vec); 400441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetVariableBounds(Tao, Vec, Vec); 401441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetVariableBounds(Tao, Vec *, Vec *); 402441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetDualVariables(Tao, Vec *, Vec *); 403441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInequalityBounds(Tao, Vec, Vec); 404441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetInequalityBounds(Tao, Vec *, Vec *); 4052a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetVariableBoundsRoutine(Tao, PetscErrorCode (*)(Tao, Vec, Vec, PetscCtx), PetscCtx); 406441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeVariableBounds(Tao); 40721ec2d5cSBarry Smith 408e52336cbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetTolerances(Tao, PetscReal *, PetscReal *, PetscReal *); 409e52336cbSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetTolerances(Tao, PetscReal, PetscReal, PetscReal); 410441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetConstraintTolerances(Tao, PetscReal *, PetscReal *); 411441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConstraintTolerances(Tao, PetscReal, PetscReal); 412441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetFunctionLowerBound(Tao, PetscReal); 413441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInitialTrustRegionRadius(Tao, PetscReal); 414441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMaximumIterations(Tao, PetscInt); 415441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMaximumFunctionEvaluations(Tao, PetscInt); 416441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetFunctionLowerBound(Tao, PetscReal *); 417441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetInitialTrustRegionRadius(Tao, PetscReal *); 418441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetCurrentTrustRegionRadius(Tao, PetscReal *); 419441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetMaximumIterations(Tao, PetscInt *); 420770232b9SCe Qin PETSC_EXTERN PetscErrorCode TaoGetCurrentFunctionEvaluations(Tao, PetscInt *); 421441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetMaximumFunctionEvaluations(Tao, PetscInt *); 4228931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetIterationNumber(Tao, PetscInt *); 4238931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoSetIterationNumber(Tao, PetscInt); 4248931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetTotalIterationNumber(Tao, PetscInt *); 4258931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoSetTotalIterationNumber(Tao, PetscInt); 42679f5d8caSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetResidualNorm(Tao, PetscReal *); 4278931d482SJason Sarich 428b54963c9SStefano Zampini PETSC_EXTERN PetscErrorCode TaoAppendOptionsPrefix(Tao, const char[]); 429b54963c9SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetOptionsPrefix(Tao, const char *[]); 430441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoResetStatistics(Tao); 4312a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetUpdate(Tao, PetscErrorCode (*)(Tao, PetscInt, PetscCtx), PetscCtx); 43221ec2d5cSBarry Smith 433441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetKSP(Tao, KSP *); 434025e9500SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetLinearSolveIterations(Tao, PetscInt *); 4350f0abf79SStefano Zampini PETSC_EXTERN PetscErrorCode TaoKSPSetUseEW(Tao, PetscBool); 436235fd6e6SBarry Smith 437235fd6e6SBarry Smith #include <petsctaolinesearch.h> 438b54963c9SStefano Zampini 439441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetLineSearch(Tao, TaoLineSearch *); 44021ec2d5cSBarry Smith 441ae93cb3cSJason Sarich PETSC_EXTERN PetscErrorCode TaoSetConvergenceHistory(Tao, PetscReal *, PetscReal *, PetscReal *, PetscInt *, PetscInt, PetscBool); 442ae93cb3cSJason Sarich PETSC_EXTERN PetscErrorCode TaoGetConvergenceHistory(Tao, PetscReal **, PetscReal **, PetscReal **, PetscInt **, PetscInt *); 4432a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoMonitorSet(Tao, PetscErrorCode (*)(Tao, PetscCtx), PetscCtx, PetscCtxDestroyFn *); 444*a336c150SZach Atkins PETSC_EXTERN PetscErrorCode TaoMonitorSetFromOptions(Tao tao, const char name[], const char help[], const char manual[], PetscErrorCode (*monitor)(Tao, PetscViewerAndFormat *)); 445b2dc45ddSPierre Jolivet PETSC_EXTERN PetscErrorCode TaoMonitorCancel(Tao); 446*a336c150SZach Atkins PETSC_EXTERN PetscErrorCode TaoMonitorDefault(Tao, PetscViewerAndFormat *); 447*a336c150SZach Atkins PETSC_EXTERN PetscErrorCode TaoMonitorGlobalization(Tao, PetscViewerAndFormat *); 448*a336c150SZach Atkins PETSC_EXTERN PetscErrorCode TaoMonitorDefaultShort(Tao, PetscViewerAndFormat *); 449*a336c150SZach Atkins PETSC_EXTERN PetscErrorCode TaoMonitorConstraintNorm(Tao, PetscViewerAndFormat *); 450*a336c150SZach Atkins PETSC_EXTERN PetscErrorCode TaoMonitorSolution(Tao, PetscViewerAndFormat *); 451*a336c150SZach Atkins PETSC_EXTERN PetscErrorCode TaoMonitorResidual(Tao, PetscViewerAndFormat *); 452*a336c150SZach Atkins PETSC_EXTERN PetscErrorCode TaoMonitorGradient(Tao, PetscViewerAndFormat *); 453*a336c150SZach Atkins PETSC_EXTERN PetscErrorCode TaoMonitorStep(Tao, PetscViewerAndFormat *); 4542a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoMonitorSolutionDraw(Tao, PetscCtx); 4552a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoMonitorStepDraw(Tao, PetscCtx); 4562a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoMonitorGradientDraw(Tao, PetscCtx); 457441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoAddLineSearchCounts(Tao); 45821ec2d5cSBarry Smith 4592a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultConvergenceTest(Tao, PetscCtx); 4602a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConvergenceTest(Tao, PetscErrorCode (*)(Tao, PetscCtx), PetscCtx); 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 468c0b7dd19SHansol Suh /*E 469c0b7dd19SHansol Suh TaoBRGNRegularizationType - The regularization added in the `TAOBRGN` solver. 470c0b7dd19SHansol Suh 471c0b7dd19SHansol Suh Values: 472c0b7dd19SHansol Suh + TAOBRGN_REGULARIZATION_USER - A user-defined regularizer 473c0b7dd19SHansol Suh . TAOBRGN_REGULARIZATION_L2PROX - $\tfrac{1}{2}\|x - x_k\|_2^$, where $x_k$ is the latest solution 474c0b7dd19SHansol Suh . TAOBRGN_REGULARIZATION_L2PURE - $\tfrac{1}{2}\|x\|_2^2$ 475c0b7dd19SHansol Suh . TAOBRGN_REGULARIZATION_L1DICT - $\|D x\|_1$, where $D$ is a dictionary matrix 476c0b7dd19SHansol Suh - TAOBRGN_REGULARIZATION_LM - Levenberg-Marquardt, $\tfrac{1}{2} x^T \mathrm{diag}(J^T J) x$, where $J$ is the Jacobian of the least-squares residual 477c0b7dd19SHansol Suh 478c0b7dd19SHansol Suh Options database Key: 479c0b7dd19SHansol Suh . -tao_brgn_regularization_type <user,l2prox,l2pure,l1dict,lm> - one of the above regularization types 480c0b7dd19SHansol Suh 481c0b7dd19SHansol Suh Level: advanced 482c0b7dd19SHansol Suh 483c0b7dd19SHansol Suh Notes: 484c0b7dd19SHansol Suh If `TAOBRGN_REGULARIZATION_USER`, the regularizer is set either by calling 485c0b7dd19SHansol Suh `TaoBRGNSetRegularizerObjectiveAndGradientRoutine()` and 486c0b7dd19SHansol Suh `TaoBRGNSetRegulazerHessianRoutine()` or by calling `TaoBRGNSetRegularizerTerm()`. 487c0b7dd19SHansol Suh 488c0b7dd19SHansol Suh If `TAOBRGN_REGULARIZATION_L1DICT`, the dictionary matrix is set with `TaoBRGNSetDictionaryMatrix()` and the smoothing parameter of the 489c0b7dd19SHansol Suh approximate $\ell_1$ norm is set with `TaoBRGNSetL1SmoothEpsilon()`. 490c0b7dd19SHansol Suh 491c0b7dd19SHansol Suh If `TAOBRGN_REGULARIZATION_LM`, the diagonal damping vector $\mathrm{diag}(J^T J)$ can be obtained with `TaoBRGNGetDampingVector()`. 492c0b7dd19SHansol Suh 493c0b7dd19SHansol Suh .seealso: [](ch_tao), `Tao`, `TaoBRGNGetSubsolver()`, `TaoBRGNSetRegularizerWeight()`, `TaoBRGNSetL1SmoothEpsilon()`, `TaoBRGNSetDictionaryMatrix()`, 494c0b7dd19SHansol Suh `TaoBRGNSetRegularizerObjectiveAndGradientRoutine()`, `TaoBRGNSetRegularizerHessianRoutine()`, 495c0b7dd19SHansol Suh `TaoBRGNGetRegularizationType()`, `TaoBRGNSetRegularizationType()` 496c0b7dd19SHansol Suh E*/ 497c0b7dd19SHansol Suh typedef enum { 498c0b7dd19SHansol Suh TAOBRGN_REGULARIZATION_USER, 499c0b7dd19SHansol Suh TAOBRGN_REGULARIZATION_L2PROX, 500c0b7dd19SHansol Suh TAOBRGN_REGULARIZATION_L2PURE, 501c0b7dd19SHansol Suh TAOBRGN_REGULARIZATION_L1DICT, 502c0b7dd19SHansol Suh TAOBRGN_REGULARIZATION_LM, 503c0b7dd19SHansol Suh } TaoBRGNRegularizationType; 504c0b7dd19SHansol Suh 505c0b7dd19SHansol Suh PETSC_EXTERN const char *const TaoBRGNRegularizationTypes[]; 506c0b7dd19SHansol Suh 5078e85b1b3SXiang Huang PETSC_EXTERN PetscErrorCode TaoBRGNGetSubsolver(Tao, Tao *); 508c0b7dd19SHansol Suh PETSC_EXTERN PetscErrorCode TaoBRGNGetRegularizationType(Tao, TaoBRGNRegularizationType *); 509c0b7dd19SHansol Suh PETSC_EXTERN PetscErrorCode TaoBRGNSetRegularizationType(Tao, TaoBRGNRegularizationType); 5102a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoBRGNSetRegularizerObjectiveAndGradientRoutine(Tao, PetscErrorCode (*)(Tao, Vec, PetscReal *, Vec, PetscCtx), PetscCtx); 5112a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoBRGNSetRegularizerHessianRoutine(Tao, Mat, PetscErrorCode (*)(Tao, Vec, Mat, PetscCtx), PetscCtx); 512a3c390cfSAlp Dener PETSC_EXTERN PetscErrorCode TaoBRGNSetRegularizerWeight(Tao, PetscReal); 5138ac80d48SXiang Huang PETSC_EXTERN PetscErrorCode TaoBRGNSetL1SmoothEpsilon(Tao, PetscReal); 5148e85b1b3SXiang Huang PETSC_EXTERN PetscErrorCode TaoBRGNSetDictionaryMatrix(Tao, Mat); 515cd1c4666STristan Konolige PETSC_EXTERN PetscErrorCode TaoBRGNGetDampingVector(Tao, Vec *); 516d6e07cdcSHong Zhang PETSC_EXTERN PetscErrorCode TaoBNCGSetType(Tao, TaoBNCGType); 517d6e07cdcSHong Zhang PETSC_EXTERN PetscErrorCode TaoBNCGGetType(Tao, TaoBNCGType *); 5186285c0a3SHansol Suh 5196285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMGetMisfitSubsolver(Tao, Tao *); 5206285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMGetRegularizationSubsolver(Tao, Tao *); 5216285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMGetDualVector(Tao, Vec *); 5226285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMGetSpectralPenalty(Tao, PetscReal *); 5236285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetSpectralPenalty(Tao, PetscReal); 5246285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoGetADMMParentTao(Tao, Tao *); 5256285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetConstraintVectorRHS(Tao, Vec); 5266285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerCoefficient(Tao, PetscReal); 527b4623fecSHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMGetRegularizerCoefficient(Tao, PetscReal *); 5282a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitConstraintJacobian(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, PetscCtx), PetscCtx); 5292a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerConstraintJacobian(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, PetscCtx), PetscCtx); 5302a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerHessianRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, PetscCtx), PetscCtx); 5312a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerObjectiveAndGradientRoutine(Tao, PetscErrorCode (*)(Tao, Vec, PetscReal *, Vec, PetscCtx), PetscCtx); 5322a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitHessianRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, PetscCtx), PetscCtx); 5332a8381b2SBarry Smith PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitObjectiveAndGradientRoutine(Tao, PetscErrorCode (*)(Tao, Vec, PetscReal *, Vec, PetscCtx), PetscCtx); 5346285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitHessianChangeStatus(Tao, PetscBool); 5356285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegHessianChangeStatus(Tao, PetscBool); 5366285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMinimumSpectralPenalty(Tao, PetscReal); 5376285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerType(Tao, TaoADMMRegularizerType); 5386285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMGetRegularizerType(Tao, TaoADMMRegularizerType *); 5396285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetUpdateType(Tao, TaoADMMUpdateType); 5406285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMGetUpdateType(Tao, TaoADMMUpdateType *); 541661095bbSAlp Dener 542661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMGetType(Tao, TaoALMMType *); 543661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMSetType(Tao, TaoALMMType); 544661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMGetSubsolver(Tao, Tao *); 545661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMSetSubsolver(Tao, Tao); 546661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMGetMultipliers(Tao, Vec *); 547661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMSetMultipliers(Tao, Vec); 548661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMGetPrimalIS(Tao, IS *, IS *); 549661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMGetDualIS(Tao, IS *, IS *); 5503b242c63SJacob Faibussowitsch 5513b242c63SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode TaoVecGetSubVec(Vec, IS, TaoSubsetType, PetscReal, Vec *); 5523b242c63SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode TaoMatGetSubMat(Mat, IS, Vec, TaoSubsetType, Mat *); 5533b242c63SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode TaoGradientNorm(Tao, Vec, NormType, PetscReal *); 5543b242c63SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode TaoEstimateActiveBounds(Vec, Vec, Vec, Vec, Vec, Vec, PetscReal, PetscReal *, IS *, IS *, IS *, IS *, IS *); 5553b242c63SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode TaoBoundStep(Vec, Vec, Vec, IS, IS, IS, PetscReal, Vec); 5563b242c63SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode TaoBoundSolution(Vec, Vec, Vec, PetscReal, PetscInt *, Vec); 55710978b7dSBarry Smith 558cc4c1da9SBarry Smith PETSC_EXTERN PetscErrorCode MatCreateSubMatrixFree(Mat, IS, IS, Mat *); 559cc4c1da9SBarry Smith 56010978b7dSBarry Smith #include <petsctao_deprecations.h> 561