Lines Matching refs:tao
3 static PetscErrorCode TaoSetUp_SSFLS(Tao tao) in TaoSetUp_SSFLS() argument
5 TAO_SSLS *ssls = (TAO_SSLS *)tao->data; in TaoSetUp_SSFLS()
8 PetscCall(VecDuplicate(tao->solution, &tao->gradient)); in TaoSetUp_SSFLS()
9 PetscCall(VecDuplicate(tao->solution, &tao->stepdirection)); in TaoSetUp_SSFLS()
10 PetscCall(VecDuplicate(tao->solution, &ssls->w)); in TaoSetUp_SSFLS()
11 PetscCall(VecDuplicate(tao->solution, &ssls->ff)); in TaoSetUp_SSFLS()
12 PetscCall(VecDuplicate(tao->solution, &ssls->dpsi)); in TaoSetUp_SSFLS()
13 PetscCall(VecDuplicate(tao->solution, &ssls->da)); in TaoSetUp_SSFLS()
14 PetscCall(VecDuplicate(tao->solution, &ssls->db)); in TaoSetUp_SSFLS()
15 PetscCall(VecDuplicate(tao->solution, &ssls->t1)); in TaoSetUp_SSFLS()
16 PetscCall(VecDuplicate(tao->solution, &ssls->t2)); in TaoSetUp_SSFLS()
17 PetscCall(TaoLineSearchSetVariableBounds(tao->linesearch, tao->XL, tao->XU)); in TaoSetUp_SSFLS()
21 static PetscErrorCode TaoSolve_SSFLS(Tao tao) in TaoSolve_SSFLS() argument
23 TAO_SSLS *ssls = (TAO_SSLS *)tao->data; in TaoSolve_SSFLS()
34 PetscCall(TaoComputeVariableBounds(tao)); in TaoSolve_SSFLS()
36 PetscCall(VecMedian(tao->XL, tao->solution, tao->XU, tao->solution)); in TaoSolve_SSFLS()
37 …etscCall(TaoLineSearchSetObjectiveAndGradientRoutine(tao->linesearch, Tao_SSLS_FunctionGradient, t… in TaoSolve_SSFLS()
38 PetscCall(TaoLineSearchSetObjectiveRoutine(tao->linesearch, Tao_SSLS_Function, tao)); in TaoSolve_SSFLS()
42 …PetscCall(TaoLineSearchComputeObjectiveAndGradient(tao->linesearch, tao->solution, &psi, ssls->dps… in TaoSolve_SSFLS()
45 tao->reason = TAO_CONTINUE_ITERATING; in TaoSolve_SSFLS()
47 …PetscCall(PetscInfo(tao, "iter: %" PetscInt_FMT ", merit: %g, ndpsi: %g\n", tao->niter, (double)ss… in TaoSolve_SSFLS()
49 PetscCall(TaoLogConvergenceHistory(tao, ssls->merit, ndpsi, 0.0, tao->ksp_its)); in TaoSolve_SSFLS()
50 PetscCall(TaoMonitor(tao, tao->niter, ssls->merit, ndpsi, 0.0, t)); in TaoSolve_SSFLS()
51 PetscUseTypeMethod(tao, convergencetest, tao->cnvP); in TaoSolve_SSFLS()
52 if (tao->reason != TAO_CONTINUE_ITERATING) break; in TaoSolve_SSFLS()
55 PetscTryTypeMethod(tao, update, tao->niter, tao->user_update); in TaoSolve_SSFLS()
56 tao->niter++; in TaoSolve_SSFLS()
60 PetscCall(KSPSetOperators(tao->ksp, tao->jacobian, tao->jacobian_pre)); in TaoSolve_SSFLS()
61 PetscCall(KSPSolve(tao->ksp, ssls->ff, tao->stepdirection)); in TaoSolve_SSFLS()
62 PetscCall(KSPGetIterationNumber(tao->ksp, &tao->ksp_its)); in TaoSolve_SSFLS()
63 tao->ksp_tot_its += tao->ksp_its; in TaoSolve_SSFLS()
65 PetscCall(VecCopy(tao->stepdirection, ssls->w)); in TaoSolve_SSFLS()
67 PetscCall(VecBoundGradientProjection(ssls->w, tao->solution, tao->XL, tao->XU, ssls->w)); in TaoSolve_SSFLS()
74 PetscCall(PetscInfo(tao, "newton direction not descent\n")); in TaoSolve_SSFLS()
75 PetscCall(VecCopy(ssls->dpsi, tao->stepdirection)); in TaoSolve_SSFLS()
79 PetscCall(VecScale(tao->stepdirection, -1.0)); in TaoSolve_SSFLS()
82 PetscCall(TaoLineSearchSetInitialStepLength(tao->linesearch, 1.0)); in TaoSolve_SSFLS()
83 …PetscCall(TaoLineSearchApply(tao->linesearch, tao->solution, &psi, ssls->dpsi, tao->stepdirection,… in TaoSolve_SSFLS()
89 static PetscErrorCode TaoDestroy_SSFLS(Tao tao) in TaoDestroy_SSFLS() argument
91 TAO_SSLS *ssls = (TAO_SSLS *)tao->data; in TaoDestroy_SSFLS()
101 PetscCall(KSPDestroy(&tao->ksp)); in TaoDestroy_SSFLS()
102 PetscCall(PetscFree(tao->data)); in TaoDestroy_SSFLS()
117 PETSC_EXTERN PetscErrorCode TaoCreate_SSFLS(Tao tao) in TaoCreate_SSFLS() argument
124 tao->data = (void *)ssls; in TaoCreate_SSFLS()
125 tao->ops->solve = TaoSolve_SSFLS; in TaoCreate_SSFLS()
126 tao->ops->setup = TaoSetUp_SSFLS; in TaoCreate_SSFLS()
127 tao->ops->view = TaoView_SSLS; in TaoCreate_SSFLS()
128 tao->ops->setfromoptions = TaoSetFromOptions_SSLS; in TaoCreate_SSFLS()
129 tao->ops->destroy = TaoDestroy_SSFLS; in TaoCreate_SSFLS()
134 PetscCall(TaoLineSearchCreate(((PetscObject)tao)->comm, &tao->linesearch)); in TaoCreate_SSFLS()
135 PetscCall(PetscObjectIncrementTabLevel((PetscObject)tao->linesearch, (PetscObject)tao, 1)); in TaoCreate_SSFLS()
136 PetscCall(TaoLineSearchSetType(tao->linesearch, armijo_type)); in TaoCreate_SSFLS()
137 PetscCall(TaoLineSearchSetOptionsPrefix(tao->linesearch, tao->hdr.prefix)); in TaoCreate_SSFLS()
138 PetscCall(TaoLineSearchSetFromOptions(tao->linesearch)); in TaoCreate_SSFLS()
140 PetscCall(KSPCreate(((PetscObject)tao)->comm, &tao->ksp)); in TaoCreate_SSFLS()
141 PetscCall(PetscObjectIncrementTabLevel((PetscObject)tao->ksp, (PetscObject)tao, 1)); in TaoCreate_SSFLS()
142 PetscCall(KSPSetOptionsPrefix(tao->ksp, tao->hdr.prefix)); in TaoCreate_SSFLS()
145 PetscCall(TaoParametersInitialize(tao)); in TaoCreate_SSFLS()
146 PetscObjectParameterSetDefault(tao, max_it, 2000); in TaoCreate_SSFLS()
147 PetscObjectParameterSetDefault(tao, max_funcs, 4000); in TaoCreate_SSFLS()
148 PetscObjectParameterSetDefault(tao, gttol, 0); in TaoCreate_SSFLS()
149 PetscObjectParameterSetDefault(tao, grtol, 0); in TaoCreate_SSFLS()
150 PetscObjectParameterSetDefault(tao, gatol, PetscDefined(USE_REAL_SINGLE) ? 1.0e-6 : 1.0e-16); in TaoCreate_SSFLS()
151 PetscObjectParameterSetDefault(tao, fmin, PetscDefined(USE_REAL_SINGLE) ? 1.0e-4 : 1.0e-8); in TaoCreate_SSFLS()