Lines Matching refs:ipmP

35   TAO_IPM    *ipmP = (TAO_IPM *)tao->data;  in TaoSolve_IPM()  local
44 PetscCall(VecCopy(tao->solution, ipmP->rhs_x)); in TaoSolve_IPM()
49 PetscCall(TaoLogConvergenceHistory(tao, ipmP->kkt_f, ipmP->phi, 0.0, tao->ksp_its)); in TaoSolve_IPM()
50 PetscCall(TaoMonitor(tao, tao->niter, ipmP->kkt_f, ipmP->phi, 0.0, 1.0)); in TaoSolve_IPM()
66 PetscCall(VecCopy(ipmP->rd, ipmP->rhs_x)); in TaoSolve_IPM()
67 if (ipmP->me > 0) PetscCall(VecCopy(ipmP->rpe, ipmP->rhs_lambdae)); in TaoSolve_IPM()
68 if (ipmP->nb > 0) { in TaoSolve_IPM()
69 PetscCall(VecCopy(ipmP->rpi, ipmP->rhs_lambdai)); in TaoSolve_IPM()
70 PetscCall(VecCopy(ipmP->complementarity, ipmP->rhs_s)); in TaoSolve_IPM()
72 …PetscCall(IPMGatherRHS(tao, ipmP->bigrhs, ipmP->rhs_x, ipmP->rhs_lambdae, ipmP->rhs_lambdai, ipmP-… in TaoSolve_IPM()
73 PetscCall(VecScale(ipmP->bigrhs, -1.0)); in TaoSolve_IPM()
76 PetscCall(KSPSetOperators(tao->ksp, ipmP->K, ipmP->K)); in TaoSolve_IPM()
77 PetscCall(KSPSolve(tao->ksp, ipmP->bigrhs, ipmP->bigstep)); in TaoSolve_IPM()
79 …PetscCall(IPMScatterStep(tao, ipmP->bigstep, tao->stepdirection, ipmP->ds, ipmP->dlambdae, ipmP->d… in TaoSolve_IPM()
84 if (ipmP->nb > 0) { in TaoSolve_IPM()
85 … PetscCall(VecStepBoundInfo(ipmP->s, ipmP->ds, ipmP->Zero_nb, ipmP->Inf_nb, &step_s, NULL, NULL)); in TaoSolve_IPM()
86 …PetscCall(VecStepBoundInfo(ipmP->lambdai, ipmP->dlambdai, ipmP->Zero_nb, ipmP->Inf_nb, &step_l, NU… in TaoSolve_IPM()
89 ipmP->alpha1 = alpha; in TaoSolve_IPM()
91 ipmP->alpha1 = alpha = 1.0; in TaoSolve_IPM()
95 PetscCall(VecCopy(tao->solution, ipmP->save_x)); in TaoSolve_IPM()
96 if (ipmP->me > 0) PetscCall(VecCopy(ipmP->lambdae, ipmP->save_lambdae)); in TaoSolve_IPM()
97 if (ipmP->nb > 0) { in TaoSolve_IPM()
98 PetscCall(VecCopy(ipmP->lambdai, ipmP->save_lambdai)); in TaoSolve_IPM()
99 PetscCall(VecCopy(ipmP->s, ipmP->save_s)); in TaoSolve_IPM()
103 if (ipmP->me > 0) PetscCall(VecAXPY(ipmP->lambdae, alpha, ipmP->dlambdae)); in TaoSolve_IPM()
104 if (ipmP->nb > 0) { in TaoSolve_IPM()
105 PetscCall(VecAXPY(ipmP->lambdai, alpha, ipmP->dlambdai)); in TaoSolve_IPM()
106 PetscCall(VecAXPY(ipmP->s, alpha, ipmP->ds)); in TaoSolve_IPM()
110 if (ipmP->mu == 0.0) { in TaoSolve_IPM()
113 sigma = 1.0 / ipmP->mu; in TaoSolve_IPM()
116 sigma *= ipmP->mu; in TaoSolve_IPM()
120 PetscCall(VecCopy(ipmP->save_x, tao->solution)); in TaoSolve_IPM()
121 if (ipmP->me > 0) PetscCall(VecCopy(ipmP->save_lambdae, ipmP->lambdae)); in TaoSolve_IPM()
122 if (ipmP->nb > 0) { in TaoSolve_IPM()
123 PetscCall(VecCopy(ipmP->save_lambdai, ipmP->lambdai)); in TaoSolve_IPM()
124 PetscCall(VecCopy(ipmP->save_s, ipmP->s)); in TaoSolve_IPM()
129 if (ipmP->nb > 0) { in TaoSolve_IPM()
130 PetscCall(VecCopy(ipmP->complementarity, ipmP->rhs_s)); in TaoSolve_IPM()
131 PetscCall(VecScale(ipmP->rhs_s, -1.0)); in TaoSolve_IPM()
132 PetscCall(VecShift(ipmP->rhs_s, sigma * ipmP->mu)); in TaoSolve_IPM()
134 PetscCall(IPMGatherRHS(tao, ipmP->bigrhs, NULL, NULL, NULL, ipmP->rhs_s)); in TaoSolve_IPM()
137 PetscCall(KSPSetOperators(tao->ksp, ipmP->K, ipmP->K)); in TaoSolve_IPM()
138 PetscCall(KSPSolve(tao->ksp, ipmP->bigrhs, ipmP->bigstep)); in TaoSolve_IPM()
140 …PetscCall(IPMScatterStep(tao, ipmP->bigstep, tao->stepdirection, ipmP->ds, ipmP->dlambdae, ipmP->d… in TaoSolve_IPM()
144 if (ipmP->nb > 0) { in TaoSolve_IPM()
146 tau = PetscMax(ipmP->taumin, 1.0 - ipmP->mu); in TaoSolve_IPM()
149 PetscCall(VecScale(ipmP->s, tau)); in TaoSolve_IPM()
150 PetscCall(VecScale(ipmP->lambdai, tau)); in TaoSolve_IPM()
152 … PetscCall(VecStepBoundInfo(ipmP->s, ipmP->ds, ipmP->Zero_nb, ipmP->Inf_nb, &step_s, NULL, NULL)); in TaoSolve_IPM()
153 …PetscCall(VecStepBoundInfo(ipmP->lambdai, ipmP->dlambdai, ipmP->Zero_nb, ipmP->Inf_nb, &step_l, NU… in TaoSolve_IPM()
155 PetscCall(VecCopy(ipmP->save_s, ipmP->s)); in TaoSolve_IPM()
156 PetscCall(VecCopy(ipmP->save_lambdai, ipmP->lambdai)); in TaoSolve_IPM()
163 ipmP->alpha2 = alpha; in TaoSolve_IPM()
165 phi_target = ipmP->dec * ipmP->phi; in TaoSolve_IPM()
168 if (ipmP->nb > 0) { in TaoSolve_IPM()
169 PetscCall(VecAXPY(ipmP->s, alpha, ipmP->ds)); in TaoSolve_IPM()
170 PetscCall(VecAXPY(ipmP->lambdai, alpha, ipmP->dlambdai)); in TaoSolve_IPM()
172 if (ipmP->me > 0) PetscCall(VecAXPY(ipmP->lambdae, alpha, ipmP->dlambdae)); in TaoSolve_IPM()
175 if (ipmP->me > 0) PetscCall(VecCopy(ipmP->lambdae, tao->DE)); in TaoSolve_IPM()
179 if (ipmP->phi <= phi_target) break; in TaoSolve_IPM()
183 PetscCall(TaoLogConvergenceHistory(tao, ipmP->kkt_f, ipmP->phi, 0.0, tao->ksp_its)); in TaoSolve_IPM()
184 PetscCall(TaoMonitor(tao, tao->niter, ipmP->kkt_f, ipmP->phi, 0.0, stepsize)); in TaoSolve_IPM()
193 TAO_IPM *ipmP = (TAO_IPM *)tao->data; in TaoSetup_IPM() local
196 ipmP->nb = ipmP->mi = ipmP->me = 0; in TaoSetup_IPM()
197 ipmP->K = NULL; in TaoSetup_IPM()
198 PetscCall(VecGetSize(tao->solution, &ipmP->n)); in TaoSetup_IPM()
202 PetscCall(VecDuplicate(tao->solution, &ipmP->rd)); in TaoSetup_IPM()
203 PetscCall(VecDuplicate(tao->solution, &ipmP->rhs_x)); in TaoSetup_IPM()
204 PetscCall(VecDuplicate(tao->solution, &ipmP->work)); in TaoSetup_IPM()
205 PetscCall(VecDuplicate(tao->solution, &ipmP->save_x)); in TaoSetup_IPM()
208 PetscCall(VecGetSize(tao->constraints_equality, &ipmP->me)); in TaoSetup_IPM()
209 PetscCall(VecDuplicate(tao->constraints_equality, &ipmP->lambdae)); in TaoSetup_IPM()
210 PetscCall(VecDuplicate(tao->constraints_equality, &ipmP->dlambdae)); in TaoSetup_IPM()
211 PetscCall(VecDuplicate(tao->constraints_equality, &ipmP->rhs_lambdae)); in TaoSetup_IPM()
212 PetscCall(VecDuplicate(tao->constraints_equality, &ipmP->save_lambdae)); in TaoSetup_IPM()
213 PetscCall(VecDuplicate(tao->constraints_equality, &ipmP->rpe)); in TaoSetup_IPM()
222 TAO_IPM *ipmP = (TAO_IPM *)tao->data; in IPMInitializeBounds() local
239 ipmP->mi = 0; in IPMInitializeBounds()
240 ipmP->nxlb = 0; in IPMInitializeBounds()
241 ipmP->nxub = 0; in IPMInitializeBounds()
242 ipmP->nb = 0; in IPMInitializeBounds()
243 ipmP->nslack = 0; in IPMInitializeBounds()
249 PetscCall(VecWhichGreaterThan(tao->XL, xtmp, &ipmP->isxl)); in IPMInitializeBounds()
250 PetscCall(ISGetSize(ipmP->isxl, &ipmP->nxlb)); in IPMInitializeBounds()
252 ipmP->nxlb = 0; in IPMInitializeBounds()
256 PetscCall(VecWhichLessThan(tao->XU, xtmp, &ipmP->isxu)); in IPMInitializeBounds()
257 PetscCall(ISGetSize(ipmP->isxu, &ipmP->nxub)); in IPMInitializeBounds()
259 ipmP->nxub = 0; in IPMInitializeBounds()
263 PetscCall(VecGetSize(tao->constraints_inequality, &ipmP->mi)); in IPMInitializeBounds()
265 ipmP->mi = 0; in IPMInitializeBounds()
267 ipmP->nb = ipmP->nxlb + ipmP->nxub + ipmP->mi; in IPMInitializeBounds()
271 bigsize = ipmP->n + 2 * ipmP->nb + ipmP->me; in IPMInitializeBounds()
273 PetscCall(PetscMalloc1(ipmP->n, &xind)); in IPMInitializeBounds()
274 PetscCall(PetscMalloc1(ipmP->me, &uceind)); in IPMInitializeBounds()
277 if (ipmP->nb > 0) { in IPMInitializeBounds()
278 PetscCall(VecCreate(comm, &ipmP->s)); in IPMInitializeBounds()
279 PetscCall(VecSetSizes(ipmP->s, PETSC_DECIDE, ipmP->nb)); in IPMInitializeBounds()
280 PetscCall(VecSetFromOptions(ipmP->s)); in IPMInitializeBounds()
281 PetscCall(VecDuplicate(ipmP->s, &ipmP->ds)); in IPMInitializeBounds()
282 PetscCall(VecDuplicate(ipmP->s, &ipmP->rhs_s)); in IPMInitializeBounds()
283 PetscCall(VecDuplicate(ipmP->s, &ipmP->complementarity)); in IPMInitializeBounds()
284 PetscCall(VecDuplicate(ipmP->s, &ipmP->ci)); in IPMInitializeBounds()
286 PetscCall(VecDuplicate(ipmP->s, &ipmP->lambdai)); in IPMInitializeBounds()
287 PetscCall(VecDuplicate(ipmP->s, &ipmP->dlambdai)); in IPMInitializeBounds()
288 PetscCall(VecDuplicate(ipmP->s, &ipmP->rhs_lambdai)); in IPMInitializeBounds()
289 PetscCall(VecDuplicate(ipmP->s, &ipmP->save_lambdai)); in IPMInitializeBounds()
291 PetscCall(VecDuplicate(ipmP->s, &ipmP->save_s)); in IPMInitializeBounds()
292 PetscCall(VecDuplicate(ipmP->s, &ipmP->rpi)); in IPMInitializeBounds()
293 PetscCall(VecDuplicate(ipmP->s, &ipmP->Zero_nb)); in IPMInitializeBounds()
294 PetscCall(VecSet(ipmP->Zero_nb, 0.0)); in IPMInitializeBounds()
295 PetscCall(VecDuplicate(ipmP->s, &ipmP->One_nb)); in IPMInitializeBounds()
296 PetscCall(VecSet(ipmP->One_nb, 1.0)); in IPMInitializeBounds()
297 PetscCall(VecDuplicate(ipmP->s, &ipmP->Inf_nb)); in IPMInitializeBounds()
298 PetscCall(VecSet(ipmP->Inf_nb, PETSC_INFINITY)); in IPMInitializeBounds()
300 PetscCall(PetscMalloc1(ipmP->nb, &cind)); in IPMInitializeBounds()
301 PetscCall(PetscMalloc1(ipmP->mi, &ucind)); in IPMInitializeBounds()
302 PetscCall(VecGetOwnershipRange(ipmP->s, &sstart, &send)); in IPMInitializeBounds()
304 if (ipmP->mi > 0) { in IPMInitializeBounds()
310 PetscCall(VecScatterCreate(tao->constraints_inequality, isuc, ipmP->ci, isc, &ipmP->ci_scat)); in IPMInitializeBounds()
317 if (ipmP->nxlb) { in IPMInitializeBounds()
318 PetscCall(ISAllGather(ipmP->isxl, &bigxl)); in IPMInitializeBounds()
321 xl_offset = ipmP->mi; in IPMInitializeBounds()
322 for (i = 0; i < ipmP->nxlb; i++) { in IPMInitializeBounds()
329 PetscCall(ISGetIndices(ipmP->isxl, &xli)); in IPMInitializeBounds()
330 PetscCall(ISGetLocalSize(ipmP->isxl, &nloc)); in IPMInitializeBounds()
338 PetscCall(VecScatterCreate(tao->XL, isx, ipmP->ci, isc, &ipmP->xl_scat)); in IPMInitializeBounds()
344 if (ipmP->nxub) { in IPMInitializeBounds()
345 PetscCall(ISAllGather(ipmP->isxu, &bigxu)); in IPMInitializeBounds()
348 xu_offset = ipmP->mi + ipmP->nxlb; in IPMInitializeBounds()
349 for (i = 0; i < ipmP->nxub; i++) { in IPMInitializeBounds()
356 PetscCall(ISGetIndices(ipmP->isxu, &xui)); in IPMInitializeBounds()
357 PetscCall(ISGetLocalSize(ipmP->isxu, &nloc)); in IPMInitializeBounds()
365 PetscCall(VecScatterCreate(tao->XU, isx, ipmP->ci, isc, &ipmP->xu_scat)); in IPMInitializeBounds()
371 PetscCall(VecCreate(comm, &ipmP->bigrhs)); in IPMInitializeBounds()
373 PetscCall(VecSetType(ipmP->bigrhs, vtype)); in IPMInitializeBounds()
374 PetscCall(VecSetSizes(ipmP->bigrhs, PETSC_DECIDE, bigsize)); in IPMInitializeBounds()
375 PetscCall(VecSetFromOptions(ipmP->bigrhs)); in IPMInitializeBounds()
376 PetscCall(VecDuplicate(ipmP->bigrhs, &ipmP->bigstep)); in IPMInitializeBounds()
385 PetscCall(VecScatterCreate(ipmP->bigstep, sis, tao->solution, is1, &ipmP->step1)); in IPMInitializeBounds()
386 PetscCall(VecScatterCreate(tao->solution, is1, ipmP->bigrhs, sis, &ipmP->rhs1)); in IPMInitializeBounds()
390 if (ipmP->nb > 0) { in IPMInitializeBounds()
392 stepind[i - sstart] = i + ipmP->n; in IPMInitializeBounds()
397 PetscCall(VecScatterCreate(ipmP->bigstep, sis, ipmP->s, is1, &ipmP->step2)); in IPMInitializeBounds()
401 stepind[i - sstart] = i + ipmP->n + ipmP->me; in IPMInitializeBounds()
405 PetscCall(VecScatterCreate(ipmP->s, is1, ipmP->bigrhs, sis, &ipmP->rhs3)); in IPMInitializeBounds()
410 if (ipmP->me > 0) { in IPMInitializeBounds()
413 stepind[i - ucestart] = i + ipmP->n + ipmP->nb; in IPMInitializeBounds()
419 PetscCall(VecScatterCreate(ipmP->bigstep, sis, tao->constraints_equality, is1, &ipmP->step3)); in IPMInitializeBounds()
422 for (i = ucestart; i < uceend; i++) stepind[i - ucestart] = i + ipmP->n; in IPMInitializeBounds()
425 PetscCall(VecScatterCreate(tao->constraints_equality, is1, ipmP->bigrhs, sis, &ipmP->rhs2)); in IPMInitializeBounds()
430 if (ipmP->nb > 0) { in IPMInitializeBounds()
432 stepind[i - sstart] = i + ipmP->n + ipmP->nb + ipmP->me; in IPMInitializeBounds()
437 PetscCall(VecScatterCreate(ipmP->bigstep, sis, ipmP->s, is1, &ipmP->step4)); in IPMInitializeBounds()
438 PetscCall(VecScatterCreate(ipmP->s, is1, ipmP->bigrhs, sis, &ipmP->rhs4)); in IPMInitializeBounds()
453 TAO_IPM *ipmP = (TAO_IPM *)tao->data; in TaoDestroy_IPM() local
456 PetscCall(VecDestroy(&ipmP->rd)); in TaoDestroy_IPM()
457 PetscCall(VecDestroy(&ipmP->rpe)); in TaoDestroy_IPM()
458 PetscCall(VecDestroy(&ipmP->rpi)); in TaoDestroy_IPM()
459 PetscCall(VecDestroy(&ipmP->work)); in TaoDestroy_IPM()
460 PetscCall(VecDestroy(&ipmP->lambdae)); in TaoDestroy_IPM()
461 PetscCall(VecDestroy(&ipmP->lambdai)); in TaoDestroy_IPM()
462 PetscCall(VecDestroy(&ipmP->s)); in TaoDestroy_IPM()
463 PetscCall(VecDestroy(&ipmP->ds)); in TaoDestroy_IPM()
464 PetscCall(VecDestroy(&ipmP->ci)); in TaoDestroy_IPM()
466 PetscCall(VecDestroy(&ipmP->rhs_x)); in TaoDestroy_IPM()
467 PetscCall(VecDestroy(&ipmP->rhs_lambdae)); in TaoDestroy_IPM()
468 PetscCall(VecDestroy(&ipmP->rhs_lambdai)); in TaoDestroy_IPM()
469 PetscCall(VecDestroy(&ipmP->rhs_s)); in TaoDestroy_IPM()
471 PetscCall(VecDestroy(&ipmP->save_x)); in TaoDestroy_IPM()
472 PetscCall(VecDestroy(&ipmP->save_lambdae)); in TaoDestroy_IPM()
473 PetscCall(VecDestroy(&ipmP->save_lambdai)); in TaoDestroy_IPM()
474 PetscCall(VecDestroy(&ipmP->save_s)); in TaoDestroy_IPM()
476 PetscCall(VecScatterDestroy(&ipmP->step1)); in TaoDestroy_IPM()
477 PetscCall(VecScatterDestroy(&ipmP->step2)); in TaoDestroy_IPM()
478 PetscCall(VecScatterDestroy(&ipmP->step3)); in TaoDestroy_IPM()
479 PetscCall(VecScatterDestroy(&ipmP->step4)); in TaoDestroy_IPM()
481 PetscCall(VecScatterDestroy(&ipmP->rhs1)); in TaoDestroy_IPM()
482 PetscCall(VecScatterDestroy(&ipmP->rhs2)); in TaoDestroy_IPM()
483 PetscCall(VecScatterDestroy(&ipmP->rhs3)); in TaoDestroy_IPM()
484 PetscCall(VecScatterDestroy(&ipmP->rhs4)); in TaoDestroy_IPM()
486 PetscCall(VecScatterDestroy(&ipmP->ci_scat)); in TaoDestroy_IPM()
487 PetscCall(VecScatterDestroy(&ipmP->xl_scat)); in TaoDestroy_IPM()
488 PetscCall(VecScatterDestroy(&ipmP->xu_scat)); in TaoDestroy_IPM()
490 PetscCall(VecDestroy(&ipmP->dlambdai)); in TaoDestroy_IPM()
491 PetscCall(VecDestroy(&ipmP->dlambdae)); in TaoDestroy_IPM()
492 PetscCall(VecDestroy(&ipmP->Zero_nb)); in TaoDestroy_IPM()
493 PetscCall(VecDestroy(&ipmP->One_nb)); in TaoDestroy_IPM()
494 PetscCall(VecDestroy(&ipmP->Inf_nb)); in TaoDestroy_IPM()
495 PetscCall(VecDestroy(&ipmP->complementarity)); in TaoDestroy_IPM()
497 PetscCall(VecDestroy(&ipmP->bigrhs)); in TaoDestroy_IPM()
498 PetscCall(VecDestroy(&ipmP->bigstep)); in TaoDestroy_IPM()
499 PetscCall(MatDestroy(&ipmP->Ai)); in TaoDestroy_IPM()
500 PetscCall(MatDestroy(&ipmP->K)); in TaoDestroy_IPM()
501 PetscCall(ISDestroy(&ipmP->isxu)); in TaoDestroy_IPM()
502 PetscCall(ISDestroy(&ipmP->isxl)); in TaoDestroy_IPM()
510 TAO_IPM *ipmP = (TAO_IPM *)tao->data; in TaoSetFromOptions_IPM() local
514 …scOptionsBool("-tao_ipm_monitorkkt", "monitor kkt status", NULL, ipmP->monitorkkt, &ipmP->monitork… in TaoSetFromOptions_IPM()
515 …parameter to push initial slack variables away from bounds", NULL, ipmP->pushs, &ipmP->pushs, NULL… in TaoSetFromOptions_IPM()
516 … push initial (inequality) dual variables away from bounds", NULL, ipmP->pushnu, &ipmP->pushnu, NU… in TaoSetFromOptions_IPM()
566 TAO_IPM *ipmP = (TAO_IPM *)tao->data; in IPMComputeKKT() local
570 PetscCall(VecCopy(tao->gradient, ipmP->rd)); in IPMComputeKKT()
572 if (ipmP->me > 0) { in IPMComputeKKT()
574 PetscCall(MatMultTranspose(tao->jacobian_equality, ipmP->lambdae, ipmP->work)); in IPMComputeKKT()
575 PetscCall(VecAXPY(ipmP->rd, 1.0, ipmP->work)); in IPMComputeKKT()
578 PetscCall(VecCopy(tao->constraints_equality, ipmP->rpe)); in IPMComputeKKT()
580 if (ipmP->nb > 0) { in IPMComputeKKT()
582 PetscCall(MatMultTranspose(ipmP->Ai, ipmP->lambdai, ipmP->work)); in IPMComputeKKT()
583 PetscCall(VecAXPY(ipmP->rd, -1.0, ipmP->work)); in IPMComputeKKT()
586 PetscCall(VecCopy(ipmP->ci, ipmP->rpi)); in IPMComputeKKT()
587 PetscCall(VecAXPY(ipmP->rpi, -1.0, ipmP->s)); in IPMComputeKKT()
590 PetscCall(VecPointwiseMult(ipmP->complementarity, ipmP->s, ipmP->lambdai)); in IPMComputeKKT()
593 PetscCall(VecDot(ipmP->rd, ipmP->rd, &norm)); in IPMComputeKKT()
594 ipmP->phi = norm; in IPMComputeKKT()
595 if (ipmP->me > 0) { in IPMComputeKKT()
596 PetscCall(VecDot(ipmP->rpe, ipmP->rpe, &norm)); in IPMComputeKKT()
597 ipmP->phi += norm; in IPMComputeKKT()
599 if (ipmP->nb > 0) { in IPMComputeKKT()
600 PetscCall(VecDot(ipmP->rpi, ipmP->rpi, &norm)); in IPMComputeKKT()
601 ipmP->phi += norm; in IPMComputeKKT()
602 PetscCall(VecDot(ipmP->complementarity, ipmP->complementarity, &norm)); in IPMComputeKKT()
603 ipmP->phi += norm; in IPMComputeKKT()
605 PetscCall(VecDot(ipmP->s, ipmP->lambdai, &ipmP->mu)); in IPMComputeKKT()
606 ipmP->mu /= ipmP->nb; in IPMComputeKKT()
608 ipmP->mu = 1.0; in IPMComputeKKT()
611 ipmP->phi = PetscSqrtScalar(ipmP->phi); in IPMComputeKKT()
618 TAO_IPM *ipmP = (TAO_IPM *)tao->data; in IPMEvaluate() local
621 PetscCall(TaoComputeObjectiveAndGradient(tao, tao->solution, &ipmP->kkt_f, tao->gradient)); in IPMEvaluate()
623 if (ipmP->me > 0) { in IPMEvaluate()
627 if (ipmP->mi > 0) { in IPMEvaluate()
631 if (ipmP->nb > 0) { in IPMEvaluate()
641 TAO_IPM *ipmP = (TAO_IPM *)tao->data; in IPMPushInitialPoint() local
646 if (ipmP->nb > 0) { in IPMPushInitialPoint()
647 PetscCall(VecSet(ipmP->s, ipmP->pushs)); in IPMPushInitialPoint()
648 PetscCall(VecSet(ipmP->lambdai, ipmP->pushnu)); in IPMPushInitialPoint()
649 if (ipmP->mi > 0) PetscCall(VecSet(tao->DI, ipmP->pushnu)); in IPMPushInitialPoint()
651 if (ipmP->me > 0) { in IPMPushInitialPoint()
653 PetscCall(VecSet(ipmP->lambdae, 1.0)); in IPMPushInitialPoint()
668 TAO_IPM *ipmP = (TAO_IPM *)tao->data; in IPMUpdateAi() local
683 r2 = ipmP->mi; in IPMUpdateAi()
684 r3 = r2 + ipmP->nxlb; in IPMUpdateAi()
685 r4 = r3 + ipmP->nxub; in IPMUpdateAi()
687 if (!ipmP->nb) PetscFunctionReturn(PETSC_SUCCESS); in IPMUpdateAi()
690 if (!ipmP->Ai) { in IPMUpdateAi()
694 PetscCall(PetscMalloc1(ipmP->nb, &nonzeros)); in IPMUpdateAi()
695 for (i = 0; i < ipmP->mi; i++) { in IPMUpdateAi()
702 PetscCall(MatCreate(comm, &ipmP->Ai)); in IPMUpdateAi()
703 PetscCall(MatSetType(ipmP->Ai, MATAIJ)); in IPMUpdateAi()
707 PetscCall(MatSetSizes(ipmP->Ai, PETSC_DECIDE, nloc, ipmP->nb, PETSC_DECIDE)); in IPMUpdateAi()
708 PetscCall(MatSetFromOptions(ipmP->Ai)); in IPMUpdateAi()
709 PetscCall(MatMPIAIJSetPreallocation(ipmP->Ai, ipmP->nb, NULL, ipmP->nb, NULL)); in IPMUpdateAi()
710 PetscCall(MatSeqAIJSetPreallocation(ipmP->Ai, PETSC_DEFAULT, nonzeros)); in IPMUpdateAi()
715 PetscCall(MatGetOwnershipRange(ipmP->Ai, &astart, &aend)); in IPMUpdateAi()
718 if (ipmP->mi) { in IPMUpdateAi()
719 PetscCall(MatZeroEntries(ipmP->Ai)); in IPMUpdateAi()
724 PetscCall(MatSetValues(ipmP->Ai, 1, &newrow, ncols, cols, vals, INSERT_VALUES)); in IPMUpdateAi()
730 if (ipmP->nxlb) { in IPMUpdateAi()
731 for (i = 0; i < ipmP->nxlb; i++) { in IPMUpdateAi()
736 PetscCall(MatSetValues(ipmP->Ai, 1, &newrow, 1, &newcol, &newval, INSERT_VALUES)); in IPMUpdateAi()
740 if (ipmP->nxub) { in IPMUpdateAi()
742 for (i = 0; i < ipmP->nxub; i++) { in IPMUpdateAi()
747 PetscCall(MatSetValues(ipmP->Ai, 1, &newrow, 1, &newcol, &newval, INSERT_VALUES)); in IPMUpdateAi()
752 PetscCall(MatAssemblyBegin(ipmP->Ai, MAT_FINAL_ASSEMBLY)); in IPMUpdateAi()
753 PetscCall(MatAssemblyEnd(ipmP->Ai, MAT_FINAL_ASSEMBLY)); in IPMUpdateAi()
756 PetscCall(VecSet(ipmP->ci, 0.0)); in IPMUpdateAi()
759 if (ipmP->mi > 0) { in IPMUpdateAi()
760 …PetscCall(VecScatterBegin(ipmP->ci_scat, tao->constraints_inequality, ipmP->ci, INSERT_VALUES, SCA… in IPMUpdateAi()
761 …PetscCall(VecScatterEnd(ipmP->ci_scat, tao->constraints_inequality, ipmP->ci, INSERT_VALUES, SCATT… in IPMUpdateAi()
763 if (!ipmP->work) PetscCall(VecDuplicate(tao->solution, &ipmP->work)); in IPMUpdateAi()
764 PetscCall(VecCopy(tao->solution, ipmP->work)); in IPMUpdateAi()
766 PetscCall(VecAXPY(ipmP->work, -1.0, tao->XL)); in IPMUpdateAi()
769 if (ipmP->nxlb > 0) { in IPMUpdateAi()
770 … PetscCall(VecScatterBegin(ipmP->xl_scat, ipmP->work, ipmP->ci, INSERT_VALUES, SCATTER_FORWARD)); in IPMUpdateAi()
771 PetscCall(VecScatterEnd(ipmP->xl_scat, ipmP->work, ipmP->ci, INSERT_VALUES, SCATTER_FORWARD)); in IPMUpdateAi()
776 PetscCall(VecCopy(tao->solution, ipmP->work)); in IPMUpdateAi()
777 PetscCall(VecScale(ipmP->work, -1.0)); in IPMUpdateAi()
778 PetscCall(VecAXPY(ipmP->work, 1.0, tao->XU)); in IPMUpdateAi()
779 if (ipmP->nxub > 0) { in IPMUpdateAi()
780 … PetscCall(VecScatterBegin(ipmP->xu_scat, ipmP->work, ipmP->ci, INSERT_VALUES, SCATTER_FORWARD)); in IPMUpdateAi()
781 PetscCall(VecScatterEnd(ipmP->xu_scat, ipmP->work, ipmP->ci, INSERT_VALUES, SCATTER_FORWARD)); in IPMUpdateAi()
793 TAO_IPM *ipmP = (TAO_IPM *)tao->data; in IPMUpdateK() local
820 subsize = PetscMax(ipmP->n, ipmP->nb); in IPMUpdateK()
821 subsize = PetscMax(ipmP->me, subsize); in IPMUpdateK()
826 r1 = c1 = ipmP->n; in IPMUpdateK()
827 r2 = r1 + ipmP->me; in IPMUpdateK()
828 c2 = c1 + ipmP->nb; in IPMUpdateK()
829 r3 = c3 = r2 + ipmP->nb; in IPMUpdateK()
831 bigsize = ipmP->n + 2 * ipmP->nb + ipmP->me; in IPMUpdateK()
832 PetscCall(VecGetOwnershipRange(ipmP->bigrhs, &kstart, &kend)); in IPMUpdateK()
835 if (!ipmP->K) { in IPMUpdateK()
843 nonzeros[i] += ipmP->me + ipmP->nb; in IPMUpdateK()
845 nonzeros[i - kstart] = ipmP->n; in IPMUpdateK()
847 nonzeros[i - kstart] = ipmP->n + 1; in IPMUpdateK()
852 PetscCall(MatCreate(comm, &ipmP->K)); in IPMUpdateK()
853 PetscCall(MatSetType(ipmP->K, MATSEQAIJ)); in IPMUpdateK()
854 PetscCall(MatSetSizes(ipmP->K, klocalsize, klocalsize, PETSC_DETERMINE, PETSC_DETERMINE)); in IPMUpdateK()
855 PetscCall(MatSeqAIJSetPreallocation(ipmP->K, 0, nonzeros)); in IPMUpdateK()
856 PetscCall(MatSetFromOptions(ipmP->K)); in IPMUpdateK()
864 d_nonzeros[i - kstart] = PetscMin(ipmP->n + ipmP->me + ipmP->nb, kend - kstart); in IPMUpdateK()
865 … o_nonzeros[i - kstart] = PetscMin(ipmP->n + ipmP->me + ipmP->nb, bigsize - (kend - kstart)); in IPMUpdateK()
867 d_nonzeros[i - kstart] = PetscMin(ipmP->n, kend - kstart); in IPMUpdateK()
868 o_nonzeros[i - kstart] = PetscMin(ipmP->n, bigsize - (kend - kstart)); in IPMUpdateK()
870 d_nonzeros[i - kstart] = PetscMin(ipmP->n + 2, kend - kstart); in IPMUpdateK()
871 o_nonzeros[i - kstart] = PetscMin(ipmP->n + 2, bigsize - (kend - kstart)); in IPMUpdateK()
877 PetscCall(MatCreate(comm, &ipmP->K)); in IPMUpdateK()
878 PetscCall(MatSetType(ipmP->K, MATMPIAIJ)); in IPMUpdateK()
879 PetscCall(MatSetSizes(ipmP->K, klocalsize, klocalsize, PETSC_DETERMINE, PETSC_DETERMINE)); in IPMUpdateK()
880 PetscCall(MatMPIAIJSetPreallocation(ipmP->K, 0, d_nonzeros, 0, o_nonzeros)); in IPMUpdateK()
883 PetscCall(MatSetFromOptions(ipmP->K)); in IPMUpdateK()
887 PetscCall(MatZeroEntries(ipmP->K)); in IPMUpdateK()
891 if (ncols > 0) PetscCall(MatSetValues(ipmP->K, 1, &i, ncols, cols, vals, INSERT_VALUES)); in IPMUpdateK()
896 if (ipmP->me > 0) { in IPMUpdateK()
903 PetscCall(MatSetValues(ipmP->K, 1, &row, ncols, cols, vals, INSERT_VALUES)); in IPMUpdateK()
909 PetscCall(MatSetValues(ipmP->K, 1, &newrow, 1, &newcol, &newval, INSERT_VALUES)); in IPMUpdateK()
916 if (ipmP->nb > 0) { in IPMUpdateK()
917 PetscCall(MatGetOwnershipRange(ipmP->Ai, &aistart, &aiend)); in IPMUpdateK()
921 PetscCall(MatGetRow(ipmP->Ai, i, &ncols, &cols, &vals)); in IPMUpdateK()
924 PetscCall(MatSetValues(ipmP->K, 1, &row, ncols, cols, vals, INSERT_VALUES)); in IPMUpdateK()
930 PetscCall(MatSetValues(ipmP->K, 1, &newrow, 1, &newcol, &newval, INSERT_VALUES)); in IPMUpdateK()
933 PetscCall(MatRestoreRow(ipmP->Ai, i, &ncols, &cols, &vals)); in IPMUpdateK()
942 PetscCall(MatSetValues(ipmP->K, 1, &newrow, 1, &newcol, &newval, INSERT_VALUES)); in IPMUpdateK()
947 PetscCall(VecGetOwnershipRange(ipmP->s, &sstart, &send)); in IPMUpdateK()
948 PetscCall(VecGetArrayRead(ipmP->lambdai, &l)); in IPMUpdateK()
949 PetscCall(VecGetArrayRead(ipmP->s, &y)); in IPMUpdateK()
957 PetscCall(MatSetValues(ipmP->K, 1, &newrow, 2, newcols, newvals, INSERT_VALUES)); in IPMUpdateK()
960 PetscCall(VecRestoreArrayRead(ipmP->lambdai, &l)); in IPMUpdateK()
961 PetscCall(VecRestoreArrayRead(ipmP->s, &y)); in IPMUpdateK()
966 PetscCall(MatAssemblyBegin(ipmP->K, MAT_FINAL_ASSEMBLY)); in IPMUpdateK()
967 PetscCall(MatAssemblyEnd(ipmP->K, MAT_FINAL_ASSEMBLY)); in IPMUpdateK()
973 TAO_IPM *ipmP = (TAO_IPM *)tao->data; in IPMGatherRHS() local
981 PetscCall(VecScatterBegin(ipmP->rhs1, X1, RHS, INSERT_VALUES, SCATTER_FORWARD)); in IPMGatherRHS()
982 PetscCall(VecScatterEnd(ipmP->rhs1, X1, RHS, INSERT_VALUES, SCATTER_FORWARD)); in IPMGatherRHS()
984 if (ipmP->me > 0 && X2) { in IPMGatherRHS()
985 PetscCall(VecScatterBegin(ipmP->rhs2, X2, RHS, INSERT_VALUES, SCATTER_FORWARD)); in IPMGatherRHS()
986 PetscCall(VecScatterEnd(ipmP->rhs2, X2, RHS, INSERT_VALUES, SCATTER_FORWARD)); in IPMGatherRHS()
988 if (ipmP->nb > 0) { in IPMGatherRHS()
990 PetscCall(VecScatterBegin(ipmP->rhs3, X3, RHS, INSERT_VALUES, SCATTER_FORWARD)); in IPMGatherRHS()
991 PetscCall(VecScatterEnd(ipmP->rhs3, X3, RHS, INSERT_VALUES, SCATTER_FORWARD)); in IPMGatherRHS()
994 PetscCall(VecScatterBegin(ipmP->rhs4, X4, RHS, INSERT_VALUES, SCATTER_FORWARD)); in IPMGatherRHS()
995 PetscCall(VecScatterEnd(ipmP->rhs4, X4, RHS, INSERT_VALUES, SCATTER_FORWARD)); in IPMGatherRHS()
1003 TAO_IPM *ipmP = (TAO_IPM *)tao->data; in IPMScatterStep() local
1012 PetscCall(VecScatterBegin(ipmP->step1, STEP, X1, INSERT_VALUES, SCATTER_FORWARD)); in IPMScatterStep()
1013 PetscCall(VecScatterEnd(ipmP->step1, STEP, X1, INSERT_VALUES, SCATTER_FORWARD)); in IPMScatterStep()
1015 if (X2 && ipmP->nb > 0) { in IPMScatterStep()
1016 PetscCall(VecScatterBegin(ipmP->step2, STEP, X2, INSERT_VALUES, SCATTER_FORWARD)); in IPMScatterStep()
1017 PetscCall(VecScatterEnd(ipmP->step2, STEP, X2, INSERT_VALUES, SCATTER_FORWARD)); in IPMScatterStep()
1019 if (X3 && ipmP->me > 0) { in IPMScatterStep()
1020 PetscCall(VecScatterBegin(ipmP->step3, STEP, X3, INSERT_VALUES, SCATTER_FORWARD)); in IPMScatterStep()
1021 PetscCall(VecScatterEnd(ipmP->step3, STEP, X3, INSERT_VALUES, SCATTER_FORWARD)); in IPMScatterStep()
1023 if (X4 && ipmP->nb > 0) { in IPMScatterStep()
1024 PetscCall(VecScatterBegin(ipmP->step4, STEP, X4, INSERT_VALUES, SCATTER_FORWARD)); in IPMScatterStep()
1025 PetscCall(VecScatterEnd(ipmP->step4, STEP, X4, INSERT_VALUES, SCATTER_FORWARD)); in IPMScatterStep()
1047 TAO_IPM *ipmP; in TaoCreate_IPM() local
1057 PetscCall(PetscNew(&ipmP)); in TaoCreate_IPM()
1058 tao->data = (void *)ipmP; in TaoCreate_IPM()
1065 ipmP->dec = 10000; /* line search criteria */ in TaoCreate_IPM()
1066 ipmP->taumin = 0.995; in TaoCreate_IPM()
1067 ipmP->monitorkkt = PETSC_FALSE; in TaoCreate_IPM()
1068 ipmP->pushs = 100; in TaoCreate_IPM()
1069 ipmP->pushnu = 100; in TaoCreate_IPM()