Lines Matching refs:tao
41 static PetscErrorCode TaoSetUp_ASFLS(Tao tao) in TaoSetUp_ASFLS() argument
43 TAO_SSLS *asls = (TAO_SSLS *)tao->data; in TaoSetUp_ASFLS()
46 PetscCall(VecDuplicate(tao->solution, &tao->gradient)); in TaoSetUp_ASFLS()
47 PetscCall(VecDuplicate(tao->solution, &tao->stepdirection)); in TaoSetUp_ASFLS()
48 PetscCall(VecDuplicate(tao->solution, &asls->ff)); in TaoSetUp_ASFLS()
49 PetscCall(VecDuplicate(tao->solution, &asls->dpsi)); in TaoSetUp_ASFLS()
50 PetscCall(VecDuplicate(tao->solution, &asls->da)); in TaoSetUp_ASFLS()
51 PetscCall(VecDuplicate(tao->solution, &asls->db)); in TaoSetUp_ASFLS()
52 PetscCall(VecDuplicate(tao->solution, &asls->t1)); in TaoSetUp_ASFLS()
53 PetscCall(VecDuplicate(tao->solution, &asls->t2)); in TaoSetUp_ASFLS()
54 PetscCall(VecDuplicate(tao->solution, &asls->w)); in TaoSetUp_ASFLS()
68 Tao tao = (Tao)ptr; in Tao_ASLS_FunctionGradient() local
69 TAO_SSLS *asls = (TAO_SSLS *)tao->data; in Tao_ASLS_FunctionGradient()
72 PetscCall(TaoComputeConstraints(tao, X, tao->constraints)); in Tao_ASLS_FunctionGradient()
73 PetscCall(VecFischer(X, tao->constraints, tao->XL, tao->XU, asls->ff)); in Tao_ASLS_FunctionGradient()
76 PetscCall(TaoComputeJacobian(tao, tao->solution, tao->jacobian, tao->jacobian_pre)); in Tao_ASLS_FunctionGradient()
78 …PetscCall(MatDFischer(tao->jacobian, tao->solution, tao->constraints, tao->XL, tao->XU, asls->t1, … in Tao_ASLS_FunctionGradient()
80 PetscCall(MatMultTranspose(tao->jacobian, asls->t1, G)); in Tao_ASLS_FunctionGradient()
86 static PetscErrorCode TaoDestroy_ASFLS(Tao tao) in TaoDestroy_ASFLS() argument
88 TAO_SSLS *ssls = (TAO_SSLS *)tao->data; in TaoDestroy_ASFLS()
106 PetscCall(KSPDestroy(&tao->ksp)); in TaoDestroy_ASFLS()
107 PetscCall(PetscFree(tao->data)); in TaoDestroy_ASFLS()
111 static PetscErrorCode TaoSolve_ASFLS(Tao tao) in TaoSolve_ASFLS() argument
113 TAO_SSLS *asls = (TAO_SSLS *)tao->data; in TaoSolve_ASFLS()
122 PetscCall(TaoComputeVariableBounds(tao)); in TaoSolve_ASFLS()
123 …etscCall(TaoLineSearchSetObjectiveAndGradientRoutine(tao->linesearch, Tao_ASLS_FunctionGradient, t… in TaoSolve_ASFLS()
124 PetscCall(TaoLineSearchSetObjectiveRoutine(tao->linesearch, Tao_SSLS_Function, tao)); in TaoSolve_ASFLS()
125 PetscCall(TaoLineSearchSetVariableBounds(tao->linesearch, tao->XL, tao->XU)); in TaoSolve_ASFLS()
127 PetscCall(VecMedian(tao->XL, tao->solution, tao->XU, tao->solution)); in TaoSolve_ASFLS()
131 …PetscCall(TaoLineSearchComputeObjectiveAndGradient(tao->linesearch, tao->solution, &psi, asls->dps… in TaoSolve_ASFLS()
134 tao->reason = TAO_CONTINUE_ITERATING; in TaoSolve_ASFLS()
137 …PetscCall(PetscInfo(tao, "iter %" PetscInt_FMT ", merit: %g, ||dpsi||: %g\n", tao->niter, (double)… in TaoSolve_ASFLS()
138 PetscCall(TaoLogConvergenceHistory(tao, asls->merit, ndpsi, 0.0, tao->ksp_its)); in TaoSolve_ASFLS()
139 PetscCall(TaoMonitor(tao, tao->niter, asls->merit, ndpsi, 0.0, t)); in TaoSolve_ASFLS()
140 PetscUseTypeMethod(tao, convergencetest, tao->cnvP); in TaoSolve_ASFLS()
141 if (TAO_CONTINUE_ITERATING != tao->reason) break; in TaoSolve_ASFLS()
144 PetscTryTypeMethod(tao, update, tao->niter, tao->user_update); in TaoSolve_ASFLS()
145 tao->niter++; in TaoSolve_ASFLS()
169 PetscCall(MatNorm(tao->jacobian, NORM_1, &asls->identifier)); in TaoSolve_ASFLS()
181 PetscCall(PetscInfo(tao, "Number of fixed variables: %" PetscInt_FMT "\n", nf)); in TaoSolve_ASFLS()
185 PetscCall(TaoVecGetSubVec(asls->ff, asls->fixed, tao->subset_type, 0.0, &asls->r1)); in TaoSolve_ASFLS()
186 PetscCall(TaoVecGetSubVec(asls->da, asls->fixed, tao->subset_type, 1.0, &asls->r2)); in TaoSolve_ASFLS()
188 PetscCall(VecSet(tao->stepdirection, 0.0)); in TaoSolve_ASFLS()
189 PetscCall(VecISAXPY(tao->stepdirection, asls->fixed, 1.0, asls->r1)); in TaoSolve_ASFLS()
196 PetscCall(TaoVecGetSubVec(asls->da, asls->free, tao->subset_type, 0.0, &asls->r1)); in TaoSolve_ASFLS()
197 PetscCall(TaoVecGetSubVec(asls->ff, asls->free, tao->subset_type, 0.0, &asls->r2)); in TaoSolve_ASFLS()
198 PetscCall(TaoVecGetSubVec(asls->db, asls->free, tao->subset_type, 1.0, &asls->r3)); in TaoSolve_ASFLS()
210 PetscCall(MatMult(tao->jacobian, tao->stepdirection, asls->t1)); in TaoSolve_ASFLS()
211 PetscCall(TaoVecGetSubVec(asls->t1, asls->free, tao->subset_type, 0.0, &asls->r3)); in TaoSolve_ASFLS()
215 PetscCall(TaoMatGetSubMat(tao->jacobian, asls->free, asls->w, tao->subset_type, &asls->J_sub)); in TaoSolve_ASFLS()
216 if (tao->jacobian != tao->jacobian_pre) { in TaoSolve_ASFLS()
217 …PetscCall(TaoMatGetSubMat(tao->jacobian_pre, asls->free, asls->w, tao->subset_type, &asls->Jpre_su… in TaoSolve_ASFLS()
224 … PetscCall(TaoVecGetSubVec(tao->stepdirection, asls->free, tao->subset_type, 0.0, &asls->dxfree)); in TaoSolve_ASFLS()
229 PetscCall(KSPReset(tao->ksp)); in TaoSolve_ASFLS()
230 PetscCall(KSPSetOperators(tao->ksp, asls->J_sub, asls->Jpre_sub)); in TaoSolve_ASFLS()
231 PetscCall(KSPSolve(tao->ksp, asls->r2, asls->dxfree)); in TaoSolve_ASFLS()
232 PetscCall(KSPGetIterationNumber(tao->ksp, &tao->ksp_its)); in TaoSolve_ASFLS()
233 tao->ksp_tot_its += tao->ksp_its; in TaoSolve_ASFLS()
236 PetscCall(VecISAXPY(tao->stepdirection, asls->free, 1.0, asls->dxfree)); in TaoSolve_ASFLS()
240 PetscCall(VecCopy(tao->stepdirection, asls->w)); in TaoSolve_ASFLS()
242 PetscCall(VecBoundGradientProjection(asls->w, tao->solution, tao->XL, tao->XU, asls->w)); in TaoSolve_ASFLS()
247 PetscCall(PetscInfo(tao, "Gradient direction: %5.4e.\n", (double)innerd)); in TaoSolve_ASFLS()
248 …PetscCall(PetscInfo(tao, "Iteration %" PetscInt_FMT ": newton direction not descent\n", tao->niter… in TaoSolve_ASFLS()
249 PetscCall(VecCopy(asls->dpsi, tao->stepdirection)); in TaoSolve_ASFLS()
250 PetscCall(VecDot(asls->dpsi, tao->stepdirection, &innerd)); in TaoSolve_ASFLS()
253 PetscCall(VecScale(tao->stepdirection, -1.0)); in TaoSolve_ASFLS()
258 PetscCall(TaoLineSearchSetInitialStepLength(tao->linesearch, 1.0)); in TaoSolve_ASFLS()
259 …PetscCall(TaoLineSearchApply(tao->linesearch, tao->solution, &psi, asls->dpsi, tao->stepdirection,… in TaoSolve_ASFLS()
280 PETSC_EXTERN PetscErrorCode TaoCreate_ASFLS(Tao tao) in TaoCreate_ASFLS() argument
287 tao->data = (void *)asls; in TaoCreate_ASFLS()
288 tao->ops->solve = TaoSolve_ASFLS; in TaoCreate_ASFLS()
289 tao->ops->setup = TaoSetUp_ASFLS; in TaoCreate_ASFLS()
290 tao->ops->view = TaoView_SSLS; in TaoCreate_ASFLS()
291 tao->ops->setfromoptions = TaoSetFromOptions_SSLS; in TaoCreate_ASFLS()
292 tao->ops->destroy = TaoDestroy_ASFLS; in TaoCreate_ASFLS()
293 tao->subset_type = TAO_SUBSET_SUBVEC; in TaoCreate_ASFLS()
309 PetscCall(TaoParametersInitialize(tao)); in TaoCreate_ASFLS()
311 PetscCall(TaoLineSearchCreate(((PetscObject)tao)->comm, &tao->linesearch)); in TaoCreate_ASFLS()
312 PetscCall(PetscObjectIncrementTabLevel((PetscObject)tao->linesearch, (PetscObject)tao, 1)); in TaoCreate_ASFLS()
313 PetscCall(TaoLineSearchSetType(tao->linesearch, armijo_type)); in TaoCreate_ASFLS()
314 PetscCall(TaoLineSearchSetOptionsPrefix(tao->linesearch, tao->hdr.prefix)); in TaoCreate_ASFLS()
315 PetscCall(TaoLineSearchSetFromOptions(tao->linesearch)); in TaoCreate_ASFLS()
317 PetscCall(KSPCreate(((PetscObject)tao)->comm, &tao->ksp)); in TaoCreate_ASFLS()
318 PetscCall(PetscObjectIncrementTabLevel((PetscObject)tao->ksp, (PetscObject)tao, 1)); in TaoCreate_ASFLS()
319 PetscCall(KSPSetOptionsPrefix(tao->ksp, tao->hdr.prefix)); in TaoCreate_ASFLS()
320 PetscCall(KSPSetFromOptions(tao->ksp)); in TaoCreate_ASFLS()
323 PetscObjectParameterSetDefault(tao, max_it, 2000); in TaoCreate_ASFLS()
324 PetscObjectParameterSetDefault(tao, max_funcs, 4000); in TaoCreate_ASFLS()
325 PetscObjectParameterSetDefault(tao, gttol, 0); in TaoCreate_ASFLS()
326 PetscObjectParameterSetDefault(tao, grtol, 0); in TaoCreate_ASFLS()
327 PetscObjectParameterSetDefault(tao, gatol, PetscDefined(USE_REAL_SINGLE) ? 1.0e-6 : 1.0e-16); in TaoCreate_ASFLS()
328 PetscObjectParameterSetDefault(tao, fmin, PetscDefined(USE_REAL_SINGLE) ? 1.0e-4 : 1.0e-8); in TaoCreate_ASFLS()