1 #pragma once 2 3 #include <petscsnes.h> 4 5 /* SUBMANSEC = Tao */ 6 7 PETSC_EXTERN PetscErrorCode VecFischer(Vec, Vec, Vec, Vec, Vec); 8 PETSC_EXTERN PetscErrorCode VecSFischer(Vec, Vec, Vec, Vec, PetscReal, Vec); 9 PETSC_EXTERN PetscErrorCode MatDFischer(Mat, Vec, Vec, Vec, Vec, Vec, Vec, Vec, Vec); 10 PETSC_EXTERN PetscErrorCode MatDSFischer(Mat, Vec, Vec, Vec, Vec, PetscReal, Vec, Vec, Vec, Vec, Vec); 11 PETSC_EXTERN PetscErrorCode TaoSoftThreshold(Vec, PetscReal, PetscReal, Vec); 12 13 /*E 14 TaoSubsetType - Type representing the way the `Tao` solvers handle active sets 15 16 Values: 17 + `TAO_SUBSET_SUBVEC` - Tao uses `MatCreateSubMatrix()` and `VecGetSubVector()` 18 . `TAO_SUBSET_MASK` - Matrices are zeroed out corresponding to active set entries 19 - `TAO_SUBSET_MATRIXFREE` - Same as `TAO_SUBSET_MASK` but it can be applied to matrix-free operators 20 21 Options database Key: 22 . -different_hessian - `Tao` will use a copy of the Hessian operator for masking. By default `Tao` will directly alter the Hessian operator. 23 24 Level: intermediate 25 26 .seealso: [](ch_tao), `TaoVecGetSubVec()`, `TaoMatGetSubMat()`, `Tao`, `TaoCreate()`, `TaoDestroy()`, `TaoSetType()`, `TaoType` 27 E*/ 28 typedef enum { 29 TAO_SUBSET_SUBVEC, 30 TAO_SUBSET_MASK, 31 TAO_SUBSET_MATRIXFREE 32 } TaoSubsetType; 33 PETSC_EXTERN const char *const TaoSubsetTypes[]; 34 35 /*S 36 Tao - Abstract PETSc object that manages optimization solvers. 37 38 Level: advanced 39 40 Note: 41 `Tao` is the object, while TAO, which stands for Toolkit for Advanced Optimization, is the software package. 42 43 .seealso: [](doc_taosolve), [](ch_tao), `TaoCreate()`, `TaoDestroy()`, `TaoSetType()`, `TaoType` 44 S*/ 45 typedef struct _p_Tao *Tao; 46 47 /*E 48 TaoADMMUpdateType - Determine the spectral penalty update routine for the Lagrange augmented term for `TAOADMM`. 49 50 Level: advanced 51 52 .seealso: [](ch_tao), `Tao`, `TAOADMM`, `TaoADMMSetUpdateType()` 53 E*/ 54 typedef enum { 55 TAO_ADMM_UPDATE_BASIC, 56 TAO_ADMM_UPDATE_ADAPTIVE, 57 TAO_ADMM_UPDATE_ADAPTIVE_RELAXED 58 } TaoADMMUpdateType; 59 PETSC_EXTERN const char *const TaoADMMUpdateTypes[]; 60 61 /*MC 62 TAO_ADMM_UPDATE_BASIC - Use same spectral penalty set at the beginning. This never performs an update to the penalty 63 64 Level: advanced 65 66 Note: 67 Most basic implementation of `TAOADMM`. Generally slower than adaptive or adaptive relaxed version. 68 69 .seealso: [](ch_tao), `Tao`, `TAOADMM`, `TaoADMMSetUpdateType()`, `TAO_ADMM_UPDATE_ADAPTIVE`, `TAO_ADMM_UPDATE_ADAPTIVE_RELAXED` 70 M*/ 71 72 /*MC 73 TAO_ADMM_UPDATE_ADAPTIVE - Adaptively update the spectral penalty 74 75 Level: advanced 76 77 Note: 78 Adaptively updates spectral penalty of `TAOADMM` by using both steepest descent and minimum gradient. 79 80 .seealso: [](ch_tao), `Tao`, `TAOADMM`, `TaoADMMSetUpdateType()`, `TAO_ADMM_UPDATE_BASIC`, `TAO_ADMM_UPDATE_ADAPTIVE_RELAXED` 81 M*/ 82 83 /*MC 84 ADMM_UPDATE_ADAPTIVE_RELAXED - Adaptively update spectral penalty, and relaxes parameter update 85 86 Level: advanced 87 88 Note: 89 With adaptive spectral penalty update, it also relaxes the `x` vector update by a factor. 90 91 .seealso: [](ch_tao), `Tao`, `TaoADMMSetUpdateType()`, `TAO_ADMM_UPDATE_BASIC`, `TAO_ADMM_UPDATE_ADAPTIVE` 92 M*/ 93 94 /*E 95 TaoADMMRegularizerType - Determine regularizer routine - either user provided or soft threshold for `TAOADMM` 96 97 Level: advanced 98 99 .seealso: [](ch_tao), `Tao`, `TAOADMM`, `TaoADMMSetRegularizerType()` 100 E*/ 101 typedef enum { 102 TAO_ADMM_REGULARIZER_USER, 103 TAO_ADMM_REGULARIZER_SOFT_THRESH 104 } TaoADMMRegularizerType; 105 PETSC_EXTERN const char *const TaoADMMRegularizerTypes[]; 106 107 /*MC 108 TAO_ADMM_REGULARIZER_USER - User provided routines for regularizer part of `TAOADMM` 109 110 Level: advanced 111 112 Note: 113 User needs to provided appropriate routines and type for regularizer solver 114 115 .seealso: [](ch_tao), `Tao`, `TAOADMM`, `TaoADMMSetRegularizerType()`, `TAO_ADMM_REGULARIZER_SOFT_THRESH` 116 M*/ 117 118 /*MC 119 TAO_ADMM_REGULARIZER_SOFT_THRESH - Soft threshold to solve regularizer part of `TAOADMM` 120 121 Level: advanced 122 123 Note: 124 Utilizes built-in SoftThreshold routines 125 126 .seealso: [](ch_tao), `Tao`, `TAOADMM`, `TaoSoftThreshold()`, `TaoADMMSetRegularizerObjectiveAndGradientRoutine()`, 127 `TaoADMMSetRegularizerHessianRoutine()`, `TaoADMMSetRegularizerType()`, `TAO_ADMM_REGULARIZER_USER` 128 M*/ 129 130 /*E 131 TaoALMMType - Determine the augmented Lagrangian formulation used in the `TAOALMM` subproblem. 132 133 Values: 134 + `TAO_ALMM_CLASSIC` - classic augmented Lagrangian definition including slack variables for inequality constraints 135 - `TAO_ALMM_PHR` - Powell-Hestenes-Rockafellar formulation without slack variables, uses pointwise `min()` for inequalities 136 137 Level: advanced 138 139 .seealso: [](ch_tao), `Tao`, `TAOALMM`, `TaoALMMSetType()`, `TaoALMMGetType()` 140 E*/ 141 typedef enum { 142 TAO_ALMM_CLASSIC, 143 TAO_ALMM_PHR 144 } TaoALMMType; 145 PETSC_EXTERN const char *const TaoALMMTypes[]; 146 147 /*E 148 TaoBNCGType - Determine the conjugate gradient update formula used in the `TAOBNCG` algorithm. 149 150 Values: 151 + `TAO_BNCG_GD` - basic gradient descent, no CG update 152 . `TAO_BNCG_PCGD` - preconditioned/scaled gradient descent 153 . `TAO_BNCG_HS` - Hestenes-Stiefel 154 . `TAO_BNCG_FR` - Fletcher-Reeves 155 . `TAO_BNCG_PRP` - Polak-Ribiere-Polyak (PRP) 156 . `TAO_BNCG_PRP_PLUS` - Polak-Ribiere-Polyak "plus" (PRP+) 157 . `TAO_BNCG_DY` - Dai-Yuan 158 . `TAO_BNCG_HZ` - Hager-Zhang (CG_DESCENT 5.3) 159 . `TAO_BNCG_DK` - Dai-Kou (2013) 160 . `TAO_BNCG_KD` - Kou-Dai (2015) 161 . `TAO_BNCG_SSML_BFGS` - Self-Scaling Memoryless BFGS (Perry-Shanno) 162 . `TAO_BNCG_SSML_DFP` - Self-Scaling Memoryless DFP 163 - `TAO_BNCG_SSML_BRDN` - Self-Scaling Memoryless (Symmetric) Broyden 164 165 Level: advanced 166 167 .seealso: `Tao`, `TAOBNCG`, `TaoBNCGSetType()`, `TaoBNCGGetType()` 168 E*/ 169 170 typedef enum { 171 TAO_BNCG_GD, 172 TAO_BNCG_PCGD, 173 TAO_BNCG_HS, 174 TAO_BNCG_FR, 175 TAO_BNCG_PRP, 176 TAO_BNCG_PRP_PLUS, 177 TAO_BNCG_DY, 178 TAO_BNCG_HZ, 179 TAO_BNCG_DK, 180 TAO_BNCG_KD, 181 TAO_BNCG_SSML_BFGS, 182 TAO_BNCG_SSML_DFP, 183 TAO_BNCG_SSML_BRDN 184 } TaoBNCGType; 185 PETSC_EXTERN const char *const TaoBNCGTypes[]; 186 187 /*J 188 TaoType - String with the name of a `Tao` method 189 190 Values: 191 + `TAONLS` - nls Newton's method with line search for unconstrained minimization 192 . `TAONTR` - ntr Newton's method with trust region for unconstrained minimization 193 . `TAONTL` - ntl Newton's method with trust region, line search for unconstrained minimization 194 . `TAOLMVM` - lmvm Limited memory variable metric method for unconstrained minimization 195 . `TAOCG` - cg Nonlinear conjugate gradient method for unconstrained minimization 196 . `TAONM` - nm Nelder-Mead algorithm for derivate-free unconstrained minimization 197 . `TAOTRON` - tron Newton Trust Region method for bound constrained minimization 198 . `TAOGPCG` - gpcg Newton Trust Region method for quadratic bound constrained minimization 199 . `TAOBLMVM` - blmvm Limited memory variable metric method for bound constrained minimization 200 . `TAOLCL` - lcl Linearly constrained Lagrangian method for pde-constrained minimization 201 - `TAOPOUNDERS` - Pounders Model-based algorithm for nonlinear least squares 202 203 Level: beginner 204 205 .seealso: [](doc_taosolve), [](ch_tao), `Tao`, `TaoCreate()`, `TaoSetType()` 206 J*/ 207 typedef const char *TaoType; 208 #define TAOLMVM "lmvm" 209 #define TAONLS "nls" 210 #define TAONTR "ntr" 211 #define TAONTL "ntl" 212 #define TAOCG "cg" 213 #define TAOTRON "tron" 214 #define TAOOWLQN "owlqn" 215 #define TAOBMRM "bmrm" 216 #define TAOBLMVM "blmvm" 217 #define TAOBQNLS "bqnls" 218 #define TAOBNCG "bncg" 219 #define TAOBNLS "bnls" 220 #define TAOBNTR "bntr" 221 #define TAOBNTL "bntl" 222 #define TAOBQNKLS "bqnkls" 223 #define TAOBQNKTR "bqnktr" 224 #define TAOBQNKTL "bqnktl" 225 #define TAOBQPIP "bqpip" 226 #define TAOGPCG "gpcg" 227 #define TAONM "nm" 228 #define TAOPOUNDERS "pounders" 229 #define TAOBRGN "brgn" 230 #define TAOLCL "lcl" 231 #define TAOSSILS "ssils" 232 #define TAOSSFLS "ssfls" 233 #define TAOASILS "asils" 234 #define TAOASFLS "asfls" 235 #define TAOIPM "ipm" 236 #define TAOPDIPM "pdipm" 237 #define TAOSHELL "shell" 238 #define TAOADMM "admm" 239 #define TAOALMM "almm" 240 #define TAOPYTHON "python" 241 #define TAOSNES "snes" 242 243 PETSC_EXTERN PetscClassId TAO_CLASSID; 244 PETSC_EXTERN PetscFunctionList TaoList; 245 246 /*E 247 TaoConvergedReason - reason a `Tao` optimizer was said to have converged or diverged 248 249 Values: 250 + `TAO_CONVERGED_GATOL` - $||g(X)|| < gatol$ 251 . `TAO_CONVERGED_GRTOL` - $||g(X)|| / f(X) < grtol$ 252 . `TAO_CONVERGED_GTTOL` - $||g(X)|| / ||g(X0)|| < gttol$ 253 . `TAO_CONVERGED_STEPTOL` - step size smaller than tolerance 254 . `TAO_CONVERGED_MINF` - $F < F_min$ 255 . `TAO_CONVERGED_USER` - the user indicates the optimization has succeeded 256 . `TAO_DIVERGED_MAXITS` - the maximum number of iterations allowed has been achieved 257 . `TAO_DIVERGED_NAN` - not a number appeared in the computations 258 . `TAO_DIVERGED_MAXFCN` - the maximum number of function evaluations has been computed 259 . `TAO_DIVERGED_LS_FAILURE` - a linesearch failed 260 . `TAO_DIVERGED_TR_REDUCTION` - trust region failure 261 . `TAO_DIVERGED_USER` - the user has indicated the optimization has failed 262 - `TAO_CONTINUE_ITERATING` - the optimization is still running, `TaoSolve()` 263 264 where 265 + X - current solution 266 . X0 - initial guess 267 . f(X) - current function value 268 . f(X*) - true solution (estimated) 269 . g(X) - current gradient 270 . its - current iterate number 271 . maxits - maximum number of iterates 272 . fevals - number of function evaluations 273 - max_funcsals - maximum number of function evaluations 274 275 Level: beginner 276 277 Note: 278 The two most common reasons for divergence are an incorrectly coded or computed gradient or Hessian failure or lack of convergence 279 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). 280 281 Developer Note: 282 The names in `KSPConvergedReason`, `SNESConvergedReason`, and `TaoConvergedReason` should be uniformized 283 284 .seealso: [](ch_tao), `Tao`, `TaoSolve()`, `TaoGetConvergedReason()`, `KSPConvergedReason`, `SNESConvergedReason` 285 E*/ 286 typedef enum { /* converged */ 287 TAO_CONVERGED_GATOL = 3, /* ||g(X)|| < gatol */ 288 TAO_CONVERGED_GRTOL = 4, /* ||g(X)|| / f(X) < grtol */ 289 TAO_CONVERGED_GTTOL = 5, /* ||g(X)|| / ||g(X0)|| < gttol */ 290 TAO_CONVERGED_STEPTOL = 6, /* step size small */ 291 TAO_CONVERGED_MINF = 7, /* F < F_min */ 292 TAO_CONVERGED_USER = 8, /* User defined */ 293 /* diverged */ 294 TAO_DIVERGED_MAXITS = -2, 295 TAO_DIVERGED_NAN = -4, 296 TAO_DIVERGED_MAXFCN = -5, 297 TAO_DIVERGED_LS_FAILURE = -6, 298 TAO_DIVERGED_TR_REDUCTION = -7, 299 TAO_DIVERGED_USER = -8, /* User defined */ 300 /* keep going */ 301 TAO_CONTINUE_ITERATING = 0 302 } TaoConvergedReason; 303 304 PETSC_EXTERN const char **TaoConvergedReasons; 305 306 PETSC_EXTERN PetscErrorCode TaoInitializePackage(void); 307 PETSC_EXTERN PetscErrorCode TaoFinalizePackage(void); 308 PETSC_EXTERN PetscErrorCode TaoCreate(MPI_Comm, Tao *); 309 PETSC_EXTERN PetscErrorCode TaoSetFromOptions(Tao); 310 PETSC_EXTERN PetscErrorCode TaoSetUp(Tao); 311 PETSC_EXTERN PetscErrorCode TaoSetType(Tao, TaoType); 312 PETSC_EXTERN PetscErrorCode TaoGetType(Tao, TaoType *); 313 PETSC_EXTERN PetscErrorCode TaoSetApplicationContext(Tao, void *); 314 PETSC_EXTERN PetscErrorCode TaoGetApplicationContext(Tao, void *); 315 PETSC_EXTERN PetscErrorCode TaoDestroy(Tao *); 316 PETSC_EXTERN PetscErrorCode TaoParametersInitialize(Tao); 317 318 PETSC_EXTERN PetscErrorCode TaoSetOptionsPrefix(Tao, const char[]); 319 PETSC_EXTERN PetscErrorCode TaoView(Tao, PetscViewer); 320 PETSC_EXTERN PetscErrorCode TaoViewFromOptions(Tao, PetscObject, const char[]); 321 322 PETSC_EXTERN PetscErrorCode TaoSolve(Tao); 323 324 PETSC_EXTERN PetscErrorCode TaoRegister(const char[], PetscErrorCode (*)(Tao)); 325 PETSC_EXTERN PetscErrorCode TaoRegisterDestroy(void); 326 327 PETSC_EXTERN PetscErrorCode TaoGetConvergedReason(Tao, TaoConvergedReason *); 328 PETSC_EXTERN PetscErrorCode TaoGetSolutionStatus(Tao, PetscInt *, PetscReal *, PetscReal *, PetscReal *, PetscReal *, TaoConvergedReason *); 329 PETSC_EXTERN PetscErrorCode TaoSetConvergedReason(Tao, TaoConvergedReason); 330 PETSC_EXTERN PetscErrorCode TaoSetSolution(Tao, Vec); 331 PETSC_EXTERN PetscErrorCode TaoGetSolution(Tao, Vec *); 332 333 PETSC_EXTERN PetscErrorCode TaoSetObjective(Tao, PetscErrorCode (*)(Tao, Vec, PetscReal *, void *), void *); 334 PETSC_EXTERN PetscErrorCode TaoGetObjective(Tao, PetscErrorCode (**)(Tao, Vec, PetscReal *, void *), void **); 335 PETSC_EXTERN PetscErrorCode TaoSetGradient(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *); 336 PETSC_EXTERN PetscErrorCode TaoGetGradient(Tao, Vec *, PetscErrorCode (**)(Tao, Vec, Vec, void *), void **); 337 PETSC_EXTERN PetscErrorCode TaoSetObjectiveAndGradient(Tao, Vec, PetscErrorCode (*)(Tao, Vec, PetscReal *, Vec, void *), void *); 338 PETSC_EXTERN PetscErrorCode TaoGetObjectiveAndGradient(Tao, Vec *, PetscErrorCode (**)(Tao, Vec, PetscReal *, Vec, void *), void **); 339 PETSC_EXTERN PetscErrorCode TaoSetHessian(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *); 340 PETSC_EXTERN PetscErrorCode TaoGetHessian(Tao, Mat *, Mat *, PetscErrorCode (**)(Tao, Vec, Mat, Mat, void *), void **); 341 342 PETSC_EXTERN PetscErrorCode TaoSetGradientNorm(Tao, Mat); 343 PETSC_EXTERN PetscErrorCode TaoGetGradientNorm(Tao, Mat *); 344 PETSC_EXTERN PetscErrorCode TaoSetLMVMMatrix(Tao, Mat); 345 PETSC_EXTERN PetscErrorCode TaoGetLMVMMatrix(Tao, Mat *); 346 PETSC_EXTERN PetscErrorCode TaoSetRecycleHistory(Tao, PetscBool); 347 PETSC_EXTERN PetscErrorCode TaoGetRecycleHistory(Tao, PetscBool *); 348 PETSC_EXTERN PetscErrorCode TaoLMVMSetH0(Tao, Mat); 349 PETSC_EXTERN PetscErrorCode TaoLMVMGetH0(Tao, Mat *); 350 PETSC_EXTERN PetscErrorCode TaoLMVMGetH0KSP(Tao, KSP *); 351 PETSC_EXTERN PetscErrorCode TaoLMVMRecycle(Tao, PetscBool); 352 PETSC_EXTERN PetscErrorCode TaoSetResidualRoutine(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *); 353 PETSC_EXTERN PetscErrorCode TaoSetResidualWeights(Tao, Vec, PetscInt, PetscInt *, PetscInt *, PetscReal *); 354 PETSC_EXTERN PetscErrorCode TaoSetConstraintsRoutine(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *); 355 PETSC_EXTERN PetscErrorCode TaoSetInequalityConstraintsRoutine(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *); 356 PETSC_EXTERN PetscErrorCode TaoSetEqualityConstraintsRoutine(Tao, Vec, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *); 357 PETSC_EXTERN PetscErrorCode TaoSetJacobianResidualRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *); 358 PETSC_EXTERN PetscErrorCode TaoSetJacobianRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *); 359 PETSC_EXTERN PetscErrorCode TaoSetJacobianStateRoutine(Tao, Mat, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, Mat, void *), void *); 360 PETSC_EXTERN PetscErrorCode TaoSetJacobianDesignRoutine(Tao, Mat, PetscErrorCode (*)(Tao, Vec, Mat, void *), void *); 361 PETSC_EXTERN PetscErrorCode TaoSetJacobianInequalityRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *); 362 PETSC_EXTERN PetscErrorCode TaoSetJacobianEqualityRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *); 363 364 PETSC_EXTERN PetscErrorCode TaoPythonSetType(Tao, const char[]); 365 PETSC_EXTERN PetscErrorCode TaoPythonGetType(Tao, const char *[]); 366 367 PETSC_EXTERN PetscErrorCode TaoShellSetSolve(Tao, PetscErrorCode (*)(Tao)); 368 PETSC_EXTERN PetscErrorCode TaoShellSetContext(Tao, void *); 369 PETSC_EXTERN PetscErrorCode TaoShellGetContext(Tao, void *); 370 371 PETSC_EXTERN PetscErrorCode TaoSetStateDesignIS(Tao, IS, IS); 372 373 PETSC_EXTERN PetscErrorCode TaoComputeObjective(Tao, Vec, PetscReal *); 374 PETSC_EXTERN PetscErrorCode TaoComputeResidual(Tao, Vec, Vec); 375 PETSC_EXTERN PetscErrorCode TaoTestGradient(Tao, Vec, Vec); 376 PETSC_EXTERN PetscErrorCode TaoComputeGradient(Tao, Vec, Vec); 377 PETSC_EXTERN PetscErrorCode TaoComputeObjectiveAndGradient(Tao, Vec, PetscReal *, Vec); 378 PETSC_EXTERN PetscErrorCode TaoComputeConstraints(Tao, Vec, Vec); 379 PETSC_EXTERN PetscErrorCode TaoComputeInequalityConstraints(Tao, Vec, Vec); 380 PETSC_EXTERN PetscErrorCode TaoComputeEqualityConstraints(Tao, Vec, Vec); 381 PETSC_EXTERN PetscErrorCode TaoDefaultComputeGradient(Tao, Vec, Vec, void *); 382 PETSC_EXTERN PetscErrorCode TaoIsObjectiveDefined(Tao, PetscBool *); 383 PETSC_EXTERN PetscErrorCode TaoIsGradientDefined(Tao, PetscBool *); 384 PETSC_EXTERN PetscErrorCode TaoIsObjectiveAndGradientDefined(Tao, PetscBool *); 385 386 PETSC_EXTERN PetscErrorCode TaoTestHessian(Tao); 387 PETSC_EXTERN PetscErrorCode TaoComputeHessian(Tao, Vec, Mat, Mat); 388 PETSC_EXTERN PetscErrorCode TaoComputeResidualJacobian(Tao, Vec, Mat, Mat); 389 PETSC_EXTERN PetscErrorCode TaoComputeJacobian(Tao, Vec, Mat, Mat); 390 PETSC_EXTERN PetscErrorCode TaoComputeJacobianState(Tao, Vec, Mat, Mat, Mat); 391 PETSC_EXTERN PetscErrorCode TaoComputeJacobianEquality(Tao, Vec, Mat, Mat); 392 PETSC_EXTERN PetscErrorCode TaoComputeJacobianInequality(Tao, Vec, Mat, Mat); 393 PETSC_EXTERN PetscErrorCode TaoComputeJacobianDesign(Tao, Vec, Mat); 394 395 PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessian(Tao, Vec, Mat, Mat, void *); 396 PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessianColor(Tao, Vec, Mat, Mat, void *); 397 PETSC_EXTERN PetscErrorCode TaoDefaultComputeHessianMFFD(Tao, Vec, Mat, Mat, void *); 398 PETSC_EXTERN PetscErrorCode TaoComputeDualVariables(Tao, Vec, Vec); 399 PETSC_EXTERN PetscErrorCode TaoSetVariableBounds(Tao, Vec, Vec); 400 PETSC_EXTERN PetscErrorCode TaoGetVariableBounds(Tao, Vec *, Vec *); 401 PETSC_EXTERN PetscErrorCode TaoGetDualVariables(Tao, Vec *, Vec *); 402 PETSC_EXTERN PetscErrorCode TaoSetInequalityBounds(Tao, Vec, Vec); 403 PETSC_EXTERN PetscErrorCode TaoGetInequalityBounds(Tao, Vec *, Vec *); 404 PETSC_EXTERN PetscErrorCode TaoSetVariableBoundsRoutine(Tao, PetscErrorCode (*)(Tao, Vec, Vec, void *), void *); 405 PETSC_EXTERN PetscErrorCode TaoComputeVariableBounds(Tao); 406 407 PETSC_EXTERN PetscErrorCode TaoGetTolerances(Tao, PetscReal *, PetscReal *, PetscReal *); 408 PETSC_EXTERN PetscErrorCode TaoSetTolerances(Tao, PetscReal, PetscReal, PetscReal); 409 PETSC_EXTERN PetscErrorCode TaoGetConstraintTolerances(Tao, PetscReal *, PetscReal *); 410 PETSC_EXTERN PetscErrorCode TaoSetConstraintTolerances(Tao, PetscReal, PetscReal); 411 PETSC_EXTERN PetscErrorCode TaoSetFunctionLowerBound(Tao, PetscReal); 412 PETSC_EXTERN PetscErrorCode TaoSetInitialTrustRegionRadius(Tao, PetscReal); 413 PETSC_EXTERN PetscErrorCode TaoSetMaximumIterations(Tao, PetscInt); 414 PETSC_EXTERN PetscErrorCode TaoSetMaximumFunctionEvaluations(Tao, PetscInt); 415 PETSC_EXTERN PetscErrorCode TaoGetFunctionLowerBound(Tao, PetscReal *); 416 PETSC_EXTERN PetscErrorCode TaoGetInitialTrustRegionRadius(Tao, PetscReal *); 417 PETSC_EXTERN PetscErrorCode TaoGetCurrentTrustRegionRadius(Tao, PetscReal *); 418 PETSC_EXTERN PetscErrorCode TaoGetMaximumIterations(Tao, PetscInt *); 419 PETSC_EXTERN PetscErrorCode TaoGetCurrentFunctionEvaluations(Tao, PetscInt *); 420 PETSC_EXTERN PetscErrorCode TaoGetMaximumFunctionEvaluations(Tao, PetscInt *); 421 PETSC_EXTERN PetscErrorCode TaoGetIterationNumber(Tao, PetscInt *); 422 PETSC_EXTERN PetscErrorCode TaoSetIterationNumber(Tao, PetscInt); 423 PETSC_EXTERN PetscErrorCode TaoGetTotalIterationNumber(Tao, PetscInt *); 424 PETSC_EXTERN PetscErrorCode TaoSetTotalIterationNumber(Tao, PetscInt); 425 PETSC_EXTERN PetscErrorCode TaoGetResidualNorm(Tao, PetscReal *); 426 427 PETSC_EXTERN PetscErrorCode TaoAppendOptionsPrefix(Tao, const char[]); 428 PETSC_EXTERN PetscErrorCode TaoGetOptionsPrefix(Tao, const char *[]); 429 PETSC_EXTERN PetscErrorCode TaoResetStatistics(Tao); 430 PETSC_EXTERN PetscErrorCode TaoSetUpdate(Tao, PetscErrorCode (*)(Tao, PetscInt, void *), void *); 431 432 PETSC_EXTERN PetscErrorCode TaoGetKSP(Tao, KSP *); 433 PETSC_EXTERN PetscErrorCode TaoGetLinearSolveIterations(Tao, PetscInt *); 434 PETSC_EXTERN PetscErrorCode TaoKSPSetUseEW(Tao, PetscBool); 435 436 #include <petsctaolinesearch.h> 437 438 PETSC_EXTERN PetscErrorCode TaoGetLineSearch(Tao, TaoLineSearch *); 439 440 PETSC_EXTERN PetscErrorCode TaoSetConvergenceHistory(Tao, PetscReal *, PetscReal *, PetscReal *, PetscInt *, PetscInt, PetscBool); 441 PETSC_EXTERN PetscErrorCode TaoGetConvergenceHistory(Tao, PetscReal **, PetscReal **, PetscReal **, PetscInt **, PetscInt *); 442 PETSC_EXTERN PetscErrorCode TaoMonitorSet(Tao, PetscErrorCode (*)(Tao, void *), void *, PetscErrorCode (*)(void **)); 443 PETSC_EXTERN PetscErrorCode TaoMonitorCancel(Tao); 444 PETSC_EXTERN PetscErrorCode TaoMonitorDefault(Tao, void *); 445 PETSC_EXTERN PetscErrorCode TaoMonitorGlobalization(Tao, void *); 446 PETSC_EXTERN PetscErrorCode TaoMonitorDefaultShort(Tao, void *); 447 PETSC_EXTERN PetscErrorCode TaoMonitorConstraintNorm(Tao, void *); 448 PETSC_EXTERN PetscErrorCode TaoMonitorSolution(Tao, void *); 449 PETSC_EXTERN PetscErrorCode TaoMonitorResidual(Tao, void *); 450 PETSC_EXTERN PetscErrorCode TaoMonitorGradient(Tao, void *); 451 PETSC_EXTERN PetscErrorCode TaoMonitorStep(Tao, void *); 452 PETSC_EXTERN PetscErrorCode TaoMonitorSolutionDraw(Tao, void *); 453 PETSC_EXTERN PetscErrorCode TaoMonitorStepDraw(Tao, void *); 454 PETSC_EXTERN PetscErrorCode TaoMonitorGradientDraw(Tao, void *); 455 PETSC_EXTERN PetscErrorCode TaoAddLineSearchCounts(Tao); 456 457 PETSC_EXTERN PetscErrorCode TaoDefaultConvergenceTest(Tao, void *); 458 PETSC_EXTERN PetscErrorCode TaoSetConvergenceTest(Tao, PetscErrorCode (*)(Tao, void *), void *); 459 460 PETSC_EXTERN PetscErrorCode TaoLCLSetStateDesignIS(Tao, IS, IS); 461 PETSC_EXTERN PetscErrorCode TaoMonitor(Tao, PetscInt, PetscReal, PetscReal, PetscReal, PetscReal); 462 typedef struct _n_TaoMonitorDrawCtx *TaoMonitorDrawCtx; 463 PETSC_EXTERN PetscErrorCode TaoMonitorDrawCtxCreate(MPI_Comm, const char[], const char[], int, int, int, int, PetscInt, TaoMonitorDrawCtx *); 464 PETSC_EXTERN PetscErrorCode TaoMonitorDrawCtxDestroy(TaoMonitorDrawCtx *); 465 466 PETSC_EXTERN PetscErrorCode TaoBRGNGetSubsolver(Tao, Tao *); 467 PETSC_EXTERN PetscErrorCode TaoBRGNSetRegularizerObjectiveAndGradientRoutine(Tao, PetscErrorCode (*)(Tao, Vec, PetscReal *, Vec, void *), void *); 468 PETSC_EXTERN PetscErrorCode TaoBRGNSetRegularizerHessianRoutine(Tao, Mat, PetscErrorCode (*)(Tao, Vec, Mat, void *), void *); 469 PETSC_EXTERN PetscErrorCode TaoBRGNSetRegularizerWeight(Tao, PetscReal); 470 PETSC_EXTERN PetscErrorCode TaoBRGNSetL1SmoothEpsilon(Tao, PetscReal); 471 PETSC_EXTERN PetscErrorCode TaoBRGNSetDictionaryMatrix(Tao, Mat); 472 PETSC_EXTERN PetscErrorCode TaoBRGNGetDampingVector(Tao, Vec *); 473 PETSC_EXTERN PetscErrorCode TaoBNCGSetType(Tao, TaoBNCGType); 474 PETSC_EXTERN PetscErrorCode TaoBNCGGetType(Tao, TaoBNCGType *); 475 476 PETSC_EXTERN PetscErrorCode TaoADMMGetMisfitSubsolver(Tao, Tao *); 477 PETSC_EXTERN PetscErrorCode TaoADMMGetRegularizationSubsolver(Tao, Tao *); 478 PETSC_EXTERN PetscErrorCode TaoADMMGetDualVector(Tao, Vec *); 479 PETSC_EXTERN PetscErrorCode TaoADMMGetSpectralPenalty(Tao, PetscReal *); 480 PETSC_EXTERN PetscErrorCode TaoADMMSetSpectralPenalty(Tao, PetscReal); 481 PETSC_EXTERN PetscErrorCode TaoGetADMMParentTao(Tao, Tao *); 482 PETSC_EXTERN PetscErrorCode TaoADMMSetConstraintVectorRHS(Tao, Vec); 483 PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerCoefficient(Tao, PetscReal); 484 PETSC_EXTERN PetscErrorCode TaoADMMGetRegularizerCoefficient(Tao, PetscReal *); 485 PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitConstraintJacobian(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *); 486 PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerConstraintJacobian(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *); 487 PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerHessianRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *); 488 PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerObjectiveAndGradientRoutine(Tao, PetscErrorCode (*)(Tao, Vec, PetscReal *, Vec, void *), void *); 489 PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitHessianRoutine(Tao, Mat, Mat, PetscErrorCode (*)(Tao, Vec, Mat, Mat, void *), void *); 490 PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitObjectiveAndGradientRoutine(Tao, PetscErrorCode (*)(Tao, Vec, PetscReal *, Vec, void *), void *); 491 PETSC_EXTERN PetscErrorCode TaoADMMSetMisfitHessianChangeStatus(Tao, PetscBool); 492 PETSC_EXTERN PetscErrorCode TaoADMMSetRegHessianChangeStatus(Tao, PetscBool); 493 PETSC_EXTERN PetscErrorCode TaoADMMSetMinimumSpectralPenalty(Tao, PetscReal); 494 PETSC_EXTERN PetscErrorCode TaoADMMSetRegularizerType(Tao, TaoADMMRegularizerType); 495 PETSC_EXTERN PetscErrorCode TaoADMMGetRegularizerType(Tao, TaoADMMRegularizerType *); 496 PETSC_EXTERN PetscErrorCode TaoADMMSetUpdateType(Tao, TaoADMMUpdateType); 497 PETSC_EXTERN PetscErrorCode TaoADMMGetUpdateType(Tao, TaoADMMUpdateType *); 498 499 PETSC_EXTERN PetscErrorCode TaoALMMGetType(Tao, TaoALMMType *); 500 PETSC_EXTERN PetscErrorCode TaoALMMSetType(Tao, TaoALMMType); 501 PETSC_EXTERN PetscErrorCode TaoALMMGetSubsolver(Tao, Tao *); 502 PETSC_EXTERN PetscErrorCode TaoALMMSetSubsolver(Tao, Tao); 503 PETSC_EXTERN PetscErrorCode TaoALMMGetMultipliers(Tao, Vec *); 504 PETSC_EXTERN PetscErrorCode TaoALMMSetMultipliers(Tao, Vec); 505 PETSC_EXTERN PetscErrorCode TaoALMMGetPrimalIS(Tao, IS *, IS *); 506 PETSC_EXTERN PetscErrorCode TaoALMMGetDualIS(Tao, IS *, IS *); 507 508 PETSC_EXTERN PetscErrorCode TaoVecGetSubVec(Vec, IS, TaoSubsetType, PetscReal, Vec *); 509 PETSC_EXTERN PetscErrorCode TaoMatGetSubMat(Mat, IS, Vec, TaoSubsetType, Mat *); 510 PETSC_EXTERN PetscErrorCode TaoGradientNorm(Tao, Vec, NormType, PetscReal *); 511 PETSC_EXTERN PetscErrorCode TaoEstimateActiveBounds(Vec, Vec, Vec, Vec, Vec, Vec, PetscReal, PetscReal *, IS *, IS *, IS *, IS *, IS *); 512 PETSC_EXTERN PetscErrorCode TaoBoundStep(Vec, Vec, Vec, IS, IS, IS, PetscReal, Vec); 513 PETSC_EXTERN PetscErrorCode TaoBoundSolution(Vec, Vec, Vec, PetscReal, PetscInt *, Vec); 514 515 PETSC_EXTERN PetscErrorCode MatCreateSubMatrixFree(Mat, IS, IS, Mat *); 516 517 #include <petsctao_deprecations.h> 518