Lines Matching refs:lclP
9 TAO_LCL *lclP = (TAO_LCL *)tao->data; in TaoDestroy_LCL() local
13 PetscCall(MatDestroy(&lclP->R)); in TaoDestroy_LCL()
14 PetscCall(VecDestroy(&lclP->lambda)); in TaoDestroy_LCL()
15 PetscCall(VecDestroy(&lclP->lambda0)); in TaoDestroy_LCL()
16 PetscCall(VecDestroy(&lclP->WL)); in TaoDestroy_LCL()
17 PetscCall(VecDestroy(&lclP->W)); in TaoDestroy_LCL()
18 PetscCall(VecDestroy(&lclP->X0)); in TaoDestroy_LCL()
19 PetscCall(VecDestroy(&lclP->G0)); in TaoDestroy_LCL()
20 PetscCall(VecDestroy(&lclP->GL)); in TaoDestroy_LCL()
21 PetscCall(VecDestroy(&lclP->GAugL)); in TaoDestroy_LCL()
22 PetscCall(VecDestroy(&lclP->dbar)); in TaoDestroy_LCL()
23 PetscCall(VecDestroy(&lclP->U)); in TaoDestroy_LCL()
24 PetscCall(VecDestroy(&lclP->U0)); in TaoDestroy_LCL()
25 PetscCall(VecDestroy(&lclP->V)); in TaoDestroy_LCL()
26 PetscCall(VecDestroy(&lclP->V0)); in TaoDestroy_LCL()
27 PetscCall(VecDestroy(&lclP->V1)); in TaoDestroy_LCL()
28 PetscCall(VecDestroy(&lclP->GU)); in TaoDestroy_LCL()
29 PetscCall(VecDestroy(&lclP->GV)); in TaoDestroy_LCL()
30 PetscCall(VecDestroy(&lclP->GU0)); in TaoDestroy_LCL()
31 PetscCall(VecDestroy(&lclP->GV0)); in TaoDestroy_LCL()
32 PetscCall(VecDestroy(&lclP->GL_U)); in TaoDestroy_LCL()
33 PetscCall(VecDestroy(&lclP->GL_V)); in TaoDestroy_LCL()
34 PetscCall(VecDestroy(&lclP->GAugL_U)); in TaoDestroy_LCL()
35 PetscCall(VecDestroy(&lclP->GAugL_V)); in TaoDestroy_LCL()
36 PetscCall(VecDestroy(&lclP->GL_U0)); in TaoDestroy_LCL()
37 PetscCall(VecDestroy(&lclP->GL_V0)); in TaoDestroy_LCL()
38 PetscCall(VecDestroy(&lclP->GAugL_U0)); in TaoDestroy_LCL()
39 PetscCall(VecDestroy(&lclP->GAugL_V0)); in TaoDestroy_LCL()
40 PetscCall(VecDestroy(&lclP->DU)); in TaoDestroy_LCL()
41 PetscCall(VecDestroy(&lclP->DV)); in TaoDestroy_LCL()
42 PetscCall(VecDestroy(&lclP->WU)); in TaoDestroy_LCL()
43 PetscCall(VecDestroy(&lclP->WV)); in TaoDestroy_LCL()
44 PetscCall(VecDestroy(&lclP->g1)); in TaoDestroy_LCL()
45 PetscCall(VecDestroy(&lclP->g2)); in TaoDestroy_LCL()
46 PetscCall(VecDestroy(&lclP->con1)); in TaoDestroy_LCL()
48 PetscCall(VecDestroy(&lclP->r)); in TaoDestroy_LCL()
49 PetscCall(VecDestroy(&lclP->s)); in TaoDestroy_LCL()
54 PetscCall(VecScatterDestroy(&lclP->state_scatter)); in TaoDestroy_LCL()
55 PetscCall(VecScatterDestroy(&lclP->design_scatter)); in TaoDestroy_LCL()
57 PetscCall(MatDestroy(&lclP->R)); in TaoDestroy_LCL()
65 TAO_LCL *lclP = (TAO_LCL *)tao->data; in TaoSetFromOptions_LCL() local
69 …PetscCall(PetscOptionsReal("-tao_lcl_eps1", "epsilon 1 tolerance", "", lclP->eps1, &lclP->eps1, NU… in TaoSetFromOptions_LCL()
70 …PetscCall(PetscOptionsReal("-tao_lcl_eps2", "epsilon 2 tolerance", "", lclP->eps2, &lclP->eps2, NU… in TaoSetFromOptions_LCL()
71 …PetscCall(PetscOptionsReal("-tao_lcl_rho0", "init value for rho", "", lclP->rho0, &lclP->rho0, NUL… in TaoSetFromOptions_LCL()
72 …PetscCall(PetscOptionsReal("-tao_lcl_rhomax", "max value for rho", "", lclP->rhomax, &lclP->rhomax… in TaoSetFromOptions_LCL()
73 lclP->phase2_niter = 1; in TaoSetFromOptions_LCL()
74 …e2_niter", "Number of phase 2 iterations in LCL algorithm", "", lclP->phase2_niter, &lclP->phase2_… in TaoSetFromOptions_LCL()
75 lclP->verbose = PETSC_FALSE; in TaoSetFromOptions_LCL()
76 …PetscCall(PetscOptionsBool("-tao_lcl_verbose", "Print verbose output", "", lclP->verbose, &lclP->v… in TaoSetFromOptions_LCL()
77 lclP->tau[0] = lclP->tau[1] = lclP->tau[2] = lclP->tau[3] = 1.0e-4; in TaoSetFromOptions_LCL()
78 …ionsReal("-tao_lcl_tola", "Tolerance for first forward solve", "", lclP->tau[0], &lclP->tau[0], NU… in TaoSetFromOptions_LCL()
79 …ionsReal("-tao_lcl_tolb", "Tolerance for first adjoint solve", "", lclP->tau[1], &lclP->tau[1], NU… in TaoSetFromOptions_LCL()
80 …onsReal("-tao_lcl_tolc", "Tolerance for second forward solve", "", lclP->tau[2], &lclP->tau[2], NU… in TaoSetFromOptions_LCL()
81 …onsReal("-tao_lcl_told", "Tolerance for second adjoint solve", "", lclP->tau[3], &lclP->tau[3], NU… in TaoSetFromOptions_LCL()
84 PetscCall(MatSetFromOptions(lclP->R)); in TaoSetFromOptions_LCL()
95 TAO_LCL *lclP = (TAO_LCL *)tao->data; in TaoSetup_LCL() local
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()
114 PetscCall(VecSet(lclP->lambda, 0.0)); 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()
123 PetscCall(VecSetSizes(lclP->U, nlocalstate, lclP->m)); in TaoSetup_LCL()
124 PetscCall(VecSetSizes(lclP->V, nlocaldesign, lclP->n - lclP->m)); 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()
127 PetscCall(VecSetFromOptions(lclP->U)); in TaoSetup_LCL()
128 PetscCall(VecSetFromOptions(lclP->V)); in TaoSetup_LCL()
129 PetscCall(VecDuplicate(lclP->U, &lclP->DU)); in TaoSetup_LCL()
130 PetscCall(VecDuplicate(lclP->U, &lclP->U0)); in TaoSetup_LCL()
131 PetscCall(VecDuplicate(lclP->U, &lclP->GU)); in TaoSetup_LCL()
132 PetscCall(VecDuplicate(lclP->U, &lclP->GU0)); in TaoSetup_LCL()
133 PetscCall(VecDuplicate(lclP->U, &lclP->GAugL_U)); in TaoSetup_LCL()
134 PetscCall(VecDuplicate(lclP->U, &lclP->GL_U)); in TaoSetup_LCL()
135 PetscCall(VecDuplicate(lclP->U, &lclP->GAugL_U0)); in TaoSetup_LCL()
136 PetscCall(VecDuplicate(lclP->U, &lclP->GL_U0)); in TaoSetup_LCL()
137 PetscCall(VecDuplicate(lclP->U, &lclP->WU)); in TaoSetup_LCL()
138 PetscCall(VecDuplicate(lclP->U, &lclP->r)); in TaoSetup_LCL()
139 PetscCall(VecDuplicate(lclP->V, &lclP->V0)); in TaoSetup_LCL()
140 PetscCall(VecDuplicate(lclP->V, &lclP->V1)); in TaoSetup_LCL()
141 PetscCall(VecDuplicate(lclP->V, &lclP->DV)); in TaoSetup_LCL()
142 PetscCall(VecDuplicate(lclP->V, &lclP->s)); in TaoSetup_LCL()
143 PetscCall(VecDuplicate(lclP->V, &lclP->GV)); in TaoSetup_LCL()
144 PetscCall(VecDuplicate(lclP->V, &lclP->GV0)); in TaoSetup_LCL()
145 PetscCall(VecDuplicate(lclP->V, &lclP->dbar)); in TaoSetup_LCL()
146 PetscCall(VecDuplicate(lclP->V, &lclP->GAugL_V)); in TaoSetup_LCL()
147 PetscCall(VecDuplicate(lclP->V, &lclP->GL_V)); in TaoSetup_LCL()
148 PetscCall(VecDuplicate(lclP->V, &lclP->GAugL_V0)); in TaoSetup_LCL()
149 PetscCall(VecDuplicate(lclP->V, &lclP->GL_V0)); in TaoSetup_LCL()
150 PetscCall(VecDuplicate(lclP->V, &lclP->WV)); in TaoSetup_LCL()
151 PetscCall(VecDuplicate(lclP->V, &lclP->g1)); in TaoSetup_LCL()
152 PetscCall(VecDuplicate(lclP->V, &lclP->g2)); in TaoSetup_LCL()
155 PetscCall(VecGetOwnershipRange(lclP->U, &lo, &hi)); in TaoSetup_LCL()
156 PetscCall(ISCreateStride(((PetscObject)lclP->U)->comm, hi - lo, lo, 1, &is_state)); in TaoSetup_LCL()
157 PetscCall(VecGetOwnershipRange(lclP->V, &lo, &hi)); in TaoSetup_LCL()
160 PetscCall(VecGetSize(lclP->U, &sizeU)); in TaoSetup_LCL()
161 PetscCall(VecGetSize(lclP->V, &sizeV)); in TaoSetup_LCL()
164 PetscCall(ISCreateStride(((PetscObject)lclP->V)->comm, hi - lo, lo, 1, &is_design)); 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()
174 TAO_LCL *lclP = (TAO_LCL *)tao->data; in TaoSolve_LCL() local
183 lclP->rho = lclP->rho0; in TaoSolve_LCL()
184 PetscCall(VecGetLocalSize(lclP->U, &nlocal)); in TaoSolve_LCL()
185 PetscCall(VecGetLocalSize(lclP->V, &nlocal)); in TaoSolve_LCL()
186 PetscCall(MatSetSizes(lclP->R, nlocal, nlocal, lclP->n - lclP->m, lclP->n - lclP->m)); in TaoSolve_LCL()
187 PetscCall(MatLMVMAllocate(lclP->R, lclP->V, lclP->V)); in TaoSolve_LCL()
188 lclP->recompute_jacobian_flag = PETSC_TRUE; in TaoSolve_LCL()
191 PetscCall(LCLScatter(lclP, tao->solution, lclP->U, lclP->V)); in TaoSolve_LCL()
200 PetscCall(LCLScatter(lclP, tao->gradient, lclP->GU, lclP->GV)); in TaoSolve_LCL()
204 PetscCall(VecSet(lclP->lambda, 0.0)); /* Initial guess in CG */ in TaoSolve_LCL()
214 lclP->solve_type = LCL_ADJOINT2; 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()
224 PetscCall(KSPSolve(tao->ksp, lclP->GU, lclP->lambda)); in TaoSolve_LCL()
226 PetscCall(KSPSolveTranspose(tao->ksp, lclP->GU, lclP->lambda)); in TaoSolve_LCL()
232 PetscCall(VecCopy(lclP->lambda, lclP->lambda0)); in TaoSolve_LCL()
233 …mputeAugmentedLagrangianAndGradient(tao->linesearch, tao->solution, &lclP->aug, lclP->GAugL, tao)); in TaoSolve_LCL()
235 PetscCall(LCLScatter(lclP, lclP->GL, lclP->GL_U, lclP->GL_V)); in TaoSolve_LCL()
236 PetscCall(LCLScatter(lclP, lclP->GAugL, lclP->GAugL_U, lclP->GAugL_V)); in TaoSolve_LCL()
240 PetscCall(VecNorm(lclP->GAugL, NORM_2, &mnorm)); in TaoSolve_LCL()
257 PetscCall(VecCopy(lclP->U, lclP->U0)); in TaoSolve_LCL()
258 PetscCall(VecCopy(lclP->V, lclP->V0)); in TaoSolve_LCL()
259 PetscCall(VecCopy(lclP->GU, lclP->GU0)); in TaoSolve_LCL()
260 PetscCall(VecCopy(lclP->GV, lclP->GV0)); in TaoSolve_LCL()
261 PetscCall(VecCopy(lclP->GAugL_U, lclP->GAugL_U0)); in TaoSolve_LCL()
262 PetscCall(VecCopy(lclP->GAugL_V, lclP->GAugL_V0)); in TaoSolve_LCL()
263 PetscCall(VecCopy(lclP->GL_U, lclP->GL_U0)); in TaoSolve_LCL()
264 PetscCall(VecCopy(lclP->GL_V, lclP->GL_V0)); in TaoSolve_LCL()
266 lclP->aug0 = lclP->aug; in TaoSolve_LCL()
267 lclP->lgn0 = lclP->lgn; in TaoSolve_LCL()
275 lclP->solve_type = LCL_FORWARD1; in TaoSolve_LCL()
276 PetscCall(VecSet(lclP->r, 0.0)); /* Initial guess in CG */ in TaoSolve_LCL()
279 PetscCall(MatMult(tao->jacobian_state_inv, tao->constraints, lclP->r)); in TaoSolve_LCL()
282 PetscCall(KSPSolve(tao->ksp, tao->constraints, lclP->r)); in TaoSolve_LCL()
289 PetscCall(VecSet(lclP->s, 0.0)); 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()
303 PetscCall(VecDot(lclP->r, lclP->WU, &rWU)); in TaoSolve_LCL()
306 PetscCall(VecNorm(lclP->r, NORM_2, &r2)); in TaoSolve_LCL()
307 r2 = PetscPowScalar(r2, 2.0 + lclP->eps2); in TaoSolve_LCL()
308 adec = lclP->eps1 * r2; in TaoSolve_LCL()
312 …if (lclP->verbose) PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Newton direction not descent for const… in TaoSolve_LCL()
315 PetscCall(VecSet(lclP->r, 0.0)); in TaoSolve_LCL()
316 PetscCall(VecAXPY(lclP->r, -1.0, lclP->WU)); in TaoSolve_LCL()
317 PetscCall(VecDot(lclP->r, lclP->r, &rWU)); in TaoSolve_LCL()
318 PetscCall(VecNorm(lclP->r, NORM_2, &r2)); in TaoSolve_LCL()
319 r2 = PetscPowScalar(r2, 2.0 + lclP->eps2); in TaoSolve_LCL()
320 PetscCall(VecDot(lclP->r, lclP->GAugL_U, &descent)); in TaoSolve_LCL()
321 adec = lclP->eps1 * r2; in TaoSolve_LCL()
335 PetscCall(VecDot(lclP->r, lclP->GL_U, &rGL_U)); in TaoSolve_LCL()
336 aldescent = rGL_U - lclP->rho * rWU; in TaoSolve_LCL()
338 …if (lclP->verbose) PetscCall(PetscPrintf(PETSC_COMM_WORLD, " Newton direction not descent for augm… in TaoSolve_LCL()
340 lclP->rho = (rGL_U - adec) / rWU; in TaoSolve_LCL()
341 …k(lclP->rho <= lclP->rhomax, PETSC_COMM_WORLD, PETSC_ERR_SUP, "rho=%g > rhomax, case not implement… in TaoSolve_LCL()
342 …if (lclP->verbose) PetscCall(PetscPrintf(PETSC_COMM_WORLD, " Increasing penalty parameter to %g\n… in TaoSolve_LCL()
343 PetscCall(PetscInfo(tao, " Increasing penalty parameter to %g\n", (double)lclP->rho)); in TaoSolve_LCL()
346 …mputeAugmentedLagrangianAndGradient(tao->linesearch, tao->solution, &lclP->aug, lclP->GAugL, tao)); in TaoSolve_LCL()
347 PetscCall(LCLScatter(lclP, lclP->GL, lclP->GL_U, lclP->GL_V)); in TaoSolve_LCL()
348 PetscCall(LCLScatter(lclP, lclP->GAugL, lclP->GAugL_U, lclP->GAugL_V)); in TaoSolve_LCL()
351 PetscCall(VecScale(lclP->r, -1.0)); in TaoSolve_LCL()
352 PetscCall(LCLGather(lclP, lclP->r, lclP->s, tao->stepdirection)); in TaoSolve_LCL()
353 PetscCall(VecScale(lclP->r, -1.0)); in TaoSolve_LCL()
354 PetscCall(LCLGather(lclP, lclP->GAugL_U0, lclP->GAugL_V0, lclP->GAugL)); in TaoSolve_LCL()
355 PetscCall(LCLGather(lclP, lclP->U0, lclP->V0, lclP->X0)); in TaoSolve_LCL()
357 lclP->recompute_jacobian_flag = PETSC_TRUE; in TaoSolve_LCL()
362 …PetscCall(TaoLineSearchApply(tao->linesearch, tao->solution, &lclP->aug, lclP->GAugL, tao->stepdir… in TaoSolve_LCL()
363 if (lclP->verbose) PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Steplength = %g\n", (double)step)); in TaoSolve_LCL()
365 PetscCall(LCLScatter(lclP, tao->solution, lclP->U, lclP->V)); in TaoSolve_LCL()
367 PetscCall(LCLScatter(lclP, tao->gradient, lclP->GU, lclP->GV)); in TaoSolve_LCL()
369 PetscCall(LCLScatter(lclP, lclP->GAugL, lclP->GAugL_U, lclP->GAugL_V)); in TaoSolve_LCL()
372 PetscCall(VecNorm(lclP->GAugL, NORM_2, &mnorm)); in TaoSolve_LCL()
380 for (phase2_iter = 0; phase2_iter < lclP->phase2_niter; phase2_iter++) { 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()
395 PetscCall(VecCopy(lclP->V, lclP->V1)); in TaoSolve_LCL()
396 PetscCall(VecCopy(tao->constraints, lclP->con1)); in TaoSolve_LCL()
400 PetscCall(VecSet(lclP->lambda, 0.0)); /* Initial guess in CG */ in TaoSolve_LCL()
401 lclP->solve_type = LCL_ADJOINT1; 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()
427 PetscCall(MatMultTranspose(tao->jacobian_design, lclP->lambda, lclP->g1)); in TaoSolve_LCL()
428 PetscCall(VecAXPY(lclP->g1, -1.0, lclP->GAugL_V)); in TaoSolve_LCL()
432 PetscCall(MatSolve(lclP->R, lclP->g1, lclP->s)); in TaoSolve_LCL()
433 PetscCall(VecDot(lclP->s, lclP->g1, &descent)); in TaoSolve_LCL()
435 …if (lclP->verbose) PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Reduced-space direction not descent: %… in TaoSolve_LCL()
436 PetscCall(VecCopy(lclP->g1, lclP->s)); in TaoSolve_LCL()
439 PetscCall(VecCopy(lclP->g1, lclP->s)); in TaoSolve_LCL()
441 PetscCall(VecScale(lclP->g1, -1.0)); in TaoSolve_LCL()
444 PetscCall(MatMult(tao->jacobian_design, lclP->s, lclP->WU)); in TaoSolve_LCL()
446 lclP->solve_type = LCL_FORWARD2; 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()
457 PetscCall(VecScale(lclP->r, -1.0)); in TaoSolve_LCL()
458 PetscCall(LCLGather(lclP, lclP->r, lclP->s, tao->stepdirection)); in TaoSolve_LCL()
459 PetscCall(VecScale(lclP->r, -1.0)); in TaoSolve_LCL()
460 lclP->recompute_jacobian_flag = PETSC_TRUE; in TaoSolve_LCL()
465 …PetscCall(TaoLineSearchApply(tao->linesearch, tao->solution, &lclP->aug, lclP->GAugL, tao->stepdir… in TaoSolve_LCL()
466 …if (lclP->verbose) PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Reduced-space steplength = %g\n", (do… in TaoSolve_LCL()
468 PetscCall(LCLScatter(lclP, tao->solution, lclP->U, lclP->V)); in TaoSolve_LCL()
469 PetscCall(LCLScatter(lclP, lclP->GL, lclP->GL_U, lclP->GL_V)); in TaoSolve_LCL()
470 PetscCall(LCLScatter(lclP, lclP->GAugL, lclP->GAugL_U, lclP->GAugL_V)); 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()
482 PetscCall(VecWAXPY(lclP->lambda, -lclP->rho, lclP->con1, lclP->lambda0)); in TaoSolve_LCL()
484 PetscCall(VecAXPY(lclP->lambda, -lclP->rho, tao->constraints)); in TaoSolve_LCL()
496 lclP->solve_type = LCL_ADJOINT2; 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()
514 PetscCall(MatMultTranspose(tao->jacobian_design, lclP->lambda, lclP->g2)); in TaoSolve_LCL()
515 PetscCall(VecAXPY(lclP->g2, -1.0, lclP->GV)); in TaoSolve_LCL()
517 PetscCall(VecScale(lclP->g2, -1.0)); in TaoSolve_LCL()
520 PetscCall(MatLMVMUpdate(lclP->R, lclP->V, lclP->g2)); in TaoSolve_LCL()
524 PetscCall(VecCopy(lclP->lambda, lclP->lambda0)); 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()
535 …mputeAugmentedLagrangianAndGradient(tao->linesearch, tao->solution, &lclP->aug, lclP->GAugL, tao)); in TaoSolve_LCL()
537 PetscCall(VecNorm(lclP->GAugL, NORM_2, &mnorm)); in TaoSolve_LCL()
569 TAO_LCL *lclP; in TaoCreate_LCL() local
578 PetscCall(PetscNew(&lclP)); in TaoCreate_LCL()
579 tao->data = (void *)lclP; in TaoCreate_LCL()
589 lclP->rho0 = 1.0e-4; in TaoCreate_LCL()
590 lclP->rhomax = 1e5; in TaoCreate_LCL()
591 lclP->eps1 = 1.0e-8; in TaoCreate_LCL()
592 lclP->eps2 = 0.0; in TaoCreate_LCL()
593 lclP->solve_type = 2; in TaoCreate_LCL()
594 lclP->tau[0] = lclP->tau[1] = lclP->tau[2] = lclP->tau[3] = 1.0e-4; in TaoCreate_LCL()
606 PetscCall(MatCreate(((PetscObject)tao)->comm, &lclP->R)); in TaoCreate_LCL()
607 PetscCall(MatSetType(lclP->R, MATLMVMBFGS)); in TaoCreate_LCL()
614 TAO_LCL *lclP = (TAO_LCL *)tao->data; in LCLComputeLagrangianAndGradient() local
620 PetscCall(LCLScatter(lclP, G, lclP->GU, lclP->GV)); in LCLComputeLagrangianAndGradient()
621 if (lclP->recompute_jacobian_flag) { in LCLComputeLagrangianAndGradient()
635 PetscCall(VecDot(lclP->lambda0, tao->constraints, &cdotl)); in LCLComputeLagrangianAndGradient()
636 lclP->lgn = *f - 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()
647 PetscCall(VecScale(lclP->GL_U, -1.0)); in LCLComputeLagrangianAndGradient()
648 PetscCall(VecScale(lclP->GL_V, -1.0)); in LCLComputeLagrangianAndGradient()
649 PetscCall(VecAXPY(lclP->GL_U, 1.0, lclP->GU)); in LCLComputeLagrangianAndGradient()
650 PetscCall(VecAXPY(lclP->GL_V, 1.0, lclP->GV)); in LCLComputeLagrangianAndGradient()
651 PetscCall(LCLGather(lclP, lclP->GL_U, lclP->GL_V, lclP->GL)); in LCLComputeLagrangianAndGradient()
653 f[0] = lclP->lgn; in LCLComputeLagrangianAndGradient()
654 PetscCall(VecCopy(lclP->GL, G)); in LCLComputeLagrangianAndGradient()
661 TAO_LCL *lclP = (TAO_LCL *)tao->data; in LCLComputeAugmentedLagrangianAndGradient() local
667 PetscCall(LCLScatter(lclP, G, lclP->GL_U, lclP->GL_V)); in LCLComputeAugmentedLagrangianAndGradient()
669 lclP->aug = lclP->lgn + 0.5 * lclP->rho * con2; 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()
690 PetscCall(VecAYPX(lclP->GAugL_U, lclP->rho, lclP->GL_U)); in LCLComputeAugmentedLagrangianAndGradient()
691 PetscCall(VecAYPX(lclP->GAugL_V, lclP->rho, lclP->GL_V)); in LCLComputeAugmentedLagrangianAndGradient()
692 PetscCall(LCLGather(lclP, lclP->GAugL_U, lclP->GAugL_V, lclP->GAugL)); in LCLComputeAugmentedLagrangianAndGradient()
694 f[0] = lclP->aug; in LCLComputeAugmentedLagrangianAndGradient()
695 PetscCall(VecCopy(lclP->GAugL, G)); in LCLComputeAugmentedLagrangianAndGradient()
699 static PetscErrorCode LCLGather(TAO_LCL *lclP, Vec u, Vec v, Vec x) in LCLGather() argument
702 PetscCall(VecScatterBegin(lclP->state_scatter, u, x, INSERT_VALUES, SCATTER_REVERSE)); in LCLGather()
703 PetscCall(VecScatterEnd(lclP->state_scatter, u, x, INSERT_VALUES, SCATTER_REVERSE)); in LCLGather()
704 PetscCall(VecScatterBegin(lclP->design_scatter, v, x, INSERT_VALUES, SCATTER_REVERSE)); in LCLGather()
705 PetscCall(VecScatterEnd(lclP->design_scatter, v, x, INSERT_VALUES, SCATTER_REVERSE)); in LCLGather()
708 static PetscErrorCode LCLScatter(TAO_LCL *lclP, Vec x, Vec u, Vec v) in LCLScatter() argument
711 PetscCall(VecScatterBegin(lclP->state_scatter, x, u, INSERT_VALUES, SCATTER_FORWARD)); in LCLScatter()
712 PetscCall(VecScatterEnd(lclP->state_scatter, x, u, INSERT_VALUES, SCATTER_FORWARD)); in LCLScatter()
713 PetscCall(VecScatterBegin(lclP->design_scatter, x, v, INSERT_VALUES, SCATTER_FORWARD)); in LCLScatter()
714 PetscCall(VecScatterEnd(lclP->design_scatter, x, v, INSERT_VALUES, SCATTER_FORWARD)); in LCLScatter()