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 1416a05f60SBarry Smith TaoSubsetType - Type representing the way TAO handles 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: 2216a05f60SBarry 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 361eb8069cSJason Sarich Tao - Abstract PETSc object that manages nonlinear optimization solves 371eb8069cSJason Sarich 381eb8069cSJason Sarich Level: advanced 391eb8069cSJason Sarich 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 4587497f52SBarry Smith TaoADMMUpdateType - Determine spectral penalty update routine for 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 596285c0a3SHansol Suh TAO_ADMM_UPDATE_BASIC - Use same spectral penalty set at the beginning. No update 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 706285c0a3SHansol Suh TAO_ADMM_UPDATE_ADAPTIVE - Adaptively update 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: 8687497f52SBarry Smith With adaptive spectral penalty update, it also relaxes 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 132a1cb98faSBarry 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 145d6e07cdcSHong Zhang TaoBNCGType - Determine the conjugate gradient update formula used in the TAOBNCG algorithm. 146d6e07cdcSHong Zhang 147*95bd0b28SBarry Smith Values: 148*95bd0b28SBarry Smith .vb 149*95bd0b28SBarry Smith TAO_BNCG_GD - basic gradient descent, no CG update 150*95bd0b28SBarry Smith TAO_BNCG_PCGD - preconditioned/scaled gradient descent 151*95bd0b28SBarry Smith TAO_BNCG_HS - Hestenes-Stiefel 152*95bd0b28SBarry Smith TAO_BNCG_FR - Fletcher-Reeves 153*95bd0b28SBarry Smith TAO_BNCG_PRP - Polak-Ribiere-Polyak (PRP) 154*95bd0b28SBarry Smith TAO_BNCG_PRP_PLUS - Polak-Ribiere-Polyak "plus" (PRP+) 155*95bd0b28SBarry Smith TAO_BNCG_DY - Dai-Yuan 156*95bd0b28SBarry Smith TAO_BNCG_HZ - Hager-Zhang (CG_DESCENT 5.3) 157*95bd0b28SBarry Smith TAO_BNCG_DK - Dai-Kou (2013) 158*95bd0b28SBarry Smith TAO_BNCG_KD - Kou-Dai (2015) 159*95bd0b28SBarry Smith TAO_BNCG_SSML_BFGS - Self-Scaling Memoryless BFGS (Perry-Shanno) 160*95bd0b28SBarry Smith TAO_BNCG_SSML_DFP - Self-Scaling Memoryless DFP 161*95bd0b28SBarry Smith TAO_BNCG_SSML_BRDN - Self-Scaling Memoryless (Symmetric) Broyden 162*95bd0b28SBarry Smith .ve 163d6e07cdcSHong Zhang Level: advanced 164d6e07cdcSHong Zhang 165d6e07cdcSHong Zhang .seealso: `Tao`, `TAOBNCG`, `TaoBNCGSetType()`, `TaoBNCGGetType()` 166d6e07cdcSHong Zhang E*/ 167d6e07cdcSHong Zhang 168d6e07cdcSHong Zhang typedef enum { 169d6e07cdcSHong Zhang TAO_BNCG_GD, 170d6e07cdcSHong Zhang TAO_BNCG_PCGD, 171d6e07cdcSHong Zhang TAO_BNCG_HS, 172d6e07cdcSHong Zhang TAO_BNCG_FR, 173d6e07cdcSHong Zhang TAO_BNCG_PRP, 174d6e07cdcSHong Zhang TAO_BNCG_PRP_PLUS, 175d6e07cdcSHong Zhang TAO_BNCG_DY, 176d6e07cdcSHong Zhang TAO_BNCG_HZ, 177d6e07cdcSHong Zhang TAO_BNCG_DK, 178d6e07cdcSHong Zhang TAO_BNCG_KD, 179d6e07cdcSHong Zhang TAO_BNCG_SSML_BFGS, 180d6e07cdcSHong Zhang TAO_BNCG_SSML_DFP, 181d6e07cdcSHong Zhang TAO_BNCG_SSML_BRDN 182d6e07cdcSHong Zhang } TaoBNCGType; 183d6e07cdcSHong Zhang PETSC_EXTERN const char *const TaoBNCGTypes[]; 184d6e07cdcSHong Zhang 1851eb8069cSJason Sarich /*J 18687497f52SBarry Smith TaoType - String with the name of a `Tao` method 1871eb8069cSJason Sarich 18847450a7bSBarry Smith Values: 18947450a7bSBarry Smith + `TAONLS` - nls Newton's method with line search for unconstrained minimization 19047450a7bSBarry Smith . `TAONTR` - ntr Newton's method with trust region for unconstrained minimization 19147450a7bSBarry Smith . `TAONTL` - ntl Newton's method with trust region, line search for unconstrained minimization 19247450a7bSBarry Smith . `TAOLMVM` - lmvm Limited memory variable metric method for unconstrained minimization 19347450a7bSBarry Smith . `TAOCG` - cg Nonlinear conjugate gradient method for unconstrained minimization 19447450a7bSBarry Smith . `TAONM` - nm Nelder-Mead algorithm for derivate-free unconstrained minimization 19547450a7bSBarry Smith . `TAOTRON` - tron Newton Trust Region method for bound constrained minimization 19647450a7bSBarry Smith . `TAOGPCG` - gpcg Newton Trust Region method for quadratic bound constrained minimization 19747450a7bSBarry Smith . `TAOBLMVM` - blmvm Limited memory variable metric method for bound constrained minimization 19847450a7bSBarry Smith . `TAOLCL` - lcl Linearly constrained Lagrangian method for pde-constrained minimization 19916a05f60SBarry Smith - `TAOPOUNDERS` - Pounders Model-based algorithm for nonlinear least squares 20047450a7bSBarry Smith 2011eb8069cSJason Sarich Level: beginner 2021eb8069cSJason Sarich 2031cc06b55SBarry Smith .seealso: [](doc_taosolve), [](ch_tao), `Tao`, `TaoCreate()`, `TaoSetType()` 2041eb8069cSJason Sarich J*/ 205b625d6c7SJed Brown typedef const char *TaoType; 20658417fe7SBarry Smith #define TAOLMVM "lmvm" 20758417fe7SBarry Smith #define TAONLS "nls" 20858417fe7SBarry Smith #define TAONTR "ntr" 20958417fe7SBarry Smith #define TAONTL "ntl" 21058417fe7SBarry Smith #define TAOCG "cg" 21158417fe7SBarry Smith #define TAOTRON "tron" 21258417fe7SBarry Smith #define TAOOWLQN "owlqn" 21358417fe7SBarry Smith #define TAOBMRM "bmrm" 21458417fe7SBarry Smith #define TAOBLMVM "blmvm" 2156b591159SAlp Dener #define TAOBQNLS "bqnls" 216ac9112b8SAlp Dener #define TAOBNCG "bncg" 217eb910715SAlp Dener #define TAOBNLS "bnls" 218fed79b8eSAlp Dener #define TAOBNTR "bntr" 219c14b763aSAlp Dener #define TAOBNTL "bntl" 220e0ed867bSAlp Dener #define TAOBQNKLS "bqnkls" 221e0ed867bSAlp Dener #define TAOBQNKTR "bqnktr" 222e0ed867bSAlp Dener #define TAOBQNKTL "bqnktl" 22358417fe7SBarry Smith #define TAOBQPIP "bqpip" 22458417fe7SBarry Smith #define TAOGPCG "gpcg" 22558417fe7SBarry Smith #define TAONM "nm" 22658417fe7SBarry Smith #define TAOPOUNDERS "pounders" 227737f463aSAlp Dener #define TAOBRGN "brgn" 22858417fe7SBarry Smith #define TAOLCL "lcl" 22958417fe7SBarry Smith #define TAOSSILS "ssils" 23058417fe7SBarry Smith #define TAOSSFLS "ssfls" 23158417fe7SBarry Smith #define TAOASILS "asils" 23258417fe7SBarry Smith #define TAOASFLS "asfls" 23358417fe7SBarry Smith #define TAOIPM "ipm" 234aad13602SShrirang Abhyankar #define TAOPDIPM "pdipm" 23583a0a5c3SToby Isaac #define TAOSHELL "shell" 2366285c0a3SHansol Suh #define TAOADMM "admm" 237661095bbSAlp Dener #define TAOALMM "almm" 238a82e8c82SStefano Zampini #define TAOPYTHON "python" 239f4f59681SStefano Zampini #define TAOSNES "snes" 24058417fe7SBarry Smith 241441846f8SBarry Smith PETSC_EXTERN PetscClassId TAO_CLASSID; 242441846f8SBarry Smith PETSC_EXTERN PetscFunctionList TaoList; 24321ec2d5cSBarry Smith 244a35d58b8SBarry Smith /*E 24516a05f60SBarry Smith TaoConvergedReason - reason a `Tao` optimizer was said to have converged or diverged 246a35d58b8SBarry Smith 24747450a7bSBarry Smith Values: 24847450a7bSBarry Smith + `TAO_CONVERGED_GATOL` - ||g(X)|| < gatol 24947450a7bSBarry Smith . `TAO_CONVERGED_GRTOL` - ||g(X)|| / f(X) < grtol 25047450a7bSBarry Smith . `TAO_CONVERGED_GTTOL` - ||g(X)|| / ||g(X0)|| < gttol 25147450a7bSBarry Smith . `TAO_CONVERGED_STEPTOL` - step size smaller than tolerance 25247450a7bSBarry Smith . `TAO_CONVERGED_MINF` - F < F_min 25347450a7bSBarry Smith . `TAO_CONVERGED_USER` - the user indicates the optimization has succeeded 25447450a7bSBarry Smith . `TAO_DIVERGED_MAXITS` - the maximum number of iterations allowed has been achieved 25547450a7bSBarry Smith . `TAO_DIVERGED_NAN` - not a number appeared in the computations 25647450a7bSBarry Smith . `TAO_DIVERGED_MAXFCN` - the maximum number of function evaluations has been computed 25747450a7bSBarry Smith . `TAO_DIVERGED_LS_FAILURE` - a linesearch failed 25847450a7bSBarry Smith . `TAO_DIVERGED_TR_REDUCTION` - trust region failure 25947450a7bSBarry Smith . `TAO_DIVERGED_USER` - the user has indicated the optimization has failed 26047450a7bSBarry Smith - `TAO_CONTINUE_ITERATING` - the optimization is still running, `TaoSolve()` 26147450a7bSBarry Smith 26247450a7bSBarry Smith where 26347450a7bSBarry Smith + X - current solution 26447450a7bSBarry Smith . X0 - initial guess 26547450a7bSBarry Smith . f(X) - current function value 26647450a7bSBarry Smith . f(X*) - true solution (estimated) 26747450a7bSBarry Smith . g(X) - current gradient 26847450a7bSBarry Smith . its - current iterate number 26947450a7bSBarry Smith . maxits - maximum number of iterates 27047450a7bSBarry Smith . fevals - number of function evaluations 27147450a7bSBarry Smith - max_funcsals - maximum number of function evaluations 27247450a7bSBarry Smith 273a35d58b8SBarry Smith Level: beginner 274a35d58b8SBarry Smith 27547450a7bSBarry Smith Note: 27647450a7bSBarry Smith The two most common reasons for divergence are an incorrectly coded or computed gradient or Hessian failure or lack of convergence 27747450a7bSBarry 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). 278a35d58b8SBarry Smith 27947450a7bSBarry Smith Developer Note: 28047450a7bSBarry Smith The names in `KSPConvergedReason`, `SNESConvergedReason`, and `TaoConvergedReason` should be uniformized 281a35d58b8SBarry Smith 2821cc06b55SBarry Smith .seealso: [](ch_tao), `Tao`, `TaoSolve()`, `TaoGetConvergedReason()`, `KSPConvergedReason`, `SNESConvergedReason` 283a35d58b8SBarry Smith E*/ 28421ec2d5cSBarry Smith typedef enum { /* converged */ 28521ec2d5cSBarry Smith TAO_CONVERGED_GATOL = 3, /* ||g(X)|| < gatol */ 28621ec2d5cSBarry Smith TAO_CONVERGED_GRTOL = 4, /* ||g(X)|| / f(X) < grtol */ 28721ec2d5cSBarry Smith TAO_CONVERGED_GTTOL = 5, /* ||g(X)|| / ||g(X0)|| < gttol */ 28821ec2d5cSBarry Smith TAO_CONVERGED_STEPTOL = 6, /* step size small */ 28921ec2d5cSBarry Smith TAO_CONVERGED_MINF = 7, /* F < F_min */ 29021ec2d5cSBarry Smith TAO_CONVERGED_USER = 8, /* User defined */ 29121ec2d5cSBarry Smith /* diverged */ 29221ec2d5cSBarry Smith TAO_DIVERGED_MAXITS = -2, 29321ec2d5cSBarry Smith TAO_DIVERGED_NAN = -4, 29421ec2d5cSBarry Smith TAO_DIVERGED_MAXFCN = -5, 29521ec2d5cSBarry Smith TAO_DIVERGED_LS_FAILURE = -6, 29621ec2d5cSBarry Smith TAO_DIVERGED_TR_REDUCTION = -7, 29721ec2d5cSBarry Smith TAO_DIVERGED_USER = -8, /* User defined */ 29821ec2d5cSBarry Smith /* keep going */ 2999371c9d4SSatish Balay TAO_CONTINUE_ITERATING = 0 3009371c9d4SSatish Balay } TaoConvergedReason; 30121ec2d5cSBarry Smith 302e4cb33bbSBarry Smith PETSC_EXTERN const char **TaoConvergedReasons; 30321ec2d5cSBarry Smith 30421ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoInitializePackage(void); 30521ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoFinalizePackage(void); 306441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoCreate(MPI_Comm, Tao *); 307441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetFromOptions(Tao); 308441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetUp(Tao); 309b625d6c7SJed Brown PETSC_EXTERN PetscErrorCode TaoSetType(Tao, TaoType); 310b625d6c7SJed Brown PETSC_EXTERN PetscErrorCode TaoGetType(Tao, TaoType *); 311441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetApplicationContext(Tao, void *); 312441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetApplicationContext(Tao, void *); 313441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDestroy(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 *); 329edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 17, 0, "TaoSetSolution()", ) static inline PetscErrorCode TaoSetInitialVector(Tao t, Vec v) 330d71ae5a4SJacob Faibussowitsch { 3319371c9d4SSatish Balay return TaoSetSolution(t, v); 3329371c9d4SSatish Balay } 333edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 17, 0, "TaoGetSolution()", ) static inline PetscErrorCode TaoGetInitialVector(Tao t, Vec *v) 334d71ae5a4SJacob Faibussowitsch { 3359371c9d4SSatish Balay return TaoGetSolution(t, v); 3369371c9d4SSatish Balay } 337a82e8c82SStefano Zampini 338a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetObjective(Tao, PetscErrorCode (*)(Tao, Vec, PetscReal *, void *), void *); 339a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetObjective(Tao, PetscErrorCode (**)(Tao, Vec, PetscReal *, void *), void **); 340a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetGradient(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *); 341a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetGradient(Tao, Vec *, PetscErrorCode (**)(Tao, Vec, Vec, void *), void **); 342a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetObjectiveAndGradient(Tao, Vec, PetscErrorCode (*)(Tao, Vec, PetscReal *, Vec, void *), void *); 343a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetObjectiveAndGradient(Tao, Vec *, PetscErrorCode (**)(Tao, Vec, PetscReal *, Vec, void *), void **); 344a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetHessian(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *); 345a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetHessian(Tao, Mat *, Mat *, PetscErrorCode (**)(Tao, Vec, Mat, Mat, void *), void **); 346edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 17, 0, "TaoSetObjective()", ) static inline PetscErrorCode TaoSetObjectiveRoutine(Tao t, PetscErrorCode (*f)(Tao, Vec, PetscReal *, void *), void *c) 347d71ae5a4SJacob Faibussowitsch { 3489371c9d4SSatish Balay return TaoSetObjective(t, f, c); 3499371c9d4SSatish Balay } 350edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 17, 0, "TaoGetGradient()", ) static inline PetscErrorCode TaoGetGradientVector(Tao t, Vec *v) 351d71ae5a4SJacob Faibussowitsch { 352f22e26b7SPierre Jolivet return TaoGetGradient(t, v, PETSC_NULLPTR, PETSC_NULLPTR); 3539371c9d4SSatish Balay } 354edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 17, 0, "TaoSetGradient()", ) static inline PetscErrorCode TaoSetGradientRoutine(Tao t, PetscErrorCode (*f)(Tao, Vec, Vec, void *), void *c) 355d71ae5a4SJacob Faibussowitsch { 356f22e26b7SPierre Jolivet return TaoSetGradient(t, PETSC_NULLPTR, f, c); 3579371c9d4SSatish Balay } 358edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 17, 0, "TaoSetObjectiveAndGradient()", ) static inline PetscErrorCode TaoSetObjectiveAndGradientRoutine(Tao t, PetscErrorCode (*f)(Tao, Vec, PetscReal *, Vec, void *), void *c) 359d71ae5a4SJacob Faibussowitsch { 360f22e26b7SPierre Jolivet return TaoSetObjectiveAndGradient(t, PETSC_NULLPTR, f, c); 3619371c9d4SSatish Balay } 362edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 17, 0, "TaoSetHessian()", ) static inline PetscErrorCode TaoSetHessianRoutine(Tao t, Mat H, Mat P, PetscErrorCode (*f)(Tao, Vec, Mat, Mat, void *), void *c) 363d71ae5a4SJacob Faibussowitsch { 3649371c9d4SSatish Balay return TaoSetHessian(t, H, P, f, c); 3659371c9d4SSatish Balay } 366a82e8c82SStefano Zampini 367a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoSetGradientNorm(Tao, Mat); 368a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoGetGradientNorm(Tao, Mat *); 369414d97d3SAlp Dener PETSC_EXTERN PetscErrorCode TaoSetLMVMMatrix(Tao, Mat); 370f5766c09SAlp Dener PETSC_EXTERN PetscErrorCode TaoGetLMVMMatrix(Tao, Mat *); 371414d97d3SAlp Dener PETSC_EXTERN PetscErrorCode TaoSetRecycleHistory(Tao, PetscBool); 372414d97d3SAlp Dener PETSC_EXTERN PetscErrorCode TaoGetRecycleHistory(Tao, PetscBool *); 373a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMSetH0(Tao, Mat); 374a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMGetH0(Tao, Mat *); 375a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMGetH0KSP(Tao, KSP *); 376b39c12a9SAlp Dener PETSC_EXTERN PetscErrorCode TaoLMVMRecycle(Tao, PetscBool); 3774a48860cSAlp Dener PETSC_EXTERN PetscErrorCode TaoSetResidualRoutine(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *); 378737f463aSAlp Dener PETSC_EXTERN PetscErrorCode TaoSetResidualWeights(Tao, Vec, PetscInt, PetscInt *, PetscInt *, PetscReal *); 379441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConstraintsRoutine(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *); 380441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInequalityConstraintsRoutine(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *); 381441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetEqualityConstraintsRoutine(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *); 3824ffbe8acSAlp Dener PETSC_EXTERN PetscErrorCode TaoSetJacobianResidualRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *); 383ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *); 384ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianStateRoutine(Tao, Mat, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, Mat, void *), void *); 38594ab13aaSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianDesignRoutine(Tao, Mat, PetscErrorCode (*)(Tao, Vec, Mat, void *), void *); 386ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianInequalityRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *); 387ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianEqualityRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *); 38821ec2d5cSBarry Smith 389a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoPythonSetType(Tao, const char[]); 390ebead697SStefano Zampini PETSC_EXTERN PetscErrorCode TaoPythonGetType(Tao, const char *[]); 391a82e8c82SStefano Zampini 39283a0a5c3SToby Isaac PETSC_EXTERN PetscErrorCode TaoShellSetSolve(Tao, PetscErrorCode (*)(Tao)); 39383a0a5c3SToby Isaac PETSC_EXTERN PetscErrorCode TaoShellSetContext(Tao, void *); 3943ec1f749SStefano Zampini PETSC_EXTERN PetscErrorCode TaoShellGetContext(Tao, void *); 39583a0a5c3SToby Isaac 396edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 11, 0, "TaoSetResidualRoutine()", ) static inline PetscErrorCode TaoSetSeparableObjectiveRoutine(Tao tao, Vec res, PetscErrorCode (*func)(Tao, Vec, Vec, void *), void *ctx) 397d71ae5a4SJacob Faibussowitsch { 3989371c9d4SSatish Balay return TaoSetResidualRoutine(tao, res, func, ctx); 3999371c9d4SSatish Balay } 400edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 11, 0, "TaoSetResidualWeights()", ) static inline PetscErrorCode TaoSetSeparableObjectiveWeights(Tao tao, Vec sigma_v, PetscInt n, PetscInt *rows, PetscInt *cols, PetscReal *vals) 401d71ae5a4SJacob Faibussowitsch { 4029371c9d4SSatish Balay return TaoSetResidualWeights(tao, sigma_v, n, rows, cols, vals); 4039371c9d4SSatish Balay } 404737f463aSAlp Dener 405441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetStateDesignIS(Tao, IS, IS); 40621ec2d5cSBarry Smith 407441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeObjective(Tao, Vec, PetscReal *); 4084a48860cSAlp Dener PETSC_EXTERN PetscErrorCode TaoComputeResidual(Tao, Vec, Vec); 409412cdd55SHong Zhang PETSC_EXTERN PetscErrorCode TaoTestGradient(Tao, Vec, Vec); 410441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeGradient(Tao, Vec, Vec); 411441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeObjectiveAndGradient(Tao, Vec, PetscReal *, Vec); 412441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeConstraints(Tao, Vec, Vec); 413441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeInequalityConstraints(Tao, Vec, Vec); 414441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeEqualityConstraints(Tao, Vec, Vec); 415441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeGradient(Tao, Vec, Vec, void *); 416441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsObjectiveDefined(Tao, PetscBool *); 417441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsGradientDefined(Tao, PetscBool *); 418441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsObjectiveAndGradientDefined(Tao, PetscBool *); 41921ec2d5cSBarry Smith 420edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 11, 0, "TaoComputeResidual()", ) static inline PetscErrorCode TaoComputeSeparableObjective(Tao tao, Vec X, Vec F) 421d71ae5a4SJacob Faibussowitsch { 4229371c9d4SSatish Balay return TaoComputeResidual(tao, X, F); 4239371c9d4SSatish Balay } 4244a48860cSAlp Dener 42509baa881SHong Zhang PETSC_EXTERN PetscErrorCode TaoTestHessian(Tao); 426ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeHessian(Tao, Vec, Mat, Mat); 427737f463aSAlp Dener PETSC_EXTERN PetscErrorCode TaoComputeResidualJacobian(Tao, Vec, Mat, Mat); 428ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobian(Tao, Vec, Mat, Mat); 429ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianState(Tao, Vec, Mat, Mat, Mat); 430ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianEquality(Tao, Vec, Mat, Mat); 431ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianInequality(Tao, Vec, Mat, Mat); 43294ab13aaSBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianDesign(Tao, Vec, Mat); 43321ec2d5cSBarry Smith 434ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessian(Tao, Vec, Mat, Mat, void *); 435ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessianColor(Tao, Vec, Mat, Mat, void *); 436f4c1ad5cSStefano Zampini PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessianMFFD(Tao, Vec, Mat, Mat, void *); 437441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeDualVariables(Tao, Vec, Vec); 438441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetVariableBounds(Tao, Vec, Vec); 439441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetVariableBounds(Tao, Vec *, Vec *); 440441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetDualVariables(Tao, Vec *, Vec *); 441441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInequalityBounds(Tao, Vec, Vec); 442441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetInequalityBounds(Tao, Vec *, Vec *); 443441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetVariableBoundsRoutine(Tao, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *); 444441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeVariableBounds(Tao); 44521ec2d5cSBarry Smith 446e52336cbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetTolerances(Tao, PetscReal *, PetscReal *, PetscReal *); 447e52336cbSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetTolerances(Tao, PetscReal, PetscReal, PetscReal); 448441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetConstraintTolerances(Tao, PetscReal *, PetscReal *); 449441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConstraintTolerances(Tao, PetscReal, PetscReal); 450441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetFunctionLowerBound(Tao, PetscReal); 451441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInitialTrustRegionRadius(Tao, PetscReal); 452441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMaximumIterations(Tao, PetscInt); 453441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMaximumFunctionEvaluations(Tao, PetscInt); 454441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetFunctionLowerBound(Tao, PetscReal *); 455441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetInitialTrustRegionRadius(Tao, PetscReal *); 456441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetCurrentTrustRegionRadius(Tao, PetscReal *); 457441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetMaximumIterations(Tao, PetscInt *); 458770232b9SCe Qin PETSC_EXTERN PetscErrorCode TaoGetCurrentFunctionEvaluations(Tao, PetscInt *); 459441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetMaximumFunctionEvaluations(Tao, PetscInt *); 4608931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetIterationNumber(Tao, PetscInt *); 4618931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoSetIterationNumber(Tao, PetscInt); 4628931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetTotalIterationNumber(Tao, PetscInt *); 4638931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoSetTotalIterationNumber(Tao, PetscInt); 46479f5d8caSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetResidualNorm(Tao, PetscReal *); 4658931d482SJason Sarich 466b54963c9SStefano Zampini PETSC_EXTERN PetscErrorCode TaoAppendOptionsPrefix(Tao, const char[]); 467b54963c9SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetOptionsPrefix(Tao, const char *[]); 468441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoResetStatistics(Tao); 4698fcddce6SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetUpdate(Tao, PetscErrorCode (*)(Tao, PetscInt, void *), void *); 47021ec2d5cSBarry Smith 471441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetKSP(Tao, KSP *); 472025e9500SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetLinearSolveIterations(Tao, PetscInt *); 4730f0abf79SStefano Zampini PETSC_EXTERN PetscErrorCode TaoKSPSetUseEW(Tao, PetscBool); 474235fd6e6SBarry Smith 475235fd6e6SBarry Smith #include <petsctaolinesearch.h> 476b54963c9SStefano Zampini 477441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetLineSearch(Tao, TaoLineSearch *); 47821ec2d5cSBarry Smith 479ae93cb3cSJason Sarich PETSC_EXTERN PetscErrorCode TaoSetConvergenceHistory(Tao, PetscReal *, PetscReal *, PetscReal *, PetscInt *, PetscInt, PetscBool); 480ae93cb3cSJason Sarich PETSC_EXTERN PetscErrorCode TaoGetConvergenceHistory(Tao, PetscReal **, PetscReal **, PetscReal **, PetscInt **, PetscInt *); 481441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMonitor(Tao, PetscErrorCode (*)(Tao, void *), void *, PetscErrorCode (*)(void **)); 482441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoCancelMonitors(Tao); 48398ea980cSBarry Smith PETSC_EXTERN PetscErrorCode TaoMonitorDefault(Tao, void *); 484edd03b47SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION(3, 9, 0, "TaoMonitorDefault()", ) static inline PetscErrorCode TaoDefaultMonitor(Tao tao, void *ctx) 485d71ae5a4SJacob Faibussowitsch { 4869371c9d4SSatish Balay return TaoMonitorDefault(tao, ctx); 4879371c9d4SSatish Balay } 4888d5ead36SAlp Dener PETSC_EXTERN PetscErrorCode TaoDefaultGMonitor(Tao, void *); 489441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultSMonitor(Tao, void *); 490441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultCMonitor(Tao, void *); 491441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSolutionMonitor(Tao, void *); 492737f463aSAlp Dener PETSC_EXTERN PetscErrorCode TaoResidualMonitor(Tao, void *); 493441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGradientMonitor(Tao, void *); 494441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoStepDirectionMonitor(Tao, void *); 495441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDrawSolutionMonitor(Tao, void *); 496441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDrawStepMonitor(Tao, void *); 497441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDrawGradientMonitor(Tao, void *); 498441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoAddLineSearchCounts(Tao); 49921ec2d5cSBarry Smith 500441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultConvergenceTest(Tao, void *); 501441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConvergenceTest(Tao, PetscErrorCode (*)(Tao, void *), void *); 50221ec2d5cSBarry Smith 503441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoLCLSetStateDesignIS(Tao, IS, IS); 5043ecd9318SAlp Dener PETSC_EXTERN PetscErrorCode TaoMonitor(Tao, PetscInt, PetscReal, PetscReal, PetscReal, PetscReal); 505e882e171SHong Zhang typedef struct _n_TaoMonitorDrawCtx *TaoMonitorDrawCtx; 506e882e171SHong Zhang PETSC_EXTERN PetscErrorCode TaoMonitorDrawCtxCreate(MPI_Comm, const char[], const char[], int, int, int, int, PetscInt, TaoMonitorDrawCtx *); 507e882e171SHong Zhang PETSC_EXTERN PetscErrorCode TaoMonitorDrawCtxDestroy(TaoMonitorDrawCtx *); 508737f463aSAlp Dener 5098e85b1b3SXiang Huang PETSC_EXTERN PetscErrorCode TaoBRGNGetSubsolver(Tao, Tao *); 510a3c390cfSAlp Dener PETSC_EXTERN PetscErrorCode TaoBRGNSetRegularizerObjectiveAndGradientRoutine(Tao, PetscErrorCode (*)(Tao, Vec, PetscReal *, Vec, void *), void *); 511a3c390cfSAlp Dener PETSC_EXTERN PetscErrorCode TaoBRGNSetRegularizerHessianRoutine(Tao, Mat, PetscErrorCode (*)(Tao, Vec, Mat, void *), void *); 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 *); 5286285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitConstraintJacobian(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *); 5296285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerConstraintJacobian(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *); 5306285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerHessianRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *); 5316285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerObjectiveAndGradientRoutine(Tao, PetscErrorCode (*)(Tao, Vec, PetscReal *, Vec, void *), void *); 5326285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitHessianRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *); 5336285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitObjectiveAndGradientRoutine(Tao, PetscErrorCode (*)(Tao, Vec, PetscReal *, Vec, void *), void *); 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); 557