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 1516a05f60SBarry 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: 2316a05f60SBarry 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 271cc06b55SBarry Smith .seealso: [](ch_tao), `TaoVecGetSubVec()`, `TaoMatGetSubMat()`, `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 411cc06b55SBarry Smith .seealso: [](doc_taosolve), [](ch_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 501cc06b55SBarry Smith .seealso: [](ch_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 671cc06b55SBarry Smith .seealso: [](ch_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 781cc06b55SBarry Smith .seealso: [](ch_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 891cc06b55SBarry Smith .seealso: [](ch_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 971cc06b55SBarry Smith .seealso: [](ch_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 1131cc06b55SBarry Smith .seealso: [](ch_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 1241cc06b55SBarry Smith .seealso: [](ch_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 1371cc06b55SBarry Smith .seealso: [](ch_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 145*d6e07cdcSHong Zhang /*E 146*d6e07cdcSHong Zhang TaoBNCGType - Determine the conjugate gradient update formula used in the TAOBNCG algorithm. 147*d6e07cdcSHong Zhang 148*d6e07cdcSHong Zhang $ TAO_BNCG_GD - basic gradient descent, no CG update 149*d6e07cdcSHong Zhang $ TAO_BNCG_PCGD - preconditioned/scaled gradient descent 150*d6e07cdcSHong Zhang $ TAO_BNCG_HS - Hestenes-Stiefel 151*d6e07cdcSHong Zhang $ TAO_BNCG_FR - Fletcher-Reeves 152*d6e07cdcSHong Zhang $ TAO_BNCG_PRP - Polak-Ribiere-Polyak (PRP) 153*d6e07cdcSHong Zhang $ TAO_BNCG_PRP_PLUS - Polak-Ribiere-Polyak "plus" (PRP+) 154*d6e07cdcSHong Zhang $ TAO_BNCG_DY - Dai-Yuan 155*d6e07cdcSHong Zhang $ TAO_BNCG_HZ - Hager-Zhang (CG_DESCENT 5.3) 156*d6e07cdcSHong Zhang $ TAO_BNCG_DK - Dai-Kou (2013) 157*d6e07cdcSHong Zhang $ TAO_BNCG_KD - Kou-Dai (2015) 158*d6e07cdcSHong Zhang $ TAO_BNCG_SSML_BFGS - Self-Scaling Memoryless BFGS (Perry-Shanno) 159*d6e07cdcSHong Zhang $ TAO_BNCG_SSML_DFP - Self-Scaling Memoryless DFP 160*d6e07cdcSHong Zhang $ TAO_BNCG_SSML_BRDN - Self-Scaling Memoryless (Symmetric) Broyden 161*d6e07cdcSHong Zhang 162*d6e07cdcSHong Zhang Level: advanced 163*d6e07cdcSHong Zhang 164*d6e07cdcSHong Zhang .seealso: `Tao`, `TAOBNCG`, `TaoBNCGSetType()`, `TaoBNCGGetType()` 165*d6e07cdcSHong Zhang E*/ 166*d6e07cdcSHong Zhang 167*d6e07cdcSHong Zhang typedef enum { 168*d6e07cdcSHong Zhang TAO_BNCG_GD, 169*d6e07cdcSHong Zhang TAO_BNCG_PCGD, 170*d6e07cdcSHong Zhang TAO_BNCG_HS, 171*d6e07cdcSHong Zhang TAO_BNCG_FR, 172*d6e07cdcSHong Zhang TAO_BNCG_PRP, 173*d6e07cdcSHong Zhang TAO_BNCG_PRP_PLUS, 174*d6e07cdcSHong Zhang TAO_BNCG_DY, 175*d6e07cdcSHong Zhang TAO_BNCG_HZ, 176*d6e07cdcSHong Zhang TAO_BNCG_DK, 177*d6e07cdcSHong Zhang TAO_BNCG_KD, 178*d6e07cdcSHong Zhang TAO_BNCG_SSML_BFGS, 179*d6e07cdcSHong Zhang TAO_BNCG_SSML_DFP, 180*d6e07cdcSHong Zhang TAO_BNCG_SSML_BRDN 181*d6e07cdcSHong Zhang } TaoBNCGType; 182*d6e07cdcSHong Zhang PETSC_EXTERN const char *const TaoBNCGTypes[]; 183*d6e07cdcSHong 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: 24747450a7bSBarry Smith + `TAO_CONVERGED_GATOL` - ||g(X)|| < gatol 24847450a7bSBarry Smith . `TAO_CONVERGED_GRTOL` - ||g(X)|| / f(X) < grtol 24947450a7bSBarry Smith . `TAO_CONVERGED_GTTOL` - ||g(X)|| / ||g(X0)|| < gttol 25047450a7bSBarry Smith . `TAO_CONVERGED_STEPTOL` - step size smaller than tolerance 25147450a7bSBarry Smith . `TAO_CONVERGED_MINF` - F < F_min 25247450a7bSBarry Smith . `TAO_CONVERGED_USER` - the user indicates the optimization has succeeded 25347450a7bSBarry Smith . `TAO_DIVERGED_MAXITS` - the maximum number of iterations allowed has been achieved 25447450a7bSBarry Smith . `TAO_DIVERGED_NAN` - not a number appeared in the computations 25547450a7bSBarry Smith . `TAO_DIVERGED_MAXFCN` - the maximum number of function evaluations has been computed 25647450a7bSBarry Smith . `TAO_DIVERGED_LS_FAILURE` - a linesearch failed 25747450a7bSBarry Smith . `TAO_DIVERGED_TR_REDUCTION` - trust region failure 25847450a7bSBarry Smith . `TAO_DIVERGED_USER` - the user has indicated the optimization has failed 25947450a7bSBarry Smith - `TAO_CONTINUE_ITERATING` - the optimization is still running, `TaoSolve()` 26047450a7bSBarry Smith 26147450a7bSBarry Smith where 26247450a7bSBarry Smith + X - current solution 26347450a7bSBarry Smith . X0 - initial guess 26447450a7bSBarry Smith . f(X) - current function value 26547450a7bSBarry Smith . f(X*) - true solution (estimated) 26647450a7bSBarry Smith . g(X) - current gradient 26747450a7bSBarry Smith . its - current iterate number 26847450a7bSBarry Smith . maxits - maximum number of iterates 26947450a7bSBarry Smith . fevals - number of function evaluations 27047450a7bSBarry Smith - max_funcsals - maximum number of function evaluations 27147450a7bSBarry Smith 272a35d58b8SBarry Smith Level: beginner 273a35d58b8SBarry Smith 27447450a7bSBarry Smith Note: 27547450a7bSBarry Smith The two most common reasons for divergence are an incorrectly coded or computed gradient or Hessian failure or lack of convergence 27647450a7bSBarry Smith in the linear system solve (in this case we recommend testing with `-pc_type lu` to eliminate the linear solver as the cause of the problem). 277a35d58b8SBarry Smith 27847450a7bSBarry Smith Developer Note: 27947450a7bSBarry Smith The names in `KSPConvergedReason`, `SNESConvergedReason`, and `TaoConvergedReason` should be uniformized 280a35d58b8SBarry Smith 2811cc06b55SBarry Smith .seealso: [](ch_tao), `Tao`, `TaoSolve()`, `TaoGetConvergedReason()`, `KSPConvergedReason`, `SNESConvergedReason` 282a35d58b8SBarry Smith E*/ 28321ec2d5cSBarry Smith typedef enum { /* converged */ 28421ec2d5cSBarry Smith TAO_CONVERGED_GATOL = 3, /* ||g(X)|| < gatol */ 28521ec2d5cSBarry Smith TAO_CONVERGED_GRTOL = 4, /* ||g(X)|| / f(X) < grtol */ 28621ec2d5cSBarry Smith TAO_CONVERGED_GTTOL = 5, /* ||g(X)|| / ||g(X0)|| < gttol */ 28721ec2d5cSBarry Smith TAO_CONVERGED_STEPTOL = 6, /* step size small */ 28821ec2d5cSBarry Smith TAO_CONVERGED_MINF = 7, /* F < F_min */ 28921ec2d5cSBarry Smith TAO_CONVERGED_USER = 8, /* User defined */ 29021ec2d5cSBarry Smith /* diverged */ 29121ec2d5cSBarry Smith TAO_DIVERGED_MAXITS = -2, 29221ec2d5cSBarry Smith TAO_DIVERGED_NAN = -4, 29321ec2d5cSBarry Smith TAO_DIVERGED_MAXFCN = -5, 29421ec2d5cSBarry Smith TAO_DIVERGED_LS_FAILURE = -6, 29521ec2d5cSBarry Smith TAO_DIVERGED_TR_REDUCTION = -7, 29621ec2d5cSBarry Smith TAO_DIVERGED_USER = -8, /* User defined */ 29721ec2d5cSBarry Smith /* keep going */ 2989371c9d4SSatish Balay TAO_CONTINUE_ITERATING = 0 2999371c9d4SSatish Balay } TaoConvergedReason; 30021ec2d5cSBarry Smith 301e4cb33bbSBarry Smith PETSC_EXTERN const char **TaoConvergedReasons; 30221ec2d5cSBarry Smith 30321ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoInitializePackage(void); 30421ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoFinalizePackage(void); 305441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoCreate(MPI_Comm, Tao *); 306441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetFromOptions(Tao); 307441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetUp(Tao); 308b625d6c7SJed Brown PETSC_EXTERN PetscErrorCode TaoSetType(Tao, TaoType); 309b625d6c7SJed Brown PETSC_EXTERN PetscErrorCode TaoGetType(Tao, TaoType *); 310441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetApplicationContext(Tao, void *); 311441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetApplicationContext(Tao, void *); 312441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDestroy(Tao *); 31321ec2d5cSBarry Smith 314441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetOptionsPrefix(Tao, const char[]); 315441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoView(Tao, PetscViewer); 316fe2efc57SMark PETSC_EXTERN PetscErrorCode TaoViewFromOptions(Tao, PetscObject, const char[]); 31721ec2d5cSBarry Smith 318441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSolve(Tao); 31921ec2d5cSBarry Smith 320441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoRegister(const char[], PetscErrorCode (*)(Tao)); 321441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoRegisterDestroy(void); 32221ec2d5cSBarry Smith 323e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetConvergedReason(Tao, TaoConvergedReason *); 324e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetSolutionStatus(Tao, PetscInt *, PetscReal *, PetscReal *, PetscReal *, PetscReal *, TaoConvergedReason *); 325e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConvergedReason(Tao, TaoConvergedReason); 326a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetSolution(Tao, Vec); 327a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetSolution(Tao, Vec *); 328d71ae5a4SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use TaoSetSolution() (since version 3.17)") static inline PetscErrorCode TaoSetInitialVector(Tao t, Vec v) 329d71ae5a4SJacob Faibussowitsch { 3309371c9d4SSatish Balay return TaoSetSolution(t, v); 3319371c9d4SSatish Balay } 332d71ae5a4SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use TaoGetSolution() (since version 3.17)") static inline PetscErrorCode TaoGetInitialVector(Tao t, Vec *v) 333d71ae5a4SJacob Faibussowitsch { 3349371c9d4SSatish Balay return TaoGetSolution(t, v); 3359371c9d4SSatish Balay } 336a82e8c82SStefano Zampini 337a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetObjective(Tao, PetscErrorCode (*)(Tao, Vec, PetscReal *, void *), void *); 338a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetObjective(Tao, PetscErrorCode (**)(Tao, Vec, PetscReal *, void *), void **); 339a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetGradient(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *); 340a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetGradient(Tao, Vec *, PetscErrorCode (**)(Tao, Vec, Vec, void *), void **); 341a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetObjectiveAndGradient(Tao, Vec, PetscErrorCode (*)(Tao, Vec, PetscReal *, Vec, void *), void *); 342a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetObjectiveAndGradient(Tao, Vec *, PetscErrorCode (**)(Tao, Vec, PetscReal *, Vec, void *), void **); 343a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetHessian(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *); 344a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetHessian(Tao, Mat *, Mat *, PetscErrorCode (**)(Tao, Vec, Mat, Mat, void *), void **); 345d71ae5a4SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use TaoSetObjective() (since version 3.17)") static inline PetscErrorCode TaoSetObjectiveRoutine(Tao t, PetscErrorCode (*f)(Tao, Vec, PetscReal *, void *), void *c) 346d71ae5a4SJacob Faibussowitsch { 3479371c9d4SSatish Balay return TaoSetObjective(t, f, c); 3489371c9d4SSatish Balay } 349d71ae5a4SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use TaoGetGradient() (since version 3.17)") static inline PetscErrorCode TaoGetGradientVector(Tao t, Vec *v) 350d71ae5a4SJacob Faibussowitsch { 351f22e26b7SPierre Jolivet return TaoGetGradient(t, v, PETSC_NULLPTR, PETSC_NULLPTR); 3529371c9d4SSatish Balay } 353d71ae5a4SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use TaoSetGradient() (since version 3.17)") static inline PetscErrorCode TaoSetGradientRoutine(Tao t, PetscErrorCode (*f)(Tao, Vec, Vec, void *), void *c) 354d71ae5a4SJacob Faibussowitsch { 355f22e26b7SPierre Jolivet return TaoSetGradient(t, PETSC_NULLPTR, f, c); 3569371c9d4SSatish Balay } 357d71ae5a4SJacob 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) 358d71ae5a4SJacob Faibussowitsch { 359f22e26b7SPierre Jolivet return TaoSetObjectiveAndGradient(t, PETSC_NULLPTR, f, c); 3609371c9d4SSatish Balay } 361d71ae5a4SJacob 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) 362d71ae5a4SJacob Faibussowitsch { 3639371c9d4SSatish Balay return TaoSetHessian(t, H, P, f, c); 3649371c9d4SSatish Balay } 365a82e8c82SStefano Zampini 366a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoSetGradientNorm(Tao, Mat); 367a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoGetGradientNorm(Tao, Mat *); 368414d97d3SAlp Dener PETSC_EXTERN PetscErrorCode TaoSetLMVMMatrix(Tao, Mat); 369f5766c09SAlp Dener PETSC_EXTERN PetscErrorCode TaoGetLMVMMatrix(Tao, Mat *); 370414d97d3SAlp Dener PETSC_EXTERN PetscErrorCode TaoSetRecycleHistory(Tao, PetscBool); 371414d97d3SAlp Dener PETSC_EXTERN PetscErrorCode TaoGetRecycleHistory(Tao, PetscBool *); 372a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMSetH0(Tao, Mat); 373a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMGetH0(Tao, Mat *); 374a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMGetH0KSP(Tao, KSP *); 375b39c12a9SAlp Dener PETSC_EXTERN PetscErrorCode TaoLMVMRecycle(Tao, PetscBool); 3764a48860cSAlp Dener PETSC_EXTERN PetscErrorCode TaoSetResidualRoutine(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *); 377737f463aSAlp Dener PETSC_EXTERN PetscErrorCode TaoSetResidualWeights(Tao, Vec, PetscInt, PetscInt *, PetscInt *, PetscReal *); 378441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConstraintsRoutine(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *); 379441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInequalityConstraintsRoutine(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *); 380441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetEqualityConstraintsRoutine(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *); 3814ffbe8acSAlp Dener PETSC_EXTERN PetscErrorCode TaoSetJacobianResidualRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *); 382ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *); 383ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianStateRoutine(Tao, Mat, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, Mat, void *), void *); 38494ab13aaSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianDesignRoutine(Tao, Mat, PetscErrorCode (*)(Tao, Vec, Mat, void *), void *); 385ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianInequalityRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *); 386ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianEqualityRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *); 38721ec2d5cSBarry Smith 388a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoPythonSetType(Tao, const char[]); 389ebead697SStefano Zampini PETSC_EXTERN PetscErrorCode TaoPythonGetType(Tao, const char *[]); 390a82e8c82SStefano Zampini 39183a0a5c3SToby Isaac PETSC_EXTERN PetscErrorCode TaoShellSetSolve(Tao, PetscErrorCode (*)(Tao)); 39283a0a5c3SToby Isaac PETSC_EXTERN PetscErrorCode TaoShellSetContext(Tao, void *); 3933ec1f749SStefano Zampini PETSC_EXTERN PetscErrorCode TaoShellGetContext(Tao, void *); 39483a0a5c3SToby Isaac 395d71ae5a4SJacob 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) 396d71ae5a4SJacob Faibussowitsch { 3979371c9d4SSatish Balay return TaoSetResidualRoutine(tao, res, func, ctx); 3989371c9d4SSatish Balay } 399d71ae5a4SJacob 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) 400d71ae5a4SJacob Faibussowitsch { 4019371c9d4SSatish Balay return TaoSetResidualWeights(tao, sigma_v, n, rows, cols, vals); 4029371c9d4SSatish Balay } 403737f463aSAlp Dener 404441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetStateDesignIS(Tao, IS, IS); 40521ec2d5cSBarry Smith 406441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeObjective(Tao, Vec, PetscReal *); 4074a48860cSAlp Dener PETSC_EXTERN PetscErrorCode TaoComputeResidual(Tao, Vec, Vec); 408412cdd55SHong Zhang PETSC_EXTERN PetscErrorCode TaoTestGradient(Tao, Vec, Vec); 409441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeGradient(Tao, Vec, Vec); 410441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeObjectiveAndGradient(Tao, Vec, PetscReal *, Vec); 411441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeConstraints(Tao, Vec, Vec); 412441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeInequalityConstraints(Tao, Vec, Vec); 413441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeEqualityConstraints(Tao, Vec, Vec); 414441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeGradient(Tao, Vec, Vec, void *); 415441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsObjectiveDefined(Tao, PetscBool *); 416441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsGradientDefined(Tao, PetscBool *); 417441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsObjectiveAndGradientDefined(Tao, PetscBool *); 41821ec2d5cSBarry Smith 419d71ae5a4SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use TaoComputeResidual() (since version 3.11)") static inline PetscErrorCode TaoComputeSeparableObjective(Tao tao, Vec X, Vec F) 420d71ae5a4SJacob Faibussowitsch { 4219371c9d4SSatish Balay return TaoComputeResidual(tao, X, F); 4229371c9d4SSatish Balay } 4234a48860cSAlp Dener 42409baa881SHong Zhang PETSC_EXTERN PetscErrorCode TaoTestHessian(Tao); 425ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeHessian(Tao, Vec, Mat, Mat); 426737f463aSAlp Dener PETSC_EXTERN PetscErrorCode TaoComputeResidualJacobian(Tao, Vec, Mat, Mat); 427ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobian(Tao, Vec, Mat, Mat); 428ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianState(Tao, Vec, Mat, Mat, Mat); 429ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianEquality(Tao, Vec, Mat, Mat); 430ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianInequality(Tao, Vec, Mat, Mat); 43194ab13aaSBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianDesign(Tao, Vec, Mat); 43221ec2d5cSBarry Smith 433ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessian(Tao, Vec, Mat, Mat, void *); 434ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessianColor(Tao, Vec, Mat, Mat, void *); 435f4c1ad5cSStefano Zampini PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessianMFFD(Tao, Vec, Mat, Mat, void *); 436441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeDualVariables(Tao, Vec, Vec); 437441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetVariableBounds(Tao, Vec, Vec); 438441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetVariableBounds(Tao, Vec *, Vec *); 439441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetDualVariables(Tao, Vec *, Vec *); 440441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInequalityBounds(Tao, Vec, Vec); 441441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetInequalityBounds(Tao, Vec *, Vec *); 442441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetVariableBoundsRoutine(Tao, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *); 443441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeVariableBounds(Tao); 44421ec2d5cSBarry Smith 445e52336cbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetTolerances(Tao, PetscReal *, PetscReal *, PetscReal *); 446e52336cbSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetTolerances(Tao, PetscReal, PetscReal, PetscReal); 447441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetConstraintTolerances(Tao, PetscReal *, PetscReal *); 448441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConstraintTolerances(Tao, PetscReal, PetscReal); 449441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetFunctionLowerBound(Tao, PetscReal); 450441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInitialTrustRegionRadius(Tao, PetscReal); 451441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMaximumIterations(Tao, PetscInt); 452441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMaximumFunctionEvaluations(Tao, PetscInt); 453441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetFunctionLowerBound(Tao, PetscReal *); 454441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetInitialTrustRegionRadius(Tao, PetscReal *); 455441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetCurrentTrustRegionRadius(Tao, PetscReal *); 456441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetMaximumIterations(Tao, PetscInt *); 457770232b9SCe Qin PETSC_EXTERN PetscErrorCode TaoGetCurrentFunctionEvaluations(Tao, PetscInt *); 458441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetMaximumFunctionEvaluations(Tao, PetscInt *); 4598931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetIterationNumber(Tao, PetscInt *); 4608931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoSetIterationNumber(Tao, PetscInt); 4618931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetTotalIterationNumber(Tao, PetscInt *); 4628931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoSetTotalIterationNumber(Tao, PetscInt); 46379f5d8caSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetResidualNorm(Tao, PetscReal *); 4648931d482SJason Sarich 465b54963c9SStefano Zampini PETSC_EXTERN PetscErrorCode TaoAppendOptionsPrefix(Tao, const char[]); 466b54963c9SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetOptionsPrefix(Tao, const char *[]); 467441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoResetStatistics(Tao); 4688fcddce6SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetUpdate(Tao, PetscErrorCode (*)(Tao, PetscInt, void *), void *); 46921ec2d5cSBarry Smith 470441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetKSP(Tao, KSP *); 471025e9500SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetLinearSolveIterations(Tao, PetscInt *); 4720f0abf79SStefano Zampini PETSC_EXTERN PetscErrorCode TaoKSPSetUseEW(Tao, PetscBool); 473235fd6e6SBarry Smith 474235fd6e6SBarry Smith #include <petsctaolinesearch.h> 475b54963c9SStefano Zampini 476441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetLineSearch(Tao, TaoLineSearch *); 47721ec2d5cSBarry Smith 478ae93cb3cSJason Sarich PETSC_EXTERN PetscErrorCode TaoSetConvergenceHistory(Tao, PetscReal *, PetscReal *, PetscReal *, PetscInt *, PetscInt, PetscBool); 479ae93cb3cSJason Sarich PETSC_EXTERN PetscErrorCode TaoGetConvergenceHistory(Tao, PetscReal **, PetscReal **, PetscReal **, PetscInt **, PetscInt *); 480441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMonitor(Tao, PetscErrorCode (*)(Tao, void *), void *, PetscErrorCode (*)(void **)); 481441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoCancelMonitors(Tao); 48298ea980cSBarry Smith PETSC_EXTERN PetscErrorCode TaoMonitorDefault(Tao, void *); 483d71ae5a4SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use TaoMonitorDefault() (since version 3.9)") static inline PetscErrorCode TaoDefaultMonitor(Tao tao, void *ctx) 484d71ae5a4SJacob Faibussowitsch { 4859371c9d4SSatish Balay return TaoMonitorDefault(tao, ctx); 4869371c9d4SSatish Balay } 4878d5ead36SAlp Dener PETSC_EXTERN PetscErrorCode TaoDefaultGMonitor(Tao, void *); 488441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultSMonitor(Tao, void *); 489441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultCMonitor(Tao, void *); 490441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSolutionMonitor(Tao, void *); 491737f463aSAlp Dener PETSC_EXTERN PetscErrorCode TaoResidualMonitor(Tao, void *); 492441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGradientMonitor(Tao, void *); 493441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoStepDirectionMonitor(Tao, void *); 494441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDrawSolutionMonitor(Tao, void *); 495441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDrawStepMonitor(Tao, void *); 496441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDrawGradientMonitor(Tao, void *); 497441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoAddLineSearchCounts(Tao); 49821ec2d5cSBarry Smith 499441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultConvergenceTest(Tao, void *); 500441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConvergenceTest(Tao, PetscErrorCode (*)(Tao, void *), void *); 50121ec2d5cSBarry Smith 502441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoLCLSetStateDesignIS(Tao, IS, IS); 5033ecd9318SAlp Dener PETSC_EXTERN PetscErrorCode TaoMonitor(Tao, PetscInt, PetscReal, PetscReal, PetscReal, PetscReal); 504e882e171SHong Zhang typedef struct _n_TaoMonitorDrawCtx *TaoMonitorDrawCtx; 505e882e171SHong Zhang PETSC_EXTERN PetscErrorCode TaoMonitorDrawCtxCreate(MPI_Comm, const char[], const char[], int, int, int, int, PetscInt, TaoMonitorDrawCtx *); 506e882e171SHong Zhang PETSC_EXTERN PetscErrorCode TaoMonitorDrawCtxDestroy(TaoMonitorDrawCtx *); 507737f463aSAlp Dener 5088e85b1b3SXiang Huang PETSC_EXTERN PetscErrorCode TaoBRGNGetSubsolver(Tao, Tao *); 509a3c390cfSAlp Dener PETSC_EXTERN PetscErrorCode TaoBRGNSetRegularizerObjectiveAndGradientRoutine(Tao, PetscErrorCode (*)(Tao, Vec, PetscReal *, Vec, void *), void *); 510a3c390cfSAlp Dener PETSC_EXTERN PetscErrorCode TaoBRGNSetRegularizerHessianRoutine(Tao, Mat, PetscErrorCode (*)(Tao, Vec, Mat, void *), void *); 511a3c390cfSAlp Dener PETSC_EXTERN PetscErrorCode TaoBRGNSetRegularizerWeight(Tao, PetscReal); 5128ac80d48SXiang Huang PETSC_EXTERN PetscErrorCode TaoBRGNSetL1SmoothEpsilon(Tao, PetscReal); 5138e85b1b3SXiang Huang PETSC_EXTERN PetscErrorCode TaoBRGNSetDictionaryMatrix(Tao, Mat); 514cd1c4666STristan Konolige PETSC_EXTERN PetscErrorCode TaoBRGNGetDampingVector(Tao, Vec *); 515*d6e07cdcSHong Zhang PETSC_EXTERN PetscErrorCode TaoBNCGSetType(Tao, TaoBNCGType); 516*d6e07cdcSHong Zhang PETSC_EXTERN PetscErrorCode TaoBNCGGetType(Tao, TaoBNCGType *); 5176285c0a3SHansol Suh 5186285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMGetMisfitSubsolver(Tao, Tao *); 5196285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMGetRegularizationSubsolver(Tao, Tao *); 5206285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMGetDualVector(Tao, Vec *); 5216285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMGetSpectralPenalty(Tao, PetscReal *); 5226285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetSpectralPenalty(Tao, PetscReal); 5236285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoGetADMMParentTao(Tao, Tao *); 5246285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetConstraintVectorRHS(Tao, Vec); 5256285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerCoefficient(Tao, PetscReal); 526b4623fecSHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMGetRegularizerCoefficient(Tao, PetscReal *); 5276285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitConstraintJacobian(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *); 5286285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerConstraintJacobian(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *); 5296285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerHessianRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *); 5306285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerObjectiveAndGradientRoutine(Tao, PetscErrorCode (*)(Tao, Vec, PetscReal *, Vec, void *), void *); 5316285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitHessianRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *); 5326285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitObjectiveAndGradientRoutine(Tao, PetscErrorCode (*)(Tao, Vec, PetscReal *, Vec, void *), void *); 5336285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitHessianChangeStatus(Tao, PetscBool); 5346285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegHessianChangeStatus(Tao, PetscBool); 5356285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMinimumSpectralPenalty(Tao, PetscReal); 5366285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerType(Tao, TaoADMMRegularizerType); 5376285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMGetRegularizerType(Tao, TaoADMMRegularizerType *); 5386285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetUpdateType(Tao, TaoADMMUpdateType); 5396285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMGetUpdateType(Tao, TaoADMMUpdateType *); 540661095bbSAlp Dener 541661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMGetType(Tao, TaoALMMType *); 542661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMSetType(Tao, TaoALMMType); 543661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMGetSubsolver(Tao, Tao *); 544661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMSetSubsolver(Tao, Tao); 545661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMGetMultipliers(Tao, Vec *); 546661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMSetMultipliers(Tao, Vec); 547661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMGetPrimalIS(Tao, IS *, IS *); 548661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMGetDualIS(Tao, IS *, IS *); 54921ec2d5cSBarry Smith #endif 550