13028902dSLisandro Dalcin #ifndef PETSCTAO_H 23028902dSLisandro Dalcin #define PETSCTAO_H 321ec2d5cSBarry Smith 4aad13602SShrirang Abhyankar #include <petscsnes.h> 521ec2d5cSBarry Smith 621ec2d5cSBarry Smith PetscErrorCode VecFischer(Vec, Vec, Vec, Vec, Vec); 721ec2d5cSBarry Smith PetscErrorCode VecSFischer(Vec, Vec, Vec, Vec, PetscReal, Vec); 8235fd6e6SBarry Smith PetscErrorCode MatDFischer(Mat, Vec, Vec, Vec, Vec, Vec, Vec, Vec, Vec); 9235fd6e6SBarry Smith PetscErrorCode MatDSFischer(Mat, Vec, Vec, Vec, Vec, PetscReal, Vec, Vec, Vec, Vec, Vec); 108370d7cdSHansol Suh PETSC_EXTERN PetscErrorCode TaoSoftThreshold(Vec, PetscReal, PetscReal, Vec); 1121ec2d5cSBarry Smith 1221ec2d5cSBarry Smith 1321ec2d5cSBarry Smith /*E 1421ec2d5cSBarry Smith TaoSubsetType - PetscInt representing the way TAO handles active sets 1521ec2d5cSBarry Smith 167dae84e0SHong Zhang + TAO_SUBSET_SUBVEC - TAO uses PETSc's MatCreateSubMatrix and VecGetSubVector 1721ec2d5cSBarry Smith . TAO_SUBSET_MASK - Matrices are zeroed out corresponding to active set entries 1821ec2d5cSBarry Smith - TAO_SUBSET_MATRIXFREE - Same as TAO_SUBSET_MASK, but can be applied to matrix-free operators 1921ec2d5cSBarry Smith 2021ec2d5cSBarry Smith Options database keys: 2121ec2d5cSBarry Smith . -different_hessian - TAO will use a copy of the hessian operator for masking. By default 2221ec2d5cSBarry Smith TAO will directly alter the hessian operator. 231eb8069cSJason Sarich Level: intermediate 2421ec2d5cSBarry Smith 2521ec2d5cSBarry Smith E*/ 261eb8069cSJason Sarich 2721ec2d5cSBarry Smith typedef enum {TAO_SUBSET_SUBVEC,TAO_SUBSET_MASK,TAO_SUBSET_MATRIXFREE} TaoSubsetType; 2821ec2d5cSBarry Smith PETSC_EXTERN const char *const TaoSubsetTypes[]; 291eb8069cSJason Sarich /*S 301eb8069cSJason Sarich Tao - Abstract PETSc object that manages nonlinear optimization solves 311eb8069cSJason Sarich 321eb8069cSJason Sarich Level: advanced 331eb8069cSJason Sarich 341eb8069cSJason Sarich .seealso TaoCreate(), TaoDestroy(), TaoSetType(), TaoType 351eb8069cSJason Sarich S*/ 3621ec2d5cSBarry Smith 376285c0a3SHansol Suh /*E 386285c0a3SHansol Suh TaoADMMUpdateType - Determine spectral penalty update routine for lagrange augmented term for ADMM. 396285c0a3SHansol Suh 406285c0a3SHansol Suh Level: advanced 416285c0a3SHansol Suh 426285c0a3SHansol Suh .seealso TaoADMMSetUpdateType() 436285c0a3SHansol Suh E*/ 446285c0a3SHansol Suh typedef enum {TAO_ADMM_UPDATE_BASIC,TAO_ADMM_UPDATE_ADAPTIVE,TAO_ADMM_UPDATE_ADAPTIVE_RELAXED} TaoADMMUpdateType; 456285c0a3SHansol Suh PETSC_EXTERN const char *const TaoADMMUpdateTypes[]; 466285c0a3SHansol Suh /*MC 476285c0a3SHansol Suh TAO_ADMM_UPDATE_BASIC - Use same spectral penalty set at the beginning. No update 486285c0a3SHansol Suh 496285c0a3SHansol Suh Level: advanced 506285c0a3SHansol Suh 516285c0a3SHansol Suh Note: Most basic implementation. Generally slower than adaptive or adaptive relaxed version. 526285c0a3SHansol Suh 536285c0a3SHansol Suh .seealso: TaoADMMSetUpdateType(), TAO_ADMM_UPDATE_ADAPTIVE, TAO_ADMM_UPDATE_ADAPTIVE_RELAXED 546285c0a3SHansol Suh M*/ 556285c0a3SHansol Suh 566285c0a3SHansol Suh /*MC 576285c0a3SHansol Suh TAO_ADMM_UPDATE_ADAPTIVE - Adaptively update spectral penalty 586285c0a3SHansol Suh 596285c0a3SHansol Suh Level: advanced 606285c0a3SHansol Suh 616285c0a3SHansol Suh Note: Adaptively updates spectral penalty, using both steepest descent and minimum gradient. 626285c0a3SHansol Suh 636285c0a3SHansol Suh .seealso: TaoADMMSetUpdateType(), TAO_ADMM_UPDATE_BASIC, TAO_ADMM_UPDATE_ADAPTIVE_RELAXED 646285c0a3SHansol Suh M*/ 656285c0a3SHansol Suh 666285c0a3SHansol Suh /*MC 676285c0a3SHansol Suh ADMM_UPDATE_ADAPTIVE_RELAXED - Adaptively update spectral penalty, and relaxes parameter update 686285c0a3SHansol Suh 696285c0a3SHansol Suh Level: advanced 706285c0a3SHansol Suh 716285c0a3SHansol Suh Note: With adaptive spectral penalty update, it also relaxes x vector update by a factor. 726285c0a3SHansol Suh 736285c0a3SHansol Suh .seealso: TaoADMMSetUpdateType(), TAO_ADMM_UPDATE_BASIC, TAO_ADMM_UPDATE_ADAPTIVE 746285c0a3SHansol Suh M*/ 756285c0a3SHansol Suh 766285c0a3SHansol Suh 776285c0a3SHansol Suh /*E 786285c0a3SHansol Suh TaoADMMRegularizerType - Determine regularizer routine - either user provided or soft threshold 796285c0a3SHansol Suh 806285c0a3SHansol Suh Level: advanced 816285c0a3SHansol Suh 826285c0a3SHansol Suh .seealso TaoADMMSetRegularizerType() 836285c0a3SHansol Suh E*/ 846285c0a3SHansol Suh typedef enum {TAO_ADMM_REGULARIZER_USER,TAO_ADMM_REGULARIZER_SOFT_THRESH} TaoADMMRegularizerType; 856285c0a3SHansol Suh PETSC_EXTERN const char *const TaoADMMRegularizerTypes[]; 866285c0a3SHansol Suh /*MC 876285c0a3SHansol Suh TAO_ADMM_REGULARIZER_USER - User provided routines for regularizer part of ADMM 886285c0a3SHansol Suh 896285c0a3SHansol Suh Level: advanced 906285c0a3SHansol Suh 916285c0a3SHansol Suh Note: User needs to provided appropriate routines and type for regularizer solver 926285c0a3SHansol Suh 936285c0a3SHansol Suh .seealso: TaoADMMSetRegularizerType(), TAO_ADMM_REGULARIZER_SOFT_THRESH 946285c0a3SHansol Suh M*/ 956285c0a3SHansol Suh 966285c0a3SHansol Suh /*MC 976285c0a3SHansol Suh TAO_ADMM_REGULARIZER_SOFT_THRESH - Soft threshold to solve regularizer part of ADMM 986285c0a3SHansol Suh 996285c0a3SHansol Suh Level: advanced 1006285c0a3SHansol Suh 1016285c0a3SHansol Suh Note: Utilizes built-in SoftThreshold routines 1026285c0a3SHansol Suh 1036285c0a3SHansol Suh .seealso: TaoSoftThreshold(), TaoADMMSetRegularizerObjectiveAndGradientRoutine(), 1046285c0a3SHansol Suh TaoADMMSetRegularizerHessianRoutine(), TaoADMMSetRegularizerType(), TAO_ADMM_REGULARIZER_USER 1056285c0a3SHansol Suh M*/ 1066285c0a3SHansol Suh 107441846f8SBarry Smith typedef struct _p_Tao* Tao; 1081eb8069cSJason Sarich 1091eb8069cSJason Sarich /*J 1101eb8069cSJason Sarich TaoType - String with the name of a TAO method 1111eb8069cSJason Sarich 1121eb8069cSJason Sarich Level: beginner 1131eb8069cSJason Sarich 1141eb8069cSJason Sarich J*/ 115b625d6c7SJed Brown typedef const char *TaoType; 11658417fe7SBarry Smith #define TAOLMVM "lmvm" 11758417fe7SBarry Smith #define TAONLS "nls" 11858417fe7SBarry Smith #define TAONTR "ntr" 11958417fe7SBarry Smith #define TAONTL "ntl" 12058417fe7SBarry Smith #define TAOCG "cg" 12158417fe7SBarry Smith #define TAOTRON "tron" 12258417fe7SBarry Smith #define TAOOWLQN "owlqn" 12358417fe7SBarry Smith #define TAOBMRM "bmrm" 12458417fe7SBarry Smith #define TAOBLMVM "blmvm" 1256b591159SAlp Dener #define TAOBQNLS "bqnls" 126ac9112b8SAlp Dener #define TAOBNCG "bncg" 127eb910715SAlp Dener #define TAOBNLS "bnls" 128fed79b8eSAlp Dener #define TAOBNTR "bntr" 129c14b763aSAlp Dener #define TAOBNTL "bntl" 130e0ed867bSAlp Dener #define TAOBQNKLS "bqnkls" 131e0ed867bSAlp Dener #define TAOBQNKTR "bqnktr" 132e0ed867bSAlp Dener #define TAOBQNKTL "bqnktl" 13358417fe7SBarry Smith #define TAOBQPIP "bqpip" 13458417fe7SBarry Smith #define TAOGPCG "gpcg" 13558417fe7SBarry Smith #define TAONM "nm" 13658417fe7SBarry Smith #define TAOPOUNDERS "pounders" 137737f463aSAlp Dener #define TAOBRGN "brgn" 13858417fe7SBarry Smith #define TAOLCL "lcl" 13958417fe7SBarry Smith #define TAOSSILS "ssils" 14058417fe7SBarry Smith #define TAOSSFLS "ssfls" 14158417fe7SBarry Smith #define TAOASILS "asils" 14258417fe7SBarry Smith #define TAOASFLS "asfls" 14358417fe7SBarry Smith #define TAOIPM "ipm" 144aad13602SShrirang Abhyankar #define TAOPDIPM "pdipm" 14583a0a5c3SToby Isaac #define TAOSHELL "shell" 1466285c0a3SHansol Suh #define TAOADMM "admm" 14758417fe7SBarry Smith 148441846f8SBarry Smith PETSC_EXTERN PetscClassId TAO_CLASSID; 149441846f8SBarry Smith PETSC_EXTERN PetscFunctionList TaoList; 15021ec2d5cSBarry Smith 151a35d58b8SBarry Smith /*E 152a35d58b8SBarry Smith TaoConvergedReason - reason a TAO method was said to have converged or diverged 153a35d58b8SBarry Smith 154a35d58b8SBarry Smith Level: beginner 155a35d58b8SBarry Smith 156a35d58b8SBarry Smith The two most common reasons for divergence are 157a35d58b8SBarry Smith $ 1) an incorrectly coded or computed gradient or Hessian 158a35d58b8SBarry Smith $ 2) failure or lack of convergence in the linear system (in this case we recommend 159a35d58b8SBarry Smith $ testing with -pc_type lu to eliminate the linear solver as the cause of the problem). 160a35d58b8SBarry Smith 16195452b02SPatrick Sanan Developer Notes: 16295452b02SPatrick Sanan this must match petsc/finclude/petsctao.h 163a35d58b8SBarry Smith 164a35d58b8SBarry Smith The string versions of these are in TAOConvergedReasons, if you change any value here you must 165a35d58b8SBarry Smith also adjust that array. 166a35d58b8SBarry Smith 167a35d58b8SBarry Smith .seealso: TAOSolve(), TaoGetConvergedReason(), KSPConvergedReason, SNESConvergedReason, TSConvergedReason 168a35d58b8SBarry Smith E*/ 16921ec2d5cSBarry Smith typedef enum {/* converged */ 17021ec2d5cSBarry Smith TAO_CONVERGED_GATOL = 3, /* ||g(X)|| < gatol */ 17121ec2d5cSBarry Smith TAO_CONVERGED_GRTOL = 4, /* ||g(X)|| / f(X) < grtol */ 17221ec2d5cSBarry Smith TAO_CONVERGED_GTTOL = 5, /* ||g(X)|| / ||g(X0)|| < gttol */ 17321ec2d5cSBarry Smith TAO_CONVERGED_STEPTOL = 6, /* step size small */ 17421ec2d5cSBarry Smith TAO_CONVERGED_MINF = 7, /* F < F_min */ 17521ec2d5cSBarry Smith TAO_CONVERGED_USER = 8, /* User defined */ 17621ec2d5cSBarry Smith /* diverged */ 17721ec2d5cSBarry Smith TAO_DIVERGED_MAXITS = -2, 17821ec2d5cSBarry Smith TAO_DIVERGED_NAN = -4, 17921ec2d5cSBarry Smith TAO_DIVERGED_MAXFCN = -5, 18021ec2d5cSBarry Smith TAO_DIVERGED_LS_FAILURE = -6, 18121ec2d5cSBarry Smith TAO_DIVERGED_TR_REDUCTION = -7, 18221ec2d5cSBarry Smith TAO_DIVERGED_USER = -8, /* User defined */ 18321ec2d5cSBarry Smith /* keep going */ 184e4cb33bbSBarry Smith TAO_CONTINUE_ITERATING = 0} TaoConvergedReason; 18521ec2d5cSBarry Smith 186e4cb33bbSBarry Smith PETSC_EXTERN const char **TaoConvergedReasons; 18721ec2d5cSBarry Smith 18821ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoInitializePackage(void); 18921ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoFinalizePackage(void); 190441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoCreate(MPI_Comm,Tao*); 191441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetFromOptions(Tao); 192441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetUp(Tao); 193b625d6c7SJed Brown PETSC_EXTERN PetscErrorCode TaoSetType(Tao,TaoType); 194b625d6c7SJed Brown PETSC_EXTERN PetscErrorCode TaoGetType(Tao,TaoType *); 195441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetApplicationContext(Tao, void*); 196441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetApplicationContext(Tao, void*); 197441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDestroy(Tao*); 19821ec2d5cSBarry Smith 199441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetOptionsPrefix(Tao,const char []); 200441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoView(Tao, PetscViewer); 201fe2efc57SMark PETSC_EXTERN PetscErrorCode TaoViewFromOptions(Tao,PetscObject,const char[]); 20221ec2d5cSBarry Smith 203441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSolve(Tao); 20421ec2d5cSBarry Smith 205441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoRegister(const char [],PetscErrorCode (*)(Tao)); 206441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoRegisterDestroy(void); 20721ec2d5cSBarry Smith 208e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetConvergedReason(Tao,TaoConvergedReason*); 209e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetSolutionStatus(Tao, PetscInt*, PetscReal*, PetscReal*, PetscReal*, PetscReal*, TaoConvergedReason*); 210e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConvergedReason(Tao,TaoConvergedReason); 211441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInitialVector(Tao, Vec); 212441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetSolutionVector(Tao, Vec*); 213441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetGradientVector(Tao, Vec*); 214a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoSetGradientNorm(Tao, Mat); 215a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoGetGradientNorm(Tao, Mat*); 216f5766c09SAlp Dener PETSC_EXTERN PetscErrorCode TaoGetLMVMMatrix(Tao, Mat*); 217a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMSetH0(Tao, Mat); 218a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMGetH0(Tao, Mat*); 219a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMGetH0KSP(Tao, KSP*); 220b39c12a9SAlp Dener PETSC_EXTERN PetscErrorCode TaoLMVMRecycle(Tao, PetscBool); 221441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetObjectiveRoutine(Tao, PetscErrorCode(*)(Tao, Vec, PetscReal*,void*), void*); 222441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetGradientRoutine(Tao, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*); 223441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetObjectiveAndGradientRoutine(Tao, PetscErrorCode(*)(Tao, Vec, PetscReal*, Vec, void*), void*); 224ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetHessianRoutine(Tao,Mat,Mat,PetscErrorCode(*)(Tao,Vec, Mat, Mat, void*), void*); 2254a48860cSAlp Dener PETSC_EXTERN PetscErrorCode TaoSetResidualRoutine(Tao, Vec, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*); 226737f463aSAlp Dener PETSC_EXTERN PetscErrorCode TaoSetResidualWeights(Tao, Vec, PetscInt, PetscInt*, PetscInt*, PetscReal*); 227441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConstraintsRoutine(Tao, Vec, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*); 228441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInequalityConstraintsRoutine(Tao, Vec, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*); 229441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetEqualityConstraintsRoutine(Tao, Vec, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*); 2304ffbe8acSAlp Dener PETSC_EXTERN PetscErrorCode TaoSetJacobianResidualRoutine(Tao, Mat, Mat, PetscErrorCode(*)(Tao, Vec, Mat, Mat, void*), void*); 231ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianRoutine(Tao,Mat,Mat, PetscErrorCode(*)(Tao,Vec, Mat, Mat, void*), void*); 232ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianStateRoutine(Tao,Mat,Mat,Mat, PetscErrorCode(*)(Tao,Vec, Mat, Mat, Mat, void*), void*); 23394ab13aaSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianDesignRoutine(Tao,Mat,PetscErrorCode(*)(Tao,Vec, Mat, void*), void*); 234ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianInequalityRoutine(Tao,Mat,Mat,PetscErrorCode(*)(Tao,Vec, Mat, Mat, void*), void*); 235ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianEqualityRoutine(Tao,Mat,Mat,PetscErrorCode(*)(Tao,Vec, Mat, Mat, void*), void*); 23621ec2d5cSBarry Smith 23783a0a5c3SToby Isaac PETSC_EXTERN PetscErrorCode TaoShellSetSolve(Tao, PetscErrorCode(*)(Tao)); 23883a0a5c3SToby Isaac PETSC_EXTERN PetscErrorCode TaoShellSetContext(Tao, void*); 23983a0a5c3SToby Isaac PETSC_EXTERN PetscErrorCode TaoShellGetContext(Tao, void**); 24083a0a5c3SToby Isaac 24125ef9dfeSBarry Smith PETSC_DEPRECATED_FUNCTION("Use TaoSetResidualRoutine() (since version 3.11)") PETSC_STATIC_INLINE PetscErrorCode TaoSetSeparableObjectiveRoutine(Tao tao, Vec res, PetscErrorCode (*func)(Tao, Vec, Vec, void*),void *ctx) {return TaoSetResidualRoutine(tao, res, func, ctx);} 24225ef9dfeSBarry Smith PETSC_DEPRECATED_FUNCTION("Use TaoSetResidualWeights() (since version 3.11)") PETSC_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);} 243737f463aSAlp Dener 244441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetStateDesignIS(Tao, IS, IS); 24521ec2d5cSBarry Smith 246441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeObjective(Tao, Vec, PetscReal*); 2474a48860cSAlp Dener PETSC_EXTERN PetscErrorCode TaoComputeResidual(Tao, Vec, Vec); 248412cdd55SHong Zhang PETSC_EXTERN PetscErrorCode TaoTestGradient(Tao,Vec,Vec); 249441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeGradient(Tao, Vec, Vec); 250441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeObjectiveAndGradient(Tao, Vec, PetscReal*, Vec); 251441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeConstraints(Tao, Vec, Vec); 252441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeInequalityConstraints(Tao, Vec, Vec); 253441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeEqualityConstraints(Tao, Vec, Vec); 254441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeGradient(Tao, Vec, Vec, void*); 255441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsObjectiveDefined(Tao,PetscBool*); 256441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsGradientDefined(Tao,PetscBool*); 257441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsObjectiveAndGradientDefined(Tao,PetscBool*); 25821ec2d5cSBarry Smith 25925ef9dfeSBarry Smith PETSC_DEPRECATED_FUNCTION("Use TaoComputeResidual() (since version 3.11)") PETSC_STATIC_INLINE PetscErrorCode TaoComputeSeparableObjective(Tao tao, Vec X, Vec F) {return TaoComputeResidual(tao, X, F);} 2604a48860cSAlp Dener 26109baa881SHong Zhang PETSC_EXTERN PetscErrorCode TaoTestHessian(Tao); 262ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeHessian(Tao, Vec, Mat, Mat); 263737f463aSAlp Dener PETSC_EXTERN PetscErrorCode TaoComputeResidualJacobian(Tao, Vec, Mat, Mat); 264ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobian(Tao, Vec, Mat, Mat); 265ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianState(Tao, Vec, Mat, Mat, Mat); 266ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianEquality(Tao, Vec, Mat, Mat); 267ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianInequality(Tao, Vec, Mat, Mat); 26894ab13aaSBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianDesign(Tao, Vec, Mat); 26921ec2d5cSBarry Smith 270ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessian(Tao, Vec, Mat, Mat, void*); 271ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessianColor(Tao, Vec, Mat, Mat, void*); 272f4c1ad5cSStefano Zampini PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessianMFFD(Tao, Vec, Mat, Mat, void*); 273441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeDualVariables(Tao, Vec, Vec); 274441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetVariableBounds(Tao, Vec, Vec); 275441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetVariableBounds(Tao, Vec*, Vec*); 276441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetDualVariables(Tao, Vec*, Vec*); 277441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInequalityBounds(Tao, Vec, Vec); 278441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetInequalityBounds(Tao, Vec*, Vec*); 279441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetVariableBoundsRoutine(Tao, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*); 280441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeVariableBounds(Tao); 28121ec2d5cSBarry Smith 282e52336cbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetTolerances(Tao, PetscReal*, PetscReal*, PetscReal*); 283e52336cbSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetTolerances(Tao, PetscReal, PetscReal, PetscReal); 284441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetConstraintTolerances(Tao, PetscReal*, PetscReal*); 285441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConstraintTolerances(Tao, PetscReal, PetscReal); 286441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetFunctionLowerBound(Tao, PetscReal); 287441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInitialTrustRegionRadius(Tao, PetscReal); 288441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMaximumIterations(Tao, PetscInt); 289441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMaximumFunctionEvaluations(Tao, PetscInt); 290441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetFunctionLowerBound(Tao, PetscReal*); 291441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetInitialTrustRegionRadius(Tao, PetscReal*); 292441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetCurrentTrustRegionRadius(Tao, PetscReal*); 293441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetMaximumIterations(Tao, PetscInt*); 294770232b9SCe Qin PETSC_EXTERN PetscErrorCode TaoGetCurrentFunctionEvaluations(Tao, PetscInt*); 295441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetMaximumFunctionEvaluations(Tao, PetscInt*); 2968931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetIterationNumber(Tao, PetscInt*); 2978931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoSetIterationNumber(Tao, PetscInt); 2988931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetTotalIterationNumber(Tao, PetscInt*); 2998931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoSetTotalIterationNumber(Tao, PetscInt); 30079f5d8caSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetResidualNorm(Tao,PetscReal*); 30179f5d8caSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetObjective(Tao,PetscReal*); 3028931d482SJason Sarich 303441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoAppendOptionsPrefix(Tao, const char p[]); 304441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetOptionsPrefix(Tao, const char *p[]); 305441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoResetStatistics(Tao); 3068fcddce6SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetUpdate(Tao, PetscErrorCode(*)(Tao, PetscInt, void*), void*); 30721ec2d5cSBarry Smith 308441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetKSP(Tao, KSP*); 309025e9500SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetLinearSolveIterations(Tao,PetscInt *); 310235fd6e6SBarry Smith 311235fd6e6SBarry Smith #include <petsctaolinesearch.h> 312235fd6e6SBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchUseTaoRoutines(TaoLineSearch, Tao); 313441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetLineSearch(Tao, TaoLineSearch*); 31421ec2d5cSBarry Smith 315ae93cb3cSJason Sarich PETSC_EXTERN PetscErrorCode TaoSetConvergenceHistory(Tao,PetscReal*,PetscReal*,PetscReal*,PetscInt*,PetscInt,PetscBool); 316ae93cb3cSJason Sarich PETSC_EXTERN PetscErrorCode TaoGetConvergenceHistory(Tao,PetscReal**,PetscReal**,PetscReal**,PetscInt**,PetscInt*); 317441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMonitor(Tao, PetscErrorCode (*)(Tao,void*),void *,PetscErrorCode (*)(void**)); 318441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoCancelMonitors(Tao); 31998ea980cSBarry Smith PETSC_EXTERN PetscErrorCode TaoMonitorDefault(Tao, void*); 32025ef9dfeSBarry Smith PETSC_DEPRECATED_FUNCTION("Use TaoMonitorDefault() (since version 3.9)") PETSC_STATIC_INLINE PetscErrorCode TaoDefaultMonitor(Tao tao, void*ctx) {return TaoMonitorDefault(tao,ctx);} 3218d5ead36SAlp Dener PETSC_EXTERN PetscErrorCode TaoDefaultGMonitor(Tao, void*); 322441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultSMonitor(Tao, void*); 323441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultCMonitor(Tao, void*); 324441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSolutionMonitor(Tao, void*); 325737f463aSAlp Dener PETSC_EXTERN PetscErrorCode TaoResidualMonitor(Tao, void*); 326441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGradientMonitor(Tao, void*); 327441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoStepDirectionMonitor(Tao, void*); 328441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDrawSolutionMonitor(Tao, void*); 329441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDrawStepMonitor(Tao, void*); 330441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDrawGradientMonitor(Tao, void*); 331441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoAddLineSearchCounts(Tao); 33221ec2d5cSBarry Smith 333441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultConvergenceTest(Tao,void*); 334441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConvergenceTest(Tao, PetscErrorCode (*)(Tao, void*),void *); 33521ec2d5cSBarry Smith 336441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSQPCONSetStateDesignIS(Tao, IS, IS); 337441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoLCLSetStateDesignIS(Tao, IS, IS); 3383ecd9318SAlp Dener PETSC_EXTERN PetscErrorCode TaoMonitor(Tao, PetscInt, PetscReal, PetscReal, PetscReal, PetscReal); 339e882e171SHong Zhang typedef struct _n_TaoMonitorDrawCtx* TaoMonitorDrawCtx; 340e882e171SHong Zhang PETSC_EXTERN PetscErrorCode TaoMonitorDrawCtxCreate(MPI_Comm,const char[],const char[],int,int,int,int,PetscInt,TaoMonitorDrawCtx*); 341e882e171SHong Zhang PETSC_EXTERN PetscErrorCode TaoMonitorDrawCtxDestroy(TaoMonitorDrawCtx*); 342737f463aSAlp Dener 3438e85b1b3SXiang Huang PETSC_EXTERN PetscErrorCode TaoBRGNGetSubsolver(Tao,Tao *); 344a3c390cfSAlp Dener PETSC_EXTERN PetscErrorCode TaoBRGNSetRegularizerObjectiveAndGradientRoutine(Tao,PetscErrorCode (*)(Tao,Vec,PetscReal*,Vec,void*),void*); 345a3c390cfSAlp Dener PETSC_EXTERN PetscErrorCode TaoBRGNSetRegularizerHessianRoutine(Tao,Mat,PetscErrorCode (*)(Tao,Vec,Mat,void*),void*); 346a3c390cfSAlp Dener PETSC_EXTERN PetscErrorCode TaoBRGNSetRegularizerWeight(Tao,PetscReal); 3478ac80d48SXiang Huang PETSC_EXTERN PetscErrorCode TaoBRGNSetL1SmoothEpsilon(Tao,PetscReal); 3488e85b1b3SXiang Huang PETSC_EXTERN PetscErrorCode TaoBRGNSetDictionaryMatrix(Tao,Mat); 349*cd1c4666STristan Konolige PETSC_EXTERN PetscErrorCode TaoBRGNGetDampingVector(Tao,Vec *); 3506285c0a3SHansol Suh 3516285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMGetMisfitSubsolver(Tao,Tao *); 3526285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMGetRegularizationSubsolver(Tao,Tao *); 3536285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMGetDualVector(Tao,Vec*); 3546285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMGetSpectralPenalty(Tao,PetscReal*); 3556285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetSpectralPenalty(Tao,PetscReal); 3566285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoGetADMMParentTao(Tao, Tao *); 3576285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetConstraintVectorRHS(Tao,Vec); 3586285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerCoefficient(Tao,PetscReal); 3596285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitConstraintJacobian(Tao,Mat, Mat,PetscErrorCode (*)(Tao,Vec,Mat,Mat,void*),void*); 3606285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerConstraintJacobian(Tao,Mat, Mat,PetscErrorCode (*)(Tao,Vec,Mat,Mat,void*),void*); 3616285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerHessianRoutine(Tao,Mat,Mat,PetscErrorCode (*)(Tao,Vec,Mat,Mat,void*),void*); 3626285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerObjectiveAndGradientRoutine(Tao,PetscErrorCode (*)(Tao,Vec,PetscReal *,Vec,void*),void*); 3636285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitHessianRoutine(Tao,Mat,Mat,PetscErrorCode (*)(Tao,Vec,Mat,Mat,void*),void*); 3646285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitObjectiveAndGradientRoutine(Tao,PetscErrorCode (*)(Tao,Vec,PetscReal *,Vec,void*),void*); 3656285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitHessianChangeStatus(Tao, PetscBool); 3666285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegHessianChangeStatus(Tao, PetscBool); 3676285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMinimumSpectralPenalty(Tao, PetscReal); 3686285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerType(Tao, TaoADMMRegularizerType); 3696285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMGetRegularizerType(Tao, TaoADMMRegularizerType*); 3706285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetUpdateType(Tao, TaoADMMUpdateType); 3716285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMGetUpdateType(Tao, TaoADMMUpdateType*); 37221ec2d5cSBarry Smith #endif 373