Lines Matching refs:tao

26   Tao  tao          = (Tao)ctx;  in KSPPreSolve_TAOEW_Private()  local
27 SNES snes_ewdummy = tao->snes_ewdummy; in KSPPreSolve_TAOEW_Private()
33 snes_ewdummy->rtol = tao->gttol; in KSPPreSolve_TAOEW_Private()
34 snes_ewdummy->iter = tao->niter; in KSPPreSolve_TAOEW_Private()
43 Tao tao = (Tao)ctx; in KSPPostSolve_TAOEW_Private() local
44 SNES snes_ewdummy = tao->snes_ewdummy; in KSPPostSolve_TAOEW_Private()
52 static PetscErrorCode TaoSetUpEW_Private(Tao tao) in TaoSetUpEW_Private() argument
58 if (!tao->ksp) PetscFunctionReturn(PETSC_SUCCESS); in TaoSetUpEW_Private()
59 if (tao->ksp_ewconv) { in TaoSetUpEW_Private()
60 …if (!tao->snes_ewdummy) PetscCall(SNESCreate(PetscObjectComm((PetscObject)tao), &tao->snes_ewdummy… in TaoSetUpEW_Private()
61 tao->snes_ewdummy->ksp_ewconv = PETSC_TRUE; in TaoSetUpEW_Private()
62 PetscCall(KSPSetPreSolve(tao->ksp, KSPPreSolve_TAOEW_Private, tao)); in TaoSetUpEW_Private()
63 PetscCall(KSPSetPostSolve(tao->ksp, KSPPostSolve_TAOEW_Private, tao)); in TaoSetUpEW_Private()
65 PetscCall(KSPGetOptionsPrefix(tao->ksp, &ewprefix)); in TaoSetUpEW_Private()
66 kctx = (SNESKSPEW *)tao->snes_ewdummy->kspconvctx; in TaoSetUpEW_Private()
67 …PetscCall(SNESEWSetFromOptions_Private(kctx, PETSC_FALSE, PetscObjectComm((PetscObject)tao), ewpre… in TaoSetUpEW_Private()
68 } else PetscCall(SNESDestroy(&tao->snes_ewdummy)); in TaoSetUpEW_Private()
89 PetscErrorCode TaoParametersInitialize(Tao tao) in TaoParametersInitialize() argument
91 PetscObjectParameterSetDefault(tao, max_it, 10000); in TaoParametersInitialize()
92 PetscObjectParameterSetDefault(tao, max_funcs, PETSC_UNLIMITED); in TaoParametersInitialize()
93 PetscObjectParameterSetDefault(tao, gatol, PetscDefined(USE_REAL_SINGLE) ? 1e-5 : 1e-8); in TaoParametersInitialize()
94 PetscObjectParameterSetDefault(tao, grtol, PetscDefined(USE_REAL_SINGLE) ? 1e-5 : 1e-8); in TaoParametersInitialize()
95 PetscObjectParameterSetDefault(tao, crtol, PetscDefined(USE_REAL_SINGLE) ? 1e-5 : 1e-8); in TaoParametersInitialize()
96 PetscObjectParameterSetDefault(tao, catol, PetscDefined(USE_REAL_SINGLE) ? 1e-5 : 1e-8); in TaoParametersInitialize()
97 PetscObjectParameterSetDefault(tao, gttol, 0.0); in TaoParametersInitialize()
98 PetscObjectParameterSetDefault(tao, steptol, 0.0); in TaoParametersInitialize()
99 PetscObjectParameterSetDefault(tao, fmin, PETSC_NINFINITY); in TaoParametersInitialize()
100 PetscObjectParameterSetDefault(tao, trust0, PETSC_INFINITY); in TaoParametersInitialize()
124 Tao tao; in TaoCreate() local
131 …PetscCall(PetscHeaderCreate(tao, TAO_CLASSID, "Tao", "Optimization solver", "Tao", comm, TaoDestro… in TaoCreate()
132 tao->ops->convergencetest = TaoDefaultConvergenceTest; in TaoCreate()
134 tao->hist_reset = PETSC_TRUE; in TaoCreate()
135 PetscCall(TaoResetStatistics(tao)); in TaoCreate()
136 *newtao = tao; in TaoCreate()
158 PetscErrorCode TaoSolve(Tao tao) in TaoSolve() argument
163 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoSolve()
172 tao->header_printed = PETSC_FALSE; in TaoSolve()
173 PetscCall(TaoSetUp(tao)); in TaoSolve()
174 PetscCall(TaoResetStatistics(tao)); in TaoSolve()
175 if (tao->linesearch) PetscCall(TaoLineSearchReset(tao->linesearch)); in TaoSolve()
177 PetscCall(PetscLogEventBegin(TAO_Solve, tao, 0, 0, 0)); in TaoSolve()
178 PetscTryTypeMethod(tao, solve); in TaoSolve()
179 PetscCall(PetscLogEventEnd(TAO_Solve, tao, 0, 0, 0)); in TaoSolve()
181 PetscCall(VecViewFromOptions(tao->solution, (PetscObject)tao, "-tao_view_solution")); in TaoSolve()
183 tao->ntotalits += tao->niter; in TaoSolve()
185 if (tao->printreason) { in TaoSolve()
186 PetscViewer viewer = PETSC_VIEWER_STDOUT_(((PetscObject)tao)->comm); in TaoSolve()
188 PetscCall(PetscViewerASCIIAddTab(viewer, ((PetscObject)tao)->tablevel)); in TaoSolve()
189 if (tao->reason > 0) { in TaoSolve()
190 if (((PetscObject)tao)->prefix) { in TaoSolve()
191 … %s iterations %" PetscInt_FMT "\n", ((PetscObject)tao)->prefix, TaoConvergedReasons[tao->reason],… in TaoSolve()
193 …onverged due to %s iterations %" PetscInt_FMT "\n", TaoConvergedReasons[tao->reason], tao->niter)); in TaoSolve()
196 if (((PetscObject)tao)->prefix) { in TaoSolve()
197 …o %s iteration %" PetscInt_FMT "\n", ((PetscObject)tao)->prefix, TaoConvergedReasons[tao->reason],… in TaoSolve()
199 … converge due to %s iteration %" PetscInt_FMT "\n", TaoConvergedReasons[tao->reason], tao->niter)); in TaoSolve()
202 PetscCall(PetscViewerASCIISubtractTab(viewer, ((PetscObject)tao)->tablevel)); in TaoSolve()
204 PetscCall(TaoViewFromOptions(tao, NULL, "-tao_view")); in TaoSolve()
227 PetscErrorCode TaoSetUp(Tao tao) in TaoSetUp() argument
230 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoSetUp()
231 if (tao->setupcalled) PetscFunctionReturn(PETSC_SUCCESS); in TaoSetUp()
232 PetscCall(TaoSetUpEW_Private(tao)); in TaoSetUp()
233 …PetscCheck(tao->solution, PetscObjectComm((PetscObject)tao), PETSC_ERR_ARG_WRONGSTATE, "Must call … in TaoSetUp()
234 PetscTryTypeMethod(tao, setup); in TaoSetUp()
235 tao->setupcalled = PETSC_TRUE; in TaoSetUp()
251 PetscErrorCode TaoDestroy(Tao *tao) in TaoDestroy() argument
254 if (!*tao) PetscFunctionReturn(PETSC_SUCCESS); in TaoDestroy()
255 PetscValidHeaderSpecific(*tao, TAO_CLASSID, 1); in TaoDestroy()
256 if (--((PetscObject)*tao)->refct > 0) { in TaoDestroy()
257 *tao = NULL; in TaoDestroy()
261 PetscTryTypeMethod(*tao, destroy); in TaoDestroy()
262 PetscCall(KSPDestroy(&(*tao)->ksp)); in TaoDestroy()
263 PetscCall(SNESDestroy(&(*tao)->snes_ewdummy)); in TaoDestroy()
264 PetscCall(TaoLineSearchDestroy(&(*tao)->linesearch)); in TaoDestroy()
266 if ((*tao)->ops->convergencedestroy) { in TaoDestroy()
267 PetscCall((*(*tao)->ops->convergencedestroy)((*tao)->cnvP)); in TaoDestroy()
268 if ((*tao)->jacobian_state_inv) PetscCall(MatDestroy(&(*tao)->jacobian_state_inv)); in TaoDestroy()
270 PetscCall(VecDestroy(&(*tao)->solution)); in TaoDestroy()
271 PetscCall(VecDestroy(&(*tao)->gradient)); in TaoDestroy()
272 PetscCall(VecDestroy(&(*tao)->ls_res)); in TaoDestroy()
274 if ((*tao)->gradient_norm) { in TaoDestroy()
275 PetscCall(PetscObjectDereference((PetscObject)(*tao)->gradient_norm)); in TaoDestroy()
276 PetscCall(VecDestroy(&(*tao)->gradient_norm_tmp)); in TaoDestroy()
279 PetscCall(VecDestroy(&(*tao)->XL)); in TaoDestroy()
280 PetscCall(VecDestroy(&(*tao)->XU)); in TaoDestroy()
281 PetscCall(VecDestroy(&(*tao)->IL)); in TaoDestroy()
282 PetscCall(VecDestroy(&(*tao)->IU)); in TaoDestroy()
283 PetscCall(VecDestroy(&(*tao)->DE)); in TaoDestroy()
284 PetscCall(VecDestroy(&(*tao)->DI)); in TaoDestroy()
285 PetscCall(VecDestroy(&(*tao)->constraints)); in TaoDestroy()
286 PetscCall(VecDestroy(&(*tao)->constraints_equality)); in TaoDestroy()
287 PetscCall(VecDestroy(&(*tao)->constraints_inequality)); in TaoDestroy()
288 PetscCall(VecDestroy(&(*tao)->stepdirection)); in TaoDestroy()
289 PetscCall(MatDestroy(&(*tao)->hessian_pre)); in TaoDestroy()
290 PetscCall(MatDestroy(&(*tao)->hessian)); in TaoDestroy()
291 PetscCall(MatDestroy(&(*tao)->ls_jac)); in TaoDestroy()
292 PetscCall(MatDestroy(&(*tao)->ls_jac_pre)); in TaoDestroy()
293 PetscCall(MatDestroy(&(*tao)->jacobian_pre)); in TaoDestroy()
294 PetscCall(MatDestroy(&(*tao)->jacobian)); in TaoDestroy()
295 PetscCall(MatDestroy(&(*tao)->jacobian_state_pre)); in TaoDestroy()
296 PetscCall(MatDestroy(&(*tao)->jacobian_state)); in TaoDestroy()
297 PetscCall(MatDestroy(&(*tao)->jacobian_state_inv)); in TaoDestroy()
298 PetscCall(MatDestroy(&(*tao)->jacobian_design)); in TaoDestroy()
299 PetscCall(MatDestroy(&(*tao)->jacobian_equality)); in TaoDestroy()
300 PetscCall(MatDestroy(&(*tao)->jacobian_equality_pre)); in TaoDestroy()
301 PetscCall(MatDestroy(&(*tao)->jacobian_inequality)); in TaoDestroy()
302 PetscCall(MatDestroy(&(*tao)->jacobian_inequality_pre)); in TaoDestroy()
303 PetscCall(ISDestroy(&(*tao)->state_is)); in TaoDestroy()
304 PetscCall(ISDestroy(&(*tao)->design_is)); in TaoDestroy()
305 PetscCall(VecDestroy(&(*tao)->res_weights_v)); in TaoDestroy()
306 PetscCall(TaoMonitorCancel(*tao)); in TaoDestroy()
307 …if ((*tao)->hist_malloc) PetscCall(PetscFree4((*tao)->hist_obj, (*tao)->hist_resid, (*tao)->hist_c… in TaoDestroy()
308 if ((*tao)->res_weights_n) { in TaoDestroy()
309 PetscCall(PetscFree((*tao)->res_weights_rows)); in TaoDestroy()
310 PetscCall(PetscFree((*tao)->res_weights_cols)); in TaoDestroy()
311 PetscCall(PetscFree((*tao)->res_weights_w)); in TaoDestroy()
313 PetscCall(PetscHeaderDestroy(tao)); in TaoDestroy()
333 PetscErrorCode TaoKSPSetUseEW(Tao tao, PetscBool flag) in TaoKSPSetUseEW() argument
336 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoKSPSetUseEW()
337 PetscValidLogicalCollectiveBool(tao, flag, 2); in TaoKSPSetUseEW()
338 tao->ksp_ewconv = flag; in TaoKSPSetUseEW()
364 PetscErrorCode TaoMonitorSetFromOptions(Tao tao, const char name[], const char help[], const char m… in TaoMonitorSetFromOptions() argument
371 …cOptionsCreateViewer(PetscObjectComm((PetscObject)tao), ((PetscObject)tao)->options, ((PetscObject… in TaoMonitorSetFromOptions()
379 …PetscCall(PetscOptionsGetInt(((PetscObject)tao)->options, ((PetscObject)tao)->prefix, interval_key… in TaoMonitorSetFromOptions()
382 …PetscCall(TaoMonitorSet(tao, (PetscErrorCode (*)(Tao, PetscCtx))monitor, vf, (PetscCtxDestroyFn *)… in TaoMonitorSetFromOptions()
432 PetscErrorCode TaoSetFromOptions(Tao tao) in TaoSetFromOptions() argument
441 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoSetFromOptions()
442 PetscCall(PetscObjectGetComm((PetscObject)tao, &comm)); in TaoSetFromOptions()
444 if (((PetscObject)tao)->type_name) default_type = ((PetscObject)tao)->type_name; in TaoSetFromOptions()
446 PetscObjectOptionsBegin((PetscObject)tao); in TaoSetFromOptions()
450 PetscCall(TaoSetType(tao, type)); in TaoSetFromOptions()
451 } else if (!((PetscObject)tao)->type_name) { in TaoSetFromOptions()
452 PetscCall(TaoSetType(tao, default_type)); in TaoSetFromOptions()
457 if (tao->linesearch) { in TaoSetFromOptions()
459 PetscCall(TaoLineSearchGetOptionsPrefix(tao->linesearch, &prefix)); in TaoSetFromOptions()
460 …if (!prefix) PetscCall(TaoLineSearchSetOptionsPrefix(tao->linesearch, ((PetscObject)tao)->prefix)); in TaoSetFromOptions()
463 catol = tao->catol; in TaoSetFromOptions()
464 crtol = tao->crtol; in TaoSetFromOptions()
465 …l", "Stop if constraints violations within", "TaoSetConstraintTolerances", tao->catol, &catol, NUL… in TaoSetFromOptions()
466 …p if relative constraint violations within", "TaoSetConstraintTolerances", tao->crtol, &crtol, NUL… in TaoSetFromOptions()
467 PetscCall(TaoSetConstraintTolerances(tao, catol, crtol)); in TaoSetFromOptions()
469 gatol = tao->gatol; in TaoSetFromOptions()
470 grtol = tao->grtol; in TaoSetFromOptions()
471 gttol = tao->gttol; in TaoSetFromOptions()
472 …al("-tao_gatol", "Stop if norm of gradient less than", "TaoSetTolerances", tao->gatol, &gatol, NUL… in TaoSetFromOptions()
473 … gradient divided by the function value is less than", "TaoSetTolerances", tao->grtol, &grtol, NUL… in TaoSetFromOptions()
474 …less than the norm of the initial gradient times tol", "TaoSetTolerances", tao->gttol, &gttol, NUL… in TaoSetFromOptions()
475 PetscCall(TaoSetTolerances(tao, gatol, grtol, gttol)); in TaoSetFromOptions()
477 …it", "Stop if iteration number exceeds", "TaoSetMaximumIterations", tao->max_it, &tao->max_it, &fl… in TaoSetFromOptions()
478 if (flg) PetscCall(TaoSetMaximumIterations(tao, tao->max_it)); in TaoSetFromOptions()
480 …unction evaluations exceeds", "TaoSetMaximumFunctionEvaluations", tao->max_funcs, &tao->max_funcs,… in TaoSetFromOptions()
481 if (flg) PetscCall(TaoSetMaximumFunctionEvaluations(tao, tao->max_funcs)); in TaoSetFromOptions()
483 …tao_fmin", "Stop if function less than", "TaoSetFunctionLowerBound", tao->fmin, &tao->fmin, NULL)); in TaoSetFromOptions()
484 …teptol", "Stop if step size or trust region radius less than", "", tao->steptol, &tao->steptol, NU… in TaoSetFromOptions()
485 …", "Initial trust region radius", "TaoSetInitialTrustRegionRadius", tao->trust0, &tao->trust0, &fl… in TaoSetFromOptions()
486 if (flg) PetscCall(TaoSetInitialTrustRegionRadius(tao, tao->trust0)); in TaoSetFromOptions()
499 …converged_reason", "Print reason for Tao converged", "TaoSolve", tao->printreason, &tao->printreas… in TaoSetFromOptions()
501 …PetscCall(TaoMonitorSetFromOptions(tao, "-tao_monitor_solution", "View solution vector after each … in TaoSetFromOptions()
502 …PetscCall(TaoMonitorSetFromOptions(tao, "-tao_monitor_gradient", "View gradient vector for each it… in TaoSetFromOptions()
504 …PetscCall(TaoMonitorSetFromOptions(tao, "-tao_monitor_step", "View step vector after each iteratio… in TaoSetFromOptions()
505 …PetscCall(TaoMonitorSetFromOptions(tao, "-tao_monitor_residual", "View least-squares residual vect… in TaoSetFromOptions()
506 …PetscCall(TaoMonitorSetFromOptions(tao, "-tao_monitor", "Use the default convergence monitor", "Ta… in TaoSetFromOptions()
507 …PetscCall(TaoMonitorSetFromOptions(tao, "-tao_monitor_globalization", "Use the convergence monitor… in TaoSetFromOptions()
508 …PetscCall(TaoMonitorSetFromOptions(tao, "-tao_monitor_short", "Use the short convergence monitor",… in TaoSetFromOptions()
509 …PetscCall(TaoMonitorSetFromOptions(tao, "-tao_monitor_constraint_norm", "Use the default convergen… in TaoSetFromOptions()
514 if (flg) PetscCall(TaoMonitorCancel(tao)); in TaoSetFromOptions()
521 …PetscCall(TaoMonitorDrawCtxCreate(PetscObjectComm((PetscObject)tao), NULL, NULL, PETSC_DECIDE, PET… in TaoSetFromOptions()
522 …PetscCall(TaoMonitorSet(tao, TaoMonitorSolutionDraw, drawctx, (PetscCtxDestroyFn *)TaoMonitorDrawC… in TaoSetFromOptions()
527 if (flg) PetscCall(TaoMonitorSet(tao, TaoMonitorStepDraw, NULL, NULL)); in TaoSetFromOptions()
534 …PetscCall(TaoMonitorDrawCtxCreate(PetscObjectComm((PetscObject)tao), NULL, NULL, PETSC_DECIDE, PET… in TaoSetFromOptions()
535 …PetscCall(TaoMonitorSet(tao, TaoMonitorGradientDraw, drawctx, (PetscCtxDestroyFn *)TaoMonitorDrawC… in TaoSetFromOptions()
539 if (flg) PetscCall(TaoSetGradient(tao, NULL, TaoDefaultComputeGradient, NULL)); in TaoSetFromOptions()
545 PetscCall(MatCreate(PetscObjectComm((PetscObject)tao), &H)); in TaoSetFromOptions()
547 PetscCall(TaoSetHessian(tao, H, H, TaoDefaultComputeHessian, NULL)); in TaoSetFromOptions()
555 PetscCall(MatCreate(PetscObjectComm((PetscObject)tao), &H)); in TaoSetFromOptions()
556 PetscCall(TaoSetHessian(tao, H, H, TaoDefaultComputeHessianMFFD, NULL)); in TaoSetFromOptions()
560 if (found) PetscCall(TaoSetRecycleHistory(tao, flg)); in TaoSetFromOptions()
561 …ubset_type", "subset type", "", TaoSubSetTypes, (PetscEnum)tao->subset_type, (PetscEnum *)&tao->su… in TaoSetFromOptions()
563 if (tao->ksp) { in TaoSetFromOptions()
564 …isentat-Walker linear system convergence test", "TaoKSPSetUseEW", tao->ksp_ewconv, &tao->ksp_ewcon… in TaoSetFromOptions()
565 PetscCall(TaoKSPSetUseEW(tao, tao->ksp_ewconv)); in TaoSetFromOptions()
568 PetscTryTypeMethod(tao, setfromoptions, PetscOptionsObject); in TaoSetFromOptions()
571 PetscCall(PetscObjectProcessOptionsHandlers((PetscObject)tao, PetscOptionsObject)); in TaoSetFromOptions()
574 if (tao->linesearch) PetscCall(TaoLineSearchSetFromOptions(tao->linesearch)); in TaoSetFromOptions()
624 PetscErrorCode TaoView(Tao tao, PetscViewer viewer) in TaoView() argument
630 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoView()
631 if (!viewer) PetscCall(PetscViewerASCIIGetStdout(((PetscObject)tao)->comm, &viewer)); in TaoView()
633 PetscCheckSameComm(tao, 1, viewer, 2); in TaoView()
638 PetscCall(PetscObjectPrintClassNamePrefixType((PetscObject)tao, viewer)); in TaoView()
641 PetscTryTypeMethod(tao, view, viewer); in TaoView()
642 if (tao->linesearch) PetscCall(TaoLineSearchView(tao->linesearch, viewer)); in TaoView()
643 if (tao->ksp) { in TaoView()
644 PetscCall(KSPView(tao->ksp, viewer)); in TaoView()
645 …PetscCall(PetscViewerASCIIPrintf(viewer, "total KSP iterations: %" PetscInt_FMT "\n", tao->ksp_tot… in TaoView()
648 …if (tao->XL || tao->XU) PetscCall(PetscViewerASCIIPrintf(viewer, "Active Set subset type: %s\n", T… in TaoView()
650 …PetscCall(PetscViewerASCIIPrintf(viewer, "convergence tolerances: gatol=%g,", (double)tao->gatol)); in TaoView()
651 PetscCall(PetscViewerASCIIPrintf(viewer, " grtol=%g,", (double)tao->grtol)); in TaoView()
652 PetscCall(PetscViewerASCIIPrintf(viewer, " steptol=%g,", (double)tao->steptol)); in TaoView()
653 PetscCall(PetscViewerASCIIPrintf(viewer, " gttol=%g\n", (double)tao->gttol)); in TaoView()
654 …PetscCall(PetscViewerASCIIPrintf(viewer, "Residual in Function/Gradient:=%g\n", (double)tao->resid… in TaoView()
656 if (tao->constrained) { in TaoView()
658 PetscCall(PetscViewerASCIIPrintf(viewer, " catol=%g,", (double)tao->catol)); in TaoView()
659 PetscCall(PetscViewerASCIIPrintf(viewer, " crtol=%g\n", (double)tao->crtol)); in TaoView()
660 … PetscCall(PetscViewerASCIIPrintf(viewer, "Residual in Constraints:=%g\n", (double)tao->cnorm)); in TaoView()
663 if (tao->trust < tao->steptol) { in TaoView()
664 …PetscCall(PetscViewerASCIIPrintf(viewer, "convergence tolerances: steptol=%g\n", (double)tao->step… in TaoView()
665 … PetscCall(PetscViewerASCIIPrintf(viewer, "Final trust region radius:=%g\n", (double)tao->trust)); in TaoView()
668 …if (tao->fmin > -1.e25) PetscCall(PetscViewerASCIIPrintf(viewer, "convergence tolerances: function… in TaoView()
669 PetscCall(PetscViewerASCIIPrintf(viewer, "Objective value=%g\n", (double)tao->fc)); in TaoView()
671 …cViewerASCIIPrintf(viewer, "total number of iterations=%" PetscInt_FMT ", ", tao->niter)); in TaoView()
672 …PetscCall(PetscViewerASCIIPrintf(viewer, " (max: %" PetscInt_FMT ")\n", tao->max_it)); in TaoView()
674 if (tao->nfuncs > 0) { in TaoView()
675 …ViewerASCIIPrintf(viewer, "total number of function evaluations=%" PetscInt_FMT ",", tao->nfuncs)); in TaoView()
676 …if (tao->max_funcs == PETSC_UNLIMITED) PetscCall(PetscViewerASCIIPrintf(viewer, " (… in TaoView()
677 …Call(PetscViewerASCIIPrintf(viewer, " (max: %" PetscInt_FMT ")\n", tao->max_funcs)); in TaoView()
679 if (tao->ngrads > 0) { in TaoView()
680 …ViewerASCIIPrintf(viewer, "total number of gradient evaluations=%" PetscInt_FMT ",", tao->ngrads)); in TaoView()
681 …if (tao->max_funcs == PETSC_UNLIMITED) PetscCall(PetscViewerASCIIPrintf(viewer, " (… in TaoView()
682 …Call(PetscViewerASCIIPrintf(viewer, " (max: %" PetscInt_FMT ")\n", tao->max_funcs)); in TaoView()
684 if (tao->nfuncgrads > 0) { in TaoView()
685 …intf(viewer, "total number of function/gradient evaluations=%" PetscInt_FMT ",", tao->nfuncgrads)); in TaoView()
686 …if (tao->max_funcs == PETSC_UNLIMITED) PetscCall(PetscViewerASCIIPrintf(viewer, " (max: unlimit… in TaoView()
687 … else PetscCall(PetscViewerASCIIPrintf(viewer, " (max: %" PetscInt_FMT ")\n", tao->max_funcs)); in TaoView()
689 …if (tao->nhess > 0) PetscCall(PetscViewerASCIIPrintf(viewer, "total number of Hessian evaluations=… in TaoView()
690 …if (tao->nconstraints > 0) PetscCall(PetscViewerASCIIPrintf(viewer, "total number of constraint fu… in TaoView()
691 …if (tao->njac > 0) PetscCall(PetscViewerASCIIPrintf(viewer, "total number of Jacobian evaluations=… in TaoView()
693 if (tao->reason > 0) { in TaoView()
695 switch (tao->reason) { in TaoView()
715 PetscCall(PetscViewerASCIIPrintf(viewer, " %d\n", tao->reason)); in TaoView()
718 } else if (tao->reason == TAO_CONTINUE_ITERATING) { in TaoView()
722 switch (tao->reason) { in TaoView()
742 PetscCall(PetscViewerASCIIPrintf(viewer, " %d\n", tao->reason)); in TaoView()
748 PetscCall(TaoGetType(tao, &type)); in TaoView()
785 PetscErrorCode TaoSetRecycleHistory(Tao tao, PetscBool recycle) in TaoSetRecycleHistory() argument
788 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoSetRecycleHistory()
789 PetscValidLogicalCollectiveBool(tao, recycle, 2); in TaoSetRecycleHistory()
790 tao->recycle = recycle; in TaoSetRecycleHistory()
810 PetscErrorCode TaoGetRecycleHistory(Tao tao, PetscBool *recycle) in TaoGetRecycleHistory() argument
813 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoGetRecycleHistory()
815 *recycle = tao->recycle; in TaoGetRecycleHistory()
854 PetscErrorCode TaoSetTolerances(Tao tao, PetscReal gatol, PetscReal grtol, PetscReal gttol) in TaoSetTolerances() argument
857 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoSetTolerances()
858 PetscValidLogicalCollectiveReal(tao, gatol, 2); in TaoSetTolerances()
859 PetscValidLogicalCollectiveReal(tao, grtol, 3); in TaoSetTolerances()
860 PetscValidLogicalCollectiveReal(tao, gttol, 4); in TaoSetTolerances()
863 tao->gatol = tao->default_gatol; in TaoSetTolerances()
865 …PetscCheck(gatol >= 0, PetscObjectComm((PetscObject)tao), PETSC_ERR_ARG_OUTOFRANGE, "Negative gato… in TaoSetTolerances()
866 tao->gatol = gatol; in TaoSetTolerances()
870 tao->grtol = tao->default_grtol; in TaoSetTolerances()
872 …PetscCheck(grtol >= 0, PetscObjectComm((PetscObject)tao), PETSC_ERR_ARG_OUTOFRANGE, "Negative grto… in TaoSetTolerances()
873 tao->grtol = grtol; in TaoSetTolerances()
877 tao->gttol = tao->default_gttol; in TaoSetTolerances()
879 …PetscCheck(gttol >= 0, PetscObjectComm((PetscObject)tao), PETSC_ERR_ARG_OUTOFRANGE, "Negative gtto… in TaoSetTolerances()
880 tao->gttol = gttol; in TaoSetTolerances()
911 PetscErrorCode TaoSetConstraintTolerances(Tao tao, PetscReal catol, PetscReal crtol) in TaoSetConstraintTolerances() argument
914 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoSetConstraintTolerances()
915 PetscValidLogicalCollectiveReal(tao, catol, 2); in TaoSetConstraintTolerances()
916 PetscValidLogicalCollectiveReal(tao, crtol, 3); in TaoSetConstraintTolerances()
919 tao->catol = tao->default_catol; in TaoSetConstraintTolerances()
921 …PetscCheck(catol >= 0, PetscObjectComm((PetscObject)tao), PETSC_ERR_ARG_OUTOFRANGE, "Negative cato… in TaoSetConstraintTolerances()
922 tao->catol = catol; in TaoSetConstraintTolerances()
926 tao->crtol = tao->default_crtol; in TaoSetConstraintTolerances()
928 …PetscCheck(crtol >= 0, PetscObjectComm((PetscObject)tao), PETSC_ERR_ARG_OUTOFRANGE, "Negative crto… in TaoSetConstraintTolerances()
929 tao->crtol = crtol; in TaoSetConstraintTolerances()
950 PetscErrorCode TaoGetConstraintTolerances(Tao tao, PetscReal *catol, PetscReal *crtol) in TaoGetConstraintTolerances() argument
953 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoGetConstraintTolerances()
954 if (catol) *catol = tao->catol; in TaoGetConstraintTolerances()
955 if (crtol) *crtol = tao->crtol; in TaoGetConstraintTolerances()
977 PetscErrorCode TaoSetFunctionLowerBound(Tao tao, PetscReal fmin) in TaoSetFunctionLowerBound() argument
980 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoSetFunctionLowerBound()
981 PetscValidLogicalCollectiveReal(tao, fmin, 2); in TaoSetFunctionLowerBound()
982 tao->fmin = fmin; in TaoSetFunctionLowerBound()
1003 PetscErrorCode TaoGetFunctionLowerBound(Tao tao, PetscReal *fmin) in TaoGetFunctionLowerBound() argument
1006 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoGetFunctionLowerBound()
1008 *fmin = tao->fmin; in TaoGetFunctionLowerBound()
1034 PetscErrorCode TaoSetMaximumFunctionEvaluations(Tao tao, PetscInt nfcn) in TaoSetMaximumFunctionEvaluations() argument
1037 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoSetMaximumFunctionEvaluations()
1038 PetscValidLogicalCollectiveInt(tao, nfcn, 2); in TaoSetMaximumFunctionEvaluations()
1040 tao->max_funcs = tao->default_max_funcs; in TaoSetMaximumFunctionEvaluations()
1042 tao->max_funcs = PETSC_UNLIMITED; in TaoSetMaximumFunctionEvaluations()
1044 …PetscCheck(nfcn >= 0, PetscObjectComm((PetscObject)tao), PETSC_ERR_ARG_OUTOFRANGE, "Maximum number… in TaoSetMaximumFunctionEvaluations()
1045 tao->max_funcs = nfcn; in TaoSetMaximumFunctionEvaluations()
1065 PetscErrorCode TaoGetMaximumFunctionEvaluations(Tao tao, PetscInt *nfcn) in TaoGetMaximumFunctionEvaluations() argument
1068 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoGetMaximumFunctionEvaluations()
1070 *nfcn = tao->max_funcs; in TaoGetMaximumFunctionEvaluations()
1089 PetscErrorCode TaoGetCurrentFunctionEvaluations(Tao tao, PetscInt *nfuncs) in TaoGetCurrentFunctionEvaluations() argument
1092 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoGetCurrentFunctionEvaluations()
1094 *nfuncs = PetscMax(tao->nfuncs, tao->nfuncgrads); in TaoGetCurrentFunctionEvaluations()
1120 PetscErrorCode TaoSetMaximumIterations(Tao tao, PetscInt maxits) in TaoSetMaximumIterations() argument
1123 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoSetMaximumIterations()
1124 PetscValidLogicalCollectiveInt(tao, maxits, 2); in TaoSetMaximumIterations()
1126 tao->max_it = tao->default_max_it; in TaoSetMaximumIterations()
1128 tao->max_it = PETSC_INT_MAX; in TaoSetMaximumIterations()
1130 …PetscCheck(maxits > 0, PetscObjectComm((PetscObject)tao), PETSC_ERR_ARG_OUTOFRANGE, "Maximum numbe… in TaoSetMaximumIterations()
1131 tao->max_it = maxits; in TaoSetMaximumIterations()
1151 PetscErrorCode TaoGetMaximumIterations(Tao tao, PetscInt *maxits) in TaoGetMaximumIterations() argument
1154 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoGetMaximumIterations()
1156 *maxits = tao->max_it; in TaoGetMaximumIterations()
1179 PetscErrorCode TaoSetInitialTrustRegionRadius(Tao tao, PetscReal radius) in TaoSetInitialTrustRegionRadius() argument
1182 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoSetInitialTrustRegionRadius()
1183 PetscValidLogicalCollectiveReal(tao, radius, 2); in TaoSetInitialTrustRegionRadius()
1185 tao->trust0 = tao->default_trust0; in TaoSetInitialTrustRegionRadius()
1187 …PetscCheck(radius > 0, PetscObjectComm((PetscObject)tao), PETSC_ERR_ARG_OUTOFRANGE, "Radius must b… in TaoSetInitialTrustRegionRadius()
1188 tao->trust0 = radius; in TaoSetInitialTrustRegionRadius()
1208 PetscErrorCode TaoGetInitialTrustRegionRadius(Tao tao, PetscReal *radius) in TaoGetInitialTrustRegionRadius() argument
1211 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoGetInitialTrustRegionRadius()
1213 *radius = tao->trust0; in TaoGetInitialTrustRegionRadius()
1232 PetscErrorCode TaoGetCurrentTrustRegionRadius(Tao tao, PetscReal *radius) in TaoGetCurrentTrustRegionRadius() argument
1235 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoGetCurrentTrustRegionRadius()
1237 *radius = tao->trust; in TaoGetCurrentTrustRegionRadius()
1261 PetscErrorCode TaoGetTolerances(Tao tao, PetscReal *gatol, PetscReal *grtol, PetscReal *gttol) in TaoGetTolerances() argument
1264 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoGetTolerances()
1265 if (gatol) *gatol = tao->gatol; in TaoGetTolerances()
1266 if (grtol) *grtol = tao->grtol; in TaoGetTolerances()
1267 if (gttol) *gttol = tao->gttol; in TaoGetTolerances()
1286 PetscErrorCode TaoGetKSP(Tao tao, KSP *ksp) in TaoGetKSP() argument
1289 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoGetKSP()
1291 *ksp = tao->ksp; in TaoGetKSP()
1314 PetscErrorCode TaoGetLinearSolveIterations(Tao tao, PetscInt *lits) in TaoGetLinearSolveIterations() argument
1317 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoGetLinearSolveIterations()
1319 *lits = tao->ksp_tot_its; in TaoGetLinearSolveIterations()
1338 PetscErrorCode TaoGetLineSearch(Tao tao, TaoLineSearch *ls) in TaoGetLineSearch() argument
1341 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoGetLineSearch()
1343 *ls = tao->linesearch; in TaoGetLineSearch()
1358 PetscErrorCode TaoAddLineSearchCounts(Tao tao) in TaoAddLineSearchCounts() argument
1364 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoAddLineSearchCounts()
1365 if (tao->linesearch) { in TaoAddLineSearchCounts()
1366 PetscCall(TaoLineSearchIsUsingTaoRoutines(tao->linesearch, &flg)); in TaoAddLineSearchCounts()
1368 … PetscCall(TaoLineSearchGetNumberFunctionEvaluations(tao->linesearch, &nfeval, &ngeval, &nfgeval)); in TaoAddLineSearchCounts()
1369 tao->nfuncs += nfeval; in TaoAddLineSearchCounts()
1370 tao->ngrads += ngeval; in TaoAddLineSearchCounts()
1371 tao->nfuncgrads += nfgeval; in TaoAddLineSearchCounts()
1395 PetscErrorCode TaoGetSolution(Tao tao, Vec *X) in TaoGetSolution() argument
1398 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoGetSolution()
1400 *X = tao->solution; in TaoGetSolution()
1418 PetscErrorCode TaoResetStatistics(Tao tao) in TaoResetStatistics() argument
1421 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoResetStatistics()
1422 tao->niter = 0; in TaoResetStatistics()
1423 tao->nfuncs = 0; in TaoResetStatistics()
1424 tao->nfuncgrads = 0; in TaoResetStatistics()
1425 tao->ngrads = 0; in TaoResetStatistics()
1426 tao->nhess = 0; in TaoResetStatistics()
1427 tao->njac = 0; in TaoResetStatistics()
1428 tao->nconstraints = 0; in TaoResetStatistics()
1429 tao->ksp_its = 0; in TaoResetStatistics()
1430 tao->ksp_tot_its = 0; in TaoResetStatistics()
1431 tao->reason = TAO_CONTINUE_ITERATING; in TaoResetStatistics()
1432 tao->residual = 0.0; in TaoResetStatistics()
1433 tao->cnorm = 0.0; in TaoResetStatistics()
1434 tao->step = 0.0; in TaoResetStatistics()
1435 tao->lsflag = PETSC_FALSE; in TaoResetStatistics()
1436 if (tao->hist_reset) tao->hist_len = 0; in TaoResetStatistics()
1465 PetscErrorCode TaoSetUpdate(Tao tao, PetscErrorCode (*func)(Tao tao, PetscInt it, PetscCtx ctx), Pe… in TaoSetUpdate() argument
1468 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoSetUpdate()
1469 tao->ops->update = func; in TaoSetUpdate()
1470 tao->user_update = ctx; in TaoSetUpdate()
1498 PetscErrorCode TaoSetConvergenceTest(Tao tao, PetscErrorCode (*conv)(Tao, void *), PetscCtx ctx) in TaoSetConvergenceTest() argument
1501 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoSetConvergenceTest()
1502 tao->ops->convergencetest = conv; in TaoSetConvergenceTest()
1503 tao->cnvP = ctx; in TaoSetConvergenceTest()
1538 PetscErrorCode TaoMonitorSet(Tao tao, PetscErrorCode (*func)(Tao, PetscCtx), PetscCtx ctx, PetscCtx… in TaoMonitorSet() argument
1541 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoMonitorSet()
1542 …PetscCheck(tao->numbermonitors < MAXTAOMONITORS, PetscObjectComm((PetscObject)tao), PETSC_ERR_SUP,… in TaoMonitorSet()
1543 for (PetscInt i = 0; i < tao->numbermonitors; i++) { in TaoMonitorSet()
1546 …, ctx, dest, (PetscErrorCode (*)(void))(PetscVoidFn *)tao->monitor[i], tao->monitorcontext[i], tao in TaoMonitorSet()
1549 tao->monitor[tao->numbermonitors] = func; in TaoMonitorSet()
1550 tao->monitorcontext[tao->numbermonitors] = ctx; in TaoMonitorSet()
1551 tao->monitordestroy[tao->numbermonitors] = dest; in TaoMonitorSet()
1552 ++tao->numbermonitors; in TaoMonitorSet()
1576 PetscErrorCode TaoMonitorCancel(Tao tao) in TaoMonitorCancel() argument
1581 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoMonitorCancel()
1582 for (i = 0; i < tao->numbermonitors; i++) { in TaoMonitorCancel()
1583 if (tao->monitordestroy[i]) PetscCall((*tao->monitordestroy[i])(&tao->monitorcontext[i])); in TaoMonitorCancel()
1585 tao->numbermonitors = 0; in TaoMonitorCancel()
1609 PetscErrorCode TaoMonitorDefault(Tao tao, PetscViewerAndFormat *vf) in TaoMonitorDefault() argument
1616 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoMonitorDefault()
1617 if (vf->view_interval > 0 && tao->niter % vf->view_interval) PetscFunctionReturn(PETSC_SUCCESS); in TaoMonitorDefault()
1624 PetscCall(PetscViewerASCIISetTab(viewer, ((PetscObject)tao)->tablevel)); in TaoMonitorDefault()
1625 if (tao->niter == 0 && ((PetscObject)tao)->prefix && !tao->header_printed) { in TaoMonitorDefault()
1626 …cViewerASCIIPrintf(viewer, " Iteration information for %s solve.\n", ((PetscObject)tao)->prefix)); in TaoMonitorDefault()
1627 tao->header_printed = PETSC_TRUE; in TaoMonitorDefault()
1629 PetscCall(PetscViewerASCIIPrintf(viewer, "%3" PetscInt_FMT " TAO,", tao->niter)); in TaoMonitorDefault()
1630 PetscCall(PetscViewerASCIIPrintf(viewer, " Function value: %g,", (double)tao->fc)); in TaoMonitorDefault()
1631 if (tao->residual >= PETSC_INFINITY) { in TaoMonitorDefault()
1634 PetscCall(PetscViewerASCIIPrintf(viewer, " Residual: %g \n", (double)tao->residual)); in TaoMonitorDefault()
1663 PetscErrorCode TaoMonitorGlobalization(Tao tao, PetscViewerAndFormat *vf) in TaoMonitorGlobalization() argument
1670 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoMonitorGlobalization()
1671 if (vf->view_interval > 0 && tao->niter % vf->view_interval) PetscFunctionReturn(PETSC_SUCCESS); in TaoMonitorGlobalization()
1677 PetscCall(PetscViewerASCIISetTab(viewer, ((PetscObject)tao)->tablevel)); in TaoMonitorGlobalization()
1678 if (tao->niter == 0 && ((PetscObject)tao)->prefix && !tao->header_printed) { in TaoMonitorGlobalization()
1679 …cViewerASCIIPrintf(viewer, " Iteration information for %s solve.\n", ((PetscObject)tao)->prefix)); in TaoMonitorGlobalization()
1680 tao->header_printed = PETSC_TRUE; in TaoMonitorGlobalization()
1682 PetscCall(PetscViewerASCIIPrintf(viewer, "%3" PetscInt_FMT " TAO,", tao->niter)); in TaoMonitorGlobalization()
1683 PetscCall(PetscViewerASCIIPrintf(viewer, " Function value: %g,", (double)tao->fc)); in TaoMonitorGlobalization()
1684 if (tao->residual >= PETSC_INFINITY) { in TaoMonitorGlobalization()
1687 PetscCall(PetscViewerASCIIPrintf(viewer, " Residual: %g,", (double)tao->residual)); in TaoMonitorGlobalization()
1689 …PetscViewerASCIIPrintf(viewer, " Step: %g, Trust: %g\n", (double)tao->step, (double)tao->trust)); in TaoMonitorGlobalization()
1719 PetscErrorCode TaoMonitorDefaultShort(Tao tao, PetscViewerAndFormat *vf) in TaoMonitorDefaultShort() argument
1727 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoMonitorDefaultShort()
1728 if (vf->view_interval > 0 && tao->niter % vf->view_interval) PetscFunctionReturn(PETSC_SUCCESS); in TaoMonitorDefaultShort()
1730 gnorm = tao->residual; in TaoMonitorDefaultShort()
1735 PetscCall(PetscViewerASCIISetTab(viewer, ((PetscObject)tao)->tablevel)); in TaoMonitorDefaultShort()
1736 PetscCall(PetscViewerASCIIPrintf(viewer, "iter = %3" PetscInt_FMT ",", tao->niter)); in TaoMonitorDefaultShort()
1737 PetscCall(PetscViewerASCIIPrintf(viewer, " Function value %g,", (double)tao->fc)); in TaoMonitorDefaultShort()
1770 PetscErrorCode TaoMonitorConstraintNorm(Tao tao, PetscViewerAndFormat *vf) in TaoMonitorConstraintNorm() argument
1777 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoMonitorConstraintNorm()
1778 if (vf->view_interval > 0 && tao->niter % vf->view_interval) PetscFunctionReturn(PETSC_SUCCESS); in TaoMonitorConstraintNorm()
1784 PetscCall(PetscViewerASCIISetTab(viewer, ((PetscObject)tao)->tablevel)); in TaoMonitorConstraintNorm()
1785 PetscCall(PetscViewerASCIIPrintf(viewer, "iter = %" PetscInt_FMT ",", tao->niter)); in TaoMonitorConstraintNorm()
1786 PetscCall(PetscViewerASCIIPrintf(viewer, " Function value: %g,", (double)tao->fc)); in TaoMonitorConstraintNorm()
1787 PetscCall(PetscViewerASCIIPrintf(viewer, " Residual: %g ", (double)tao->residual)); in TaoMonitorConstraintNorm()
1788 PetscCall(PetscViewerASCIIPrintf(viewer, " Constraint: %g \n", (double)tao->cnorm)); in TaoMonitorConstraintNorm()
1811 PetscErrorCode TaoMonitorSolution(Tao tao, PetscViewerAndFormat *vf) in TaoMonitorSolution() argument
1814 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoMonitorSolution()
1815 if (vf->view_interval > 0 && tao->niter % vf->view_interval) PetscFunctionReturn(PETSC_SUCCESS); in TaoMonitorSolution()
1817 PetscCall(VecView(tao->gradient, vf->viewer)); in TaoMonitorSolution()
1838 PetscErrorCode TaoMonitorGradient(Tao tao, PetscViewerAndFormat *vf) in TaoMonitorGradient() argument
1841 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoMonitorGradient()
1842 if (vf->view_interval > 0 && tao->niter % vf->view_interval) PetscFunctionReturn(PETSC_SUCCESS); in TaoMonitorGradient()
1844 PetscCall(VecView(tao->gradient, vf->viewer)); in TaoMonitorGradient()
1865 PetscErrorCode TaoMonitorStep(Tao tao, PetscViewerAndFormat *vf) in TaoMonitorStep() argument
1868 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoMonitorStep()
1869 if (vf->view_interval > 0 && tao->niter % vf->view_interval) PetscFunctionReturn(PETSC_SUCCESS); in TaoMonitorStep()
1871 PetscCall(VecView(tao->stepdirection, vf->viewer)); in TaoMonitorStep()
1897 PetscErrorCode TaoMonitorSolutionDraw(Tao tao, PetscCtx ctx) in TaoMonitorSolutionDraw() argument
1902 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoMonitorSolutionDraw()
1903 …if (!(((ictx->howoften > 0) && (!(tao->niter % ictx->howoften))) || ((ictx->howoften == -1) && tao in TaoMonitorSolutionDraw()
1904 PetscCall(VecView(tao->solution, ictx->viewer)); in TaoMonitorSolutionDraw()
1924 PetscErrorCode TaoMonitorGradientDraw(Tao tao, PetscCtx ctx) in TaoMonitorGradientDraw() argument
1929 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoMonitorGradientDraw()
1930 …if (!(((ictx->howoften > 0) && (!(tao->niter % ictx->howoften))) || ((ictx->howoften == -1) && tao in TaoMonitorGradientDraw()
1931 PetscCall(VecView(tao->gradient, ictx->viewer)); in TaoMonitorGradientDraw()
1951 PetscErrorCode TaoMonitorStepDraw(Tao tao, PetscCtx ctx) in TaoMonitorStepDraw() argument
1956 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoMonitorStepDraw()
1958 PetscCall(VecView(tao->stepdirection, viewer)); in TaoMonitorStepDraw()
1978 PetscErrorCode TaoMonitorResidual(Tao tao, PetscViewerAndFormat *vf) in TaoMonitorResidual() argument
1981 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoMonitorResidual()
1982 if (vf->view_interval > 0 && tao->niter % vf->view_interval) PetscFunctionReturn(PETSC_SUCCESS); in TaoMonitorResidual()
1984 PetscCall(VecView(tao->ls_res, vf->viewer)); in TaoMonitorResidual()
2009 PetscErrorCode TaoDefaultConvergenceTest(Tao tao, void *dummy) in TaoDefaultConvergenceTest() argument
2011 PetscInt niter = tao->niter, nfuncs = PetscMax(tao->nfuncs, tao->nfuncgrads); in TaoDefaultConvergenceTest()
2012 PetscInt max_funcs = tao->max_funcs; in TaoDefaultConvergenceTest()
2013 PetscReal gnorm = tao->residual, gnorm0 = tao->gnorm0; in TaoDefaultConvergenceTest()
2014 PetscReal f = tao->fc, steptol = tao->steptol, trradius = tao->step; in TaoDefaultConvergenceTest()
2015 PetscReal gatol = tao->gatol, grtol = tao->grtol, gttol = tao->gttol; in TaoDefaultConvergenceTest()
2016 PetscReal catol = tao->catol, crtol = tao->crtol; in TaoDefaultConvergenceTest()
2017 PetscReal fmin = tao->fmin, cnorm = tao->cnorm; in TaoDefaultConvergenceTest()
2018 TaoConvergedReason reason = tao->reason; in TaoDefaultConvergenceTest()
2021 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoDefaultConvergenceTest()
2025 PetscCall(PetscInfo(tao, "Failed to converged, function value is infinity or NaN\n")); in TaoDefaultConvergenceTest()
2028 …PetscCall(PetscInfo(tao, "Converged due to function value %g < minimum function value %g\n", (doub… in TaoDefaultConvergenceTest()
2031 …PetscCall(PetscInfo(tao, "Converged due to residual norm ||g(X)||=%g < %g\n", (double)gnorm, (doub… in TaoDefaultConvergenceTest()
2034 …PetscCall(PetscInfo(tao, "Converged due to residual ||g(X)||/|f(X)| =%g < %g\n", (double)(gnorm / … in TaoDefaultConvergenceTest()
2037 …PetscCall(PetscInfo(tao, "Converged due to relative residual norm ||g(X)||/||g(X0)|| = %g < %g\n",… in TaoDefaultConvergenceTest()
2040 …PetscCall(PetscInfo(tao, "Exceeded maximum number of function evaluations: %" PetscInt_FMT " > %" … in TaoDefaultConvergenceTest()
2042 } else if (tao->lsflag != 0) { in TaoDefaultConvergenceTest()
2043 PetscCall(PetscInfo(tao, "Tao Line Search failure.\n")); in TaoDefaultConvergenceTest()
2046 …PetscCall(PetscInfo(tao, "Trust region/step size too small: %g < %g\n", (double)trradius, (double)… in TaoDefaultConvergenceTest()
2048 } else if (niter >= tao->max_it) { in TaoDefaultConvergenceTest()
2049 …PetscCall(PetscInfo(tao, "Exceeded maximum number of iterations: %" PetscInt_FMT " > %" PetscInt_F… in TaoDefaultConvergenceTest()
2054 tao->reason = reason; in TaoDefaultConvergenceTest()
2089 PetscErrorCode TaoSetOptionsPrefix(Tao tao, const char p[]) in TaoSetOptionsPrefix() argument
2092 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoSetOptionsPrefix()
2093 PetscCall(PetscObjectSetOptionsPrefix((PetscObject)tao, p)); in TaoSetOptionsPrefix()
2094 if (tao->linesearch) PetscCall(TaoLineSearchSetOptionsPrefix(tao->linesearch, p)); in TaoSetOptionsPrefix()
2095 if (tao->ksp) PetscCall(KSPSetOptionsPrefix(tao->ksp, p)); in TaoSetOptionsPrefix()
2116 PetscErrorCode TaoAppendOptionsPrefix(Tao tao, const char p[]) in TaoAppendOptionsPrefix() argument
2119 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoAppendOptionsPrefix()
2120 PetscCall(PetscObjectAppendOptionsPrefix((PetscObject)tao, p)); in TaoAppendOptionsPrefix()
2121 if (tao->linesearch) PetscCall(PetscObjectAppendOptionsPrefix((PetscObject)tao->linesearch, p)); in TaoAppendOptionsPrefix()
2122 if (tao->ksp) PetscCall(KSPAppendOptionsPrefix(tao->ksp, p)); in TaoAppendOptionsPrefix()
2142 PetscErrorCode TaoGetOptionsPrefix(Tao tao, const char *p[]) in TaoGetOptionsPrefix() argument
2145 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoGetOptionsPrefix()
2146 PetscCall(PetscObjectGetOptionsPrefix((PetscObject)tao, p)); in TaoGetOptionsPrefix()
2167 PetscErrorCode TaoSetType(Tao tao, TaoType type) in TaoSetType() argument
2173 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoSetType()
2175 PetscCall(PetscObjectTypeCompare((PetscObject)tao, type, &issame)); in TaoSetType()
2179 …PetscCheck(create_xxx, PetscObjectComm((PetscObject)tao), PETSC_ERR_ARG_UNKNOWN_TYPE, "Unable to f… in TaoSetType()
2182 PetscTryTypeMethod(tao, destroy); in TaoSetType()
2183 PetscCall(KSPDestroy(&tao->ksp)); in TaoSetType()
2184 PetscCall(TaoLineSearchDestroy(&tao->linesearch)); in TaoSetType()
2187 tao->ops->setup = NULL; in TaoSetType()
2188 tao->ops->computedual = NULL; in TaoSetType()
2189 tao->ops->solve = NULL; in TaoSetType()
2190 tao->ops->view = NULL; in TaoSetType()
2191 tao->ops->setfromoptions = NULL; in TaoSetType()
2192 tao->ops->destroy = NULL; in TaoSetType()
2194 tao->setupcalled = PETSC_FALSE; in TaoSetType()
2196 PetscCall((*create_xxx)(tao)); in TaoSetType()
2197 PetscCall(PetscObjectChangeTypeName((PetscObject)tao, type)); in TaoSetType()
2276 PetscErrorCode TaoGetIterationNumber(Tao tao, PetscInt *iter) in TaoGetIterationNumber() argument
2279 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoGetIterationNumber()
2281 *iter = tao->niter; in TaoGetIterationNumber()
2305 PetscErrorCode TaoGetResidualNorm(Tao tao, PetscReal *value) in TaoGetResidualNorm() argument
2308 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoGetResidualNorm()
2310 *value = tao->residual; in TaoGetResidualNorm()
2327 PetscErrorCode TaoSetIterationNumber(Tao tao, PetscInt iter) in TaoSetIterationNumber() argument
2330 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoSetIterationNumber()
2331 PetscValidLogicalCollectiveInt(tao, iter, 2); in TaoSetIterationNumber()
2332 PetscCall(PetscObjectSAWsTakeAccess((PetscObject)tao)); in TaoSetIterationNumber()
2333 tao->niter = iter; in TaoSetIterationNumber()
2334 PetscCall(PetscObjectSAWsGrantAccess((PetscObject)tao)); in TaoSetIterationNumber()
2359 PetscErrorCode TaoGetTotalIterationNumber(Tao tao, PetscInt *iter) in TaoGetTotalIterationNumber() argument
2362 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoGetTotalIterationNumber()
2364 *iter = tao->ntotalits; in TaoGetTotalIterationNumber()
2381 PetscErrorCode TaoSetTotalIterationNumber(Tao tao, PetscInt iter) in TaoSetTotalIterationNumber() argument
2384 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoSetTotalIterationNumber()
2385 PetscValidLogicalCollectiveInt(tao, iter, 2); in TaoSetTotalIterationNumber()
2386 PetscCall(PetscObjectSAWsTakeAccess((PetscObject)tao)); in TaoSetTotalIterationNumber()
2387 tao->ntotalits = iter; in TaoSetTotalIterationNumber()
2388 PetscCall(PetscObjectSAWsGrantAccess((PetscObject)tao)); in TaoSetTotalIterationNumber()
2405 PetscErrorCode TaoSetConvergedReason(Tao tao, TaoConvergedReason reason) in TaoSetConvergedReason() argument
2408 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoSetConvergedReason()
2409 PetscValidLogicalCollectiveEnum(tao, reason, 2); in TaoSetConvergedReason()
2410 tao->reason = reason; in TaoSetConvergedReason()
2429 PetscErrorCode TaoGetConvergedReason(Tao tao, TaoConvergedReason *reason) in TaoGetConvergedReason() argument
2432 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoGetConvergedReason()
2434 *reason = tao->reason; in TaoGetConvergedReason()
2464 PetscErrorCode TaoGetSolutionStatus(Tao tao, PetscInt *its, PetscReal *f, PetscReal *gnorm, PetscRe… in TaoGetSolutionStatus() argument
2467 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoGetSolutionStatus()
2468 if (its) *its = tao->niter; in TaoGetSolutionStatus()
2469 if (f) *f = tao->fc; in TaoGetSolutionStatus()
2470 if (gnorm) *gnorm = tao->residual; in TaoGetSolutionStatus()
2471 if (cnorm) *cnorm = tao->cnorm; in TaoGetSolutionStatus()
2472 if (reason) *reason = tao->reason; in TaoGetSolutionStatus()
2473 if (xdiff) *xdiff = tao->step; in TaoGetSolutionStatus()
2492 PetscErrorCode TaoGetType(Tao tao, TaoType *type) in TaoGetType() argument
2495 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoGetType()
2497 *type = ((PetscObject)tao)->type_name; in TaoGetType()
2522 PetscErrorCode TaoMonitor(Tao tao, PetscInt its, PetscReal f, PetscReal res, PetscReal cnorm, Petsc… in TaoMonitor() argument
2527 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoMonitor()
2528 tao->fc = f; in TaoMonitor()
2529 tao->residual = res; in TaoMonitor()
2530 tao->cnorm = cnorm; in TaoMonitor()
2531 tao->step = steplength; in TaoMonitor()
2533 tao->cnorm0 = cnorm; in TaoMonitor()
2534 tao->gnorm0 = res; in TaoMonitor()
2536 PetscCall(VecLockReadPush(tao->solution)); in TaoMonitor()
2537 …for (i = 0; i < tao->numbermonitors; i++) PetscCall((*tao->monitor[i])(tao, tao->monitorcontext[i]… in TaoMonitor()
2538 PetscCall(VecLockReadPop(tao->solution)); in TaoMonitor()
2574 PetscErrorCode TaoSetConvergenceHistory(Tao tao, PetscReal obj[], PetscReal resid[], PetscReal cnor… in TaoSetConvergenceHistory() argument
2577 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoSetConvergenceHistory()
2586 tao->hist_malloc = PETSC_TRUE; in TaoSetConvergenceHistory()
2589 tao->hist_obj = obj; in TaoSetConvergenceHistory()
2590 tao->hist_resid = resid; in TaoSetConvergenceHistory()
2591 tao->hist_cnorm = cnorm; in TaoSetConvergenceHistory()
2592 tao->hist_lits = lits; in TaoSetConvergenceHistory()
2593 tao->hist_max = na; in TaoSetConvergenceHistory()
2594 tao->hist_reset = reset; in TaoSetConvergenceHistory()
2595 tao->hist_len = 0; in TaoSetConvergenceHistory()
2633 PetscErrorCode TaoGetConvergenceHistory(Tao tao, PetscReal **obj, PetscReal **resid, PetscReal **cn… in TaoGetConvergenceHistory() argument
2636 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoGetConvergenceHistory()
2637 if (obj) *obj = tao->hist_obj; in TaoGetConvergenceHistory()
2638 if (cnorm) *cnorm = tao->hist_cnorm; in TaoGetConvergenceHistory()
2639 if (resid) *resid = tao->hist_resid; in TaoGetConvergenceHistory()
2640 if (lits) *lits = tao->hist_lits; in TaoGetConvergenceHistory()
2641 if (nhist) *nhist = tao->hist_len; in TaoGetConvergenceHistory()
2664 PetscErrorCode TaoSetApplicationContext(Tao tao, PetscCtx ctx) in TaoSetApplicationContext() argument
2667 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoSetApplicationContext()
2668 tao->ctx = ctx; in TaoSetApplicationContext()
2693 PetscErrorCode TaoGetApplicationContext(Tao tao, PetscCtxRt ctx) in TaoGetApplicationContext() argument
2696 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoGetApplicationContext()
2698 *(void **)ctx = tao->ctx; in TaoGetApplicationContext()
2715 PetscErrorCode TaoSetGradientNorm(Tao tao, Mat M) in TaoSetGradientNorm() argument
2718 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoSetGradientNorm()
2721 PetscCall(MatDestroy(&tao->gradient_norm)); in TaoSetGradientNorm()
2722 PetscCall(VecDestroy(&tao->gradient_norm_tmp)); in TaoSetGradientNorm()
2723 tao->gradient_norm = M; in TaoSetGradientNorm()
2724 PetscCall(MatCreateVecs(M, NULL, &tao->gradient_norm_tmp)); in TaoSetGradientNorm()
2743 PetscErrorCode TaoGetGradientNorm(Tao tao, Mat *M) in TaoGetGradientNorm() argument
2746 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoGetGradientNorm()
2748 *M = tao->gradient_norm; in TaoGetGradientNorm()
2778 PetscErrorCode TaoGradientNorm(Tao tao, Vec gradient, NormType type, PetscReal *gnorm) in TaoGradientNorm() argument
2781 PetscValidHeaderSpecific(tao, TAO_CLASSID, 1); in TaoGradientNorm()
2783 PetscValidLogicalCollectiveEnum(tao, type, 3); in TaoGradientNorm()
2785 if (tao->gradient_norm) { in TaoGradientNorm()
2789 PetscCall(MatMult(tao->gradient_norm, gradient, tao->gradient_norm_tmp)); in TaoGradientNorm()
2790 PetscCall(VecDot(gradient, tao->gradient_norm_tmp, &gnorms)); in TaoGradientNorm()