Lines Matching refs:pdipm

18   TAO_PDIPM *pdipm = (TAO_PDIPM *)tao->data;  in TaoPDIPMEvaluateFunctionsAndJacobians()  local
22 PetscCall(TaoComputeObjectiveAndGradient(tao, x, &pdipm->obj, tao->gradient)); in TaoPDIPMEvaluateFunctionsAndJacobians()
25 if (pdipm->Ng) { in TaoPDIPMEvaluateFunctionsAndJacobians()
31 if (pdipm->Nh) { in TaoPDIPMEvaluateFunctionsAndJacobians()
53 TAO_PDIPM *pdipm = (TAO_PDIPM *)tao->data; in TaoPDIPMUpdateConstraints() local
66 PetscCall(VecGetArrayWrite(pdipm->ce, &carr)); in TaoPDIPMUpdateConstraints()
68 if (pdipm->Ng) { in TaoPDIPMUpdateConstraints()
71 PetscCall(PetscArraycpy(carr, garr, pdipm->ng)); in TaoPDIPMUpdateConstraints()
76 if (pdipm->Nxfixed) { in TaoPDIPMUpdateConstraints()
77 offset = pdipm->ng; in TaoPDIPMUpdateConstraints()
78 PetscCall(ISGetIndices(pdipm->isxfixed, &fxptr)); /* global indices in x */ in TaoPDIPMUpdateConstraints()
79 for (k = 0; k < pdipm->nxfixed; k++) { in TaoPDIPMUpdateConstraints()
84 PetscCall(VecRestoreArrayWrite(pdipm->ce, &carr)); in TaoPDIPMUpdateConstraints()
87 PetscCall(VecGetArrayWrite(pdipm->ci, &carr)); in TaoPDIPMUpdateConstraints()
89 if (pdipm->Nh) { in TaoPDIPMUpdateConstraints()
92 PetscCall(PetscArraycpy(carr, harr, pdipm->nh)); in TaoPDIPMUpdateConstraints()
97 offset = pdipm->nh; in TaoPDIPMUpdateConstraints()
98 if (pdipm->Nxub) { in TaoPDIPMUpdateConstraints()
99 PetscCall(ISGetIndices(pdipm->isxub, &ubptr)); in TaoPDIPMUpdateConstraints()
100 for (k = 0; k < pdipm->nxub; k++) { in TaoPDIPMUpdateConstraints()
106 if (pdipm->Nxlb) { in TaoPDIPMUpdateConstraints()
108 offset += pdipm->nxub; in TaoPDIPMUpdateConstraints()
109 PetscCall(ISGetIndices(pdipm->isxlb, &lbptr)); /* global indices in x */ in TaoPDIPMUpdateConstraints()
110 for (k = 0; k < pdipm->nxlb; k++) { in TaoPDIPMUpdateConstraints()
116 if (pdipm->Nxbox) { in TaoPDIPMUpdateConstraints()
118 offset += pdipm->nxlb; in TaoPDIPMUpdateConstraints()
119 offset1 = offset + pdipm->nxbox; in TaoPDIPMUpdateConstraints()
120 PetscCall(ISGetIndices(pdipm->isxbox, &bxptr)); /* global indices in x */ in TaoPDIPMUpdateConstraints()
121 for (k = 0; k < pdipm->nxbox; k++) { in TaoPDIPMUpdateConstraints()
127 PetscCall(VecRestoreArrayWrite(pdipm->ci, &carr)); in TaoPDIPMUpdateConstraints()
150 TAO_PDIPM *pdipm = (TAO_PDIPM *)tao->data; in TaoPDIPMSetUpBounds() local
170 ixfixed[pdipm->nxfixed++] = idx; in TaoPDIPMSetUpBounds()
171 } else ixbox[pdipm->nxbox++] = idx; in TaoPDIPMSetUpBounds()
174 ixlb[pdipm->nxlb++] = idx; in TaoPDIPMSetUpBounds()
176 ixub[pdipm->nxlb++] = idx; in TaoPDIPMSetUpBounds()
177 } else ixfree[pdipm->nxfree++] = idx; in TaoPDIPMSetUpBounds()
184 sendbuf[0] = pdipm->nxlb; in TaoPDIPMSetUpBounds()
185 sendbuf[1] = pdipm->nxub; in TaoPDIPMSetUpBounds()
186 sendbuf[2] = pdipm->nxfixed; in TaoPDIPMSetUpBounds()
187 sendbuf[3] = pdipm->nxbox; in TaoPDIPMSetUpBounds()
188 sendbuf[4] = pdipm->nxfree; in TaoPDIPMSetUpBounds()
191 pdipm->Nxlb = recvbuf[0]; in TaoPDIPMSetUpBounds()
192 pdipm->Nxub = recvbuf[1]; in TaoPDIPMSetUpBounds()
193 pdipm->Nxfixed = recvbuf[2]; in TaoPDIPMSetUpBounds()
194 pdipm->Nxbox = recvbuf[3]; in TaoPDIPMSetUpBounds()
195 pdipm->Nxfree = recvbuf[4]; in TaoPDIPMSetUpBounds()
197 …if (pdipm->Nxlb) PetscCall(ISCreateGeneral(comm, pdipm->nxlb, ixlb, PETSC_COPY_VALUES, &pdipm->isx… in TaoPDIPMSetUpBounds()
198 …if (pdipm->Nxub) PetscCall(ISCreateGeneral(comm, pdipm->nxub, ixub, PETSC_COPY_VALUES, &pdipm->isx… in TaoPDIPMSetUpBounds()
199 …if (pdipm->Nxfixed) PetscCall(ISCreateGeneral(comm, pdipm->nxfixed, ixfixed, PETSC_COPY_VALUES, &p… in TaoPDIPMSetUpBounds()
200 …if (pdipm->Nxbox) PetscCall(ISCreateGeneral(comm, pdipm->nxbox, ixbox, PETSC_COPY_VALUES, &pdipm->… in TaoPDIPMSetUpBounds()
201 …if (pdipm->Nxfree) PetscCall(ISCreateGeneral(comm, pdipm->nxfree, ixfree, PETSC_COPY_VALUES, &pdip… in TaoPDIPMSetUpBounds()
222 TAO_PDIPM *pdipm = (TAO_PDIPM *)tao->data; in TaoPDIPMInitializeSolution() local
228 PetscCall(VecGetArrayWrite(pdipm->X, &Xarr)); in TaoPDIPMInitializeSolution()
232 PetscCall(PetscArraycpy(Xarr, xarr, pdipm->nx)); in TaoPDIPMInitializeSolution()
236 if (pdipm->lambdae) PetscCall(VecSet(pdipm->lambdae, 0.0)); in TaoPDIPMInitializeSolution()
239 if (pdipm->Nci) { in TaoPDIPMInitializeSolution()
240 PetscCall(VecSet(pdipm->lambdai, pdipm->push_init_lambdai)); in TaoPDIPMInitializeSolution()
241 PetscCall(VecSet(pdipm->z, pdipm->push_init_slack)); in TaoPDIPMInitializeSolution()
244 PetscCall(VecGetArrayWrite(pdipm->lambdai, &lambdai)); in TaoPDIPMInitializeSolution()
245 PetscCall(VecGetArrayWrite(pdipm->z, &z)); in TaoPDIPMInitializeSolution()
246 if (pdipm->Nh) { in TaoPDIPMInitializeSolution()
248 for (i = 0; i < pdipm->nh; i++) { in TaoPDIPMInitializeSolution()
249 if (h[i] < -pdipm->push_init_slack) z[i] = -h[i]; in TaoPDIPMInitializeSolution()
250 if (pdipm->mu / z[i] > pdipm->push_init_lambdai) lambdai[i] = pdipm->mu / z[i]; in TaoPDIPMInitializeSolution()
254 PetscCall(VecRestoreArrayWrite(pdipm->lambdai, &lambdai)); in TaoPDIPMInitializeSolution()
255 PetscCall(VecRestoreArrayWrite(pdipm->z, &z)); in TaoPDIPMInitializeSolution()
258 PetscCall(VecRestoreArrayWrite(pdipm->X, &Xarr)); in TaoPDIPMInitializeSolution()
277 TAO_PDIPM *pdipm = (TAO_PDIPM *)tao->data; in TaoSNESJacobian_PDIPM() local
282 PetscInt proc, nx_all, *nce_all = pdipm->nce_all; in TaoSNESJacobian_PDIPM()
293 if (pdipm->solve_symmetric_kkt) { /* 1 for eq 17 revised pdipm doc 0 for eq 18 (symmetric KKT) */ in TaoSNESJacobian_PDIPM()
295 for (i = 0; i < pdipm->nci; i++) { in TaoSNESJacobian_PDIPM()
296 row = Jrstart + pdipm->off_z + i; in TaoSNESJacobian_PDIPM()
297 cols[0] = Jrstart + pdipm->off_lambdai + i; in TaoSNESJacobian_PDIPM()
299 vals[1] = Xarr[pdipm->off_lambdai + i] / Xarr[pdipm->off_z + i]; in TaoSNESJacobian_PDIPM()
303 for (i = 0; i < pdipm->nci; i++) { in TaoSNESJacobian_PDIPM()
304 row = Jrstart + pdipm->off_z + i; in TaoSNESJacobian_PDIPM()
305 cols[0] = Jrstart + pdipm->off_lambdai + i; in TaoSNESJacobian_PDIPM()
307 vals[0] = Xarr[pdipm->off_z + i]; in TaoSNESJacobian_PDIPM()
308 vals[1] = Xarr[pdipm->off_lambdai + i]; in TaoSNESJacobian_PDIPM()
314 if (pdipm->Ng) { in TaoSNESJacobian_PDIPM()
316 for (i = 0; i < pdipm->ng; i++) { in TaoSNESJacobian_PDIPM()
317 row = Jrstart + pdipm->off_lambdae + i; in TaoSNESJacobian_PDIPM()
327 if (pdipm->kkt_pd) { in TaoSNESJacobian_PDIPM()
329 PetscCall(MatSetValue(Jpre, row, row, -pdipm->deltac, INSERT_VALUES)); in TaoSNESJacobian_PDIPM()
335 if (pdipm->Nh) { in TaoSNESJacobian_PDIPM()
337 for (i = 0; i < pdipm->nh; i++) { in TaoSNESJacobian_PDIPM()
338 row = Jrstart + pdipm->off_lambdai + i; in TaoSNESJacobian_PDIPM()
347 if (pdipm->kkt_pd) { in TaoSNESJacobian_PDIPM()
349 PetscCall(MatSetValue(Jpre, row, row, -pdipm->deltac, INSERT_VALUES)); in TaoSNESJacobian_PDIPM()
355 if (pdipm->Ng) { /* grad g' */ in TaoSNESJacobian_PDIPM()
356 PetscCall(MatTranspose(tao->jacobian_equality, MAT_REUSE_MATRIX, &pdipm->jac_equality_trans)); in TaoSNESJacobian_PDIPM()
358 if (pdipm->Nh) { /* grad h' */ in TaoSNESJacobian_PDIPM()
359 … PetscCall(MatTranspose(tao->jacobian_inequality, MAT_REUSE_MATRIX, &pdipm->jac_inequality_trans)); in TaoSNESJacobian_PDIPM()
362 PetscCall(VecPlaceArray(pdipm->x, Xarr)); in TaoSNESJacobian_PDIPM()
363 PetscCall(TaoComputeHessian(tao, pdipm->x, tao->hessian, tao->hessian_pre)); in TaoSNESJacobian_PDIPM()
364 PetscCall(VecResetArray(pdipm->x)); in TaoSNESJacobian_PDIPM()
367 for (i = 0; i < pdipm->nx; i++) { in TaoSNESJacobian_PDIPM()
376 if (row == cols[0] && pdipm->kkt_pd) { in TaoSNESJacobian_PDIPM()
378 PetscCall(MatSetValue(Jpre, row, cols[0], aa[j] + pdipm->deltaw, INSERT_VALUES)); in TaoSNESJacobian_PDIPM()
386 if (pdipm->ng) { in TaoSNESJacobian_PDIPM()
387 PetscCall(MatGetRow(pdipm->jac_equality_trans, i + rjstart, &nc, &aj, &aa)); in TaoSNESJacobian_PDIPM()
397 PetscCall(MatRestoreRow(pdipm->jac_equality_trans, i + rjstart, &nc, &aj, &aa)); in TaoSNESJacobian_PDIPM()
401 if (pdipm->nh) { in TaoSNESJacobian_PDIPM()
402 PetscCall(MatGetRow(pdipm->jac_inequality_trans, i + rjstart, &nc, &aj, &aa)); in TaoSNESJacobian_PDIPM()
412 PetscCall(MatRestoreRow(pdipm->jac_inequality_trans, i + rjstart, &nc, &aj, &aa)); in TaoSNESJacobian_PDIPM()
442 TAO_PDIPM *pdipm = (TAO_PDIPM *)tao->data; in TaoSNESFunction_PDIPM() local
455 x = pdipm->x; in TaoSNESFunction_PDIPM()
464 L1 = pdipm->x; in TaoSNESFunction_PDIPM()
466 if (pdipm->Nci) { in TaoSNESFunction_PDIPM()
467 if (pdipm->Nh) { in TaoSNESFunction_PDIPM()
469 PetscCall(VecPlaceArray(tao->DI, Xarr + pdipm->off_lambdai)); in TaoSNESFunction_PDIPM()
475 PetscCall(VecPlaceArray(pdipm->lambdai_xb, Xarr + pdipm->off_lambdai + pdipm->nh)); in TaoSNESFunction_PDIPM()
476 PetscCall(MatMultTransposeAdd(pdipm->Jci_xb, pdipm->lambdai_xb, L1, L1)); in TaoSNESFunction_PDIPM()
477 PetscCall(VecResetArray(pdipm->lambdai_xb)); in TaoSNESFunction_PDIPM()
486 if (pdipm->Nce) { in TaoSNESFunction_PDIPM()
487 if (pdipm->Ng) { in TaoSNESFunction_PDIPM()
489 PetscCall(VecPlaceArray(tao->DE, Xarr + pdipm->off_lambdae)); in TaoSNESFunction_PDIPM()
493 if (pdipm->Nxfixed) { in TaoSNESFunction_PDIPM()
495 PetscCall(VecPlaceArray(pdipm->lambdae_xfixed, Xarr + pdipm->off_lambdae + pdipm->ng)); in TaoSNESFunction_PDIPM()
496 PetscCall(MatMultTransposeAdd(pdipm->Jce_xfixed, pdipm->lambdae_xfixed, L1, L1)); in TaoSNESFunction_PDIPM()
497 PetscCall(VecResetArray(pdipm->lambdae_xfixed)); in TaoSNESFunction_PDIPM()
503 if (pdipm->Nce) { in TaoSNESFunction_PDIPM()
504 PetscCall(VecGetArrayRead(pdipm->ce, &carr)); in TaoSNESFunction_PDIPM()
505 for (i = 0; i < pdipm->nce; i++) Farr[pdipm->off_lambdae + i] = carr[i]; in TaoSNESFunction_PDIPM()
506 PetscCall(VecRestoreArrayRead(pdipm->ce, &carr)); in TaoSNESFunction_PDIPM()
509 if (pdipm->Nci) { in TaoSNESFunction_PDIPM()
510 if (pdipm->solve_symmetric_kkt) { in TaoSNESFunction_PDIPM()
513 PetscCall(VecGetArrayRead(pdipm->ci, &carr)); in TaoSNESFunction_PDIPM()
514 larr = Xarr + pdipm->off_lambdai; in TaoSNESFunction_PDIPM()
515 zarr = Xarr + pdipm->off_z; in TaoSNESFunction_PDIPM()
516 for (i = 0; i < pdipm->nci; i++) { in TaoSNESFunction_PDIPM()
517 Farr[pdipm->off_lambdai + i] = zarr[i] - carr[i]; in TaoSNESFunction_PDIPM()
518 Farr[pdipm->off_z + i] = larr[i] - pdipm->mu / zarr[i]; in TaoSNESFunction_PDIPM()
520 PetscCall(VecRestoreArrayRead(pdipm->ci, &carr)); in TaoSNESFunction_PDIPM()
524 PetscCall(VecGetArrayRead(pdipm->ci, &carr)); in TaoSNESFunction_PDIPM()
525 larr = Xarr + pdipm->off_lambdai; in TaoSNESFunction_PDIPM()
526 zarr = Xarr + pdipm->off_z; in TaoSNESFunction_PDIPM()
527 for (i = 0; i < pdipm->nci; i++) { in TaoSNESFunction_PDIPM()
528 Farr[pdipm->off_lambdai + i] = zarr[i] - carr[i]; in TaoSNESFunction_PDIPM()
529 Farr[pdipm->off_z + i] = zarr[i] * larr[i] - pdipm->mu; in TaoSNESFunction_PDIPM()
531 PetscCall(VecRestoreArrayRead(pdipm->ci, &carr)); in TaoSNESFunction_PDIPM()
547 TAO_PDIPM *pdipm = (TAO_PDIPM *)tao->data; in TaoSNESFunction_PDIPM_residual() local
560 L1 = pdipm->x; in TaoSNESFunction_PDIPM_residual()
566 if (pdipm->z) { in TaoSNESFunction_PDIPM_residual()
567 if (pdipm->solve_symmetric_kkt) { in TaoSNESFunction_PDIPM_residual()
568 PetscCall(VecPlaceArray(pdipm->z, Farr + pdipm->off_z)); in TaoSNESFunction_PDIPM_residual()
569 if (pdipm->Nci) { in TaoSNESFunction_PDIPM_residual()
570 PetscCall(VecGetArrayWrite(pdipm->z, &tmparr)); in TaoSNESFunction_PDIPM_residual()
571 for (i = 0; i < pdipm->nci; i++) tmparr[i] *= Xarr[pdipm->off_z + i]; in TaoSNESFunction_PDIPM_residual()
572 PetscCall(VecRestoreArrayWrite(pdipm->z, &tmparr)); in TaoSNESFunction_PDIPM_residual()
575 PetscCall(VecNorm(pdipm->z, NORM_2, &res[1])); in TaoSNESFunction_PDIPM_residual()
577 if (pdipm->Nci) { in TaoSNESFunction_PDIPM_residual()
578 PetscCall(VecGetArrayWrite(pdipm->z, &tmparr)); in TaoSNESFunction_PDIPM_residual()
579 for (i = 0; i < pdipm->nci; i++) tmparr[i] /= Xarr[pdipm->off_z + i]; in TaoSNESFunction_PDIPM_residual()
580 PetscCall(VecRestoreArrayWrite(pdipm->z, &tmparr)); in TaoSNESFunction_PDIPM_residual()
582 PetscCall(VecResetArray(pdipm->z)); in TaoSNESFunction_PDIPM_residual()
584 PetscCall(VecPlaceArray(pdipm->z, Farr + pdipm->off_z)); in TaoSNESFunction_PDIPM_residual()
585 PetscCall(VecNorm(pdipm->z, NORM_2, &res[1])); in TaoSNESFunction_PDIPM_residual()
586 PetscCall(VecResetArray(pdipm->z)); in TaoSNESFunction_PDIPM_residual()
589 PetscCall(VecPlaceArray(pdipm->ci, Farr + pdipm->off_lambdai)); in TaoSNESFunction_PDIPM_residual()
590 PetscCall(VecNorm(pdipm->ci, NORM_2, &cnorm[1])); in TaoSNESFunction_PDIPM_residual()
591 PetscCall(VecResetArray(pdipm->ci)); in TaoSNESFunction_PDIPM_residual()
598 if (pdipm->Nce) { in TaoSNESFunction_PDIPM_residual()
599 PetscCall(VecPlaceArray(pdipm->ce, Farr + pdipm->off_lambdae)); in TaoSNESFunction_PDIPM_residual()
600 PetscCall(VecNorm(pdipm->ce, NORM_2, &cnorm[0])); in TaoSNESFunction_PDIPM_residual()
601 PetscCall(VecResetArray(pdipm->ce)); in TaoSNESFunction_PDIPM_residual()
610 tao->step = pdipm->mu; in TaoSNESFunction_PDIPM_residual()
621 TAO_PDIPM *pdipm; in PCPostSetUp_PDIPM() local
631 pdipm = (TAO_PDIPM *)tao->data; in PCPostSetUp_PDIPM()
632 X = pdipm->X; in PCPostSetUp_PDIPM()
633 snes = pdipm->snes; in PCPostSetUp_PDIPM()
644 if (npos < pdipm->Nx + pdipm->Nci) { in PCPostSetUp_PDIPM()
645 pdipm->deltaw = PetscMax(pdipm->lastdeltaw / 3, 1.e-4 * PETSC_MACHINE_EPSILON); in PCPostSetUp_PDIPM()
646 … %" PetscInt_FMT "(<%" PetscInt_FMT ")\n", (double)pdipm->deltaw, nneg, nzero, npos, pdipm->Nx + p… in PCPostSetUp_PDIPM()
647 PetscCall(TaoSNESJacobian_PDIPM(snes, X, pdipm->K, pdipm->K, tao)); in PCPostSetUp_PDIPM()
652 if (npos < pdipm->Nx + pdipm->Nci) { in PCPostSetUp_PDIPM()
653pdipm->deltaw = pdipm->lastdeltaw; /* in case reduction … in PCPostSetUp_PDIPM()
654 … while (npos < pdipm->Nx + pdipm->Nci && pdipm->deltaw <= 1. / PETSC_SMALL) { /* increase deltaw */ in PCPostSetUp_PDIPM()
655 … %" PetscInt_FMT "(<%" PetscInt_FMT ")\n", (double)pdipm->deltaw, nneg, nzero, npos, pdipm->Nx + p… in PCPostSetUp_PDIPM()
656 pdipm->deltaw = PetscMin(8 * pdipm->deltaw, PetscPowReal(10, 20)); in PCPostSetUp_PDIPM()
657 PetscCall(TaoSNESJacobian_PDIPM(snes, X, pdipm->K, pdipm->K, tao)); in PCPostSetUp_PDIPM()
662 …PetscCheck(pdipm->deltaw < 1. / PETSC_SMALL, PetscObjectComm((PetscObject)tao), PETSC_ERR_CONV_FAI… in PCPostSetUp_PDIPM()
664 PetscCall(PetscInfo(tao, "Updated deltaw %g\n", (double)pdipm->deltaw)); in PCPostSetUp_PDIPM()
665 pdipm->lastdeltaw = pdipm->deltaw; in PCPostSetUp_PDIPM()
666 pdipm->deltaw = 0.0; in PCPostSetUp_PDIPM()
671 if (pdipm->deltac == 0.0) { in PCPostSetUp_PDIPM()
672 pdipm->deltac = PETSC_SQRT_MACHINE_EPSILON; in PCPostSetUp_PDIPM()
674 pdipm->deltac = pdipm->deltac * PetscPowReal(pdipm->mu, .25); in PCPostSetUp_PDIPM()
676 …t_FMT ", nzero %" PetscInt_FMT "(!=0), npos %" PetscInt_FMT "\n", (double)pdipm->deltac, nneg, nze… in PCPostSetUp_PDIPM()
677 PetscCall(TaoSNESJacobian_PDIPM(snes, X, pdipm->K, pdipm->K, tao)); in PCPostSetUp_PDIPM()
703 TAO_PDIPM *pdipm = (TAO_PDIPM *)tao->data; in SNESLineSearch_PDIPM() local
720 z = Xarr + pdipm->off_z; in SNESLineSearch_PDIPM()
721 dz = dXarr + pdipm->off_z; in SNESLineSearch_PDIPM()
722 for (i = 0; i < pdipm->nci; i++) { in SNESLineSearch_PDIPM()
726 lambdai = Xarr + pdipm->off_lambdai; in SNESLineSearch_PDIPM()
727 dlambdai = dXarr + pdipm->off_lambdai; in SNESLineSearch_PDIPM()
729 for (i = 0; i < pdipm->nci; i++) { in SNESLineSearch_PDIPM()
747 for (i = 0; i < pdipm->nx; i++) Xarr[i] -= alpha_p * dXarr[i]; in SNESLineSearch_PDIPM()
748 …for (i = 0; i < pdipm->nce; i++) Xarr[i + pdipm->off_lambdae] -= alpha_d * dXarr[i + pdipm->off_la… in SNESLineSearch_PDIPM()
750 for (i = 0; i < pdipm->nci; i++) { in SNESLineSearch_PDIPM()
751 Xarr[i + pdipm->off_lambdai] -= alpha_d * dXarr[i + pdipm->off_lambdai]; in SNESLineSearch_PDIPM()
752 Xarr[i + pdipm->off_z] -= alpha_p * dXarr[i + pdipm->off_z]; in SNESLineSearch_PDIPM()
755 PetscCall(PetscArraycpy(taosolarr, Xarr, pdipm->nx)); in SNESLineSearch_PDIPM()
762 if (pdipm->z) PetscCall(VecDot(pdipm->z, pdipm->lambdai, &dot)); in SNESLineSearch_PDIPM()
766 pdipm->mu = pdipm->mu_update_factor * dot / pdipm->Nci; in SNESLineSearch_PDIPM()
772 PetscCall(TaoLogConvergenceHistory(tao, pdipm->obj, tao->residual, tao->cnorm, tao->niter)); in SNESLineSearch_PDIPM()
773 PetscCall(TaoMonitor(tao, tao->niter, pdipm->obj, tao->residual, tao->cnorm, pdipm->mu)); in SNESLineSearch_PDIPM()
782 TAO_PDIPM *pdipm = (TAO_PDIPM *)tao->data; in TaoSolve_PDIPM() local
793 PetscCall(SNESGetLineSearch(pdipm->snes, &linesearch)); in TaoSolve_PDIPM()
801 PetscCall(VecDuplicate(pdipm->X, &dummy)); in TaoSolve_PDIPM()
802 PetscCall(TaoSNESFunction_PDIPM_residual(pdipm->snes, pdipm->X, dummy, (void *)tao)); in TaoSolve_PDIPM()
804 PetscCall(TaoLogConvergenceHistory(tao, pdipm->obj, tao->residual, tao->cnorm, tao->niter)); in TaoSolve_PDIPM()
805 PetscCall(TaoMonitor(tao, tao->niter, pdipm->obj, tao->residual, tao->cnorm, pdipm->mu)); in TaoSolve_PDIPM()
808 if (tao->reason) PetscCall(SNESSetConvergedReason(pdipm->snes, SNES_CONVERGED_FNORM_ABS)); in TaoSolve_PDIPM()
812 PetscCall(SNESSolve(pdipm->snes, NULL, pdipm->X)); in TaoSolve_PDIPM()
815 PetscCall(SNESGetConvergedReason(pdipm->snes, &reason)); in TaoSolve_PDIPM()
816 …if (reason < 0) PetscCall(PetscPrintf(PetscObjectComm((PetscObject)pdipm->snes), "SNES solve did n… in TaoSolve_PDIPM()
819 …PetscCheck(!PetscIsInfOrNanReal(pdipm->obj), PETSC_COMM_SELF, PETSC_ERR_SUP, "User-provided comput… in TaoSolve_PDIPM()
826 TAO_PDIPM *pdipm = (TAO_PDIPM *)tao->data; in TaoView_PDIPM() local
831 …" PetscInt_FMT ", Number of dual=%" PetscInt_FMT "\n", pdipm->Nx + pdipm->Nci, pdipm->Nce + pdipm-… in TaoView_PDIPM()
832 …if (pdipm->kkt_pd) PetscCall(PetscViewerASCIIPrintf(viewer, "KKT shifts deltaw=%g, deltac=%g\n", (… in TaoView_PDIPM()
839 TAO_PDIPM *pdipm = (TAO_PDIPM *)tao->data; in TaoSetup_PDIPM() local
865 PetscCall(VecGetSize(tao->solution, &pdipm->Nx)); in TaoSetup_PDIPM()
866 PetscCall(VecGetLocalSize(tao->solution, &pdipm->nx)); in TaoSetup_PDIPM()
870 PetscCall(VecGetSize(tao->constraints_equality, &pdipm->Ng)); in TaoSetup_PDIPM()
871 PetscCall(VecGetLocalSize(tao->constraints_equality, &pdipm->ng)); in TaoSetup_PDIPM()
873 pdipm->ng = pdipm->Ng = 0; in TaoSetup_PDIPM()
876 pdipm->nce = pdipm->ng + pdipm->nxfixed; in TaoSetup_PDIPM()
877 pdipm->Nce = pdipm->Ng + pdipm->Nxfixed; in TaoSetup_PDIPM()
881 PetscCall(VecGetSize(tao->constraints_inequality, &pdipm->Nh)); in TaoSetup_PDIPM()
882 PetscCall(VecGetLocalSize(tao->constraints_inequality, &pdipm->nh)); in TaoSetup_PDIPM()
884 pdipm->nh = pdipm->Nh = 0; in TaoSetup_PDIPM()
887 pdipm->nci = pdipm->nh + pdipm->nxlb + pdipm->nxub + 2 * pdipm->nxbox; in TaoSetup_PDIPM()
888 pdipm->Nci = pdipm->Nh + pdipm->Nxlb + pdipm->Nxub + 2 * pdipm->Nxbox; in TaoSetup_PDIPM()
891 pdipm->n = pdipm->nx + pdipm->nce + 2 * pdipm->nci; in TaoSetup_PDIPM()
892 pdipm->N = pdipm->Nx + pdipm->Nce + 2 * pdipm->Nci; in TaoSetup_PDIPM()
895 pdipm->off_lambdae = pdipm->nx; in TaoSetup_PDIPM()
896 pdipm->off_lambdai = pdipm->off_lambdae + pdipm->nce; in TaoSetup_PDIPM()
897 pdipm->off_z = pdipm->off_lambdai + pdipm->nci; in TaoSetup_PDIPM()
901 PetscCall(VecCreate(comm, &pdipm->ce)); in TaoSetup_PDIPM()
902 PetscCall(VecSetSizes(pdipm->ce, pdipm->nce, pdipm->Nce)); in TaoSetup_PDIPM()
903 PetscCall(VecSetFromOptions(pdipm->ce)); in TaoSetup_PDIPM()
905 PetscCall(VecCreate(comm, &pdipm->ci)); in TaoSetup_PDIPM()
906 PetscCall(VecSetSizes(pdipm->ci, pdipm->nci, pdipm->Nci)); in TaoSetup_PDIPM()
907 PetscCall(VecSetFromOptions(pdipm->ci)); in TaoSetup_PDIPM()
910 PetscCall(VecCreate(comm, &pdipm->X)); in TaoSetup_PDIPM()
911 PetscCall(VecSetSizes(pdipm->X, pdipm->n, pdipm->N)); in TaoSetup_PDIPM()
912 PetscCall(VecSetFromOptions(pdipm->X)); in TaoSetup_PDIPM()
915 PetscCall(VecGetArrayRead(pdipm->X, &Xarr)); in TaoSetup_PDIPM()
917 if (pdipm->Nx) PetscCall(VecCreateMPIWithArray(comm, 1, pdipm->nx, pdipm->Nx, Xarr, &pdipm->x)); in TaoSetup_PDIPM()
920 …if (pdipm->Nce) PetscCall(VecCreateMPIWithArray(comm, 1, pdipm->nce, pdipm->Nce, Xarr + pdipm->off… in TaoSetup_PDIPM()
923 if (pdipm->Ng) { in TaoSetup_PDIPM()
924 …PetscCall(VecCreateMPIWithArray(comm, 1, pdipm->ng, pdipm->Ng, Xarr + pdipm->off_lambdae, &tao->DE… in TaoSetup_PDIPM()
926 PetscCall(VecCreate(comm, &pdipm->lambdae_xfixed)); in TaoSetup_PDIPM()
927 PetscCall(VecSetSizes(pdipm->lambdae_xfixed, pdipm->nxfixed, PETSC_DECIDE)); in TaoSetup_PDIPM()
928 PetscCall(VecSetFromOptions(pdipm->lambdae_xfixed)); in TaoSetup_PDIPM()
931 if (pdipm->Nci) { in TaoSetup_PDIPM()
933 …PetscCall(VecCreateMPIWithArray(comm, 1, pdipm->nci, pdipm->Nci, Xarr + pdipm->off_lambdai, &pdipm in TaoSetup_PDIPM()
936 … PetscCall(VecCreateMPIWithArray(comm, 1, pdipm->nci, pdipm->Nci, Xarr + pdipm->off_z, &pdipm->z)); in TaoSetup_PDIPM()
940 …if (pdipm->Nh) PetscCall(VecCreateMPIWithArray(comm, 1, pdipm->nh, pdipm->Nh, Xarr + pdipm->off_la… in TaoSetup_PDIPM()
941 PetscCall(VecCreate(comm, &pdipm->lambdai_xb)); in TaoSetup_PDIPM()
942 PetscCall(VecSetSizes(pdipm->lambdai_xb, pdipm->nci - pdipm->nh, PETSC_DECIDE)); in TaoSetup_PDIPM()
943 PetscCall(VecSetFromOptions(pdipm->lambdai_xb)); in TaoSetup_PDIPM()
945 PetscCall(VecRestoreArrayRead(pdipm->X, &Xarr)); in TaoSetup_PDIPM()
949 if (pdipm->Nxfixed) { in TaoSetup_PDIPM()
951 PetscCall(MatCreate(comm, &pdipm->Jce_xfixed)); in TaoSetup_PDIPM()
952 PetscCall(MatSetSizes(pdipm->Jce_xfixed, pdipm->nxfixed, pdipm->nx, PETSC_DECIDE, pdipm->Nx)); in TaoSetup_PDIPM()
953 PetscCall(MatSetFromOptions(pdipm->Jce_xfixed)); in TaoSetup_PDIPM()
954 PetscCall(MatSeqAIJSetPreallocation(pdipm->Jce_xfixed, 1, NULL)); in TaoSetup_PDIPM()
955 PetscCall(MatMPIAIJSetPreallocation(pdipm->Jce_xfixed, 1, NULL, 1, NULL)); in TaoSetup_PDIPM()
957 PetscCall(MatGetOwnershipRange(pdipm->Jce_xfixed, &Jcrstart, &Jcrend)); in TaoSetup_PDIPM()
958 PetscCall(ISGetIndices(pdipm->isxfixed, &cols)); in TaoSetup_PDIPM()
961 PetscCall(MatSetValues(pdipm->Jce_xfixed, 1, &row, 1, cols + k, &one, INSERT_VALUES)); in TaoSetup_PDIPM()
964 PetscCall(ISRestoreIndices(pdipm->isxfixed, &cols)); in TaoSetup_PDIPM()
965 PetscCall(MatAssemblyBegin(pdipm->Jce_xfixed, MAT_FINAL_ASSEMBLY)); in TaoSetup_PDIPM()
966 PetscCall(MatAssemblyEnd(pdipm->Jce_xfixed, MAT_FINAL_ASSEMBLY)); in TaoSetup_PDIPM()
970 PetscCall(MatCreate(comm, &pdipm->Jci_xb)); in TaoSetup_PDIPM()
971 PetscCall(MatSetSizes(pdipm->Jci_xb, pdipm->nci - pdipm->nh, pdipm->nx, PETSC_DECIDE, pdipm->Nx)); in TaoSetup_PDIPM()
972 PetscCall(MatSetFromOptions(pdipm->Jci_xb)); in TaoSetup_PDIPM()
973 PetscCall(MatSeqAIJSetPreallocation(pdipm->Jci_xb, 1, NULL)); in TaoSetup_PDIPM()
974 PetscCall(MatMPIAIJSetPreallocation(pdipm->Jci_xb, 1, NULL, 1, NULL)); in TaoSetup_PDIPM()
976 PetscCall(MatGetOwnershipRange(pdipm->Jci_xb, &Jcrstart, &Jcrend)); in TaoSetup_PDIPM()
978 if (pdipm->Nxub) { in TaoSetup_PDIPM()
980 PetscCall(ISGetIndices(pdipm->isxub, &cols)); in TaoSetup_PDIPM()
982 for (row = offset; row < offset + pdipm->nxub; row++) { in TaoSetup_PDIPM()
983 PetscCall(MatSetValues(pdipm->Jci_xb, 1, &row, 1, cols + k, &neg_one, INSERT_VALUES)); in TaoSetup_PDIPM()
986 PetscCall(ISRestoreIndices(pdipm->isxub, &cols)); in TaoSetup_PDIPM()
989 if (pdipm->Nxlb) { in TaoSetup_PDIPM()
991 PetscCall(ISGetIndices(pdipm->isxlb, &cols)); in TaoSetup_PDIPM()
993 offset += pdipm->nxub; in TaoSetup_PDIPM()
994 for (row = offset; row < offset + pdipm->nxlb; row++) { in TaoSetup_PDIPM()
995 PetscCall(MatSetValues(pdipm->Jci_xb, 1, &row, 1, cols + k, &one, INSERT_VALUES)); in TaoSetup_PDIPM()
998 PetscCall(ISRestoreIndices(pdipm->isxlb, &cols)); in TaoSetup_PDIPM()
1002 if (pdipm->Nxbox) { in TaoSetup_PDIPM()
1003 PetscCall(ISGetIndices(pdipm->isxbox, &cols)); in TaoSetup_PDIPM()
1005 offset += pdipm->nxlb; in TaoSetup_PDIPM()
1006 for (row = offset; row < offset + pdipm->nxbox; row++) { in TaoSetup_PDIPM()
1007 PetscCall(MatSetValues(pdipm->Jci_xb, 1, &row, 1, cols + k, &neg_one, INSERT_VALUES)); in TaoSetup_PDIPM()
1008 tmp = row + pdipm->nxbox; in TaoSetup_PDIPM()
1009 PetscCall(MatSetValues(pdipm->Jci_xb, 1, &tmp, 1, cols + k, &one, INSERT_VALUES)); in TaoSetup_PDIPM()
1012 PetscCall(ISRestoreIndices(pdipm->isxbox, &cols)); in TaoSetup_PDIPM()
1015 PetscCall(MatAssemblyBegin(pdipm->Jci_xb, MAT_FINAL_ASSEMBLY)); in TaoSetup_PDIPM()
1016 PetscCall(MatAssemblyEnd(pdipm->Jci_xb, MAT_FINAL_ASSEMBLY)); in TaoSetup_PDIPM()
1020 if (pdipm->solve_reduced_kkt) { in TaoSetup_PDIPM()
1021 PetscCall(PetscMalloc2(pdipm->nx + pdipm->nce, &xa, 2 * pdipm->nci, &xb)); in TaoSetup_PDIPM()
1022 for (i = 0; i < pdipm->nx + pdipm->nce; i++) xa[i] = i; in TaoSetup_PDIPM()
1023 for (i = 0; i < 2 * pdipm->nci; i++) xb[i] = pdipm->off_lambdai + i; in TaoSetup_PDIPM()
1025 PetscCall(ISCreateGeneral(comm, pdipm->nx + pdipm->nce, xa, PETSC_OWN_POINTER, &pdipm->is1)); in TaoSetup_PDIPM()
1026 PetscCall(ISCreateGeneral(comm, 2 * pdipm->nci, xb, PETSC_OWN_POINTER, &pdipm->is2)); in TaoSetup_PDIPM()
1030 PetscCall(PetscMalloc1(size, &pdipm->nce_all)); in TaoSetup_PDIPM()
1033 PetscCallMPI(MPI_Scan(&pdipm->n, &rstart, 1, MPIU_INT, MPI_SUM, comm)); in TaoSetup_PDIPM()
1034 rstart -= pdipm->n; in TaoSetup_PDIPM()
1036 PetscCallMPI(MPI_Allgather(&pdipm->nce, 1, MPIU_INT, pdipm->nce_all, 1, MPIU_INT, comm)); in TaoSetup_PDIPM()
1040 PetscCallMPI(MPI_Allgather(&pdipm->nh, 1, MPIU_INT, nh_all, 1, MPIU_INT, comm)); in TaoSetup_PDIPM()
1041 PetscCallMPI(MPI_Allgather(&pdipm->ng, 1, MPIU_INT, ng_all, 1, MPIU_INT, comm)); in TaoSetup_PDIPM()
1046 if (pdipm->Ng) { in TaoSetup_PDIPM()
1048 PetscCall(MatTranspose(tao->jacobian_equality, MAT_INITIAL_MATRIX, &pdipm->jac_equality_trans)); in TaoSetup_PDIPM()
1050 if (pdipm->Nh) { in TaoSetup_PDIPM()
1052 …PetscCall(MatTranspose(tao->jacobian_inequality, MAT_INITIAL_MATRIX, &pdipm->jac_inequality_trans)… in TaoSetup_PDIPM()
1056 nce_all = pdipm->nce_all; in TaoSetup_PDIPM()
1058 …if (pdipm->Nxfixed) PetscCall(MatTranspose(pdipm->Jce_xfixed, MAT_INITIAL_MATRIX, &Jce_xfixed_tran… in TaoSetup_PDIPM()
1059 PetscCall(MatTranspose(pdipm->Jci_xb, MAT_INITIAL_MATRIX, &Jci_xb_trans)); in TaoSetup_PDIPM()
1061 MatPreallocateBegin(comm, pdipm->n, pdipm->n, dnz, onz); in TaoSetup_PDIPM()
1064 PetscCall(TaoPDIPMEvaluateFunctionsAndJacobians(tao, pdipm->x)); in TaoSetup_PDIPM()
1069 for (i = 0; i < pdipm->nx; i++) { in TaoSetup_PDIPM()
1081 if (pdipm->ng) { in TaoSetup_PDIPM()
1083 PetscCall(MatGetRow(pdipm->jac_equality_trans, i + rjstart, &nc, &aj, NULL)); in TaoSetup_PDIPM()
1093 PetscCall(MatRestoreRow(pdipm->jac_equality_trans, i + rjstart, &nc, &aj, NULL)); in TaoSetup_PDIPM()
1097 if (pdipm->nxfixed) { in TaoSetup_PDIPM()
1099 PetscCall(MatGetOwnershipRanges(pdipm->Jce_xfixed, &ranges)); in TaoSetup_PDIPM()
1111 if (pdipm->nh) { in TaoSetup_PDIPM()
1113 PetscCall(MatGetRow(pdipm->jac_inequality_trans, i + rjstart, &nc, &aj, NULL)); in TaoSetup_PDIPM()
1123 PetscCall(MatRestoreRow(pdipm->jac_inequality_trans, i + rjstart, &nc, &aj, NULL)); in TaoSetup_PDIPM()
1128 PetscCall(MatGetOwnershipRanges(pdipm->Jci_xb, &ranges)); in TaoSetup_PDIPM()
1141 if (pdipm->Ng) { in TaoSetup_PDIPM()
1143 for (i = 0; i < pdipm->ng; i++) { in TaoSetup_PDIPM()
1144 row = rstart + pdipm->off_lambdae + i; in TaoSetup_PDIPM()
1157 if (pdipm->Nxfixed) { in TaoSetup_PDIPM()
1158 PetscCall(MatGetOwnershipRange(pdipm->Jce_xfixed, &Jcrstart, NULL)); in TaoSetup_PDIPM()
1159 for (i = 0; i < (pdipm->nce - pdipm->ng); i++) { in TaoSetup_PDIPM()
1160 row = rstart + pdipm->off_lambdae + pdipm->ng + i; in TaoSetup_PDIPM()
1162 PetscCall(MatGetRow(pdipm->Jce_xfixed, i + Jcrstart, &nc, &cols, NULL)); in TaoSetup_PDIPM()
1170 PetscCall(MatRestoreRow(pdipm->Jce_xfixed, i + Jcrstart, &nc, &cols, NULL)); in TaoSetup_PDIPM()
1175 if (pdipm->Nh) { in TaoSetup_PDIPM()
1177 for (i = 0; i < pdipm->nh; i++) { in TaoSetup_PDIPM()
1178 row = rstart + pdipm->off_lambdai + i; in TaoSetup_PDIPM()
1190 for (i = 0; i < pdipm->nh; i++) { in TaoSetup_PDIPM()
1191 row = rstart + pdipm->off_lambdai + i; in TaoSetup_PDIPM()
1192 col = rstart + pdipm->off_z + i; in TaoSetup_PDIPM()
1198 PetscCall(MatGetOwnershipRange(pdipm->Jci_xb, &Jcrstart, NULL)); in TaoSetup_PDIPM()
1199 for (i = 0; i < (pdipm->nci - pdipm->nh); i++) { in TaoSetup_PDIPM()
1200 row = rstart + pdipm->off_lambdai + pdipm->nh + i; in TaoSetup_PDIPM()
1202 PetscCall(MatGetRow(pdipm->Jci_xb, i + Jcrstart, &nc, &cols, NULL)); in TaoSetup_PDIPM()
1210 PetscCall(MatRestoreRow(pdipm->Jci_xb, i + Jcrstart, &nc, &cols, NULL)); in TaoSetup_PDIPM()
1212 col = rstart + pdipm->off_z + pdipm->nh + i; in TaoSetup_PDIPM()
1217 for (i = 0; i < pdipm->nci; i++) { in TaoSetup_PDIPM()
1218 row = rstart + pdipm->off_z + i; in TaoSetup_PDIPM()
1219 cols1[0] = rstart + pdipm->off_lambdai + i; in TaoSetup_PDIPM()
1225 for (i = 0; i < pdipm->n; i++) dnz[i]++; /* diagonal entry */ in TaoSetup_PDIPM()
1229 PetscCall(MatSetSizes(J, pdipm->n, pdipm->n, PETSC_DECIDE, PETSC_DECIDE)); in TaoSetup_PDIPM()
1234 pdipm->K = J; in TaoSetup_PDIPM()
1241 if (pdipm->kkt_pd) { in TaoSetup_PDIPM()
1242 for (i = 0; i < pdipm->nh; i++) { in TaoSetup_PDIPM()
1244 PetscCall(MatSetValue(J, row, row, pdipm->deltaw, INSERT_VALUES)); in TaoSetup_PDIPM()
1249 if (pdipm->Nxfixed) { in TaoSetup_PDIPM()
1250 PetscCall(MatGetOwnershipRange(pdipm->Jce_xfixed, &Jcrstart, NULL)); in TaoSetup_PDIPM()
1251 for (i = 0; i < (pdipm->nce - pdipm->ng); i++) { in TaoSetup_PDIPM()
1252 row = rstart + pdipm->off_lambdae + pdipm->ng + i; in TaoSetup_PDIPM()
1254 PetscCall(MatGetRow(pdipm->Jce_xfixed, i + Jcrstart, &nc, &cols, &aa)); in TaoSetup_PDIPM()
1262 PetscCall(MatRestoreRow(pdipm->Jce_xfixed, i + Jcrstart, &nc, &cols, &aa)); in TaoSetup_PDIPM()
1267 PetscCall(MatGetOwnershipRange(pdipm->Jci_xb, &Jcrstart, NULL)); in TaoSetup_PDIPM()
1268 for (i = 0; i < pdipm->nci - pdipm->nh; i++) { in TaoSetup_PDIPM()
1269 row = rstart + pdipm->off_lambdai + pdipm->nh + i; in TaoSetup_PDIPM()
1271 PetscCall(MatGetRow(pdipm->Jci_xb, i + Jcrstart, &nc, &cols, &aa)); in TaoSetup_PDIPM()
1279 PetscCall(MatRestoreRow(pdipm->Jci_xb, i + Jcrstart, &nc, &cols, &aa)); in TaoSetup_PDIPM()
1281 col = rstart + pdipm->off_z + pdipm->nh + i; in TaoSetup_PDIPM()
1285 for (i = 0; i < pdipm->nh; i++) { in TaoSetup_PDIPM()
1286 row = rstart + pdipm->off_lambdai + i; in TaoSetup_PDIPM()
1287 col = rstart + pdipm->off_z + i; in TaoSetup_PDIPM()
1292 for (i = 0; i < pdipm->nci; i++) { in TaoSetup_PDIPM()
1293 row = rstart + pdipm->off_z + i; in TaoSetup_PDIPM()
1294 col = rstart + pdipm->off_lambdai + i; in TaoSetup_PDIPM()
1298 if (pdipm->Nxfixed) PetscCall(MatDestroy(&Jce_xfixed_trans)); in TaoSetup_PDIPM()
1303 PetscCall(SNESSetFunction(pdipm->snes, NULL, TaoSNESFunction_PDIPM, (void *)tao)); in TaoSetup_PDIPM()
1304 PetscCall(SNESSetJacobian(pdipm->snes, J, J, TaoSNESJacobian_PDIPM, (void *)tao)); in TaoSetup_PDIPM()
1306 if (pdipm->solve_reduced_kkt) { in TaoSetup_PDIPM()
1311 PetscCall(PCFieldSplitSetIS(pc, "2", pdipm->is2)); in TaoSetup_PDIPM()
1312 PetscCall(PCFieldSplitSetIS(pc, "1", pdipm->is1)); in TaoSetup_PDIPM()
1314 PetscCall(SNESSetFromOptions(pdipm->snes)); in TaoSetup_PDIPM()
1317 if (pdipm->solve_symmetric_kkt) { in TaoSetup_PDIPM()
1322 PetscCall(SNESGetKSP(pdipm->snes, &ksp)); in TaoSetup_PDIPM()
1341 TAO_PDIPM *pdipm = (TAO_PDIPM *)tao->data; in TaoDestroy_PDIPM() local
1345 PetscCall(VecDestroy(&pdipm->x)); /* Solution x */ in TaoDestroy_PDIPM()
1346 PetscCall(VecDestroy(&pdipm->lambdae)); /* Equality constraints lagrangian multiplier*/ in TaoDestroy_PDIPM()
1347 PetscCall(VecDestroy(&pdipm->lambdai)); /* Inequality constraints lagrangian multiplier*/ in TaoDestroy_PDIPM()
1348 PetscCall(VecDestroy(&pdipm->z)); /* Slack variables */ in TaoDestroy_PDIPM()
1349 PetscCall(VecDestroy(&pdipm->X)); /* Big KKT system vector [x; lambdae; lambdai; z] */ in TaoDestroy_PDIPM()
1352 PetscCall(VecDestroy(&pdipm->lambdae_xfixed)); in TaoDestroy_PDIPM()
1353 PetscCall(VecDestroy(&pdipm->lambdai_xb)); in TaoDestroy_PDIPM()
1356 PetscCall(VecDestroy(&pdipm->ce)); /* Vec of equality constraints */ in TaoDestroy_PDIPM()
1357 PetscCall(VecDestroy(&pdipm->ci)); /* Vec of inequality constraints */ in TaoDestroy_PDIPM()
1360 PetscCall(MatDestroy(&pdipm->Jce_xfixed)); in TaoDestroy_PDIPM()
1361 …PetscCall(MatDestroy(&pdipm->Jci_xb)); /* Jacobian of inequality constraints Jci = [tao->jacobian_… in TaoDestroy_PDIPM()
1362 PetscCall(MatDestroy(&pdipm->K)); in TaoDestroy_PDIPM()
1365 if (pdipm->Nxub) PetscCall(ISDestroy(&pdipm->isxub)); /* Finite upper bound only -inf < x < ub */ in TaoDestroy_PDIPM()
1367 if (pdipm->Nxlb) PetscCall(ISDestroy(&pdipm->isxlb)); /* Finite lower bound only lb <= x < inf */ in TaoDestroy_PDIPM()
1369 …if (pdipm->Nxfixed) PetscCall(ISDestroy(&pdipm->isxfixed)); /* Fixed variables lb = x = u… in TaoDestroy_PDIPM()
1371 …if (pdipm->Nxbox) PetscCall(ISDestroy(&pdipm->isxbox)); /* Boxed variables lb <= x <= ub */ in TaoDestroy_PDIPM()
1373 …if (pdipm->Nxfree) PetscCall(ISDestroy(&pdipm->isxfree)); /* Free variables -inf <= x <= in… in TaoDestroy_PDIPM()
1375 if (pdipm->solve_reduced_kkt) { in TaoDestroy_PDIPM()
1376 PetscCall(ISDestroy(&pdipm->is1)); in TaoDestroy_PDIPM()
1377 PetscCall(ISDestroy(&pdipm->is2)); in TaoDestroy_PDIPM()
1381 PetscCall(SNESDestroy(&pdipm->snes)); /* Nonlinear solver */ in TaoDestroy_PDIPM()
1382 PetscCall(PetscFree(pdipm->nce_all)); in TaoDestroy_PDIPM()
1383 PetscCall(MatDestroy(&pdipm->jac_equality_trans)); in TaoDestroy_PDIPM()
1384 PetscCall(MatDestroy(&pdipm->jac_inequality_trans)); in TaoDestroy_PDIPM()
1397 TAO_PDIPM *pdipm = (TAO_PDIPM *)tao->data; in TaoSetFromOptions_PDIPM() local
1401 …ter to push initial slack variables away from bounds", NULL, pdipm->push_init_slack, &pdipm->push_… in TaoSetFromOptions_PDIPM()
1402 …nitial (inequality) dual variables away from bounds", NULL, pdipm->push_init_lambdai, &pdipm->push… in TaoSetFromOptions_PDIPM()
1403 …", "Solve reduced KKT system using Schur-complement", NULL, pdipm->solve_reduced_kkt, &pdipm->solv… in TaoSetFromOptions_PDIPM()
1404 …r", "Update scalar for barrier parameter (mu) update", NULL, pdipm->mu_update_factor, &pdipm->mu_u… in TaoSetFromOptions_PDIPM()
1405 …tric_kkt", "Solve non reduced symmetric KKT system", NULL, pdipm->solve_symmetric_kkt, &pdipm->sol… in TaoSetFromOptions_PDIPM()
1406 …ift_pd", "Add shifts to make KKT matrix positive definite", NULL, pdipm->kkt_pd, &pdipm->kkt_pd, N… in TaoSetFromOptions_PDIPM()
1428 TAO_PDIPM *pdipm; in TaoCreate_PDIPM() local
1438 PetscCall(PetscNew(&pdipm)); in TaoCreate_PDIPM()
1439 tao->data = (void *)pdipm; in TaoCreate_PDIPM()
1441 pdipm->nx = pdipm->Nx = 0; in TaoCreate_PDIPM()
1442 pdipm->nxfixed = pdipm->Nxfixed = 0; in TaoCreate_PDIPM()
1443 pdipm->nxlb = pdipm->Nxlb = 0; in TaoCreate_PDIPM()
1444 pdipm->nxub = pdipm->Nxub = 0; in TaoCreate_PDIPM()
1445 pdipm->nxbox = pdipm->Nxbox = 0; in TaoCreate_PDIPM()
1446 pdipm->nxfree = pdipm->Nxfree = 0; in TaoCreate_PDIPM()
1448 pdipm->ng = pdipm->Ng = pdipm->nce = pdipm->Nce = 0; in TaoCreate_PDIPM()
1449 pdipm->nh = pdipm->Nh = pdipm->nci = pdipm->Nci = 0; in TaoCreate_PDIPM()
1450 pdipm->n = pdipm->N = 0; in TaoCreate_PDIPM()
1451 pdipm->mu = 1.0; in TaoCreate_PDIPM()
1452 pdipm->mu_update_factor = 0.1; in TaoCreate_PDIPM()
1454 pdipm->deltaw = 0.0; in TaoCreate_PDIPM()
1455 pdipm->lastdeltaw = 3 * 1.e-4; in TaoCreate_PDIPM()
1456 pdipm->deltac = 0.0; in TaoCreate_PDIPM()
1457 pdipm->kkt_pd = PETSC_FALSE; in TaoCreate_PDIPM()
1459 pdipm->push_init_slack = 1.0; in TaoCreate_PDIPM()
1460 pdipm->push_init_lambdai = 1.0; in TaoCreate_PDIPM()
1461 pdipm->solve_reduced_kkt = PETSC_FALSE; in TaoCreate_PDIPM()
1462 pdipm->solve_symmetric_kkt = PETSC_TRUE; in TaoCreate_PDIPM()
1469 PetscCall(SNESCreate(((PetscObject)tao)->comm, &pdipm->snes)); in TaoCreate_PDIPM()
1470 PetscCall(SNESSetOptionsPrefix(pdipm->snes, tao->hdr.prefix)); in TaoCreate_PDIPM()
1471 PetscCall(SNESGetKSP(pdipm->snes, &tao->ksp)); in TaoCreate_PDIPM()