Lines Matching refs:tao

7 static PetscErrorCode TaoDestroy_LCL(Tao tao)  in TaoDestroy_LCL()  argument
9 TAO_LCL *lclP = (TAO_LCL *)tao->data; in TaoDestroy_LCL()
12 if (tao->setupcalled) { in TaoDestroy_LCL()
51 PetscCall(ISDestroy(&tao->state_is)); in TaoDestroy_LCL()
52 PetscCall(ISDestroy(&tao->design_is)); in TaoDestroy_LCL()
58 PetscCall(KSPDestroy(&tao->ksp)); in TaoDestroy_LCL()
59 PetscCall(PetscFree(tao->data)); in TaoDestroy_LCL()
63 static PetscErrorCode TaoSetFromOptions_LCL(Tao tao, PetscOptionItems PetscOptionsObject) in TaoSetFromOptions_LCL() argument
65 TAO_LCL *lclP = (TAO_LCL *)tao->data; in TaoSetFromOptions_LCL()
83 PetscCall(TaoLineSearchSetFromOptions(tao->linesearch)); in TaoSetFromOptions_LCL()
88 static PetscErrorCode TaoView_LCL(Tao tao, PetscViewer viewer) in TaoView_LCL() argument
93 static PetscErrorCode TaoSetup_LCL(Tao tao) in TaoSetup_LCL() argument
95 TAO_LCL *lclP = (TAO_LCL *)tao->data; in TaoSetup_LCL()
100 …PetscCheck(tao->state_is, PetscObjectComm((PetscObject)tao), PETSC_ERR_ARG_WRONGSTATE, "LCL Solver… in TaoSetup_LCL()
101 PetscCall(VecDuplicate(tao->solution, &tao->gradient)); in TaoSetup_LCL()
102 PetscCall(VecDuplicate(tao->solution, &tao->stepdirection)); in TaoSetup_LCL()
103 PetscCall(VecDuplicate(tao->solution, &lclP->W)); in TaoSetup_LCL()
104 PetscCall(VecDuplicate(tao->solution, &lclP->X0)); in TaoSetup_LCL()
105 PetscCall(VecDuplicate(tao->solution, &lclP->G0)); in TaoSetup_LCL()
106 PetscCall(VecDuplicate(tao->solution, &lclP->GL)); in TaoSetup_LCL()
107 PetscCall(VecDuplicate(tao->solution, &lclP->GAugL)); in TaoSetup_LCL()
109 PetscCall(VecDuplicate(tao->constraints, &lclP->lambda)); in TaoSetup_LCL()
110 PetscCall(VecDuplicate(tao->constraints, &lclP->WL)); in TaoSetup_LCL()
111 PetscCall(VecDuplicate(tao->constraints, &lclP->lambda0)); in TaoSetup_LCL()
112 PetscCall(VecDuplicate(tao->constraints, &lclP->con1)); in TaoSetup_LCL()
116 PetscCall(VecGetSize(tao->solution, &lclP->n)); in TaoSetup_LCL()
117 PetscCall(VecGetSize(tao->constraints, &lclP->m)); in TaoSetup_LCL()
119 PetscCall(VecCreate(((PetscObject)tao)->comm, &lclP->U)); in TaoSetup_LCL()
120 PetscCall(VecCreate(((PetscObject)tao)->comm, &lclP->V)); in TaoSetup_LCL()
121 PetscCall(ISGetLocalSize(tao->state_is, &nlocalstate)); in TaoSetup_LCL()
122 PetscCall(ISGetLocalSize(tao->design_is, &nlocaldesign)); in TaoSetup_LCL()
125 PetscCall(VecSetType(lclP->U, ((PetscObject)tao->solution)->type_name)); in TaoSetup_LCL()
126 PetscCall(VecSetType(lclP->V, ((PetscObject)tao->solution)->type_name)); in TaoSetup_LCL()
165 …PetscCall(VecScatterCreate(tao->solution, tao->state_is, lclP->U, is_state, &lclP->state_scatter)); in TaoSetup_LCL()
166 …PetscCall(VecScatterCreate(tao->solution, tao->design_is, lclP->V, is_design, &lclP->design_scatte… in TaoSetup_LCL()
172 static PetscErrorCode TaoSolve_LCL(Tao tao) in TaoSolve_LCL() argument
174 TAO_LCL *lclP = (TAO_LCL *)tao->data; in TaoSolve_LCL()
191 PetscCall(LCLScatter(lclP, tao->solution, lclP->U, lclP->V)); in TaoSolve_LCL()
194 PetscCall(TaoComputeObjectiveAndGradient(tao, tao->solution, &f, tao->gradient)); in TaoSolve_LCL()
195 …PetscCall(TaoComputeJacobianState(tao, tao->solution, tao->jacobian_state, tao->jacobian_state_pre… in TaoSolve_LCL()
196 PetscCall(TaoComputeJacobianDesign(tao, tao->solution, tao->jacobian_design)); in TaoSolve_LCL()
197 PetscCall(TaoComputeConstraints(tao, tao->solution, tao->constraints)); in TaoSolve_LCL()
200 PetscCall(LCLScatter(lclP, tao->gradient, lclP->GU, lclP->GV)); in TaoSolve_LCL()
205 PetscCall(MatIsSymmetricKnown(tao->jacobian_state, &set, &flag)); in TaoSolve_LCL()
206 if (tao->jacobian_state_pre) { in TaoSolve_LCL()
207 PetscCall(MatIsSymmetricKnown(tao->jacobian_state_pre, &pset, &pflag)); in TaoSolve_LCL()
215 if (tao->jacobian_state_inv) { in TaoSolve_LCL()
217 PetscCall(MatMult(tao->jacobian_state_inv, lclP->GU, lclP->lambda)); in TaoSolve_LCL()
219 PetscCall(MatMultTranspose(tao->jacobian_state_inv, lclP->GU, lclP->lambda)); in TaoSolve_LCL()
222 PetscCall(KSPSetOperators(tao->ksp, tao->jacobian_state, tao->jacobian_state_pre)); in TaoSolve_LCL()
224 PetscCall(KSPSolve(tao->ksp, lclP->GU, lclP->lambda)); in TaoSolve_LCL()
226 PetscCall(KSPSolveTranspose(tao->ksp, lclP->GU, lclP->lambda)); in TaoSolve_LCL()
228 PetscCall(KSPGetIterationNumber(tao->ksp, &its)); in TaoSolve_LCL()
229 tao->ksp_its += its; in TaoSolve_LCL()
230 tao->ksp_tot_its += its; in TaoSolve_LCL()
233 …Call(LCLComputeAugmentedLagrangianAndGradient(tao->linesearch, tao->solution, &lclP->aug, lclP->GA… in TaoSolve_LCL()
239 PetscCall(VecNorm(tao->constraints, NORM_2, &cnorm)); in TaoSolve_LCL()
243 tao->reason = TAO_CONTINUE_ITERATING; in TaoSolve_LCL()
244 PetscCall(TaoLogConvergenceHistory(tao, f, mnorm, cnorm, tao->ksp_its)); in TaoSolve_LCL()
245 PetscCall(TaoMonitor(tao, tao->niter, f, mnorm, cnorm, step)); in TaoSolve_LCL()
246 PetscUseTypeMethod(tao, convergencetest, tao->cnvP); in TaoSolve_LCL()
248 while (tao->reason == TAO_CONTINUE_ITERATING) { in TaoSolve_LCL()
250 PetscTryTypeMethod(tao, update, tao->niter, tao->user_update); in TaoSolve_LCL()
251 tao->ksp_its = 0; in TaoSolve_LCL()
278 if (tao->jacobian_state_inv) { in TaoSolve_LCL()
279 PetscCall(MatMult(tao->jacobian_state_inv, tao->constraints, lclP->r)); in TaoSolve_LCL()
281 PetscCall(KSPSetOperators(tao->ksp, tao->jacobian_state, tao->jacobian_state_pre)); in TaoSolve_LCL()
282 PetscCall(KSPSolve(tao->ksp, tao->constraints, lclP->r)); in TaoSolve_LCL()
283 PetscCall(KSPGetIterationNumber(tao->ksp, &its)); in TaoSolve_LCL()
284 tao->ksp_its += its; in TaoSolve_LCL()
285 tao->ksp_tot_its += tao->ksp_its; in TaoSolve_LCL()
298 PetscCall(MatMult(tao->jacobian_state, tao->constraints, lclP->WU)); in TaoSolve_LCL()
300 PetscCall(MatMultTranspose(tao->jacobian_state, tao->constraints, lclP->WU)); in TaoSolve_LCL()
311 …PetscCall(PetscInfo(tao, "Newton direction not descent for constraint, feasibility phase required\… in TaoSolve_LCL()
314 PetscCall(PetscInfo(tao, "Using steepest descent direction instead.\n")); in TaoSolve_LCL()
339 …PetscCall(PetscInfo(tao, "Newton direction not descent for augmented Lagrangian: %g\n", (double)al… in TaoSolve_LCL()
343 PetscCall(PetscInfo(tao, " Increasing penalty parameter to %g\n", (double)lclP->rho)); in TaoSolve_LCL()
346 …Call(LCLComputeAugmentedLagrangianAndGradient(tao->linesearch, tao->solution, &lclP->aug, lclP->GA… in TaoSolve_LCL()
352 PetscCall(LCLGather(lclP, lclP->r, lclP->s, tao->stepdirection)); in TaoSolve_LCL()
359 PetscCall(TaoLineSearchSetInitialStepLength(tao->linesearch, 1.0)); in TaoSolve_LCL()
360 PetscCall(TaoLineSearchSetType(tao->linesearch, TAOLINESEARCHMT)); in TaoSolve_LCL()
361 PetscCall(TaoLineSearchSetFromOptions(tao->linesearch)); in TaoSolve_LCL()
362 …PetscCall(TaoLineSearchApply(tao->linesearch, tao->solution, &lclP->aug, lclP->GAugL, tao->stepdir… in TaoSolve_LCL()
365 PetscCall(LCLScatter(lclP, tao->solution, lclP->U, lclP->V)); in TaoSolve_LCL()
366 PetscCall(TaoComputeObjectiveAndGradient(tao, tao->solution, &f, tao->gradient)); in TaoSolve_LCL()
367 PetscCall(LCLScatter(lclP, tao->gradient, lclP->GU, lclP->GV)); in TaoSolve_LCL()
373 PetscCall(VecNorm(tao->constraints, NORM_2, &cnorm)); in TaoSolve_LCL()
374 PetscCall(TaoLogConvergenceHistory(tao, f, mnorm, cnorm, tao->ksp_its)); in TaoSolve_LCL()
375 PetscCall(TaoMonitor(tao, tao->niter, f, mnorm, cnorm, step)); in TaoSolve_LCL()
376 PetscUseTypeMethod(tao, convergencetest, tao->cnvP); in TaoSolve_LCL()
377 if (tao->reason != TAO_CONTINUE_ITERATING) break; in TaoSolve_LCL()
391 …PetscCall(TaoComputeJacobianState(tao, lclP->X0, tao->jacobian_state, tao->jacobian_state_pre, tao in TaoSolve_LCL()
392 PetscCall(TaoComputeJacobianDesign(tao, lclP->X0, tao->jacobian_design)); in TaoSolve_LCL()
396 PetscCall(VecCopy(tao->constraints, lclP->con1)); in TaoSolve_LCL()
402 PetscCall(MatIsSymmetricKnown(tao->jacobian_state, &set, &flag)); in TaoSolve_LCL()
403 if (tao->jacobian_state_pre) { in TaoSolve_LCL()
404 PetscCall(MatIsSymmetricKnown(tao->jacobian_state_pre, &pset, &pflag)); in TaoSolve_LCL()
411 if (tao->jacobian_state_inv) { in TaoSolve_LCL()
413 PetscCall(MatMult(tao->jacobian_state_inv, lclP->GAugL_U, lclP->lambda)); in TaoSolve_LCL()
415 PetscCall(MatMultTranspose(tao->jacobian_state_inv, lclP->GAugL_U, lclP->lambda)); in TaoSolve_LCL()
419 PetscCall(KSPSolve(tao->ksp, lclP->GAugL_U, lclP->lambda)); in TaoSolve_LCL()
421 PetscCall(KSPSolveTranspose(tao->ksp, lclP->GAugL_U, lclP->lambda)); in TaoSolve_LCL()
423 PetscCall(KSPGetIterationNumber(tao->ksp, &its)); in TaoSolve_LCL()
424 tao->ksp_its += its; in TaoSolve_LCL()
425 tao->ksp_tot_its += its; in TaoSolve_LCL()
427 PetscCall(MatMultTranspose(tao->jacobian_design, lclP->lambda, lclP->g1)); in TaoSolve_LCL()
431 if (tao->niter > 0) { in TaoSolve_LCL()
444 PetscCall(MatMult(tao->jacobian_design, lclP->s, lclP->WU)); in TaoSolve_LCL()
447 if (tao->jacobian_state_inv) { in TaoSolve_LCL()
448 PetscCall(MatMult(tao->jacobian_state_inv, lclP->WU, lclP->r)); in TaoSolve_LCL()
450 PetscCall(KSPSolve(tao->ksp, lclP->WU, lclP->r)); in TaoSolve_LCL()
451 PetscCall(KSPGetIterationNumber(tao->ksp, &its)); in TaoSolve_LCL()
452 tao->ksp_its += its; in TaoSolve_LCL()
453 tao->ksp_tot_its += its; in TaoSolve_LCL()
458 PetscCall(LCLGather(lclP, lclP->r, lclP->s, tao->stepdirection)); in TaoSolve_LCL()
462 PetscCall(TaoLineSearchSetInitialStepLength(tao->linesearch, 1.0)); in TaoSolve_LCL()
463 PetscCall(TaoLineSearchSetType(tao->linesearch, TAOLINESEARCHMT)); in TaoSolve_LCL()
464 PetscCall(TaoLineSearchSetFromOptions(tao->linesearch)); in TaoSolve_LCL()
465 …PetscCall(TaoLineSearchApply(tao->linesearch, tao->solution, &lclP->aug, lclP->GAugL, tao->stepdir… in TaoSolve_LCL()
468 PetscCall(LCLScatter(lclP, tao->solution, lclP->U, lclP->V)); in TaoSolve_LCL()
471 PetscCall(TaoComputeObjectiveAndGradient(tao, tao->solution, &f, tao->gradient)); in TaoSolve_LCL()
472 PetscCall(LCLScatter(lclP, tao->gradient, lclP->GU, lclP->GV)); in TaoSolve_LCL()
476 …PetscCall(TaoComputeJacobianState(tao, lclP->X0, tao->jacobian_state, tao->jacobian_state_pre, tao in TaoSolve_LCL()
477 PetscCall(TaoComputeJacobianDesign(tao, lclP->X0, tao->jacobian_design)); in TaoSolve_LCL()
484 PetscCall(VecAXPY(lclP->lambda, -lclP->rho, tao->constraints)); in TaoSolve_LCL()
487 PetscCall(MatIsSymmetricKnown(tao->jacobian_state, &set, &flag)); in TaoSolve_LCL()
488 if (tao->jacobian_state_pre) { in TaoSolve_LCL()
489 PetscCall(MatIsSymmetricKnown(tao->jacobian_state_pre, &pset, &pflag)); in TaoSolve_LCL()
497 if (tao->jacobian_state_inv) { in TaoSolve_LCL()
499 PetscCall(MatMult(tao->jacobian_state_inv, lclP->GU, lclP->lambda)); in TaoSolve_LCL()
501 PetscCall(MatMultTranspose(tao->jacobian_state_inv, lclP->GU, lclP->lambda)); in TaoSolve_LCL()
505 PetscCall(KSPSolve(tao->ksp, lclP->GU, lclP->lambda)); in TaoSolve_LCL()
507 PetscCall(KSPSolveTranspose(tao->ksp, lclP->GU, lclP->lambda)); in TaoSolve_LCL()
509 PetscCall(KSPGetIterationNumber(tao->ksp, &its)); in TaoSolve_LCL()
510 tao->ksp_its += its; in TaoSolve_LCL()
511 tao->ksp_tot_its += its; in TaoSolve_LCL()
514 PetscCall(MatMultTranspose(tao->jacobian_design, lclP->lambda, lclP->g2)); in TaoSolve_LCL()
527 PetscCall(TaoComputeObjectiveAndGradient(tao, tao->solution, &f, tao->gradient)); in TaoSolve_LCL()
528 PetscCall(LCLScatter(lclP, tao->solution, lclP->U, lclP->V)); in TaoSolve_LCL()
529 PetscCall(LCLScatter(lclP, tao->gradient, lclP->GU, lclP->GV)); in TaoSolve_LCL()
531 …PetscCall(TaoComputeJacobianState(tao, tao->solution, tao->jacobian_state, tao->jacobian_state_pre… in TaoSolve_LCL()
532 PetscCall(TaoComputeJacobianDesign(tao, tao->solution, tao->jacobian_design)); in TaoSolve_LCL()
533 PetscCall(TaoComputeConstraints(tao, tao->solution, tao->constraints)); in TaoSolve_LCL()
535 …Call(LCLComputeAugmentedLagrangianAndGradient(tao->linesearch, tao->solution, &lclP->aug, lclP->GA… in TaoSolve_LCL()
540 PetscCall(VecNorm(tao->constraints, NORM_2, &cnorm)); in TaoSolve_LCL()
543 tao->niter++; in TaoSolve_LCL()
544 PetscCall(TaoLogConvergenceHistory(tao, f, mnorm, cnorm, tao->ksp_its)); in TaoSolve_LCL()
545 PetscCall(TaoMonitor(tao, tao->niter, f, mnorm, cnorm, step)); in TaoSolve_LCL()
546 PetscUseTypeMethod(tao, convergencetest, tao->cnvP); in TaoSolve_LCL()
567 PETSC_EXTERN PetscErrorCode TaoCreate_LCL(Tao tao) in TaoCreate_LCL() argument
573 tao->ops->setup = TaoSetup_LCL; in TaoCreate_LCL()
574 tao->ops->solve = TaoSolve_LCL; in TaoCreate_LCL()
575 tao->ops->view = TaoView_LCL; in TaoCreate_LCL()
576 tao->ops->setfromoptions = TaoSetFromOptions_LCL; in TaoCreate_LCL()
577 tao->ops->destroy = TaoDestroy_LCL; in TaoCreate_LCL()
579 tao->data = (void *)lclP; in TaoCreate_LCL()
582 PetscCall(TaoParametersInitialize(tao)); in TaoCreate_LCL()
583 PetscObjectParameterSetDefault(tao, max_it, 200); in TaoCreate_LCL()
584 PetscObjectParameterSetDefault(tao, catol, 1.0e-4); in TaoCreate_LCL()
585 PetscObjectParameterSetDefault(tao, gttol, 1.0e-4); in TaoCreate_LCL()
586 PetscObjectParameterSetDefault(tao, gttol, 1.0e-4); in TaoCreate_LCL()
587 PetscObjectParameterSetDefault(tao, gttol, 1.0e-4); in TaoCreate_LCL()
595 PetscCall(TaoLineSearchCreate(((PetscObject)tao)->comm, &tao->linesearch)); in TaoCreate_LCL()
596 PetscCall(PetscObjectIncrementTabLevel((PetscObject)tao->linesearch, (PetscObject)tao, 1)); in TaoCreate_LCL()
597 PetscCall(TaoLineSearchSetType(tao->linesearch, morethuente_type)); in TaoCreate_LCL()
598 PetscCall(TaoLineSearchSetOptionsPrefix(tao->linesearch, tao->hdr.prefix)); in TaoCreate_LCL()
600 …(TaoLineSearchSetObjectiveAndGradientRoutine(tao->linesearch, LCLComputeAugmentedLagrangianAndGrad… in TaoCreate_LCL()
601 PetscCall(KSPCreate(((PetscObject)tao)->comm, &tao->ksp)); in TaoCreate_LCL()
602 PetscCall(PetscObjectIncrementTabLevel((PetscObject)tao->ksp, (PetscObject)tao, 1)); in TaoCreate_LCL()
603 PetscCall(KSPSetOptionsPrefix(tao->ksp, tao->hdr.prefix)); in TaoCreate_LCL()
604 PetscCall(KSPSetFromOptions(tao->ksp)); in TaoCreate_LCL()
606 PetscCall(MatCreate(((PetscObject)tao)->comm, &lclP->R)); in TaoCreate_LCL()
613 Tao tao = (Tao)ptr; in LCLComputeLagrangianAndGradient() local
614 TAO_LCL *lclP = (TAO_LCL *)tao->data; in LCLComputeLagrangianAndGradient()
619 PetscCall(TaoComputeObjectiveAndGradient(tao, X, f, G)); in LCLComputeLagrangianAndGradient()
622 …PetscCall(TaoComputeJacobianState(tao, X, tao->jacobian_state, tao->jacobian_state_pre, tao->jacob… in LCLComputeLagrangianAndGradient()
623 PetscCall(TaoComputeJacobianDesign(tao, X, tao->jacobian_design)); in LCLComputeLagrangianAndGradient()
625 PetscCall(TaoComputeConstraints(tao, X, tao->constraints)); in LCLComputeLagrangianAndGradient()
626 PetscCall(MatIsSymmetricKnown(tao->jacobian_state, &set, &flag)); in LCLComputeLagrangianAndGradient()
627 if (tao->jacobian_state_pre) { in LCLComputeLagrangianAndGradient()
628 PetscCall(MatIsSymmetricKnown(tao->jacobian_state_pre, &pset, &pflag)); in LCLComputeLagrangianAndGradient()
635 PetscCall(VecDot(lclP->lambda0, tao->constraints, &cdotl)); in LCLComputeLagrangianAndGradient()
642 PetscCall(MatMult(tao->jacobian_state, lclP->lambda0, lclP->GL_U)); in LCLComputeLagrangianAndGradient()
644 PetscCall(MatMultTranspose(tao->jacobian_state, lclP->lambda0, lclP->GL_U)); in LCLComputeLagrangianAndGradient()
646 PetscCall(MatMultTranspose(tao->jacobian_design, lclP->lambda0, lclP->GL_V)); in LCLComputeLagrangianAndGradient()
660 Tao tao = (Tao)ptr; in LCLComputeAugmentedLagrangianAndGradient() local
661 TAO_LCL *lclP = (TAO_LCL *)tao->data; in LCLComputeAugmentedLagrangianAndGradient()
666 PetscCall(LCLComputeLagrangianAndGradient(tao->linesearch, X, f, G, tao)); in LCLComputeAugmentedLagrangianAndGradient()
668 PetscCall(VecDot(tao->constraints, tao->constraints, &con2)); in LCLComputeAugmentedLagrangianAndGradient()
674 PetscCall(MatIsSymmetricKnown(tao->jacobian_state, &set, &flag)); in LCLComputeAugmentedLagrangianAndGradient()
675 if (tao->jacobian_state_pre) { in LCLComputeAugmentedLagrangianAndGradient()
676 PetscCall(MatIsSymmetricKnown(tao->jacobian_state_pre, &pset, &pflag)); in LCLComputeAugmentedLagrangianAndGradient()
684 PetscCall(MatMult(tao->jacobian_state, tao->constraints, lclP->GAugL_U)); in LCLComputeAugmentedLagrangianAndGradient()
686 PetscCall(MatMultTranspose(tao->jacobian_state, tao->constraints, lclP->GAugL_U)); in LCLComputeAugmentedLagrangianAndGradient()
689 PetscCall(MatMultTranspose(tao->jacobian_design, tao->constraints, lclP->GAugL_V)); in LCLComputeAugmentedLagrangianAndGradient()