Lines Matching refs:levels
28 if (data->levels) { in PCReset_HPDDM()
29 for (PetscInt i = 0; i < PETSC_PCHPDDM_MAXLEVELS && data->levels[i]; ++i) { in PCReset_HPDDM()
30 PetscCall(KSPDestroy(&data->levels[i]->ksp)); in PCReset_HPDDM()
31 PetscCall(PCDestroy(&data->levels[i]->pc)); in PCReset_HPDDM()
32 PetscCall(PetscFree(data->levels[i])); in PCReset_HPDDM()
34 PetscCall(PetscFree(data->levels)); in PCReset_HPDDM()
329 PC_HPDDM_Level **levels = data->levels; in PCSetFromOptions_HPDDM() local
338 if (!data->levels) { in PCSetFromOptions_HPDDM()
339 PetscCall(PetscCalloc1(PETSC_PCHPDDM_MAXLEVELS, &levels)); in PCSetFromOptions_HPDDM()
340 data->levels = levels; in PCSetFromOptions_HPDDM()
350 if (!data->levels[i - 1]) PetscCall(PetscNew(data->levels + i - 1)); in PCSetFromOptions_HPDDM()
351 data->levels[i - 1]->parent = data; in PCSetFromOptions_HPDDM()
354 data->levels[i - 1]->nu = 0; in PCSetFromOptions_HPDDM()
355 data->levels[i - 1]->threshold = -1.0; in PCSetFromOptions_HPDDM()
357 …ation vectors computed by SLEPc", "EPSSetDimensions", data->levels[i - 1]->nu, &data->levels[i - 1… in PCSetFromOptions_HPDDM()
361 …g deflation vectors returned by SLEPc", "PCHPDDM", data->levels[i - 1]->threshold, &data->levels[i… in PCSetFromOptions_HPDDM()
363 …PetscCheck(overlap == -1 || PetscAbsReal(data->levels[i - 1]->threshold + static_cast<PetscReal>(1… in PCSetFromOptions_HPDDM()
370 …PetscCheck(data->levels[0]->nu == 0 || nsv == 0, PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Cannot sup… in PCSetFromOptions_HPDDM()
371 if (data->levels[0]->nu == 0) { /* -eps_nev has not been used, so nu is 0 */ in PCSetFromOptions_HPDDM()
372 data->levels[0]->nu = nsv; /* nu may still be 0 if -svd_nsv has not been used */ in PCSetFromOptions_HPDDM()
376 …ing deflation vectors returned by SLEPc", "PCHPDDM", data->levels[0]->threshold, &data->levels[0]-… in PCSetFromOptions_HPDDM()
378 … if (data->levels[0]->nu == 0 || nsv == 0) { /* if neither -eps_nev nor -svd_nsv has been used */ in PCSetFromOptions_HPDDM()
382 …ing deflation vectors returned by SLEPc", "PCHPDDM", data->levels[0]->threshold, &data->levels[0]-… in PCSetFromOptions_HPDDM()
385 …PetscCheck(data->levels[0]->nu || PetscAbsReal(data->levels[i - 1]->threshold + static_cast<PetscR… in PCSetFromOptions_HPDDM()
403 …if (data->levels[i - 1]->threshold <= PetscReal() && data->levels[i - 1]->nu <= 0 && !(data->defla… in PCSetFromOptions_HPDDM()
455 while (i < PETSC_PCHPDDM_MAXLEVELS && data->levels[i]) PetscCall(PetscFree(data->levels[i++])); in PCSetFromOptions_HPDDM()
466 PetscCheck(data->levels[0]->ksp, PETSC_COMM_SELF, PETSC_ERR_PLIB, "No KSP attached to PCHPDDM"); in PCApply_HPDDM()
467 …if (data->log_separate) PetscCall(PetscLogEventBegin(PC_HPDDM_Solve[0], data->levels[0]->ksp, null… in PCApply_HPDDM()
468 if (!transpose) PetscCall(KSPSolve(data->levels[0]->ksp, x, y)); in PCApply_HPDDM()
469 else PetscCall(KSPSolveTranspose(data->levels[0]->ksp, x, y)); in PCApply_HPDDM()
470 …if (data->log_separate) PetscCall(PetscLogEventEnd(PC_HPDDM_Solve[0], data->levels[0]->ksp, nullpt… in PCApply_HPDDM()
481 PetscCheck(data->levels[0]->ksp, PETSC_COMM_SELF, PETSC_ERR_PLIB, "No KSP attached to PCHPDDM"); in PCMatApply_HPDDM()
482 if (!transpose) PetscCall(KSPMatSolve(data->levels[0]->ksp, X, Y)); in PCMatApply_HPDDM()
483 else PetscCall(KSPMatSolveTranspose(data->levels[0]->ksp, X, Y)); in PCMatApply_HPDDM()
519 if (data->levels[n]->ksp) { in PCHPDDMGetComplexities()
524 PetscCall(KSPGetOperators(data->levels[n]->ksp, nullptr, &P)); in PCHPDDMGetComplexities()
584 PetscCall(PetscViewerASCIIPrintf(viewer, " %" PetscInt_FMT, data->levels[i - 1]->nu)); in PCView_HPDDM()
585 …if (data->levels[i - 1]->threshold > static_cast<PetscReal>(-0.1)) PetscCall(PetscViewerASCIIPrint… in PCView_HPDDM()
592 if (data->levels[0]->ksp) { in PCView_HPDDM()
593 PetscCall(KSPView(data->levels[0]->ksp, viewer)); in PCView_HPDDM()
594 if (data->levels[0]->pc) PetscCall(PCView(data->levels[0]->pc, viewer)); in PCView_HPDDM()
597 if (data->levels[i]->ksp) color = 1; in PCView_HPDDM()
605 PetscCall(KSPView(data->levels[i]->ksp, subviewer)); in PCView_HPDDM()
606 if (data->levels[i]->pc) PetscCall(PCView(data->levels[i]->pc, subviewer)); in PCView_HPDDM()
709 if (data->levels[n]->pc) { in PCPreSolve_HPDDM()
710 PetscCall(PetscObjectTypeCompare((PetscObject)data->levels[n]->pc, PCASM, &flg)); in PCPreSolve_HPDDM()
714 PetscCall(PCASMGetType(data->levels[n]->pc, &type)); in PCPreSolve_HPDDM()
716 …PetscCall(PetscOptionsHasName(((PetscObject)data->levels[n]->pc)->options, ((PetscObject)data->lev… in PCPreSolve_HPDDM()
717 …PetscCheck(flg, PetscObjectComm((PetscObject)data->levels[n]->pc), PETSC_ERR_ARG_INCOMP, "PCASMTyp… in PCPreSolve_HPDDM()
718 …((PetscObject)ksp)->type_name, ((PetscObject)data->levels[n]->pc)->prefix, PCASMTypes[type], PCASM… in PCPreSolve_HPDDM()
840 …if (!ctx->parent->normal || ctx != ctx->parent->levels[0]) PetscCall(MatMult(A, y, ctx->v[1][0]));… in PCApply_HPDDMShell()
849 …if (!ctx->parent->normal || ctx != ctx->parent->levels[0]) PetscCall(MatMultHermitianTranspose(A, … in PCApply_HPDDMShell()
1217 …j = std::distance(ctx->parent->levels, std::find(ctx->parent->levels, ctx->parent->levels + ctx->p… in PCHPDDMSolve_Private()
1682 pc = ((PC_HPDDM *)std::get<0>(*ctx)[0]->data)->levels[0]->ksp->pc; in MatMult_SchurCorrection()
1789 …PetscCheck(data->levels && data->levels[0], PETSC_COMM_SELF, PETSC_ERR_PLIB, "Not a single level a… in PCSetUp_HPDDM()
1792 if (!data->levels[0]->ksp) { in PCSetUp_HPDDM()
1793 PetscCall(KSPCreate(PetscObjectComm((PetscObject)pc), &data->levels[0]->ksp)); in PCSetUp_HPDDM()
1794 PetscCall(KSPSetNestLevel(data->levels[0]->ksp, pc->kspnestlevel)); in PCSetUp_HPDDM()
1796 PetscCall(KSPSetOptionsPrefix(data->levels[0]->ksp, prefix)); in PCSetUp_HPDDM()
1797 PetscCall(KSPSetType(data->levels[0]->ksp, KSPPREONLY)); in PCSetUp_HPDDM()
1798 …} else if (data->levels[0]->ksp->pc && data->levels[0]->ksp->pc->setupcalled && data->levels[0]->k… in PCSetUp_HPDDM()
1801 for (n = 0; n < PETSC_PCHPDDM_MAXLEVELS && data->levels[n]; ++n) { in PCSetUp_HPDDM()
1803 … if (data->levels[n]->ksp) PetscCall(KSPSetReusePreconditioner(data->levels[n]->ksp, PETSC_TRUE)); in PCSetUp_HPDDM()
1804 if (data->levels[n]->pc) PetscCall(PCSetReusePreconditioner(data->levels[n]->pc, PETSC_TRUE)); in PCSetUp_HPDDM()
1810 for (n = 1; n < PETSC_PCHPDDM_MAXLEVELS && data->levels[n]; ++n) { in PCSetUp_HPDDM()
1811 …if (data->levels[n]->ksp && data->levels[n]->ksp->pc && data->levels[n]->ksp->pc->setupcalled && d… in PCSetUp_HPDDM()
1815 PetscCall(KSPDestroy(&data->levels[n]->ksp)); in PCSetUp_HPDDM()
1816 PetscCall(PCDestroy(&data->levels[n]->pc)); in PCSetUp_HPDDM()
1820 const int *addr = data->levels[0]->P ? data->levels[0]->P->getAddrLocal() : &HPDDM::i__0; in PCSetUp_HPDDM()
1824 ev = data->levels[0]->P->getVectors(); in PCSetUp_HPDDM()
1827 … PetscCall(VecCreateSeqWithArray(PETSC_COMM_SELF, 1, data->levels[0]->P->getDof(), ev[0], &xin)); in PCSetUp_HPDDM()
1840 PetscCall(KSPSetOperators(data->levels[0]->ksp, A, P)); in PCSetUp_HPDDM()
1922 …PetscCheck(data_00->levels[0]->pc, PetscObjectComm((PetscObject)P), PETSC_ERR_ORDER, "PC of the fi… in PCSetUp_HPDDM()
1923 PetscCall(PetscObjectTypeCompare((PetscObject)data_00->levels[0]->pc, PCASM, &flg)); in PCSetUp_HPDDM()
1924 …s)", pcpre ? pcpre : "", PCHPDDMSchurPreTypes[type], ((PetscObject)data_00->levels[0]->pc)->prefix, in PCSetUp_HPDDM()
1925 ((PetscObject)data_00->levels[0]->pc)->type_name, PCASM); in PCSetUp_HPDDM()
2274 PetscCall(KSPSetOperators(data->levels[0]->ksp, A, C)); in PCSetUp_HPDDM()
2446 if (!data->levels[0]->pc) { in PCSetUp_HPDDM()
2447 PetscCall(PCCreate(PetscObjectComm((PetscObject)pc), &data->levels[0]->pc)); in PCSetUp_HPDDM()
2449 PetscCall(PCSetOptionsPrefix(data->levels[0]->pc, prefix)); in PCSetUp_HPDDM()
2450 PetscCall(PCSetOperators(data->levels[0]->pc, A, P)); in PCSetUp_HPDDM()
2452 PetscCall(PCSetType(data->levels[0]->pc, PCASM)); in PCSetUp_HPDDM()
2453 …if (!data->levels[0]->pc->setupcalled) PetscCall(PCASMSetLocalSubdomains(data->levels[0]->pc, 1, o… in PCSetUp_HPDDM()
2454 …PetscCall(PCSetModifySubMatrices(data->levels[0]->pc, pc->modifysubmatrices, pc->modifysubmatrices… in PCSetUp_HPDDM()
2455 …PetscCall(PCHPDDMCommunicationAvoidingPCASM_Private(data->levels[0]->pc, flg ? A0 : a[0], PETSC_TR… in PCSetUp_HPDDM()
2459 …PetscTryMethod(data->levels[0]->pc, "PCASMGetSubKSP_C", (PC, PetscInt *, PetscInt *, KSP **), (dat… in PCSetUp_HPDDM()
2558 if (!data->levels[0]->D) { in PCSetUp_HPDDM()
2560 PetscCall(VecCreateMPI(PETSC_COMM_SELF, n, PETSC_DETERMINE, &data->levels[0]->D)); in PCSetUp_HPDDM()
2567 if (!data->levels[0]->pc) { in PCSetUp_HPDDM()
2569 PetscCall(PCCreate(PetscObjectComm((PetscObject)pc), &data->levels[0]->pc)); in PCSetUp_HPDDM()
2570 PetscCall(PCSetOptionsPrefix(data->levels[0]->pc, prefix)); in PCSetUp_HPDDM()
2571 PetscCall(PCSetOperators(data->levels[0]->pc, A, P)); in PCSetUp_HPDDM()
2573 PetscCall(PCSetType(data->levels[0]->pc, PCASM)); in PCSetUp_HPDDM()
2575 if (!data->levels[0]->pc->setupcalled) { in PCSetUp_HPDDM()
2578 PetscCall(PCASMSetLocalSubdomains(data->levels[0]->pc, 1, &sorted, &loc)); in PCSetUp_HPDDM()
2581 PetscCall(PCSetFromOptions(data->levels[0]->pc)); in PCSetUp_HPDDM()
2582 …PetscCall(PCSetModifySubMatrices(data->levels[0]->pc, pc->modifysubmatrices, pc->modifysubmatrices… in PCSetUp_HPDDM()
2585 … PetscCall(PCHPDDMCommunicationAvoidingPCASM_Private(data->levels[0]->pc, C, algebraic)); in PCSetUp_HPDDM()
2586 } else PetscCall(PCSetUp(data->levels[0]->pc)); in PCSetUp_HPDDM()
2587 …PetscTryMethod(data->levels[0]->pc, "PCASMGetSubKSP_C", (PC, PetscInt *, PetscInt *, KSP **), (dat… in PCSetUp_HPDDM()
2662 …PetscTryMethod(data_00->levels[0]->pc, "PCASMGetSubKSP_C", (PC, PetscInt *, PetscInt *, KSP **), (… in PCSetUp_HPDDM()
2667 PetscCall(PCASMGetLocalSubdomains(data_00->levels[0]->pc, &n, &is_00, nullptr)); in PCSetUp_HPDDM()
2723 …PetscCall(PCASMSetType(data->levels[0]->pc, PC_ASM_NONE)); /* "Neumann--Neumann" preconditioning w… in PCSetUp_HPDDM()
2724 PetscCall(PCASMSetLocalSubdomains(data->levels[0]->pc, 1, &data->is, &loc)); in PCSetUp_HPDDM()
2725 …PetscCall(PCSetFromOptions(data->levels[0]->pc)); /* action of eq. (15) of https://hal.science/hal… in PCSetUp_HPDDM()
2726 s = data->levels[0]->pc; in PCSetUp_HPDDM()
2800 if (!data->levels[0]->scatter) { in PCSetUp_HPDDM()
2803 …PetscCall(VecScatterCreate(xin, data->is, data->levels[0]->D, nullptr, &data->levels[0]->scatter)); in PCSetUp_HPDDM()
2806 if (data->levels[0]->P) { in PCSetUp_HPDDM()
2808 …PetscCall(HPDDM::Schwarz<PetscScalar>::destroy(data->levels[0], !pc->setupcalled || pc->flag == DI… in PCSetUp_HPDDM()
2810 if (!data->levels[0]->P) data->levels[0]->P = new HPDDM::Schwarz<PetscScalar>(); in PCSetUp_HPDDM()
2811 …if (data->log_separate) PetscCall(PetscLogEventBegin(PC_HPDDM_SetUp[0], data->levels[0]->ksp, null… in PCSetUp_HPDDM()
2812 …else PetscCall(PetscLogEventBegin(PC_HPDDM_Strc, data->levels[0]->ksp, nullptr, nullptr, nullptr)); in PCSetUp_HPDDM()
2814 …PetscCall(data->levels[0]->P->structure(loc, data->is, !ctx ? sub[0] : nullptr, ismatis ? C : data… in PCSetUp_HPDDM()
2815 …if (!data->log_separate) PetscCall(PetscLogEventEnd(PC_HPDDM_Strc, data->levels[0]->ksp, nullptr, … in PCSetUp_HPDDM()
2825 PetscCall(MatDiagonalScale(weighted, data->levels[0]->D, data->levels[0]->D)); in PCSetUp_HPDDM()
2841 PetscCall(MatDiagonalScale(sub[0], data->levels[0]->D, data->levels[0]->D)); in PCSetUp_HPDDM()
2856 …levels[0]->P, data->is, ismatis ? C : (algebraic && !block && overlap == -1 ? sub[0] : (!ctx ? dat… in PCSetUp_HPDDM()
2865 …if (data->log_separate) PetscCall(PetscLogEventEnd(PC_HPDDM_SetUp[0], data->levels[0]->ksp, nullpt… in PCSetUp_HPDDM()
2872 …if (data->log_separate) PetscCall(PetscLogEventBegin(PC_HPDDM_SetUp[n], data->levels[n]->ksp, null… in PCSetUp_HPDDM()
2874 …ata->levels[0]->ksp, "PCHPDDMSetUp_Private_C", (Mat *, Mat *, PetscInt, PetscInt *const, PC_HPDDM_… in PCSetUp_HPDDM()
2875 …if (data->log_separate) PetscCall(PetscLogEventEnd(PC_HPDDM_SetUp[n], data->levels[n]->ksp, nullpt… in PCSetUp_HPDDM()
2878 …PetscCall(PetscObjectComposeFunction((PetscObject)data->levels[0]->ksp, "PCHPDDMSetUp_Private_C", … in PCSetUp_HPDDM()
2882 if (data->levels[n]->P) { in PCSetUp_HPDDM()
2884 data->levels[n]->P->setBuffer(); in PCSetUp_HPDDM()
2885 data->levels[n]->P->super::start(); in PCSetUp_HPDDM()
2890 if (data->levels[n]->P) { in PCSetUp_HPDDM()
2894 PetscCall(KSPSetSkipPCSetFromOptions(data->levels[n]->ksp, PETSC_TRUE)); in PCSetUp_HPDDM()
2895 PetscCall(KSPGetPC(data->levels[n]->ksp, &spc)); in PCSetUp_HPDDM()
2897 PetscCall(PCShellSetContext(spc, data->levels[n])); in PCSetUp_HPDDM()
2908 PetscCall(KSPGetOperators(data->levels[n]->ksp, nullptr, &Pmat)); in PCSetUp_HPDDM()
2913 std::get<1>(*ctx) = data->levels[n]->scatter; in PCSetUp_HPDDM()
2914 …PetscCall(MatCreateShell(PetscObjectComm((PetscObject)data->levels[n]->ksp), m, m, M, M, ctx, &Ama… in PCSetUp_HPDDM()
2919 PetscCall(KSPSetOperators(data->levels[n]->ksp, Amat, Pmat)); in PCSetUp_HPDDM()
2923 …if (!data->levels[n]->pc) PetscCall(PCCreate(PetscObjectComm((PetscObject)data->levels[n]->ksp), &… in PCSetUp_HPDDM()
2926 PetscCall(PCSetReusePreconditioner(data->levels[n]->pc, PETSC_TRUE)); in PCSetUp_HPDDM()
2935 if (flg) PetscCall(KSPGetPC(data->levels[0]->ksp, &inner)); in PCSetUp_HPDDM()
2936 else inner = data->levels[0]->pc; in PCSetUp_HPDDM()
2971 if (data->levels[n]->P) { in PCSetUp_HPDDM()
2972 PetscCall(HPDDM::Schwarz<PetscScalar>::destroy(data->levels[n], PETSC_TRUE)); in PCSetUp_HPDDM()
2973 PetscCall(VecDestroyVecs(1, &data->levels[n]->v[0])); in PCSetUp_HPDDM()
2974 PetscCall(VecDestroyVecs(2, &data->levels[n]->v[1])); in PCSetUp_HPDDM()
2975 PetscCall(MatDestroy(data->levels[n]->V)); in PCSetUp_HPDDM()
2976 PetscCall(MatDestroy(data->levels[n]->V + 1)); in PCSetUp_HPDDM()
2977 PetscCall(MatDestroy(data->levels[n]->V + 2)); in PCSetUp_HPDDM()
2978 PetscCall(VecDestroy(&data->levels[n]->D)); in PCSetUp_HPDDM()
2979 PetscCall(PetscSFDestroy(&data->levels[n]->scatter)); in PCSetUp_HPDDM()
2983 for (n = reused; n < PETSC_PCHPDDM_MAXLEVELS && data->levels[n]; ++n) { in PCSetUp_HPDDM()
2984 PetscCall(KSPDestroy(&data->levels[n]->ksp)); in PCSetUp_HPDDM()
2985 PetscCall(PCDestroy(&data->levels[n]->pc)); in PCSetUp_HPDDM()
2994 if (data->levels[n]->ksp) PetscCall(KSPSetFromOptions(data->levels[n]->ksp)); in PCSetUp_HPDDM()
2995 if (data->levels[n]->pc) PetscCall(PCSetFromOptions(data->levels[n]->pc)); in PCSetUp_HPDDM()