Lines Matching refs:ilink

113   PC_FieldSplitLink ilink = jac->head;  in PCView_FieldSplit()  local
129 if (ilink->fields) { in PCView_FieldSplit()
132 for (j = 0; j < ilink->nfields; j++) { in PCView_FieldSplit()
134 PetscCall(PetscViewerASCIIPrintf(viewer, " %" PetscInt_FMT, ilink->fields[j])); in PCView_FieldSplit()
141 PetscCall(KSPView(ilink->ksp, viewer)); in PCView_FieldSplit()
142 ilink = ilink->next; in PCView_FieldSplit()
157 PetscCall(KSPView(ilink->ksp, viewer)); in PCView_FieldSplit()
160 ilink = ilink->next; in PCView_FieldSplit()
171 PC_FieldSplitLink ilink = jac->head; in PCView_FieldSplit_Schur() local
213 if (ilink->fields) { in PCView_FieldSplit_Schur()
216 for (j = 0; j < ilink->nfields; j++) { in PCView_FieldSplit_Schur()
218 PetscCall(PetscViewerASCIIPrintf(viewer, " %" PetscInt_FMT, ilink->fields[j])); in PCView_FieldSplit_Schur()
225 ilink = ilink->next; in PCView_FieldSplit_Schur()
294 PC_FieldSplitLink ilink = jac->head; in PCView_FieldSplit_GKB() local
313 if (ilink->fields) { in PCView_FieldSplit_GKB()
316 for (j = 0; j < ilink->nfields; j++) { in PCView_FieldSplit_GKB()
318 PetscCall(PetscViewerASCIIPrintf(viewer, " %" PetscInt_FMT, ilink->fields[j])); in PCView_FieldSplit_GKB()
325 PetscCall(KSPView(ilink->ksp, viewer)); in PCView_FieldSplit_GKB()
341 PetscCall(KSPView(ilink->ksp, viewer)); in PCView_FieldSplit_GKB()
344 ilink = ilink->next; in PCView_FieldSplit_GKB()
397 PC_FieldSplitLink ilink = jac->head; in PCFieldSplitSetDefaults() local
406 if (!ilink) { in PCFieldSplitSetDefaults()
458 for (ilink = jac->head, i = 0; ilink; ilink = ilink->next, ++i) { in PCFieldSplitSetDefaults()
460 PetscCall(PetscObjectGetOptionsPrefix((PetscObject)ilink->ksp, &prefix)); in PCFieldSplitSetDefaults()
462 PetscCall(KSPSetDM(ilink->ksp, dms[i])); in PCFieldSplitSetDefaults()
463 PetscCall(KSPSetDMActive(ilink->ksp, KSP_DMACTIVE_ALL, PETSC_FALSE)); in PCFieldSplitSetDefaults()
464 PetscCall(PetscObjectIncrementTabLevel((PetscObject)dms[i], (PetscObject)ilink->ksp, 0)); in PCFieldSplitSetDefaults()
541 …PetscCheck(ilink->is, PetscObjectComm((PetscObject)pc), PETSC_ERR_SUP, "Must provide at least two … in PCFieldSplitSetDefaults()
543 PetscCall(ISComplement(ilink->is, nmin, nmax, &is2)); in PCFieldSplitSetDefaults()
580 PC_FieldSplitLink ilink; in PCSetUp_FieldSplit() local
588 ilink = jac->head; in PCSetUp_FieldSplit()
598 if (jac->defaultsplit || !ilink->is) { in PCSetUp_FieldSplit()
617 …etscCall(ISCreateStride(PetscObjectComm((PetscObject)pc), nslots, rstart + i, nsplit, &ilink->is)); in PCSetUp_FieldSplit()
618 PetscCall(PetscObjectReference((PetscObject)ilink->is)); in PCSetUp_FieldSplit()
619 ilink->is_col = ilink->is; in PCSetUp_FieldSplit()
620 } else if (!ilink->is) { in PCSetUp_FieldSplit()
623 for (PetscInt k = 0; k < ilink->nfields; k++) { in PCSetUp_FieldSplit()
624 if (ilink->fields[k] != ilink->fields_col[k]) same_fields = PETSC_FALSE; in PCSetUp_FieldSplit()
627 if (ilink->nfields > 1) { in PCSetUp_FieldSplit()
628 …PetscInt *ii, *jj, j, k, nfields = ilink->nfields, *fields = ilink->fields, *fields_col = ilink->f… in PCSetUp_FieldSplit()
630 PetscCall(PetscMalloc1(ilink->nfields * nslots, &ii)); in PCSetUp_FieldSplit()
631 if (!same_fields) PetscCall(PetscMalloc1(ilink->nfields * nslots, &jj)); in PCSetUp_FieldSplit()
638 …ateGeneral(PetscObjectComm((PetscObject)pc), nslots * nfields, ii, PETSC_OWN_POINTER, &ilink->is)); in PCSetUp_FieldSplit()
639 …eneral(PetscObjectComm((PetscObject)pc), nslots * nfields, jj, PETSC_OWN_POINTER, &ilink->is_col)); in PCSetUp_FieldSplit()
641 PetscCall(PetscObjectReference((PetscObject)ilink->is)); in PCSetUp_FieldSplit()
642 ilink->is_col = ilink->is; in PCSetUp_FieldSplit()
644 PetscCall(ISSetBlockSize(ilink->is, nfields)); in PCSetUp_FieldSplit()
645 PetscCall(ISSetBlockSize(ilink->is_col, nfields)); in PCSetUp_FieldSplit()
647 …CreateStride(PetscObjectComm((PetscObject)pc), nslots, rstart + ilink->fields[0], bs, &ilink->is)); in PCSetUp_FieldSplit()
648 …teStride(PetscObjectComm((PetscObject)pc), nslots, rstart + ilink->fields_col[0], bs, &ilink->is_c… in PCSetUp_FieldSplit()
650 PetscCall(PetscObjectReference((PetscObject)ilink->is)); in PCSetUp_FieldSplit()
651 ilink->is_col = ilink->is; in PCSetUp_FieldSplit()
655 ilink = ilink->next; in PCSetUp_FieldSplit()
668 PetscCall(ISDuplicate(rowis[i], &ilink->is)); in PCSetUp_FieldSplit()
669 PetscCall(PetscObjectReference((PetscObject)ilink->is)); in PCSetUp_FieldSplit()
670 ilink->is_col = ilink->is; in PCSetUp_FieldSplit()
671 } else if (!ilink->is) { in PCSetUp_FieldSplit()
672 if (ilink->nfields > 1) { in PCSetUp_FieldSplit()
673 for (PetscInt j = 0; j < ilink->nfields; j++) ises[j] = rowis[ilink->fields[j]]; in PCSetUp_FieldSplit()
674 … PetscCall(ISConcatenate(PetscObjectComm((PetscObject)pc), ilink->nfields, ises, &ilink->is)); in PCSetUp_FieldSplit()
676 PetscCall(ISDuplicate(rowis[ilink->fields[0]], &ilink->is)); in PCSetUp_FieldSplit()
678 PetscCall(PetscObjectReference((PetscObject)ilink->is)); in PCSetUp_FieldSplit()
679 ilink->is_col = ilink->is; in PCSetUp_FieldSplit()
681 ilink = ilink->next; in PCSetUp_FieldSplit()
688 ilink = jac->head; in PCSetUp_FieldSplit()
699 PetscCall(PetscObjectQuery((PetscObject)ilink->is, "pmat", (PetscObject *)&jac->pmat[i])); in PCSetUp_FieldSplit()
709 …PetscCall(MatCreateSubMatrix(pc->pmat, ilink->is, ilink->is_col, MAT_INITIAL_MATRIX, &jac->pmat[i]… in PCSetUp_FieldSplit()
712 PetscCall(KSPGetOptionsPrefix(ilink->ksp, &prefix)); in PCSetUp_FieldSplit()
720 ilink->x = jac->x[i]; in PCSetUp_FieldSplit()
721 ilink->y = jac->y[i]; in PCSetUp_FieldSplit()
722 ilink->z = NULL; in PCSetUp_FieldSplit()
724 PetscCall(VecScatterCreate(xtmp, ilink->is, jac->x[i], NULL, &ilink->sctx)); in PCSetUp_FieldSplit()
725 PetscCall(PetscObjectQuery((PetscObject)ilink->is, "nearnullspace", (PetscObject *)&sp)); in PCSetUp_FieldSplit()
727 ilink = ilink->next; in PCSetUp_FieldSplit()
744 PetscCall(PetscObjectQuery((PetscObject)ilink->is, "pmat", (PetscObject *)&pmat)); in PCSetUp_FieldSplit()
745 …if (!pmat) PetscCall(MatCreateSubMatrix(pc->pmat, ilink->is, ilink->is_col, scall, &jac->pmat[i])); in PCSetUp_FieldSplit()
746 ilink = ilink->next; in PCSetUp_FieldSplit()
751 ilink = jac->head; in PCSetUp_FieldSplit()
755 …PetscCall(MatCreateSubMatrix(pc->mat, ilink->is, ilink->is_col, MAT_INITIAL_MATRIX, &jac->mat[i])); in PCSetUp_FieldSplit()
756 ilink = ilink->next; in PCSetUp_FieldSplit()
769 PetscCall(MatCreateSubMatrix(pc->mat, ilink->is, ilink->is_col, scall, &jac->mat[i])); in PCSetUp_FieldSplit()
770 ilink = ilink->next; in PCSetUp_FieldSplit()
779 ilink = jac->head; in PCSetUp_FieldSplit()
783 PetscCall(PetscObjectQuery((PetscObject)ilink->is, "nullspace", (PetscObject *)&sp)); in PCSetUp_FieldSplit()
785 ilink = ilink->next; in PCSetUp_FieldSplit()
791 ilink = jac->head; in PCSetUp_FieldSplit()
797 …PetscCall(MatCreateSubMatrix(pc->mat, ilink->next->is, ilink->is, MAT_INITIAL_MATRIX, &jac->Afield… in PCSetUp_FieldSplit()
799 …PetscCall(MatCreateSubMatrix(pc->pmat, ilink->next->is, ilink->is, MAT_INITIAL_MATRIX, &jac->Afiel… in PCSetUp_FieldSplit()
810 … PetscCall(MatCreateSubMatrix(pc->mat, ilink->next->is, ilink->is, scall, &jac->Afield[1])); in PCSetUp_FieldSplit()
812 … PetscCall(MatCreateSubMatrix(pc->pmat, ilink->next->is, ilink->is, scall, &jac->Afield[1])); in PCSetUp_FieldSplit()
820 … PetscCall(MatCreateSubMatrix(pc->mat, ilink->is, NULL, MAT_INITIAL_MATRIX, &jac->Afield[i])); in PCSetUp_FieldSplit()
822 … PetscCall(MatCreateSubMatrix(pc->pmat, ilink->is, NULL, MAT_INITIAL_MATRIX, &jac->Afield[i])); in PCSetUp_FieldSplit()
824 ilink = ilink->next; in PCSetUp_FieldSplit()
835 PetscCall(MatCreateSubMatrix(pc->mat, ilink->is, NULL, scall, &jac->Afield[i])); in PCSetUp_FieldSplit()
837 PetscCall(MatCreateSubMatrix(pc->pmat, ilink->is, NULL, scall, &jac->Afield[i])); in PCSetUp_FieldSplit()
839 ilink = ilink->next; in PCSetUp_FieldSplit()
870 ilink = jac->head; in PCSetUp_FieldSplit()
871 …PetscCall(MatCreateSubMatrix(jac->offdiag_use_amat ? pc->mat : pc->pmat, ilink->is, ilink->next->i… in PCSetUp_FieldSplit()
872 …l(MatCreateSubMatrix(jac->offdiag_use_amat ? pc->mat : pc->pmat, ilink->next->is, ilink->is, scall… in PCSetUp_FieldSplit()
878 ilink = ilink->next; in PCSetUp_FieldSplit()
898 ilink = jac->head; in PCSetUp_FieldSplit()
899 …PetscCall(MatCreateSubMatrix(jac->offdiag_use_amat ? pc->mat : pc->pmat, ilink->is, ilink->next->i… in PCSetUp_FieldSplit()
900 …l(MatCreateSubMatrix(jac->offdiag_use_amat ? pc->mat : pc->pmat, ilink->next->is, ilink->is, MAT_I… in PCSetUp_FieldSplit()
906 ilink = ilink->next; in PCSetUp_FieldSplit()
911 …"%sfieldsplit_%s_", ((PetscObject)pc)->prefix ? ((PetscObject)pc)->prefix : "", ilink->splitname)); in PCSetUp_FieldSplit()
920 …etscSNPrintf(schurtestoption, sizeof(schurtestoption), "-fieldsplit_%s_inner_", ilink->splitname)); in PCSetUp_FieldSplit()
930 …ldsplit_%s_inner_", ((PetscObject)pc)->prefix ? ((PetscObject)pc)->prefix : "", ilink->splitname)); in PCSetUp_FieldSplit()
974 …etscSNPrintf(schurtestoption, sizeof(schurtestoption), "-fieldsplit_%s_upper_", ilink->splitname)); in PCSetUp_FieldSplit()
979 …ldsplit_%s_upper_", ((PetscObject)pc)->prefix ? ((PetscObject)pc)->prefix : "", ilink->splitname)); in PCSetUp_FieldSplit()
1032 PetscCall(PetscSNPrintf(lscname, sizeof(lscname), "%s_LSC_L", ilink->splitname)); in PCSetUp_FieldSplit()
1036 PetscCall(PetscSNPrintf(lscname, sizeof(lscname), "%s_LSC_Lp", ilink->splitname)); in PCSetUp_FieldSplit()
1042 ilink = jac->head; in PCSetUp_FieldSplit()
1043 …PetscCall(MatCreateSubMatrix(jac->offdiag_use_amat ? pc->mat : pc->pmat, ilink->is, ilink->next->i… in PCSetUp_FieldSplit()
1045 PetscCall(VecDuplicate(ilink->x, &jac->u)); in PCSetUp_FieldSplit()
1046 PetscCall(VecDuplicate(ilink->x, &jac->Hu)); in PCSetUp_FieldSplit()
1047 PetscCall(VecDuplicate(ilink->x, &jac->w2)); in PCSetUp_FieldSplit()
1048 …PetscCall(MatCreateSubMatrix(jac->offdiag_use_amat ? pc->mat : pc->pmat, ilink->next->is, ilink->i… in PCSetUp_FieldSplit()
1049 ilink = ilink->next; in PCSetUp_FieldSplit()
1051 PetscCall(VecDuplicate(ilink->x, &jac->v)); in PCSetUp_FieldSplit()
1052 PetscCall(VecDuplicate(ilink->x, &jac->d)); in PCSetUp_FieldSplit()
1053 PetscCall(VecDuplicate(ilink->x, &jac->w1)); in PCSetUp_FieldSplit()
1057 ilink = jac->head; in PCSetUp_FieldSplit()
1058 PetscCall(KSPSetOperators(ilink->ksp, jac->H, jac->H)); in PCSetUp_FieldSplit()
1059 if (!jac->suboptionsset) PetscCall(KSPSetFromOptions(ilink->ksp)); in PCSetUp_FieldSplit()
1065 PetscCall(PetscObjectGetTabLevel((PetscObject)ilink->ksp, &tablevel)); in PCSetUp_FieldSplit()
1067 PetscCall(PetscObjectIncrementTabLevel((PetscObject)ilink->ksp, (PetscObject)ilink->ksp, 1)); in PCSetUp_FieldSplit()
1072 ilink = jac->head; in PCSetUp_FieldSplit()
1073 while (ilink) { in PCSetUp_FieldSplit()
1074 PetscCall(KSPSetOperators(ilink->ksp, jac->mat[i], jac->pmat[i])); in PCSetUp_FieldSplit()
1076 if (!jac->suboptionsset) PetscCall(KSPSetFromOptions(ilink->ksp)); in PCSetUp_FieldSplit()
1078 ilink = ilink->next; in PCSetUp_FieldSplit()
1095 ilink = jac->head; in PCSetUp_FieldSplit()
1096 while (ilink) { in PCSetUp_FieldSplit()
1097 PetscCall(KSPGetPC(ilink->ksp, &pc_coords)); in PCSetUp_FieldSplit()
1098 PetscCall(PCSetCoordinates(pc_coords, ilink->dim, ilink->ndofs, ilink->coords)); in PCSetUp_FieldSplit()
1099 ilink = ilink->next; in PCSetUp_FieldSplit()
1165 PC_FieldSplitLink ilink = jac->head; in PCSetUpOnBlocks_FieldSplit() local
1168 while (ilink) { in PCSetUpOnBlocks_FieldSplit()
1169 PetscCall(KSPSetUp(ilink->ksp)); in PCSetUpOnBlocks_FieldSplit()
1170 PetscCall(KSPSetUpOnBlocks(ilink->ksp)); in PCSetUpOnBlocks_FieldSplit()
1171 ilink = ilink->next; in PCSetUpOnBlocks_FieldSplit()
1359 PC_FieldSplitLink ilink = jac->head; in PCFieldSplitCreateWorkMats_Private() local
1363 while (ilink) { in PCFieldSplitCreateWorkMats_Private()
1365 if (ilink->X) { in PCFieldSplitCreateWorkMats_Private()
1366 PetscCall(MatGetSize(ilink->X, NULL, &N)); in PCFieldSplitCreateWorkMats_Private()
1368 PetscCall(MatDestroy(&ilink->X)); in PCFieldSplitCreateWorkMats_Private()
1369 PetscCall(MatDestroy(&ilink->Y)); in PCFieldSplitCreateWorkMats_Private()
1370 PetscCall(MatDestroy(&ilink->Z)); in PCFieldSplitCreateWorkMats_Private()
1374 if (!ilink->X) { in PCFieldSplitCreateWorkMats_Private()
1377 PetscCall(VecGetType(ilink->x, &xtype)); in PCFieldSplitCreateWorkMats_Private()
1378 PetscCall(VecGetType(ilink->y, &ytype)); in PCFieldSplitCreateWorkMats_Private()
1379 PetscCall(VecGetLocalSize(ilink->x, &mx)); in PCFieldSplitCreateWorkMats_Private()
1380 PetscCall(VecGetSize(ilink->x, &Mx)); in PCFieldSplitCreateWorkMats_Private()
1381 PetscCall(VecGetLocalSize(ilink->y, &my)); in PCFieldSplitCreateWorkMats_Private()
1382 PetscCall(VecGetSize(ilink->y, &My)); in PCFieldSplitCreateWorkMats_Private()
1384 …ype(PetscObjectComm((PetscObject)pc), xtype, mx, X->cmap->n, Mx, X->cmap->N, -1, NULL, &ilink->X)); in PCFieldSplitCreateWorkMats_Private()
1385 …ype(PetscObjectComm((PetscObject)pc), ytype, my, X->cmap->n, My, X->cmap->N, -1, NULL, &ilink->Y)); in PCFieldSplitCreateWorkMats_Private()
1387 ilink = ilink->next; in PCFieldSplitCreateWorkMats_Private()
1674 #define FieldSplitSplitSolveAdd(ilink, xx, yy) \ argument
1675ilink->sctx, xx, ilink->x, INSERT_VALUES, SCATTER_FORWARD) || VecScatterEnd(ilink->sctx, xx, ilink
1676ilink->ksp, ilink->x, ilink->y) || KSPCheckSolve(ilink->ksp, pc, ilink->y) || PetscLogEventEnd(ili…
1677 VecScatterEnd(ilink->sctx, ilink->y, yy, ADD_VALUES, SCATTER_REVERSE)))
1682 PC_FieldSplitLink ilink = jac->head; in PCApply_FieldSplit() local
1696 while (ilink) { in PCApply_FieldSplit()
1697 PetscCall(PetscLogEventBegin(ilink->event, ilink->ksp, ilink->x, ilink->y, NULL)); in PCApply_FieldSplit()
1698 PetscCall(KSPSolve(ilink->ksp, ilink->x, ilink->y)); in PCApply_FieldSplit()
1699 PetscCall(KSPCheckSolve(ilink->ksp, pc, ilink->y)); in PCApply_FieldSplit()
1700 PetscCall(PetscLogEventEnd(ilink->event, ilink->ksp, ilink->x, ilink->y, NULL)); in PCApply_FieldSplit()
1701 ilink = ilink->next; in PCApply_FieldSplit()
1706 while (ilink) { in PCApply_FieldSplit()
1707 PetscCall(FieldSplitSplitSolveAdd(ilink, x, y)); in PCApply_FieldSplit()
1708 ilink = ilink->next; in PCApply_FieldSplit()
1714 PetscCall(VecScatterBegin(ilink->sctx, x, ilink->x, INSERT_VALUES, SCATTER_FORWARD)); in PCApply_FieldSplit()
1715 PetscCall(VecScatterEnd(ilink->sctx, x, ilink->x, INSERT_VALUES, SCATTER_FORWARD)); in PCApply_FieldSplit()
1716 PetscCall(PetscLogEventBegin(ilink->event, ilink->ksp, ilink->x, ilink->y, NULL)); in PCApply_FieldSplit()
1717 PetscCall(KSPSolve(ilink->ksp, ilink->x, ilink->y)); in PCApply_FieldSplit()
1718 PetscCall(KSPCheckSolve(ilink->ksp, pc, ilink->y)); in PCApply_FieldSplit()
1719 PetscCall(PetscLogEventEnd(ilink->event, ilink->ksp, ilink->x, ilink->y, NULL)); in PCApply_FieldSplit()
1720 PetscCall(VecScatterBegin(ilink->sctx, ilink->y, y, ADD_VALUES, SCATTER_REVERSE)); in PCApply_FieldSplit()
1721 PetscCall(VecScatterEnd(ilink->sctx, ilink->y, y, ADD_VALUES, SCATTER_REVERSE)); in PCApply_FieldSplit()
1724 PetscCall(MatMult(jac->Afield[1], ilink->y, ilink->next->x)); in PCApply_FieldSplit()
1725 ilink = ilink->next; in PCApply_FieldSplit()
1726 PetscCall(VecScale(ilink->x, -1.0)); in PCApply_FieldSplit()
1727 PetscCall(VecScatterBegin(ilink->sctx, x, ilink->x, ADD_VALUES, SCATTER_FORWARD)); in PCApply_FieldSplit()
1728 PetscCall(VecScatterEnd(ilink->sctx, x, ilink->x, ADD_VALUES, SCATTER_FORWARD)); in PCApply_FieldSplit()
1731 PetscCall(PetscLogEventBegin(ilink->event, ilink->ksp, ilink->x, ilink->y, NULL)); in PCApply_FieldSplit()
1732 PetscCall(KSPSolve(ilink->ksp, ilink->x, ilink->y)); in PCApply_FieldSplit()
1733 PetscCall(KSPCheckSolve(ilink->ksp, pc, ilink->y)); in PCApply_FieldSplit()
1734 PetscCall(PetscLogEventEnd(ilink->event, ilink->ksp, ilink->x, ilink->y, NULL)); in PCApply_FieldSplit()
1735 PetscCall(VecScatterBegin(ilink->sctx, ilink->y, y, ADD_VALUES, SCATTER_REVERSE)); in PCApply_FieldSplit()
1736 PetscCall(VecScatterEnd(ilink->sctx, ilink->y, y, ADD_VALUES, SCATTER_REVERSE)); in PCApply_FieldSplit()
1743 PetscCall(FieldSplitSplitSolveAdd(ilink, x, y)); in PCApply_FieldSplit()
1745 while (ilink->next) { in PCApply_FieldSplit()
1746 ilink = ilink->next; in PCApply_FieldSplit()
1748 PetscCall(MatMult(jac->Afield[cnt++], y, ilink->x)); in PCApply_FieldSplit()
1749 PetscCall(VecScale(ilink->x, -1.0)); in PCApply_FieldSplit()
1750 PetscCall(VecScatterBegin(ilink->sctx, x, ilink->x, ADD_VALUES, SCATTER_FORWARD)); in PCApply_FieldSplit()
1751 PetscCall(VecScatterEnd(ilink->sctx, x, ilink->x, ADD_VALUES, SCATTER_FORWARD)); in PCApply_FieldSplit()
1752 PetscCall(PetscLogEventBegin(ilink->event, ilink->ksp, ilink->x, ilink->y, NULL)); in PCApply_FieldSplit()
1753 PetscCall(KSPSolve(ilink->ksp, ilink->x, ilink->y)); in PCApply_FieldSplit()
1754 PetscCall(KSPCheckSolve(ilink->ksp, pc, ilink->y)); in PCApply_FieldSplit()
1755 PetscCall(PetscLogEventEnd(ilink->event, ilink->ksp, ilink->x, ilink->y, NULL)); in PCApply_FieldSplit()
1756 PetscCall(VecScatterBegin(ilink->sctx, ilink->y, y, ADD_VALUES, SCATTER_REVERSE)); in PCApply_FieldSplit()
1757 PetscCall(VecScatterEnd(ilink->sctx, ilink->y, y, ADD_VALUES, SCATTER_REVERSE)); in PCApply_FieldSplit()
1761 while (ilink->previous) { in PCApply_FieldSplit()
1762 ilink = ilink->previous; in PCApply_FieldSplit()
1764 PetscCall(MatMult(jac->Afield[cnt--], y, ilink->x)); in PCApply_FieldSplit()
1765 PetscCall(VecScale(ilink->x, -1.0)); in PCApply_FieldSplit()
1766 PetscCall(VecScatterBegin(ilink->sctx, x, ilink->x, ADD_VALUES, SCATTER_FORWARD)); in PCApply_FieldSplit()
1767 PetscCall(VecScatterEnd(ilink->sctx, x, ilink->x, ADD_VALUES, SCATTER_FORWARD)); in PCApply_FieldSplit()
1768 PetscCall(PetscLogEventBegin(ilink->event, ilink->ksp, ilink->x, ilink->y, NULL)); in PCApply_FieldSplit()
1769 PetscCall(KSPSolve(ilink->ksp, ilink->x, ilink->y)); in PCApply_FieldSplit()
1770 PetscCall(KSPCheckSolve(ilink->ksp, pc, ilink->y)); in PCApply_FieldSplit()
1771 PetscCall(PetscLogEventEnd(ilink->event, ilink->ksp, ilink->x, ilink->y, NULL)); in PCApply_FieldSplit()
1772 PetscCall(VecScatterBegin(ilink->sctx, ilink->y, y, ADD_VALUES, SCATTER_REVERSE)); in PCApply_FieldSplit()
1773 PetscCall(VecScatterEnd(ilink->sctx, ilink->y, y, ADD_VALUES, SCATTER_REVERSE)); in PCApply_FieldSplit()
1783 PC_FieldSplitLink ilink = jac->head; in PCMatApply_FieldSplit() local
1791 while (ilink) { in PCMatApply_FieldSplit()
1792 PetscCall(MatDenseScatter_Private(ilink->sctx, X, ilink->X, INSERT_VALUES, SCATTER_FORWARD)); in PCMatApply_FieldSplit()
1793 PetscCall(PetscLogEventBegin(ilink->event, ilink->ksp, ilink->X, ilink->Y, NULL)); in PCMatApply_FieldSplit()
1794 PetscCall(KSPMatSolve(ilink->ksp, ilink->X, ilink->Y)); in PCMatApply_FieldSplit()
1795 PetscCall(PetscLogEventEnd(ilink->event, ilink->ksp, ilink->X, ilink->Y, NULL)); in PCMatApply_FieldSplit()
1796 PetscCall(MatDenseScatter_Private(ilink->sctx, ilink->Y, Y, ADD_VALUES, SCATTER_REVERSE)); in PCMatApply_FieldSplit()
1797 ilink = ilink->next; in PCMatApply_FieldSplit()
1801 PetscCall(MatDenseScatter_Private(ilink->sctx, X, ilink->X, INSERT_VALUES, SCATTER_FORWARD)); in PCMatApply_FieldSplit()
1802 PetscCall(PetscLogEventBegin(ilink->event, ilink->ksp, ilink->X, ilink->Y, NULL)); in PCMatApply_FieldSplit()
1803 PetscCall(KSPMatSolve(ilink->ksp, ilink->X, ilink->Y)); in PCMatApply_FieldSplit()
1804 PetscCall(PetscLogEventEnd(ilink->event, ilink->ksp, ilink->X, ilink->Y, NULL)); in PCMatApply_FieldSplit()
1805 PetscCall(MatDenseScatter_Private(ilink->sctx, ilink->Y, Y, ADD_VALUES, SCATTER_REVERSE)); in PCMatApply_FieldSplit()
1808 …PetscCall(MatMatMult(jac->Afield[1], ilink->Y, MAT_REUSE_MATRIX, PETSC_DETERMINE, &ilink->next->X)… in PCMatApply_FieldSplit()
1809 ilink = ilink->next; in PCMatApply_FieldSplit()
1810 PetscCall(MatScale(ilink->X, -1.0)); in PCMatApply_FieldSplit()
1811 PetscCall(MatDenseScatter_Private(ilink->sctx, X, ilink->X, ADD_VALUES, SCATTER_FORWARD)); in PCMatApply_FieldSplit()
1814 PetscCall(PetscLogEventBegin(ilink->event, ilink->ksp, ilink->X, ilink->Y, NULL)); in PCMatApply_FieldSplit()
1815 PetscCall(KSPMatSolve(ilink->ksp, ilink->X, ilink->Y)); in PCMatApply_FieldSplit()
1816 PetscCall(PetscLogEventEnd(ilink->event, ilink->ksp, ilink->X, ilink->Y, NULL)); in PCMatApply_FieldSplit()
1817 PetscCall(MatDenseScatter_Private(ilink->sctx, ilink->Y, Y, ADD_VALUES, SCATTER_REVERSE)); in PCMatApply_FieldSplit()
1822 PetscCall(MatDenseScatter_Private(ilink->sctx, X, ilink->X, INSERT_VALUES, SCATTER_FORWARD)); in PCMatApply_FieldSplit()
1823 PetscCall(PetscLogEventBegin(ilink->event, ilink->ksp, ilink->X, ilink->Y, NULL)); in PCMatApply_FieldSplit()
1824 PetscCall(KSPMatSolve(ilink->ksp, ilink->X, ilink->Y)); in PCMatApply_FieldSplit()
1825 PetscCall(PetscLogEventEnd(ilink->event, ilink->ksp, ilink->X, ilink->Y, NULL)); in PCMatApply_FieldSplit()
1826 PetscCall(MatDenseScatter_Private(ilink->sctx, ilink->Y, Y, ADD_VALUES, SCATTER_REVERSE)); in PCMatApply_FieldSplit()
1829 while (ilink->next) { in PCMatApply_FieldSplit()
1830 ilink = ilink->next; in PCMatApply_FieldSplit()
1832 PetscCall(MatMatMult(jac->Afield[cnt++], Y, MAT_REUSE_MATRIX, PETSC_DETERMINE, &ilink->X)); in PCMatApply_FieldSplit()
1833 PetscCall(MatScale(ilink->X, -1.0)); in PCMatApply_FieldSplit()
1834 PetscCall(MatDenseScatter_Private(ilink->sctx, X, ilink->X, ADD_VALUES, SCATTER_FORWARD)); in PCMatApply_FieldSplit()
1835 PetscCall(PetscLogEventBegin(ilink->event, ilink->ksp, ilink->X, ilink->Y, NULL)); in PCMatApply_FieldSplit()
1836 PetscCall(KSPMatSolve(ilink->ksp, ilink->X, ilink->Y)); in PCMatApply_FieldSplit()
1837 PetscCall(PetscLogEventEnd(ilink->event, ilink->ksp, ilink->X, ilink->Y, NULL)); in PCMatApply_FieldSplit()
1838 PetscCall(MatDenseScatter_Private(ilink->sctx, ilink->Y, Y, ADD_VALUES, SCATTER_REVERSE)); in PCMatApply_FieldSplit()
1843 while (ilink->previous) { in PCMatApply_FieldSplit()
1844 ilink = ilink->previous; in PCMatApply_FieldSplit()
1846 PetscCall(MatMatMult(jac->Afield[cnt--], Y, MAT_REUSE_MATRIX, PETSC_DETERMINE, &ilink->X)); in PCMatApply_FieldSplit()
1847 PetscCall(MatScale(ilink->X, -1.0)); in PCMatApply_FieldSplit()
1848 PetscCall(MatDenseScatter_Private(ilink->sctx, X, ilink->X, ADD_VALUES, SCATTER_FORWARD)); in PCMatApply_FieldSplit()
1849 PetscCall(PetscLogEventBegin(ilink->event, ilink->ksp, ilink->X, ilink->Y, NULL)); in PCMatApply_FieldSplit()
1850 PetscCall(KSPMatSolve(ilink->ksp, ilink->X, ilink->Y)); in PCMatApply_FieldSplit()
1851 PetscCall(PetscLogEventEnd(ilink->event, ilink->ksp, ilink->X, ilink->Y, NULL)); in PCMatApply_FieldSplit()
1852 PetscCall(MatDenseScatter_Private(ilink->sctx, ilink->Y, Y, ADD_VALUES, SCATTER_REVERSE)); in PCMatApply_FieldSplit()
1982 #define FieldSplitSplitSolveAddTranspose(ilink, xx, yy) \ argument
1983ilink->sctx, xx, ilink->y, INSERT_VALUES, SCATTER_FORWARD) || VecScatterEnd(ilink->sctx, xx, ilink
1984ilink->ksp, ilink->y, ilink->x) || KSPCheckSolve(ilink->ksp, pc, ilink->x) || PetscLogEventEnd(ili…
1985 VecScatterEnd(ilink->sctx, ilink->x, yy, ADD_VALUES, SCATTER_REVERSE)))
1990 PC_FieldSplitLink ilink = jac->head; in PCApplyTranspose_FieldSplit() local
2004 while (ilink) { in PCApplyTranspose_FieldSplit()
2005 PetscCall(PetscLogEventBegin(ilink->event, ilink->ksp, ilink->x, ilink->y, NULL)); in PCApplyTranspose_FieldSplit()
2006 PetscCall(KSPSolveTranspose(ilink->ksp, ilink->x, ilink->y)); in PCApplyTranspose_FieldSplit()
2007 PetscCall(KSPCheckSolve(ilink->ksp, pc, ilink->y)); in PCApplyTranspose_FieldSplit()
2008 PetscCall(PetscLogEventEnd(ilink->event, ilink->ksp, ilink->x, ilink->y, NULL)); in PCApplyTranspose_FieldSplit()
2009 ilink = ilink->next; in PCApplyTranspose_FieldSplit()
2014 while (ilink) { in PCApplyTranspose_FieldSplit()
2015 PetscCall(FieldSplitSplitSolveAddTranspose(ilink, x, y)); in PCApplyTranspose_FieldSplit()
2016 ilink = ilink->next; in PCApplyTranspose_FieldSplit()
2026 PetscCall(FieldSplitSplitSolveAddTranspose(ilink, x, y)); in PCApplyTranspose_FieldSplit()
2027 while (ilink->next) { in PCApplyTranspose_FieldSplit()
2028 ilink = ilink->next; in PCApplyTranspose_FieldSplit()
2031 PetscCall(FieldSplitSplitSolveAddTranspose(ilink, jac->w2, y)); in PCApplyTranspose_FieldSplit()
2033 while (ilink->previous) { in PCApplyTranspose_FieldSplit()
2034 ilink = ilink->previous; in PCApplyTranspose_FieldSplit()
2037 PetscCall(FieldSplitSplitSolveAddTranspose(ilink, jac->w2, y)); in PCApplyTranspose_FieldSplit()
2040 while (ilink->next) { /* get to last entry in linked list */ in PCApplyTranspose_FieldSplit()
2041 ilink = ilink->next; in PCApplyTranspose_FieldSplit()
2043 PetscCall(FieldSplitSplitSolveAddTranspose(ilink, x, y)); in PCApplyTranspose_FieldSplit()
2044 while (ilink->previous) { in PCApplyTranspose_FieldSplit()
2045 ilink = ilink->previous; in PCApplyTranspose_FieldSplit()
2048 PetscCall(FieldSplitSplitSolveAddTranspose(ilink, jac->w2, y)); in PCApplyTranspose_FieldSplit()
2058 PC_FieldSplitLink ilink = jac->head, next; in PCReset_FieldSplit() local
2061 while (ilink) { in PCReset_FieldSplit()
2062 PetscCall(KSPDestroy(&ilink->ksp)); in PCReset_FieldSplit()
2063 PetscCall(VecDestroy(&ilink->x)); in PCReset_FieldSplit()
2064 PetscCall(VecDestroy(&ilink->y)); in PCReset_FieldSplit()
2065 PetscCall(VecDestroy(&ilink->z)); in PCReset_FieldSplit()
2066 PetscCall(MatDestroy(&ilink->X)); in PCReset_FieldSplit()
2067 PetscCall(MatDestroy(&ilink->Y)); in PCReset_FieldSplit()
2068 PetscCall(MatDestroy(&ilink->Z)); in PCReset_FieldSplit()
2069 PetscCall(VecScatterDestroy(&ilink->sctx)); in PCReset_FieldSplit()
2070 PetscCall(ISDestroy(&ilink->is)); in PCReset_FieldSplit()
2071 PetscCall(ISDestroy(&ilink->is_col)); in PCReset_FieldSplit()
2072 PetscCall(PetscFree(ilink->splitname)); in PCReset_FieldSplit()
2073 PetscCall(PetscFree(ilink->fields)); in PCReset_FieldSplit()
2074 PetscCall(PetscFree(ilink->fields_col)); in PCReset_FieldSplit()
2075 next = ilink->next; in PCReset_FieldSplit()
2076 PetscCall(PetscFree(ilink)); in PCReset_FieldSplit()
2077 ilink = next; in PCReset_FieldSplit()
2188 PC_FieldSplitLink ilink = jac->head; in PCSetFromOptions_FieldSplit() local
2193 while (ilink) { in PCSetFromOptions_FieldSplit()
2194 if (ilink->ksp->totalits > 0) PetscCall(KSPSetFromOptions(ilink->ksp)); in PCSetFromOptions_FieldSplit()
2195 ilink = ilink->next; in PCSetFromOptions_FieldSplit()
2205 PC_FieldSplitLink ilink, next = jac->head; in PCFieldSplitSetFields_FieldSplit() local
2216 PetscCall(PetscNew(&ilink)); in PCFieldSplitSetFields_FieldSplit()
2218 PetscCall(PetscStrallocpy(splitname, &ilink->splitname)); in PCFieldSplitSetFields_FieldSplit()
2220 PetscCall(PetscMalloc1(3, &ilink->splitname)); in PCFieldSplitSetFields_FieldSplit()
2221 PetscCall(PetscSNPrintf(ilink->splitname, 2, "%" PetscInt_FMT, jac->nsplits)); in PCFieldSplitSetFields_FieldSplit()
2224ilink->event = jac->nsplits < 5 ? KSP_Solve_FS_0 + nse : KSP_Solve_FS_0 + 4; /* Splits greater tha… in PCFieldSplitSetFields_FieldSplit()
2225 PetscCall(PetscMalloc1(n, &ilink->fields)); in PCFieldSplitSetFields_FieldSplit()
2226 PetscCall(PetscArraycpy(ilink->fields, fields, n)); in PCFieldSplitSetFields_FieldSplit()
2227 PetscCall(PetscMalloc1(n, &ilink->fields_col)); in PCFieldSplitSetFields_FieldSplit()
2228 PetscCall(PetscArraycpy(ilink->fields_col, fields_col, n)); in PCFieldSplitSetFields_FieldSplit()
2230 ilink->nfields = n; in PCFieldSplitSetFields_FieldSplit()
2231 ilink->next = NULL; in PCFieldSplitSetFields_FieldSplit()
2232 PetscCall(KSPCreate(PetscObjectComm((PetscObject)pc), &ilink->ksp)); in PCFieldSplitSetFields_FieldSplit()
2233 PetscCall(KSPSetNestLevel(ilink->ksp, pc->kspnestlevel)); in PCFieldSplitSetFields_FieldSplit()
2234 PetscCall(KSPSetErrorIfNotConverged(ilink->ksp, pc->erroriffailure)); in PCFieldSplitSetFields_FieldSplit()
2235 PetscCall(PetscObjectIncrementTabLevel((PetscObject)ilink->ksp, (PetscObject)pc, 1)); in PCFieldSplitSetFields_FieldSplit()
2236 PetscCall(KSPSetType(ilink->ksp, KSPPREONLY)); in PCFieldSplitSetFields_FieldSplit()
2238 …"%sfieldsplit_%s_", ((PetscObject)pc)->prefix ? ((PetscObject)pc)->prefix : "", ilink->splitname)); in PCFieldSplitSetFields_FieldSplit()
2239 PetscCall(KSPSetOptionsPrefix(ilink->ksp, prefix)); in PCFieldSplitSetFields_FieldSplit()
2242 jac->head = ilink; in PCFieldSplitSetFields_FieldSplit()
2243 ilink->previous = NULL; in PCFieldSplitSetFields_FieldSplit()
2246 next->next = ilink; in PCFieldSplitSetFields_FieldSplit()
2247 ilink->previous = next; in PCFieldSplitSetFields_FieldSplit()
2293 PC_FieldSplitLink ilink = jac->head; in PCFieldSplitGetSubKSP_FieldSplit() local
2297 while (ilink) { in PCFieldSplitGetSubKSP_FieldSplit()
2298 (*subksp)[cnt++] = ilink->ksp; in PCFieldSplitGetSubKSP_FieldSplit()
2299 ilink = ilink->next; in PCFieldSplitGetSubKSP_FieldSplit()
2333 PC_FieldSplitLink ilink = jac->head, next; in PCFieldSplitRestrictIS_FieldSplit() local
2343 while (ilink) { in PCFieldSplitRestrictIS_FieldSplit()
2346 PetscCall(ISEmbed(ilink->is, isy, PETSC_TRUE, &isrl)); in PCFieldSplitRestrictIS_FieldSplit()
2356 PetscCall(ISDestroy(&ilink->is)); in PCFieldSplitRestrictIS_FieldSplit()
2357 ilink->is = isr; in PCFieldSplitRestrictIS_FieldSplit()
2359 PetscCall(ISDestroy(&ilink->is_col)); in PCFieldSplitRestrictIS_FieldSplit()
2360 ilink->is_col = isr; in PCFieldSplitRestrictIS_FieldSplit()
2362 PetscCall(KSPGetPC(ilink->ksp, &subpc)); in PCFieldSplitRestrictIS_FieldSplit()
2367 PetscCall(ISGetLocalSize(ilink->is, &localsize)); in PCFieldSplitRestrictIS_FieldSplit()
2368 comm = PetscObjectComm((PetscObject)ilink->is); in PCFieldSplitRestrictIS_FieldSplit()
2369 PetscCall(ISEmbed(isy, ilink->is, PETSC_TRUE, &iszl)); in PCFieldSplitRestrictIS_FieldSplit()
2383 next = ilink->next; in PCFieldSplitRestrictIS_FieldSplit()
2384 ilink = next; in PCFieldSplitRestrictIS_FieldSplit()
2393 PC_FieldSplitLink ilink, next = jac->head; in PCFieldSplitSetIS_FieldSplit() local
2402 PetscCall(PetscNew(&ilink)); in PCFieldSplitSetIS_FieldSplit()
2404 PetscCall(PetscStrallocpy(splitname, &ilink->splitname)); in PCFieldSplitSetIS_FieldSplit()
2406 PetscCall(PetscMalloc1(8, &ilink->splitname)); in PCFieldSplitSetIS_FieldSplit()
2407 PetscCall(PetscSNPrintf(ilink->splitname, 7, "%" PetscInt_FMT, jac->nsplits)); in PCFieldSplitSetIS_FieldSplit()
2410ilink->event = jac->nsplits < 5 ? KSP_Solve_FS_0 + nse : KSP_Solve_FS_0 + 4; /* Splits greater tha… in PCFieldSplitSetIS_FieldSplit()
2412 PetscCall(ISDestroy(&ilink->is)); in PCFieldSplitSetIS_FieldSplit()
2413 ilink->is = is; in PCFieldSplitSetIS_FieldSplit()
2415 PetscCall(ISDestroy(&ilink->is_col)); in PCFieldSplitSetIS_FieldSplit()
2416 ilink->is_col = is; in PCFieldSplitSetIS_FieldSplit()
2417 ilink->next = NULL; in PCFieldSplitSetIS_FieldSplit()
2418 PetscCall(KSPCreate(PetscObjectComm((PetscObject)pc), &ilink->ksp)); in PCFieldSplitSetIS_FieldSplit()
2419 PetscCall(KSPSetNestLevel(ilink->ksp, pc->kspnestlevel)); in PCFieldSplitSetIS_FieldSplit()
2420 PetscCall(KSPSetErrorIfNotConverged(ilink->ksp, pc->erroriffailure)); in PCFieldSplitSetIS_FieldSplit()
2421 PetscCall(PetscObjectIncrementTabLevel((PetscObject)ilink->ksp, (PetscObject)pc, 1)); in PCFieldSplitSetIS_FieldSplit()
2422 PetscCall(KSPSetType(ilink->ksp, KSPPREONLY)); in PCFieldSplitSetIS_FieldSplit()
2424 …"%sfieldsplit_%s_", ((PetscObject)pc)->prefix ? ((PetscObject)pc)->prefix : "", ilink->splitname)); in PCFieldSplitSetIS_FieldSplit()
2425 PetscCall(KSPSetOptionsPrefix(ilink->ksp, prefix)); in PCFieldSplitSetIS_FieldSplit()
2428 jac->head = ilink; in PCFieldSplitSetIS_FieldSplit()
2429 ilink->previous = NULL; in PCFieldSplitSetIS_FieldSplit()
2432 next->next = ilink; in PCFieldSplitSetIS_FieldSplit()
2433 ilink->previous = next; in PCFieldSplitSetIS_FieldSplit()
2667 PC_FieldSplitLink ilink = jac->head; in PCFieldSplitGetIS() local
2671 while (ilink) { in PCFieldSplitGetIS()
2672 PetscCall(PetscStrcmp(ilink->splitname, splitname, &found)); in PCFieldSplitGetIS()
2674 *is = ilink->is; in PCFieldSplitGetIS()
2677 ilink = ilink->next; in PCFieldSplitGetIS()
2708 PC_FieldSplitLink ilink = jac->head; in PCFieldSplitGetISByIndex() local
2713 ilink = ilink->next; in PCFieldSplitGetISByIndex()
2716 PetscCall(PCFieldSplitGetIS(pc, ilink->splitname, is)); in PCFieldSplitGetISByIndex()