1b54963c9SStefano Zampini #if !defined(PETSCTAO_H) 23028902dSLisandro Dalcin #define PETSCTAO_H 321ec2d5cSBarry Smith 4aad13602SShrirang Abhyankar #include <petscsnes.h> 521ec2d5cSBarry Smith 6ac09b921SBarry Smith /* SUBMANSEC = Tao */ 7ac09b921SBarry Smith 8b54963c9SStefano Zampini PETSC_EXTERN PetscErrorCode VecFischer(Vec,Vec,Vec,Vec,Vec); 9b54963c9SStefano Zampini PETSC_EXTERN PetscErrorCode VecSFischer(Vec,Vec,Vec,Vec,PetscReal,Vec); 10b54963c9SStefano Zampini PETSC_EXTERN PetscErrorCode MatDFischer(Mat,Vec,Vec,Vec,Vec,Vec,Vec,Vec,Vec); 11b54963c9SStefano Zampini PETSC_EXTERN PetscErrorCode MatDSFischer(Mat,Vec,Vec,Vec,Vec,PetscReal,Vec,Vec,Vec,Vec,Vec); 128370d7cdSHansol Suh PETSC_EXTERN PetscErrorCode TaoSoftThreshold(Vec,PetscReal,PetscReal,Vec); 1321ec2d5cSBarry Smith 1421ec2d5cSBarry Smith /*E 1565ba42b6SBarry Smith TaoSubsetType - Type representing the way Tao handles active sets 1621ec2d5cSBarry Smith 1765ba42b6SBarry Smith + `TAO_SUBSET_SUBVEC` - Tao uses PETSc's 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 2121ec2d5cSBarry Smith Options database keys: 2265ba42b6SBarry Smith . -different_hessian - Tao will use a copy of the hessian operator for masking. By default 2365ba42b6SBarry Smith Tao will directly alter the hessian operator. 241eb8069cSJason Sarich Level: intermediate 2521ec2d5cSBarry Smith 2621ec2d5cSBarry Smith E*/ 2721ec2d5cSBarry Smith typedef enum {TAO_SUBSET_SUBVEC,TAO_SUBSET_MASK,TAO_SUBSET_MATRIXFREE} TaoSubsetType; 2821ec2d5cSBarry Smith PETSC_EXTERN const char *const TaoSubsetTypes[]; 2965ba42b6SBarry Smith 301eb8069cSJason Sarich /*S 311eb8069cSJason Sarich Tao - Abstract PETSc object that manages nonlinear optimization solves 321eb8069cSJason Sarich 331eb8069cSJason Sarich Level: advanced 341eb8069cSJason Sarich 35db781477SPatrick Sanan .seealso `TaoCreate()`, `TaoDestroy()`, `TaoSetType()`, `TaoType` 361eb8069cSJason Sarich S*/ 3765ba42b6SBarry Smith typedef struct _p_Tao* Tao; 3821ec2d5cSBarry Smith 396285c0a3SHansol Suh /*E 4065ba42b6SBarry Smith TaoADMMUpdateType - Determine spectral penalty update routine for Lagrange augmented term for ADMM. 416285c0a3SHansol Suh 426285c0a3SHansol Suh Level: advanced 436285c0a3SHansol Suh 44db781477SPatrick Sanan .seealso `TaoADMMSetUpdateType()` 456285c0a3SHansol Suh E*/ 466285c0a3SHansol Suh typedef enum {TAO_ADMM_UPDATE_BASIC,TAO_ADMM_UPDATE_ADAPTIVE,TAO_ADMM_UPDATE_ADAPTIVE_RELAXED} TaoADMMUpdateType; 476285c0a3SHansol Suh PETSC_EXTERN const char *const TaoADMMUpdateTypes[]; 4865ba42b6SBarry Smith 496285c0a3SHansol Suh /*MC 506285c0a3SHansol Suh TAO_ADMM_UPDATE_BASIC - Use same spectral penalty set at the beginning. No update 516285c0a3SHansol Suh 526285c0a3SHansol Suh Level: advanced 536285c0a3SHansol Suh 546285c0a3SHansol Suh Note: Most basic implementation. Generally slower than adaptive or adaptive relaxed version. 556285c0a3SHansol Suh 56db781477SPatrick Sanan .seealso: `TaoADMMSetUpdateType()`, `TAO_ADMM_UPDATE_ADAPTIVE`, `TAO_ADMM_UPDATE_ADAPTIVE_RELAXED` 576285c0a3SHansol Suh M*/ 586285c0a3SHansol Suh 596285c0a3SHansol Suh /*MC 606285c0a3SHansol Suh TAO_ADMM_UPDATE_ADAPTIVE - Adaptively update spectral penalty 616285c0a3SHansol Suh 626285c0a3SHansol Suh Level: advanced 636285c0a3SHansol Suh 64b54963c9SStefano Zampini Note: Adaptively updates spectral penalty by using both steepest descent and minimum gradient. 656285c0a3SHansol Suh 66db781477SPatrick Sanan .seealso: `TaoADMMSetUpdateType()`, `TAO_ADMM_UPDATE_BASIC`, `TAO_ADMM_UPDATE_ADAPTIVE_RELAXED` 676285c0a3SHansol Suh M*/ 686285c0a3SHansol Suh 696285c0a3SHansol Suh /*MC 706285c0a3SHansol Suh ADMM_UPDATE_ADAPTIVE_RELAXED - Adaptively update spectral penalty, and relaxes parameter update 716285c0a3SHansol Suh 726285c0a3SHansol Suh Level: advanced 736285c0a3SHansol Suh 746285c0a3SHansol Suh Note: With adaptive spectral penalty update, it also relaxes x vector update by a factor. 756285c0a3SHansol Suh 76db781477SPatrick Sanan .seealso: `TaoADMMSetUpdateType()`, `TAO_ADMM_UPDATE_BASIC`, `TAO_ADMM_UPDATE_ADAPTIVE` 776285c0a3SHansol Suh M*/ 786285c0a3SHansol Suh 796285c0a3SHansol Suh /*E 806285c0a3SHansol Suh TaoADMMRegularizerType - Determine regularizer routine - either user provided or soft threshold 816285c0a3SHansol Suh 826285c0a3SHansol Suh Level: advanced 836285c0a3SHansol Suh 84db781477SPatrick Sanan .seealso `TaoADMMSetRegularizerType()` 856285c0a3SHansol Suh E*/ 866285c0a3SHansol Suh typedef enum {TAO_ADMM_REGULARIZER_USER,TAO_ADMM_REGULARIZER_SOFT_THRESH} TaoADMMRegularizerType; 876285c0a3SHansol Suh PETSC_EXTERN const char *const TaoADMMRegularizerTypes[]; 8865ba42b6SBarry Smith 896285c0a3SHansol Suh /*MC 906285c0a3SHansol Suh TAO_ADMM_REGULARIZER_USER - User provided routines for regularizer part of ADMM 916285c0a3SHansol Suh 926285c0a3SHansol Suh Level: advanced 936285c0a3SHansol Suh 946285c0a3SHansol Suh Note: User needs to provided appropriate routines and type for regularizer solver 956285c0a3SHansol Suh 96db781477SPatrick Sanan .seealso: `TaoADMMSetRegularizerType()`, `TAO_ADMM_REGULARIZER_SOFT_THRESH` 976285c0a3SHansol Suh M*/ 986285c0a3SHansol Suh 996285c0a3SHansol Suh /*MC 1006285c0a3SHansol Suh TAO_ADMM_REGULARIZER_SOFT_THRESH - Soft threshold to solve regularizer part of ADMM 1016285c0a3SHansol Suh 1026285c0a3SHansol Suh Level: advanced 1036285c0a3SHansol Suh 1046285c0a3SHansol Suh Note: Utilizes built-in SoftThreshold routines 1056285c0a3SHansol Suh 106db781477SPatrick Sanan .seealso: `TaoSoftThreshold()`, `TaoADMMSetRegularizerObjectiveAndGradientRoutine()`, 107db781477SPatrick Sanan `TaoADMMSetRegularizerHessianRoutine()`, `TaoADMMSetRegularizerType()`, `TAO_ADMM_REGULARIZER_USER` 1086285c0a3SHansol Suh M*/ 1096285c0a3SHansol Suh 110661095bbSAlp Dener /*E 111661095bbSAlp Dener TaoALMMType - Determine the augmented Lagrangian formulation used in the TAOALMM subproblem. 112661095bbSAlp Dener 113661095bbSAlp Dener $ TAO_ALMM_CLASSIC - classic augmented Lagrangian definition including slack variables for inequality constraints 114661095bbSAlp Dener $ TAO_ALMM_PHR - Powell-Hestenes-Rockafellar formulation without slack variables, uses pointwise min() for inequalities 115661095bbSAlp Dener 116661095bbSAlp Dener Level: advanced 117661095bbSAlp Dener 118db781477SPatrick Sanan .seealso `TAOALMM`, `TaoALMMSetType()`, `TaoALMMGetType()` 119661095bbSAlp Dener E*/ 120661095bbSAlp Dener typedef enum {TAO_ALMM_CLASSIC,TAO_ALMM_PHR} TaoALMMType; 121661095bbSAlp Dener PETSC_EXTERN const char *const TaoALMMTypes[]; 122661095bbSAlp Dener 1231eb8069cSJason Sarich /*J 12465ba42b6SBarry Smith TaoType - String with the name of a Tao method 1251eb8069cSJason Sarich 1261eb8069cSJason Sarich Level: beginner 1271eb8069cSJason Sarich 12865ba42b6SBarry Smith .seealso `Tao`, `TaoCreate()`, `TaoSetType()` 1291eb8069cSJason Sarich J*/ 130b625d6c7SJed Brown typedef const char *TaoType; 13158417fe7SBarry Smith #define TAOLMVM "lmvm" 13258417fe7SBarry Smith #define TAONLS "nls" 13358417fe7SBarry Smith #define TAONTR "ntr" 13458417fe7SBarry Smith #define TAONTL "ntl" 13558417fe7SBarry Smith #define TAOCG "cg" 13658417fe7SBarry Smith #define TAOTRON "tron" 13758417fe7SBarry Smith #define TAOOWLQN "owlqn" 13858417fe7SBarry Smith #define TAOBMRM "bmrm" 13958417fe7SBarry Smith #define TAOBLMVM "blmvm" 1406b591159SAlp Dener #define TAOBQNLS "bqnls" 141ac9112b8SAlp Dener #define TAOBNCG "bncg" 142eb910715SAlp Dener #define TAOBNLS "bnls" 143fed79b8eSAlp Dener #define TAOBNTR "bntr" 144c14b763aSAlp Dener #define TAOBNTL "bntl" 145e0ed867bSAlp Dener #define TAOBQNKLS "bqnkls" 146e0ed867bSAlp Dener #define TAOBQNKTR "bqnktr" 147e0ed867bSAlp Dener #define TAOBQNKTL "bqnktl" 14858417fe7SBarry Smith #define TAOBQPIP "bqpip" 14958417fe7SBarry Smith #define TAOGPCG "gpcg" 15058417fe7SBarry Smith #define TAONM "nm" 15158417fe7SBarry Smith #define TAOPOUNDERS "pounders" 152737f463aSAlp Dener #define TAOBRGN "brgn" 15358417fe7SBarry Smith #define TAOLCL "lcl" 15458417fe7SBarry Smith #define TAOSSILS "ssils" 15558417fe7SBarry Smith #define TAOSSFLS "ssfls" 15658417fe7SBarry Smith #define TAOASILS "asils" 15758417fe7SBarry Smith #define TAOASFLS "asfls" 15858417fe7SBarry Smith #define TAOIPM "ipm" 159aad13602SShrirang Abhyankar #define TAOPDIPM "pdipm" 16083a0a5c3SToby Isaac #define TAOSHELL "shell" 1616285c0a3SHansol Suh #define TAOADMM "admm" 162661095bbSAlp Dener #define TAOALMM "almm" 163a82e8c82SStefano Zampini #define TAOPYTHON "python" 16458417fe7SBarry Smith 165441846f8SBarry Smith PETSC_EXTERN PetscClassId TAO_CLASSID; 166441846f8SBarry Smith PETSC_EXTERN PetscFunctionList TaoList; 16721ec2d5cSBarry Smith 168a35d58b8SBarry Smith /*E 16965ba42b6SBarry Smith TaoConvergedReason - reason a Tao method was said to have converged or diverged 170a35d58b8SBarry Smith 171a35d58b8SBarry Smith Level: beginner 172a35d58b8SBarry Smith 173a35d58b8SBarry Smith The two most common reasons for divergence are 174a35d58b8SBarry Smith $ 1) an incorrectly coded or computed gradient or Hessian 175a35d58b8SBarry Smith $ 2) failure or lack of convergence in the linear system (in this case we recommend 176a35d58b8SBarry Smith $ testing with -pc_type lu to eliminate the linear solver as the cause of the problem). 177a35d58b8SBarry Smith 17895452b02SPatrick Sanan Developer Notes: 17995452b02SPatrick Sanan this must match petsc/finclude/petsctao.h 180a35d58b8SBarry Smith 181a35d58b8SBarry Smith The string versions of these are in TAOConvergedReasons, if you change any value here you must 182a35d58b8SBarry Smith also adjust that array. 183a35d58b8SBarry Smith 18465ba42b6SBarry Smith .seealso: `Tao`, `TaoSolve()`, `TaoGetConvergedReason()`, `KSPConvergedReason`, `SNESConvergedReason`, `TSConvergedReason` 185a35d58b8SBarry Smith E*/ 18621ec2d5cSBarry Smith typedef enum {/* converged */ 18721ec2d5cSBarry Smith TAO_CONVERGED_GATOL = 3, /* ||g(X)|| < gatol */ 18821ec2d5cSBarry Smith TAO_CONVERGED_GRTOL = 4, /* ||g(X)|| / f(X) < grtol */ 18921ec2d5cSBarry Smith TAO_CONVERGED_GTTOL = 5, /* ||g(X)|| / ||g(X0)|| < gttol */ 19021ec2d5cSBarry Smith TAO_CONVERGED_STEPTOL = 6, /* step size small */ 19121ec2d5cSBarry Smith TAO_CONVERGED_MINF = 7, /* F < F_min */ 19221ec2d5cSBarry Smith TAO_CONVERGED_USER = 8, /* User defined */ 19321ec2d5cSBarry Smith /* diverged */ 19421ec2d5cSBarry Smith TAO_DIVERGED_MAXITS = -2, 19521ec2d5cSBarry Smith TAO_DIVERGED_NAN = -4, 19621ec2d5cSBarry Smith TAO_DIVERGED_MAXFCN = -5, 19721ec2d5cSBarry Smith TAO_DIVERGED_LS_FAILURE = -6, 19821ec2d5cSBarry Smith TAO_DIVERGED_TR_REDUCTION = -7, 19921ec2d5cSBarry Smith TAO_DIVERGED_USER = -8, /* User defined */ 20021ec2d5cSBarry Smith /* keep going */ 201e4cb33bbSBarry Smith TAO_CONTINUE_ITERATING = 0} TaoConvergedReason; 20221ec2d5cSBarry Smith 203e4cb33bbSBarry Smith PETSC_EXTERN const char **TaoConvergedReasons; 20421ec2d5cSBarry Smith 20521ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoInitializePackage(void); 20621ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoFinalizePackage(void); 207441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoCreate(MPI_Comm,Tao*); 208441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetFromOptions(Tao); 209441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetUp(Tao); 210b625d6c7SJed Brown PETSC_EXTERN PetscErrorCode TaoSetType(Tao,TaoType); 211b625d6c7SJed Brown PETSC_EXTERN PetscErrorCode TaoGetType(Tao,TaoType*); 212441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetApplicationContext(Tao,void*); 213441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetApplicationContext(Tao,void*); 214441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDestroy(Tao*); 21521ec2d5cSBarry Smith 216441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetOptionsPrefix(Tao,const char[]); 217441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoView(Tao,PetscViewer); 218fe2efc57SMark PETSC_EXTERN PetscErrorCode TaoViewFromOptions(Tao,PetscObject,const char[]); 21921ec2d5cSBarry Smith 220441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSolve(Tao); 22121ec2d5cSBarry Smith 222441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoRegister(const char[],PetscErrorCode (*)(Tao)); 223441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoRegisterDestroy(void); 22421ec2d5cSBarry Smith 225e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetConvergedReason(Tao,TaoConvergedReason*); 226e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetSolutionStatus(Tao,PetscInt*,PetscReal*,PetscReal*,PetscReal*,PetscReal*,TaoConvergedReason*); 227e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConvergedReason(Tao,TaoConvergedReason); 228a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetSolution(Tao,Vec); 229a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetSolution(Tao,Vec*); 230a82e8c82SStefano Zampini PETSC_DEPRECATED_FUNCTION("Use TaoSetSolution() (since version 3.17)") static inline PetscErrorCode TaoSetInitialVector(Tao t,Vec v) { return TaoSetSolution(t,v); } 231a82e8c82SStefano Zampini PETSC_DEPRECATED_FUNCTION("Use TaoGetSolution() (since version 3.17)") static inline PetscErrorCode TaoGetInitialVector(Tao t,Vec *v) { return TaoGetSolution(t,v); } 232a82e8c82SStefano Zampini 233a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetObjective(Tao,PetscErrorCode(*)(Tao,Vec,PetscReal*,void*),void*); 234a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetObjective(Tao,PetscErrorCode(**)(Tao,Vec,PetscReal*,void*),void**); 235a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetGradient(Tao,Vec,PetscErrorCode(*)(Tao,Vec,Vec,void*),void*); 236a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetGradient(Tao,Vec*,PetscErrorCode(**)(Tao,Vec,Vec,void*),void**); 237a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetObjectiveAndGradient(Tao,Vec,PetscErrorCode(*)(Tao,Vec,PetscReal*,Vec,void*),void*); 238a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetObjectiveAndGradient(Tao,Vec*,PetscErrorCode(**)(Tao,Vec,PetscReal*,Vec,void*),void**); 239a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetHessian(Tao,Mat,Mat,PetscErrorCode(*)(Tao,Vec,Mat,Mat,void*),void*); 240a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetHessian(Tao,Mat*,Mat*,PetscErrorCode(**)(Tao,Vec,Mat,Mat,void*),void**); 241a82e8c82SStefano Zampini PETSC_DEPRECATED_FUNCTION("Use TaoSetObjective() (since version 3.17)") static inline PetscErrorCode TaoSetObjectiveRoutine(Tao t,PetscErrorCode (*f)(Tao,Vec,PetscReal*,void*),void *c) { return TaoSetObjective(t,f,c); } 242a82e8c82SStefano Zampini PETSC_DEPRECATED_FUNCTION("Use TaoGetGradient() (since version 3.17)") static inline PetscErrorCode TaoGetGradientVector(Tao t,Vec *v) { return TaoGetGradient(t,v,NULL,NULL); } 243a82e8c82SStefano Zampini PETSC_DEPRECATED_FUNCTION("Use TaoSetGradient() (since version 3.17)") static inline PetscErrorCode TaoSetGradientRoutine(Tao t,PetscErrorCode (*f)(Tao,Vec,Vec,void*),void *c) { return TaoSetGradient(t,NULL,f,c); } 244a82e8c82SStefano Zampini PETSC_DEPRECATED_FUNCTION("Use TaoSetObjectiveAndGradient() (since version 3.17)") static inline PetscErrorCode TaoSetObjectiveAndGradientRoutine(Tao t,PetscErrorCode (*f)(Tao,Vec,PetscReal*,Vec,void*),void *c) { return TaoSetObjectiveAndGradient(t,NULL,f,c); } 2455494a3a4SStefano Zampini 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) { return TaoSetHessian(t,H,P,f,c); } 246a82e8c82SStefano Zampini 247a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoSetGradientNorm(Tao,Mat); 248a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoGetGradientNorm(Tao,Mat*); 249414d97d3SAlp Dener PETSC_EXTERN PetscErrorCode TaoSetLMVMMatrix(Tao,Mat); 250f5766c09SAlp Dener PETSC_EXTERN PetscErrorCode TaoGetLMVMMatrix(Tao,Mat*); 251414d97d3SAlp Dener PETSC_EXTERN PetscErrorCode TaoSetRecycleHistory(Tao,PetscBool); 252414d97d3SAlp Dener PETSC_EXTERN PetscErrorCode TaoGetRecycleHistory(Tao,PetscBool*); 253a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMSetH0(Tao,Mat); 254a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMGetH0(Tao,Mat*); 255a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMGetH0KSP(Tao,KSP*); 256b39c12a9SAlp Dener PETSC_EXTERN PetscErrorCode TaoLMVMRecycle(Tao,PetscBool); 2574a48860cSAlp Dener PETSC_EXTERN PetscErrorCode TaoSetResidualRoutine(Tao,Vec,PetscErrorCode(*)(Tao,Vec,Vec,void*),void*); 258737f463aSAlp Dener PETSC_EXTERN PetscErrorCode TaoSetResidualWeights(Tao,Vec,PetscInt,PetscInt*,PetscInt*,PetscReal*); 259441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConstraintsRoutine(Tao,Vec,PetscErrorCode(*)(Tao,Vec,Vec,void*),void*); 260441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInequalityConstraintsRoutine(Tao,Vec,PetscErrorCode(*)(Tao,Vec,Vec,void*),void*); 261441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetEqualityConstraintsRoutine(Tao,Vec,PetscErrorCode(*)(Tao,Vec,Vec,void*),void*); 2624ffbe8acSAlp Dener PETSC_EXTERN PetscErrorCode TaoSetJacobianResidualRoutine(Tao,Mat,Mat,PetscErrorCode(*)(Tao,Vec,Mat,Mat,void*),void*); 263ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianRoutine(Tao,Mat,Mat,PetscErrorCode(*)(Tao,Vec,Mat,Mat,void*),void*); 264ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianStateRoutine(Tao,Mat,Mat,Mat,PetscErrorCode(*)(Tao,Vec,Mat,Mat,Mat,void*),void*); 26594ab13aaSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianDesignRoutine(Tao,Mat,PetscErrorCode(*)(Tao,Vec,Mat,void*),void*); 266ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianInequalityRoutine(Tao,Mat,Mat,PetscErrorCode(*)(Tao,Vec,Mat,Mat,void*),void*); 267ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianEqualityRoutine(Tao,Mat,Mat,PetscErrorCode(*)(Tao,Vec,Mat,Mat,void*),void*); 26821ec2d5cSBarry Smith 269a82e8c82SStefano Zampini PETSC_EXTERN PetscErrorCode TaoPythonSetType(Tao,const char[]); 270*ebead697SStefano Zampini PETSC_EXTERN PetscErrorCode TaoPythonGetType(Tao,const char*[]); 271a82e8c82SStefano Zampini 27283a0a5c3SToby Isaac PETSC_EXTERN PetscErrorCode TaoShellSetSolve(Tao,PetscErrorCode(*)(Tao)); 27383a0a5c3SToby Isaac PETSC_EXTERN PetscErrorCode TaoShellSetContext(Tao,void*); 2743ec1f749SStefano Zampini PETSC_EXTERN PetscErrorCode TaoShellGetContext(Tao,void*); 27583a0a5c3SToby Isaac 2769fbee547SJacob 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) {return TaoSetResidualRoutine(tao,res,func,ctx);} 2779fbee547SJacob 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) {return TaoSetResidualWeights(tao,sigma_v,n,rows,cols,vals);} 278737f463aSAlp Dener 279441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetStateDesignIS(Tao,IS,IS); 28021ec2d5cSBarry Smith 281441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeObjective(Tao,Vec,PetscReal*); 2824a48860cSAlp Dener PETSC_EXTERN PetscErrorCode TaoComputeResidual(Tao,Vec,Vec); 283412cdd55SHong Zhang PETSC_EXTERN PetscErrorCode TaoTestGradient(Tao,Vec,Vec); 284441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeGradient(Tao,Vec,Vec); 285441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeObjectiveAndGradient(Tao,Vec,PetscReal*,Vec); 286441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeConstraints(Tao,Vec,Vec); 287441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeInequalityConstraints(Tao,Vec,Vec); 288441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeEqualityConstraints(Tao,Vec,Vec); 289441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeGradient(Tao,Vec,Vec,void*); 290441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsObjectiveDefined(Tao,PetscBool*); 291441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsGradientDefined(Tao,PetscBool*); 292441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsObjectiveAndGradientDefined(Tao,PetscBool*); 29321ec2d5cSBarry Smith 2949fbee547SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use TaoComputeResidual() (since version 3.11)") static inline PetscErrorCode TaoComputeSeparableObjective(Tao tao,Vec X,Vec F) {return TaoComputeResidual(tao,X,F);} 2954a48860cSAlp Dener 29609baa881SHong Zhang PETSC_EXTERN PetscErrorCode TaoTestHessian(Tao); 297ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeHessian(Tao,Vec,Mat,Mat); 298737f463aSAlp Dener PETSC_EXTERN PetscErrorCode TaoComputeResidualJacobian(Tao,Vec,Mat,Mat); 299ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobian(Tao,Vec,Mat,Mat); 300ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianState(Tao,Vec,Mat,Mat,Mat); 301ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianEquality(Tao,Vec,Mat,Mat); 302ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianInequality(Tao,Vec,Mat,Mat); 30394ab13aaSBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianDesign(Tao,Vec,Mat); 30421ec2d5cSBarry Smith 305ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessian(Tao,Vec,Mat,Mat,void*); 306ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessianColor(Tao,Vec,Mat,Mat,void*); 307f4c1ad5cSStefano Zampini PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessianMFFD(Tao,Vec,Mat,Mat,void*); 308441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeDualVariables(Tao,Vec,Vec); 309441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetVariableBounds(Tao,Vec,Vec); 310441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetVariableBounds(Tao,Vec*,Vec*); 311441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetDualVariables(Tao,Vec*,Vec*); 312441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInequalityBounds(Tao,Vec,Vec); 313441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetInequalityBounds(Tao,Vec*,Vec*); 314441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetVariableBoundsRoutine(Tao,PetscErrorCode(*)(Tao,Vec,Vec,void*),void*); 315441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeVariableBounds(Tao); 31621ec2d5cSBarry Smith 317e52336cbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetTolerances(Tao,PetscReal*,PetscReal*,PetscReal*); 318e52336cbSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetTolerances(Tao,PetscReal,PetscReal,PetscReal); 319441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetConstraintTolerances(Tao,PetscReal*,PetscReal*); 320441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConstraintTolerances(Tao,PetscReal,PetscReal); 321441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetFunctionLowerBound(Tao,PetscReal); 322441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInitialTrustRegionRadius(Tao,PetscReal); 323441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMaximumIterations(Tao,PetscInt); 324441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMaximumFunctionEvaluations(Tao,PetscInt); 325441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetFunctionLowerBound(Tao,PetscReal*); 326441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetInitialTrustRegionRadius(Tao,PetscReal*); 327441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetCurrentTrustRegionRadius(Tao,PetscReal*); 328441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetMaximumIterations(Tao,PetscInt*); 329770232b9SCe Qin PETSC_EXTERN PetscErrorCode TaoGetCurrentFunctionEvaluations(Tao,PetscInt*); 330441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetMaximumFunctionEvaluations(Tao,PetscInt*); 3318931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetIterationNumber(Tao,PetscInt*); 3328931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoSetIterationNumber(Tao,PetscInt); 3338931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetTotalIterationNumber(Tao,PetscInt*); 3348931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoSetTotalIterationNumber(Tao,PetscInt); 33579f5d8caSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetResidualNorm(Tao,PetscReal*); 3368931d482SJason Sarich 337b54963c9SStefano Zampini PETSC_EXTERN PetscErrorCode TaoAppendOptionsPrefix(Tao,const char[]); 338b54963c9SStefano Zampini PETSC_EXTERN PetscErrorCode TaoGetOptionsPrefix(Tao,const char*[]); 339441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoResetStatistics(Tao); 3408fcddce6SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetUpdate(Tao,PetscErrorCode(*)(Tao,PetscInt,void*),void*); 34121ec2d5cSBarry Smith 342441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetKSP(Tao,KSP*); 343025e9500SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetLinearSolveIterations(Tao,PetscInt*); 3440f0abf79SStefano Zampini PETSC_EXTERN PetscErrorCode TaoKSPSetUseEW(Tao,PetscBool); 345235fd6e6SBarry Smith 346235fd6e6SBarry Smith #include <petsctaolinesearch.h> 347b54963c9SStefano Zampini 348441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetLineSearch(Tao,TaoLineSearch*); 34921ec2d5cSBarry Smith 350ae93cb3cSJason Sarich PETSC_EXTERN PetscErrorCode TaoSetConvergenceHistory(Tao,PetscReal*,PetscReal*,PetscReal*,PetscInt*,PetscInt,PetscBool); 351ae93cb3cSJason Sarich PETSC_EXTERN PetscErrorCode TaoGetConvergenceHistory(Tao,PetscReal**,PetscReal**,PetscReal**,PetscInt**,PetscInt*); 352441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMonitor(Tao,PetscErrorCode (*)(Tao,void*),void *,PetscErrorCode (*)(void**)); 353441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoCancelMonitors(Tao); 35498ea980cSBarry Smith PETSC_EXTERN PetscErrorCode TaoMonitorDefault(Tao,void*); 3559fbee547SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use TaoMonitorDefault() (since version 3.9)") static inline PetscErrorCode TaoDefaultMonitor(Tao tao,void*ctx) {return TaoMonitorDefault(tao,ctx);} 3568d5ead36SAlp Dener PETSC_EXTERN PetscErrorCode TaoDefaultGMonitor(Tao,void*); 357441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultSMonitor(Tao,void*); 358441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultCMonitor(Tao,void*); 359441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSolutionMonitor(Tao,void*); 360737f463aSAlp Dener PETSC_EXTERN PetscErrorCode TaoResidualMonitor(Tao,void*); 361441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGradientMonitor(Tao,void*); 362441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoStepDirectionMonitor(Tao,void*); 363441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDrawSolutionMonitor(Tao,void*); 364441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDrawStepMonitor(Tao,void*); 365441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDrawGradientMonitor(Tao,void*); 366441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoAddLineSearchCounts(Tao); 36721ec2d5cSBarry Smith 368441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultConvergenceTest(Tao,void*); 369441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConvergenceTest(Tao,PetscErrorCode (*)(Tao,void*),void *); 37021ec2d5cSBarry Smith 371441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoLCLSetStateDesignIS(Tao,IS,IS); 3723ecd9318SAlp Dener PETSC_EXTERN PetscErrorCode TaoMonitor(Tao,PetscInt,PetscReal,PetscReal,PetscReal,PetscReal); 373e882e171SHong Zhang typedef struct _n_TaoMonitorDrawCtx* TaoMonitorDrawCtx; 374e882e171SHong Zhang PETSC_EXTERN PetscErrorCode TaoMonitorDrawCtxCreate(MPI_Comm,const char[],const char[],int,int,int,int,PetscInt,TaoMonitorDrawCtx*); 375e882e171SHong Zhang PETSC_EXTERN PetscErrorCode TaoMonitorDrawCtxDestroy(TaoMonitorDrawCtx*); 376737f463aSAlp Dener 3778e85b1b3SXiang Huang PETSC_EXTERN PetscErrorCode TaoBRGNGetSubsolver(Tao,Tao *); 378a3c390cfSAlp Dener PETSC_EXTERN PetscErrorCode TaoBRGNSetRegularizerObjectiveAndGradientRoutine(Tao,PetscErrorCode (*)(Tao,Vec,PetscReal*,Vec,void*),void*); 379a3c390cfSAlp Dener PETSC_EXTERN PetscErrorCode TaoBRGNSetRegularizerHessianRoutine(Tao,Mat,PetscErrorCode (*)(Tao,Vec,Mat,void*),void*); 380a3c390cfSAlp Dener PETSC_EXTERN PetscErrorCode TaoBRGNSetRegularizerWeight(Tao,PetscReal); 3818ac80d48SXiang Huang PETSC_EXTERN PetscErrorCode TaoBRGNSetL1SmoothEpsilon(Tao,PetscReal); 3828e85b1b3SXiang Huang PETSC_EXTERN PetscErrorCode TaoBRGNSetDictionaryMatrix(Tao,Mat); 383cd1c4666STristan Konolige PETSC_EXTERN PetscErrorCode TaoBRGNGetDampingVector(Tao,Vec *); 3846285c0a3SHansol Suh 3856285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMGetMisfitSubsolver(Tao,Tao *); 3866285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMGetRegularizationSubsolver(Tao,Tao *); 3876285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMGetDualVector(Tao,Vec*); 3886285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMGetSpectralPenalty(Tao,PetscReal*); 3896285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetSpectralPenalty(Tao,PetscReal); 3906285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoGetADMMParentTao(Tao,Tao *); 3916285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetConstraintVectorRHS(Tao,Vec); 3926285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerCoefficient(Tao,PetscReal); 3936285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitConstraintJacobian(Tao,Mat,Mat,PetscErrorCode (*)(Tao,Vec,Mat,Mat,void*),void*); 3946285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerConstraintJacobian(Tao,Mat,Mat,PetscErrorCode (*)(Tao,Vec,Mat,Mat,void*),void*); 3956285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerHessianRoutine(Tao,Mat,Mat,PetscErrorCode (*)(Tao,Vec,Mat,Mat,void*),void*); 3966285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerObjectiveAndGradientRoutine(Tao,PetscErrorCode (*)(Tao,Vec,PetscReal *,Vec,void*),void*); 3976285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitHessianRoutine(Tao,Mat,Mat,PetscErrorCode (*)(Tao,Vec,Mat,Mat,void*),void*); 3986285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitObjectiveAndGradientRoutine(Tao,PetscErrorCode (*)(Tao,Vec,PetscReal *,Vec,void*),void*); 3996285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitHessianChangeStatus(Tao,PetscBool); 4006285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegHessianChangeStatus(Tao,PetscBool); 4016285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMinimumSpectralPenalty(Tao,PetscReal); 4026285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerType(Tao,TaoADMMRegularizerType); 4036285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMGetRegularizerType(Tao,TaoADMMRegularizerType*); 4046285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetUpdateType(Tao,TaoADMMUpdateType); 4056285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMGetUpdateType(Tao,TaoADMMUpdateType*); 406661095bbSAlp Dener 407661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMGetType(Tao,TaoALMMType*); 408661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMSetType(Tao,TaoALMMType); 409661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMGetSubsolver(Tao,Tao*); 410661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMSetSubsolver(Tao,Tao); 411661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMGetMultipliers(Tao,Vec*); 412661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMSetMultipliers(Tao,Vec); 413661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMGetPrimalIS(Tao,IS*,IS*); 414661095bbSAlp Dener PETSC_EXTERN PetscErrorCode TaoALMMGetDualIS(Tao,IS*,IS*); 41521ec2d5cSBarry Smith #endif 416