Lines Matching refs:gpcg

9   TAO_GPCG *gpcg = (TAO_GPCG *)tao->data;  in TaoDestroy_GPCG()  local
13 PetscCall(VecDestroy(&gpcg->B)); in TaoDestroy_GPCG()
14 PetscCall(VecDestroy(&gpcg->Work)); in TaoDestroy_GPCG()
15 PetscCall(VecDestroy(&gpcg->X_New)); in TaoDestroy_GPCG()
16 PetscCall(VecDestroy(&gpcg->G_New)); in TaoDestroy_GPCG()
17 PetscCall(VecDestroy(&gpcg->DXFree)); in TaoDestroy_GPCG()
18 PetscCall(VecDestroy(&gpcg->R)); in TaoDestroy_GPCG()
19 PetscCall(VecDestroy(&gpcg->PG)); in TaoDestroy_GPCG()
20 PetscCall(MatDestroy(&gpcg->Hsub)); in TaoDestroy_GPCG()
21 PetscCall(MatDestroy(&gpcg->Hsub_pre)); in TaoDestroy_GPCG()
22 PetscCall(ISDestroy(&gpcg->Free_Local)); in TaoDestroy_GPCG()
30 TAO_GPCG *gpcg = (TAO_GPCG *)tao->data; in TaoSetFromOptions_GPCG() local
35 … "maximum number of gradient projections per GPCG iterate", NULL, gpcg->maxgpits, &gpcg->maxgpits,… in TaoSetFromOptions_GPCG()
44 TAO_GPCG *gpcg = (TAO_GPCG *)tao->data; in TaoView_GPCG() local
50 … PetscCall(PetscViewerASCIIPrintf(viewer, "Total PG its: %" PetscInt_FMT ",", gpcg->total_gp_its)); in TaoView_GPCG()
51 PetscCall(PetscViewerASCIIPrintf(viewer, "PG tolerance: %g \n", (double)gpcg->pg_ftol)); in TaoView_GPCG()
64 TAO_GPCG *gpcg = (TAO_GPCG *)tao->data; in GPCGObjectiveAndGradient() local
70 PetscCall(VecDot(gpcg->B, X, &f2)); in GPCGObjectiveAndGradient()
71 PetscCall(VecAXPY(G, 1.0, gpcg->B)); in GPCGObjectiveAndGradient()
72 *f = f1 / 2.0 + f2 + gpcg->c; in GPCGObjectiveAndGradient()
78 TAO_GPCG *gpcg = (TAO_GPCG *)tao->data; in TaoSetup_GPCG() local
85 PetscCall(VecDuplicate(tao->solution, &gpcg->B)); in TaoSetup_GPCG()
86 PetscCall(VecDuplicate(tao->solution, &gpcg->Work)); in TaoSetup_GPCG()
87 PetscCall(VecDuplicate(tao->solution, &gpcg->X_New)); in TaoSetup_GPCG()
88 PetscCall(VecDuplicate(tao->solution, &gpcg->G_New)); in TaoSetup_GPCG()
89 PetscCall(VecDuplicate(tao->solution, &gpcg->DXFree)); in TaoSetup_GPCG()
90 PetscCall(VecDuplicate(tao->solution, &gpcg->R)); in TaoSetup_GPCG()
91 PetscCall(VecDuplicate(tao->solution, &gpcg->PG)); in TaoSetup_GPCG()
109 TAO_GPCG *gpcg = (TAO_GPCG *)tao->data; in TaoSolve_GPCG() local
123 PetscCall(VecCopy(tao->gradient, gpcg->B)); in TaoSolve_GPCG()
124 PetscCall(MatMult(tao->hessian, tao->solution, gpcg->Work)); in TaoSolve_GPCG()
125 PetscCall(VecDot(gpcg->Work, tao->solution, &xtHx)); in TaoSolve_GPCG()
126 PetscCall(VecAXPY(gpcg->B, -1.0, gpcg->Work)); in TaoSolve_GPCG()
127 PetscCall(VecDot(gpcg->B, tao->solution, &xtb)); in TaoSolve_GPCG()
128 gpcg->c = f - xtHx / 2.0 - xtb; in TaoSolve_GPCG()
129 if (gpcg->Free_Local) PetscCall(ISDestroy(&gpcg->Free_Local)); in TaoSolve_GPCG()
130 …PetscCall(VecWhichInactive(tao->XL, tao->solution, tao->gradient, tao->XU, PETSC_TRUE, &gpcg->Free… in TaoSolve_GPCG()
133 PetscCall(VecCopy(tao->gradient, gpcg->G_New)); in TaoSolve_GPCG()
134 PetscCall(VecBoundGradientProjection(tao->gradient, tao->solution, tao->XL, tao->XU, gpcg->PG)); in TaoSolve_GPCG()
135 PetscCall(VecNorm(gpcg->PG, NORM_2, &gpcg->gnorm)); in TaoSolve_GPCG()
137 gpcg->f = f; in TaoSolve_GPCG()
141 PetscCall(TaoLogConvergenceHistory(tao, f, gpcg->gnorm, 0.0, tao->ksp_its)); in TaoSolve_GPCG()
142 PetscCall(TaoMonitor(tao, tao->niter, f, gpcg->gnorm, 0.0, tao->step)); in TaoSolve_GPCG()
151 PetscCall(ISGetSize(gpcg->Free_Local, &gpcg->n_free)); in TaoSolve_GPCG()
153 f = gpcg->f; in TaoSolve_GPCG()
154 gnorm = gpcg->gnorm; in TaoSolve_GPCG()
158 if (gpcg->n_free > 0) { in TaoSolve_GPCG()
160 PetscCall(VecDestroy(&gpcg->R)); in TaoSolve_GPCG()
161 PetscCall(VecDestroy(&gpcg->DXFree)); in TaoSolve_GPCG()
162 PetscCall(TaoVecGetSubVec(tao->gradient, gpcg->Free_Local, tao->subset_type, 0.0, &gpcg->R)); in TaoSolve_GPCG()
163 PetscCall(VecScale(gpcg->R, -1.0)); in TaoSolve_GPCG()
164 …PetscCall(TaoVecGetSubVec(tao->stepdirection, gpcg->Free_Local, tao->subset_type, 0.0, &gpcg->DXFr… in TaoSolve_GPCG()
165 PetscCall(VecSet(gpcg->DXFree, 0.0)); in TaoSolve_GPCG()
167 …PetscCall(TaoMatGetSubMat(tao->hessian, gpcg->Free_Local, gpcg->Work, tao->subset_type, &gpcg->Hsu… in TaoSolve_GPCG()
170 PetscCall(MatDestroy(&gpcg->Hsub_pre)); in TaoSolve_GPCG()
171 PetscCall(PetscObjectReference((PetscObject)gpcg->Hsub)); in TaoSolve_GPCG()
172 gpcg->Hsub_pre = gpcg->Hsub; in TaoSolve_GPCG()
174 …PetscCall(TaoMatGetSubMat(tao->hessian, gpcg->Free_Local, gpcg->Work, tao->subset_type, &gpcg->Hsu… in TaoSolve_GPCG()
178 PetscCall(KSPSetOperators(tao->ksp, gpcg->Hsub, gpcg->Hsub_pre)); in TaoSolve_GPCG()
180 PetscCall(KSPSolve(tao->ksp, gpcg->R, gpcg->DXFree)); in TaoSolve_GPCG()
185 PetscCall(VecISAXPY(tao->stepdirection, gpcg->Free_Local, 1.0, gpcg->DXFree)); in TaoSolve_GPCG()
195 … PetscCall(VecBoundGradientProjection(tao->gradient, tao->solution, tao->XL, tao->XU, gpcg->PG)); in TaoSolve_GPCG()
196 PetscCall(VecNorm(gpcg->PG, NORM_2, &gnorm)); in TaoSolve_GPCG()
198 PetscCall(ISDestroy(&gpcg->Free_Local)); in TaoSolve_GPCG()
199 …PetscCall(VecWhichInactive(tao->XL, tao->solution, tao->gradient, tao->XU, PETSC_TRUE, &gpcg->Free… in TaoSolve_GPCG()
202 gpcg->step = 1.0; in TaoSolve_GPCG()
207 gpcg->f = f; in TaoSolve_GPCG()
208 gpcg->gnorm = gnorm; in TaoSolve_GPCG()
209 gpcg->actred = actred; in TaoSolve_GPCG()
210 PetscCall(TaoLogConvergenceHistory(tao, f, gpcg->gnorm, 0.0, tao->ksp_its)); in TaoSolve_GPCG()
211 PetscCall(TaoMonitor(tao, tao->niter, f, gpcg->gnorm, 0.0, tao->step)); in TaoSolve_GPCG()
220 TAO_GPCG *gpcg = (TAO_GPCG *)tao->data; in GPCGGradProjections() local
222 PetscReal actred = -1.0, actred_max = 0.0, gAg, gtg = gpcg->gnorm, alpha; in GPCGGradProjections()
224 …Vec DX = tao->stepdirection, XL = tao->XL, XU = tao->XU, Work = gpcg->Wor… in GPCGGradProjections()
232 for (i = 0; i < gpcg->maxgpits; i++) { in GPCGGradProjections()
233 if (-actred <= (gpcg->pg_ftol) * actred_max) break; in GPCGGradProjections()
241 gpcg->gp_iterates++; in GPCGGradProjections()
242 gpcg->total_gp_its++; in GPCGGradProjections()
251 f_new = gpcg->f; in GPCGGradProjections()
255 actred = f_new - gpcg->f; in GPCGGradProjections()
256 actred_max = PetscMax(actred_max, -(f_new - gpcg->f)); in GPCGGradProjections()
257 gpcg->f = f_new; in GPCGGradProjections()
258 PetscCall(ISDestroy(&gpcg->Free_Local)); in GPCGGradProjections()
259 PetscCall(VecWhichInactive(XL, X, tao->gradient, XU, PETSC_TRUE, &gpcg->Free_Local)); in GPCGGradProjections()
262 gpcg->gnorm = gtg; in GPCGGradProjections()
268 TAO_GPCG *gpcg = (TAO_GPCG *)tao->data; in TaoComputeDual_GPCG() local
271 PetscCall(VecBoundGradientProjection(tao->gradient, tao->solution, tao->XL, tao->XU, gpcg->Work)); in TaoComputeDual_GPCG()
272 PetscCall(VecCopy(gpcg->Work, DXL)); in TaoComputeDual_GPCG()
278 PetscCall(VecAXPY(DXU, -1.0, gpcg->Work)); in TaoComputeDual_GPCG()
279 PetscCall(VecSet(gpcg->Work, 0.0)); in TaoComputeDual_GPCG()
280 PetscCall(VecPointwiseMin(DXU, gpcg->Work, DXU)); in TaoComputeDual_GPCG()
296 TAO_GPCG *gpcg; in TaoCreate_GPCG() local
306 PetscCall(PetscNew(&gpcg)); in TaoCreate_GPCG()
307 tao->data = (void *)gpcg; in TaoCreate_GPCG()
317 gpcg->n = 0; in TaoCreate_GPCG()
318 gpcg->maxgpits = 8; in TaoCreate_GPCG()
319 gpcg->pg_ftol = 0.1; in TaoCreate_GPCG()
321 gpcg->gp_iterates = 0; /* Cumulative number */ in TaoCreate_GPCG()
322 gpcg->total_gp_its = 0; in TaoCreate_GPCG()
325 gpcg->n_bind = 0; in TaoCreate_GPCG()
326 gpcg->n_free = 0; in TaoCreate_GPCG()
327 gpcg->n_upper = 0; in TaoCreate_GPCG()
328 gpcg->n_lower = 0; in TaoCreate_GPCG()
329 gpcg->subset_type = TAO_SUBSET_MASK; in TaoCreate_GPCG()
330 gpcg->Hsub = NULL; in TaoCreate_GPCG()
331 gpcg->Hsub_pre = NULL; in TaoCreate_GPCG()