Lines Matching refs:tron

8   TAO_TRON *tron = (TAO_TRON *)tao->data;  in TaoDestroy_TRON()  local
11 PetscCall(VecDestroy(&tron->X_New)); in TaoDestroy_TRON()
12 PetscCall(VecDestroy(&tron->G_New)); in TaoDestroy_TRON()
13 PetscCall(VecDestroy(&tron->Work)); in TaoDestroy_TRON()
14 PetscCall(VecDestroy(&tron->DXFree)); in TaoDestroy_TRON()
15 PetscCall(VecDestroy(&tron->R)); in TaoDestroy_TRON()
16 PetscCall(VecDestroy(&tron->diag)); in TaoDestroy_TRON()
17 PetscCall(VecScatterDestroy(&tron->scatter)); in TaoDestroy_TRON()
18 PetscCall(ISDestroy(&tron->Free_Local)); in TaoDestroy_TRON()
19 PetscCall(MatDestroy(&tron->H_sub)); in TaoDestroy_TRON()
20 PetscCall(MatDestroy(&tron->Hpre_sub)); in TaoDestroy_TRON()
28 TAO_TRON *tron = (TAO_TRON *)tao->data; in TaoSetFromOptions_TRON() local
33 …mber of gradient projections per TRON iterate", "TaoSetMaxGPIts", tron->maxgpits, &tron->maxgpits,… in TaoSetFromOptions_TRON()
41 TAO_TRON *tron = (TAO_TRON *)tao->data; in TaoView_TRON() local
47 … PetscCall(PetscViewerASCIIPrintf(viewer, "Total PG its: %" PetscInt_FMT ",", tron->total_gp_its)); in TaoView_TRON()
48 PetscCall(PetscViewerASCIIPrintf(viewer, "PG tolerance: %g \n", (double)tron->pg_ftol)); in TaoView_TRON()
55 TAO_TRON *tron = (TAO_TRON *)tao->data; in TaoSetup_TRON() local
59 PetscCall(VecDuplicate(tao->solution, &tron->diag)); in TaoSetup_TRON()
60 PetscCall(VecDuplicate(tao->solution, &tron->X_New)); in TaoSetup_TRON()
61 PetscCall(VecDuplicate(tao->solution, &tron->G_New)); in TaoSetup_TRON()
62 PetscCall(VecDuplicate(tao->solution, &tron->Work)); in TaoSetup_TRON()
70 TAO_TRON *tron = (TAO_TRON *)tao->data; in TaoSolve_TRON() local
76 tron->pgstepsize = 1.0; in TaoSolve_TRON()
86 PetscCall(TaoComputeObjectiveAndGradient(tao, tao->solution, &tron->f, tao->gradient)); in TaoSolve_TRON()
87 PetscCall(VecNorm(tao->gradient, NORM_2, &tron->gnorm)); in TaoSolve_TRON()
88 …PetscCheck(!PetscIsInfOrNanReal(tron->f) && !PetscIsInfOrNanReal(tron->gnorm), PetscObjectComm((Pe… in TaoSolve_TRON()
92 PetscCall(VecNorm(tao->gradient, NORM_2, &tron->gnorm)); in TaoSolve_TRON()
96 if (tao->trust <= 0) tao->trust = PetscMax(tron->gnorm * tron->gnorm, 1.0); in TaoSolve_TRON()
99 tron->pgstepsize = 1.0; in TaoSolve_TRON()
100 tron->stepsize = tao->trust; in TaoSolve_TRON()
103 PetscCall(TaoLogConvergenceHistory(tao, tron->f, tron->gnorm, 0.0, tao->ksp_its)); in TaoSolve_TRON()
104 PetscCall(TaoMonitor(tao, tao->niter, tron->f, tron->gnorm, 0.0, tron->stepsize)); in TaoSolve_TRON()
110 PetscCall(TaoComputeObjective(tao, tao->solution, &tron->f)); in TaoSolve_TRON()
114 PetscCall(TronGradientProjections(tao, tron)); in TaoSolve_TRON()
117 PetscCall(VecNorm(tao->gradient, NORM_2, &tron->gnorm)); in TaoSolve_TRON()
120 f = tron->f; in TaoSolve_TRON()
122 tron->n_free_last = tron->n_free; in TaoSolve_TRON()
126 PetscCall(ISDestroy(&tron->Free_Local)); in TaoSolve_TRON()
127 …PetscCall(VecWhichInactive(tao->XL, tao->solution, tao->gradient, tao->XU, PETSC_TRUE, &tron->Free… in TaoSolve_TRON()
128 PetscCall(ISGetSize(tron->Free_Local, &tron->n_free)); in TaoSolve_TRON()
131 if (tron->n_free == 0) { in TaoSolve_TRON()
132 PetscCall(VecNorm(tao->gradient, NORM_2, &tron->gnorm)); in TaoSolve_TRON()
133 PetscCall(TaoLogConvergenceHistory(tao, tron->f, tron->gnorm, 0.0, tao->ksp_its)); in TaoSolve_TRON()
134 PetscCall(TaoMonitor(tao, tao->niter, tron->f, tron->gnorm, 0.0, delta)); in TaoSolve_TRON()
140 PetscCall(TaoVecGetSubVec(tao->gradient, tron->Free_Local, tao->subset_type, 0.0, &tron->R)); in TaoSolve_TRON()
141 … PetscCall(TaoVecGetSubVec(tao->gradient, tron->Free_Local, tao->subset_type, 0.0, &tron->DXFree)); in TaoSolve_TRON()
142 PetscCall(VecSet(tron->DXFree, 0.0)); in TaoSolve_TRON()
143 PetscCall(VecScale(tron->R, -1.0)); in TaoSolve_TRON()
144 …PetscCall(TaoMatGetSubMat(tao->hessian, tron->Free_Local, tron->diag, tao->subset_type, &tron->H_s… in TaoSolve_TRON()
146 PetscCall(MatDestroy(&tron->Hpre_sub)); in TaoSolve_TRON()
147 PetscCall(PetscObjectReference((PetscObject)tron->H_sub)); in TaoSolve_TRON()
148 tron->Hpre_sub = tron->H_sub; in TaoSolve_TRON()
150 …PetscCall(TaoMatGetSubMat(tao->hessian_pre, tron->Free_Local, tron->diag, tao->subset_type, &tron-… in TaoSolve_TRON()
153 PetscCall(KSPSetOperators(tao->ksp, tron->H_sub, tron->Hpre_sub)); in TaoSolve_TRON()
158 PetscCall(KSPSolve(tao->ksp, tron->R, tron->DXFree)); in TaoSolve_TRON()
165 PetscCall(VecISAXPY(tao->stepdirection, tron->Free_Local, 1.0, tron->DXFree)); in TaoSolve_TRON()
168 PetscCall(VecCopy(tao->solution, tron->X_New)); in TaoSolve_TRON()
169 PetscCall(VecCopy(tao->gradient, tron->G_New)); in TaoSolve_TRON()
175 …PetscCall(TaoLineSearchApply(tao->linesearch, tron->X_New, &f_new, tron->G_New, tao->stepdirection… in TaoSolve_TRON()
178 PetscCall(MatMult(tao->hessian, tao->stepdirection, tron->Work)); in TaoSolve_TRON()
179 PetscCall(VecAYPX(tron->Work, 0.5, tao->gradient)); in TaoSolve_TRON()
180 PetscCall(VecDot(tao->stepdirection, tron->Work, &prered)); in TaoSolve_TRON()
191 if (rhok > tron->eta1) { /* Accept the point */ in TaoSolve_TRON()
193 PetscCall(VecCopy(tron->X_New, tao->stepdirection)); in TaoSolve_TRON()
200 if (rhok < tron->eta2) { in TaoSolve_TRON()
201 delta = PetscMin(xdiff, delta) * tron->sigma1; in TaoSolve_TRON()
202 } else if (rhok > tron->eta4) { in TaoSolve_TRON()
203 delta = PetscMin(xdiff, delta) * tron->sigma3; in TaoSolve_TRON()
204 } else if (rhok > tron->eta3) { in TaoSolve_TRON()
205 delta = PetscMin(xdiff, delta) * tron->sigma2; in TaoSolve_TRON()
207 … PetscCall(VecBoundGradientProjection(tron->G_New, tron->X_New, tao->XL, tao->XU, tao->gradient)); in TaoSolve_TRON()
208 PetscCall(ISDestroy(&tron->Free_Local)); in TaoSolve_TRON()
209 …PetscCall(VecWhichInactive(tao->XL, tron->X_New, tao->gradient, tao->XU, PETSC_TRUE, &tron->Free_L… in TaoSolve_TRON()
211 PetscCall(VecNorm(tao->gradient, NORM_2, &tron->gnorm)); in TaoSolve_TRON()
212 PetscCall(VecCopy(tron->X_New, tao->solution)); in TaoSolve_TRON()
213 PetscCall(VecCopy(tron->G_New, tao->gradient)); in TaoSolve_TRON()
222 tron->f = f; in TaoSolve_TRON()
223 tron->actred = actred; in TaoSolve_TRON()
226 PetscCall(TaoLogConvergenceHistory(tao, tron->f, tron->gnorm, 0.0, tao->ksp_its)); in TaoSolve_TRON()
227 PetscCall(TaoMonitor(tao, tao->niter, tron->f, tron->gnorm, 0.0, stepsize)); in TaoSolve_TRON()
233 static PetscErrorCode TronGradientProjections(Tao tao, TAO_TRON *tron) in TronGradientProjections() argument
247 for (i = 0; i < tron->maxgpits; ++i) { in TronGradientProjections()
248 if (-actred <= (tron->pg_ftol) * actred_max) break; in TronGradientProjections()
250 ++tron->gp_iterates; in TronGradientProjections()
251 ++tron->total_gp_its; in TronGradientProjections()
252 f_new = tron->f; in TronGradientProjections()
256 PetscCall(TaoLineSearchSetInitialStepLength(tao->linesearch, tron->pgstepsize)); in TronGradientProjections()
257 …o->linesearch, tao->solution, &f_new, tao->gradient, tao->stepdirection, &tron->pgstepsize, &ls_re… in TronGradientProjections()
261 PetscCall(VecNorm(tao->gradient, NORM_2, &tron->gnorm)); in TronGradientProjections()
264 actred = f_new - tron->f; in TronGradientProjections()
265 actred_max = PetscMax(actred_max, -(f_new - tron->f)); in TronGradientProjections()
266 tron->f = f_new; in TronGradientProjections()
273 TAO_TRON *tron = (TAO_TRON *)tao->data; in TaoComputeDual_TRON() local
279 …PetscCheck(tron->Work && tao->gradient, PETSC_COMM_SELF, PETSC_ERR_ORDER, "Dual variables don't ex… in TaoComputeDual_TRON()
281 PetscCall(VecBoundGradientProjection(tao->gradient, tao->solution, tao->XL, tao->XU, tron->Work)); in TaoComputeDual_TRON()
282 PetscCall(VecCopy(tron->Work, DXL)); in TaoComputeDual_TRON()
288 PetscCall(VecAXPY(DXU, -1.0, tron->Work)); in TaoComputeDual_TRON()
289 PetscCall(VecSet(tron->Work, 0.0)); in TaoComputeDual_TRON()
290 PetscCall(VecPointwiseMin(DXU, tron->Work, DXU)); in TaoComputeDual_TRON()
306 TAO_TRON *tron; in TaoCreate_TRON() local
317 PetscCall(PetscNew(&tron)); in TaoCreate_TRON()
318 tao->data = (void *)tron; in TaoCreate_TRON()
327 tron->n = 0; in TaoCreate_TRON()
328 tron->maxgpits = 3; in TaoCreate_TRON()
329 tron->pg_ftol = 0.001; in TaoCreate_TRON()
331 tron->eta1 = 1.0e-4; in TaoCreate_TRON()
332 tron->eta2 = 0.25; in TaoCreate_TRON()
333 tron->eta3 = 0.50; in TaoCreate_TRON()
334 tron->eta4 = 0.90; in TaoCreate_TRON()
336 tron->sigma1 = 0.5; in TaoCreate_TRON()
337 tron->sigma2 = 2.0; in TaoCreate_TRON()
338 tron->sigma3 = 4.0; in TaoCreate_TRON()
340 tron->gp_iterates = 0; /* Cumulative number */ in TaoCreate_TRON()
341 tron->total_gp_its = 0; in TaoCreate_TRON()
342 tron->n_free = 0; in TaoCreate_TRON()
344 tron->DXFree = NULL; in TaoCreate_TRON()
345 tron->R = NULL; in TaoCreate_TRON()
346 tron->X_New = NULL; in TaoCreate_TRON()
347 tron->G_New = NULL; in TaoCreate_TRON()
348 tron->Work = NULL; in TaoCreate_TRON()
349 tron->Free_Local = NULL; in TaoCreate_TRON()
350 tron->H_sub = NULL; in TaoCreate_TRON()
351 tron->Hpre_sub = NULL; in TaoCreate_TRON()