13028902dSLisandro Dalcin #ifndef PETSCTAO_H 23028902dSLisandro Dalcin #define PETSCTAO_H 321ec2d5cSBarry Smith 421ec2d5cSBarry Smith #include <petscksp.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 37*6285c0a3SHansol Suh /*E 38*6285c0a3SHansol Suh TaoADMMUpdateType - Determine spectral penalty update routine for lagrange augmented term for ADMM. 39*6285c0a3SHansol Suh 40*6285c0a3SHansol Suh Level: advanced 41*6285c0a3SHansol Suh 42*6285c0a3SHansol Suh .seealso TaoADMMSetUpdateType() 43*6285c0a3SHansol Suh E*/ 44*6285c0a3SHansol Suh typedef enum {TAO_ADMM_UPDATE_BASIC,TAO_ADMM_UPDATE_ADAPTIVE,TAO_ADMM_UPDATE_ADAPTIVE_RELAXED} TaoADMMUpdateType; 45*6285c0a3SHansol Suh PETSC_EXTERN const char *const TaoADMMUpdateTypes[]; 46*6285c0a3SHansol Suh /*MC 47*6285c0a3SHansol Suh TAO_ADMM_UPDATE_BASIC - Use same spectral penalty set at the beginning. No update 48*6285c0a3SHansol Suh 49*6285c0a3SHansol Suh Level: advanced 50*6285c0a3SHansol Suh 51*6285c0a3SHansol Suh Note: Most basic implementation. Generally slower than adaptive or adaptive relaxed version. 52*6285c0a3SHansol Suh 53*6285c0a3SHansol Suh .seealso: TaoADMMSetUpdateType(), TAO_ADMM_UPDATE_ADAPTIVE, TAO_ADMM_UPDATE_ADAPTIVE_RELAXED 54*6285c0a3SHansol Suh M*/ 55*6285c0a3SHansol Suh 56*6285c0a3SHansol Suh /*MC 57*6285c0a3SHansol Suh TAO_ADMM_UPDATE_ADAPTIVE - Adaptively update spectral penalty 58*6285c0a3SHansol Suh 59*6285c0a3SHansol Suh Level: advanced 60*6285c0a3SHansol Suh 61*6285c0a3SHansol Suh Note: Adaptively updates spectral penalty, using both steepest descent and minimum gradient. 62*6285c0a3SHansol Suh 63*6285c0a3SHansol Suh .seealso: TaoADMMSetUpdateType(), TAO_ADMM_UPDATE_BASIC, TAO_ADMM_UPDATE_ADAPTIVE_RELAXED 64*6285c0a3SHansol Suh M*/ 65*6285c0a3SHansol Suh 66*6285c0a3SHansol Suh /*MC 67*6285c0a3SHansol Suh ADMM_UPDATE_ADAPTIVE_RELAXED - Adaptively update spectral penalty, and relaxes parameter update 68*6285c0a3SHansol Suh 69*6285c0a3SHansol Suh Level: advanced 70*6285c0a3SHansol Suh 71*6285c0a3SHansol Suh Note: With adaptive spectral penalty update, it also relaxes x vector update by a factor. 72*6285c0a3SHansol Suh 73*6285c0a3SHansol Suh .seealso: TaoADMMSetUpdateType(), TAO_ADMM_UPDATE_BASIC, TAO_ADMM_UPDATE_ADAPTIVE 74*6285c0a3SHansol Suh M*/ 75*6285c0a3SHansol Suh 76*6285c0a3SHansol Suh 77*6285c0a3SHansol Suh /*E 78*6285c0a3SHansol Suh TaoADMMRegularizerType - Determine regularizer routine - either user provided or soft threshold 79*6285c0a3SHansol Suh 80*6285c0a3SHansol Suh Level: advanced 81*6285c0a3SHansol Suh 82*6285c0a3SHansol Suh .seealso TaoADMMSetRegularizerType() 83*6285c0a3SHansol Suh E*/ 84*6285c0a3SHansol Suh typedef enum {TAO_ADMM_REGULARIZER_USER,TAO_ADMM_REGULARIZER_SOFT_THRESH} TaoADMMRegularizerType; 85*6285c0a3SHansol Suh PETSC_EXTERN const char *const TaoADMMRegularizerTypes[]; 86*6285c0a3SHansol Suh /*MC 87*6285c0a3SHansol Suh TAO_ADMM_REGULARIZER_USER - User provided routines for regularizer part of ADMM 88*6285c0a3SHansol Suh 89*6285c0a3SHansol Suh Level: advanced 90*6285c0a3SHansol Suh 91*6285c0a3SHansol Suh Note: User needs to provided appropriate routines and type for regularizer solver 92*6285c0a3SHansol Suh 93*6285c0a3SHansol Suh .seealso: TaoADMMSetRegularizerType(), TAO_ADMM_REGULARIZER_SOFT_THRESH 94*6285c0a3SHansol Suh M*/ 95*6285c0a3SHansol Suh 96*6285c0a3SHansol Suh /*MC 97*6285c0a3SHansol Suh TAO_ADMM_REGULARIZER_SOFT_THRESH - Soft threshold to solve regularizer part of ADMM 98*6285c0a3SHansol Suh 99*6285c0a3SHansol Suh Level: advanced 100*6285c0a3SHansol Suh 101*6285c0a3SHansol Suh Note: Utilizes built-in SoftThreshold routines 102*6285c0a3SHansol Suh 103*6285c0a3SHansol Suh .seealso: TaoSoftThreshold(), TaoADMMSetRegularizerObjectiveAndGradientRoutine(), 104*6285c0a3SHansol Suh TaoADMMSetRegularizerHessianRoutine(), TaoADMMSetRegularizerType(), TAO_ADMM_REGULARIZER_USER 105*6285c0a3SHansol Suh M*/ 106*6285c0a3SHansol 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" 14483a0a5c3SToby Isaac #define TAOSHELL "shell" 145*6285c0a3SHansol Suh #define TAOADMM "admm" 14658417fe7SBarry Smith 147441846f8SBarry Smith PETSC_EXTERN PetscClassId TAO_CLASSID; 148441846f8SBarry Smith PETSC_EXTERN PetscFunctionList TaoList; 14921ec2d5cSBarry Smith 150a35d58b8SBarry Smith /*E 151a35d58b8SBarry Smith TaoConvergedReason - reason a TAO method was said to have converged or diverged 152a35d58b8SBarry Smith 153a35d58b8SBarry Smith Level: beginner 154a35d58b8SBarry Smith 155a35d58b8SBarry Smith The two most common reasons for divergence are 156a35d58b8SBarry Smith $ 1) an incorrectly coded or computed gradient or Hessian 157a35d58b8SBarry Smith $ 2) failure or lack of convergence in the linear system (in this case we recommend 158a35d58b8SBarry Smith $ testing with -pc_type lu to eliminate the linear solver as the cause of the problem). 159a35d58b8SBarry Smith 16095452b02SPatrick Sanan Developer Notes: 16195452b02SPatrick Sanan this must match petsc/finclude/petsctao.h 162a35d58b8SBarry Smith 163a35d58b8SBarry Smith The string versions of these are in TAOConvergedReasons, if you change any value here you must 164a35d58b8SBarry Smith also adjust that array. 165a35d58b8SBarry Smith 166a35d58b8SBarry Smith .seealso: TAOSolve(), TaoGetConvergedReason(), KSPConvergedReason, SNESConvergedReason, TSConvergedReason 167a35d58b8SBarry Smith E*/ 16821ec2d5cSBarry Smith typedef enum {/* converged */ 16921ec2d5cSBarry Smith TAO_CONVERGED_GATOL = 3, /* ||g(X)|| < gatol */ 17021ec2d5cSBarry Smith TAO_CONVERGED_GRTOL = 4, /* ||g(X)|| / f(X) < grtol */ 17121ec2d5cSBarry Smith TAO_CONVERGED_GTTOL = 5, /* ||g(X)|| / ||g(X0)|| < gttol */ 17221ec2d5cSBarry Smith TAO_CONVERGED_STEPTOL = 6, /* step size small */ 17321ec2d5cSBarry Smith TAO_CONVERGED_MINF = 7, /* F < F_min */ 17421ec2d5cSBarry Smith TAO_CONVERGED_USER = 8, /* User defined */ 17521ec2d5cSBarry Smith /* diverged */ 17621ec2d5cSBarry Smith TAO_DIVERGED_MAXITS = -2, 17721ec2d5cSBarry Smith TAO_DIVERGED_NAN = -4, 17821ec2d5cSBarry Smith TAO_DIVERGED_MAXFCN = -5, 17921ec2d5cSBarry Smith TAO_DIVERGED_LS_FAILURE = -6, 18021ec2d5cSBarry Smith TAO_DIVERGED_TR_REDUCTION = -7, 18121ec2d5cSBarry Smith TAO_DIVERGED_USER = -8, /* User defined */ 18221ec2d5cSBarry Smith /* keep going */ 183e4cb33bbSBarry Smith TAO_CONTINUE_ITERATING = 0} TaoConvergedReason; 18421ec2d5cSBarry Smith 185e4cb33bbSBarry Smith PETSC_EXTERN const char **TaoConvergedReasons; 18621ec2d5cSBarry Smith 18721ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoInitializePackage(void); 18821ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoFinalizePackage(void); 189441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoCreate(MPI_Comm,Tao*); 190441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetFromOptions(Tao); 191441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetUp(Tao); 192b625d6c7SJed Brown PETSC_EXTERN PetscErrorCode TaoSetType(Tao,TaoType); 193b625d6c7SJed Brown PETSC_EXTERN PetscErrorCode TaoGetType(Tao,TaoType *); 194441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetApplicationContext(Tao, void*); 195441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetApplicationContext(Tao, void*); 196441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDestroy(Tao*); 19721ec2d5cSBarry Smith 198441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetOptionsPrefix(Tao,const char []); 199441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoView(Tao, PetscViewer); 200fe2efc57SMark PETSC_EXTERN PetscErrorCode TaoViewFromOptions(Tao,PetscObject,const char[]); 20121ec2d5cSBarry Smith 202441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSolve(Tao); 20321ec2d5cSBarry Smith 204441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoRegister(const char [],PetscErrorCode (*)(Tao)); 205441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoRegisterDestroy(void); 20621ec2d5cSBarry Smith 207e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetConvergedReason(Tao,TaoConvergedReason*); 208e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetSolutionStatus(Tao, PetscInt*, PetscReal*, PetscReal*, PetscReal*, PetscReal*, TaoConvergedReason*); 209e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConvergedReason(Tao,TaoConvergedReason); 210441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInitialVector(Tao, Vec); 211441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetSolutionVector(Tao, Vec*); 212441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetGradientVector(Tao, Vec*); 213a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoSetGradientNorm(Tao, Mat); 214a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoGetGradientNorm(Tao, Mat*); 215f5766c09SAlp Dener PETSC_EXTERN PetscErrorCode TaoGetLMVMMatrix(Tao, Mat*); 216a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMSetH0(Tao, Mat); 217a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMGetH0(Tao, Mat*); 218a9603a14SPatrick Farrell PETSC_EXTERN PetscErrorCode TaoLMVMGetH0KSP(Tao, KSP*); 219b39c12a9SAlp Dener PETSC_EXTERN PetscErrorCode TaoLMVMRecycle(Tao, PetscBool); 220441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetObjectiveRoutine(Tao, PetscErrorCode(*)(Tao, Vec, PetscReal*,void*), void*); 221441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetGradientRoutine(Tao, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*); 222441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetObjectiveAndGradientRoutine(Tao, PetscErrorCode(*)(Tao, Vec, PetscReal*, Vec, void*), void*); 223ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetHessianRoutine(Tao,Mat,Mat,PetscErrorCode(*)(Tao,Vec, Mat, Mat, void*), void*); 2244a48860cSAlp Dener PETSC_EXTERN PetscErrorCode TaoSetResidualRoutine(Tao, Vec, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*); 225737f463aSAlp Dener PETSC_EXTERN PetscErrorCode TaoSetResidualWeights(Tao, Vec, PetscInt, PetscInt*, PetscInt*, PetscReal*); 226441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConstraintsRoutine(Tao, Vec, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*); 227441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInequalityConstraintsRoutine(Tao, Vec, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*); 228441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetEqualityConstraintsRoutine(Tao, Vec, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*); 2294ffbe8acSAlp Dener PETSC_EXTERN PetscErrorCode TaoSetJacobianResidualRoutine(Tao, Mat, Mat, PetscErrorCode(*)(Tao, Vec, Mat, Mat, void*), void*); 230ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianRoutine(Tao,Mat,Mat, PetscErrorCode(*)(Tao,Vec, Mat, Mat, void*), void*); 231ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianStateRoutine(Tao,Mat,Mat,Mat, PetscErrorCode(*)(Tao,Vec, Mat, Mat, Mat, void*), void*); 23294ab13aaSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianDesignRoutine(Tao,Mat,PetscErrorCode(*)(Tao,Vec, Mat, void*), void*); 233ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianInequalityRoutine(Tao,Mat,Mat,PetscErrorCode(*)(Tao,Vec, Mat, Mat, void*), void*); 234ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetJacobianEqualityRoutine(Tao,Mat,Mat,PetscErrorCode(*)(Tao,Vec, Mat, Mat, void*), void*); 23521ec2d5cSBarry Smith 23683a0a5c3SToby Isaac PETSC_EXTERN PetscErrorCode TaoShellSetSolve(Tao, PetscErrorCode(*)(Tao)); 23783a0a5c3SToby Isaac PETSC_EXTERN PetscErrorCode TaoShellSetContext(Tao, void*); 23883a0a5c3SToby Isaac PETSC_EXTERN PetscErrorCode TaoShellGetContext(Tao, void**); 23983a0a5c3SToby Isaac 24025ef9dfeSBarry 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);} 24125ef9dfeSBarry 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);} 242737f463aSAlp Dener 243441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetStateDesignIS(Tao, IS, IS); 24421ec2d5cSBarry Smith 245441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeObjective(Tao, Vec, PetscReal*); 2464a48860cSAlp Dener PETSC_EXTERN PetscErrorCode TaoComputeResidual(Tao, Vec, Vec); 247412cdd55SHong Zhang PETSC_EXTERN PetscErrorCode TaoTestGradient(Tao,Vec,Vec); 248441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeGradient(Tao, Vec, Vec); 249441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeObjectiveAndGradient(Tao, Vec, PetscReal*, Vec); 250441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeConstraints(Tao, Vec, Vec); 251441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeInequalityConstraints(Tao, Vec, Vec); 252441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeEqualityConstraints(Tao, Vec, Vec); 253441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeGradient(Tao, Vec, Vec, void*); 254441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsObjectiveDefined(Tao,PetscBool*); 255441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsGradientDefined(Tao,PetscBool*); 256441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoIsObjectiveAndGradientDefined(Tao,PetscBool*); 25721ec2d5cSBarry Smith 25825ef9dfeSBarry 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);} 2594a48860cSAlp Dener 26009baa881SHong Zhang PETSC_EXTERN PetscErrorCode TaoTestHessian(Tao); 261ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeHessian(Tao, Vec, Mat, Mat); 262737f463aSAlp Dener PETSC_EXTERN PetscErrorCode TaoComputeResidualJacobian(Tao, Vec, Mat, Mat); 263ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobian(Tao, Vec, Mat, Mat); 264ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianState(Tao, Vec, Mat, Mat, Mat); 265ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianEquality(Tao, Vec, Mat, Mat); 266ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianInequality(Tao, Vec, Mat, Mat); 26794ab13aaSBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeJacobianDesign(Tao, Vec, Mat); 26821ec2d5cSBarry Smith 269ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessian(Tao, Vec, Mat, Mat, void*); 270ffad9901SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessianColor(Tao, Vec, Mat, Mat, void*); 271f4c1ad5cSStefano Zampini PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessianMFFD(Tao, Vec, Mat, Mat, void*); 272441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeDualVariables(Tao, Vec, Vec); 273441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetVariableBounds(Tao, Vec, Vec); 274441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetVariableBounds(Tao, Vec*, Vec*); 275441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetDualVariables(Tao, Vec*, Vec*); 276441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInequalityBounds(Tao, Vec, Vec); 277441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetInequalityBounds(Tao, Vec*, Vec*); 278441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetVariableBoundsRoutine(Tao, PetscErrorCode(*)(Tao, Vec, Vec, void*), void*); 279441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoComputeVariableBounds(Tao); 28021ec2d5cSBarry Smith 281e52336cbSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetTolerances(Tao, PetscReal*, PetscReal*, PetscReal*); 282e52336cbSBarry Smith PETSC_EXTERN PetscErrorCode TaoSetTolerances(Tao, PetscReal, PetscReal, PetscReal); 283441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetConstraintTolerances(Tao, PetscReal*, PetscReal*); 284441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConstraintTolerances(Tao, PetscReal, PetscReal); 285441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetFunctionLowerBound(Tao, PetscReal); 286441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetInitialTrustRegionRadius(Tao, PetscReal); 287441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMaximumIterations(Tao, PetscInt); 288441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMaximumFunctionEvaluations(Tao, PetscInt); 289441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetFunctionLowerBound(Tao, PetscReal*); 290441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetInitialTrustRegionRadius(Tao, PetscReal*); 291441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetCurrentTrustRegionRadius(Tao, PetscReal*); 292441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetMaximumIterations(Tao, PetscInt*); 293770232b9SCe Qin PETSC_EXTERN PetscErrorCode TaoGetCurrentFunctionEvaluations(Tao, PetscInt*); 294441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetMaximumFunctionEvaluations(Tao, PetscInt*); 2958931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetIterationNumber(Tao, PetscInt*); 2968931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoSetIterationNumber(Tao, PetscInt); 2978931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetTotalIterationNumber(Tao, PetscInt*); 2988931d482SJason Sarich PETSC_EXTERN PetscErrorCode TaoSetTotalIterationNumber(Tao, PetscInt); 29979f5d8caSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetResidualNorm(Tao,PetscReal*); 30079f5d8caSBarry Smith PETSC_EXTERN PetscErrorCode TaoGetObjective(Tao,PetscReal*); 3018931d482SJason Sarich 302441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoAppendOptionsPrefix(Tao, const char p[]); 303441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetOptionsPrefix(Tao, const char *p[]); 304441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoResetStatistics(Tao); 3058fcddce6SStefano Zampini PETSC_EXTERN PetscErrorCode TaoSetUpdate(Tao, PetscErrorCode(*)(Tao, PetscInt, void*), void*); 30621ec2d5cSBarry Smith 307441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetKSP(Tao, KSP*); 308025e9500SJason Sarich PETSC_EXTERN PetscErrorCode TaoGetLinearSolveIterations(Tao,PetscInt *); 309235fd6e6SBarry Smith 310235fd6e6SBarry Smith #include <petsctaolinesearch.h> 311235fd6e6SBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchUseTaoRoutines(TaoLineSearch, Tao); 312441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGetLineSearch(Tao, TaoLineSearch*); 31321ec2d5cSBarry Smith 314ae93cb3cSJason Sarich PETSC_EXTERN PetscErrorCode TaoSetConvergenceHistory(Tao,PetscReal*,PetscReal*,PetscReal*,PetscInt*,PetscInt,PetscBool); 315ae93cb3cSJason Sarich PETSC_EXTERN PetscErrorCode TaoGetConvergenceHistory(Tao,PetscReal**,PetscReal**,PetscReal**,PetscInt**,PetscInt*); 316441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetMonitor(Tao, PetscErrorCode (*)(Tao,void*),void *,PetscErrorCode (*)(void**)); 317441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoCancelMonitors(Tao); 31898ea980cSBarry Smith PETSC_EXTERN PetscErrorCode TaoMonitorDefault(Tao, void*); 31925ef9dfeSBarry Smith PETSC_DEPRECATED_FUNCTION("Use TaoMonitorDefault() (since version 3.9)") PETSC_STATIC_INLINE PetscErrorCode TaoDefaultMonitor(Tao tao, void*ctx) {return TaoMonitorDefault(tao,ctx);} 3208d5ead36SAlp Dener PETSC_EXTERN PetscErrorCode TaoDefaultGMonitor(Tao, void*); 321441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultSMonitor(Tao, void*); 322441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultCMonitor(Tao, void*); 323441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSolutionMonitor(Tao, void*); 324737f463aSAlp Dener PETSC_EXTERN PetscErrorCode TaoResidualMonitor(Tao, void*); 325441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoGradientMonitor(Tao, void*); 326441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoStepDirectionMonitor(Tao, void*); 327441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDrawSolutionMonitor(Tao, void*); 328441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDrawStepMonitor(Tao, void*); 329441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDrawGradientMonitor(Tao, void*); 330441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoAddLineSearchCounts(Tao); 33121ec2d5cSBarry Smith 332441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoDefaultConvergenceTest(Tao,void*); 333441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSetConvergenceTest(Tao, PetscErrorCode (*)(Tao, void*),void *); 33421ec2d5cSBarry Smith 335441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoSQPCONSetStateDesignIS(Tao, IS, IS); 336441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoLCLSetStateDesignIS(Tao, IS, IS); 3373ecd9318SAlp Dener PETSC_EXTERN PetscErrorCode TaoMonitor(Tao, PetscInt, PetscReal, PetscReal, PetscReal, PetscReal); 338e882e171SHong Zhang typedef struct _n_TaoMonitorDrawCtx* TaoMonitorDrawCtx; 339e882e171SHong Zhang PETSC_EXTERN PetscErrorCode TaoMonitorDrawCtxCreate(MPI_Comm,const char[],const char[],int,int,int,int,PetscInt,TaoMonitorDrawCtx*); 340e882e171SHong Zhang PETSC_EXTERN PetscErrorCode TaoMonitorDrawCtxDestroy(TaoMonitorDrawCtx*); 341737f463aSAlp Dener 3428e85b1b3SXiang Huang PETSC_EXTERN PetscErrorCode TaoBRGNGetSubsolver(Tao,Tao *); 343a3c390cfSAlp Dener PETSC_EXTERN PetscErrorCode TaoBRGNSetRegularizerObjectiveAndGradientRoutine(Tao,PetscErrorCode (*)(Tao,Vec,PetscReal*,Vec,void*),void*); 344a3c390cfSAlp Dener PETSC_EXTERN PetscErrorCode TaoBRGNSetRegularizerHessianRoutine(Tao,Mat,PetscErrorCode (*)(Tao,Vec,Mat,void*),void*); 345a3c390cfSAlp Dener PETSC_EXTERN PetscErrorCode TaoBRGNSetRegularizerWeight(Tao,PetscReal); 3468ac80d48SXiang Huang PETSC_EXTERN PetscErrorCode TaoBRGNSetL1SmoothEpsilon(Tao,PetscReal); 3478e85b1b3SXiang Huang PETSC_EXTERN PetscErrorCode TaoBRGNSetDictionaryMatrix(Tao,Mat); 348*6285c0a3SHansol Suh 349*6285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMGetMisfitSubsolver(Tao,Tao *); 350*6285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMGetRegularizationSubsolver(Tao,Tao *); 351*6285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMGetDualVector(Tao,Vec*); 352*6285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMGetSpectralPenalty(Tao,PetscReal*); 353*6285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetSpectralPenalty(Tao,PetscReal); 354*6285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoGetADMMParentTao(Tao, Tao *); 355*6285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetConstraintVectorRHS(Tao,Vec); 356*6285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerCoefficient(Tao,PetscReal); 357*6285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitConstraintJacobian(Tao,Mat, Mat,PetscErrorCode (*)(Tao,Vec,Mat,Mat,void*),void*); 358*6285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerConstraintJacobian(Tao,Mat, Mat,PetscErrorCode (*)(Tao,Vec,Mat,Mat,void*),void*); 359*6285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerHessianRoutine(Tao,Mat,Mat,PetscErrorCode (*)(Tao,Vec,Mat,Mat,void*),void*); 360*6285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerObjectiveAndGradientRoutine(Tao,PetscErrorCode (*)(Tao,Vec,PetscReal *,Vec,void*),void*); 361*6285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitHessianRoutine(Tao,Mat,Mat,PetscErrorCode (*)(Tao,Vec,Mat,Mat,void*),void*); 362*6285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitObjectiveAndGradientRoutine(Tao,PetscErrorCode (*)(Tao,Vec,PetscReal *,Vec,void*),void*); 363*6285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitHessianChangeStatus(Tao, PetscBool); 364*6285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegHessianChangeStatus(Tao, PetscBool); 365*6285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetMinimumSpectralPenalty(Tao, PetscReal); 366*6285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerType(Tao, TaoADMMRegularizerType); 367*6285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMGetRegularizerType(Tao, TaoADMMRegularizerType*); 368*6285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMSetUpdateType(Tao, TaoADMMUpdateType); 369*6285c0a3SHansol Suh PETSC_EXTERN PetscErrorCode TaoADMMGetUpdateType(Tao, TaoADMMUpdateType*); 37021ec2d5cSBarry Smith #endif 371