Lines Matching refs:mglevels

17   PC_MG_Levels *mgc, *mglevels = *mglevelsin;  in PCMGMCycle_Private()  local
18 PetscInt cycles = (mglevels->level == 1) ? 1 : mglevels->cycles; in PCMGMCycle_Private()
21 …if (mglevels->eventsmoothsolve) PetscCall(PetscLogEventBegin(mglevels->eventsmoothsolve, 0, 0, 0, … in PCMGMCycle_Private()
24 PetscCall(KSPMatSolve(mglevels->smoothd, mglevels->B, mglevels->X)); /* pre-smooth */ in PCMGMCycle_Private()
25 PetscCall(KSPCheckSolve(mglevels->smoothd, pc, NULL)); in PCMGMCycle_Private()
27 PetscCall(KSPSolve(mglevels->smoothd, mglevels->b, mglevels->x)); /* pre-smooth */ in PCMGMCycle_Private()
28 PetscCall(KSPCheckSolve(mglevels->smoothd, pc, mglevels->x)); in PCMGMCycle_Private()
32 …PetscCall(KSPSolveTranspose(mglevels->smoothu, mglevels->b, mglevels->x)); /* transpose of post-sm… in PCMGMCycle_Private()
33 PetscCall(KSPCheckSolve(mglevels->smoothu, pc, mglevels->x)); in PCMGMCycle_Private()
35 …if (mglevels->eventsmoothsolve) PetscCall(PetscLogEventEnd(mglevels->eventsmoothsolve, 0, 0, 0, 0)… in PCMGMCycle_Private()
36 if (mglevels->level) { /* not the coarsest grid */ in PCMGMCycle_Private()
37 if (mglevels->eventresidual) PetscCall(PetscLogEventBegin(mglevels->eventresidual, 0, 0, 0, 0)); in PCMGMCycle_Private()
38 …if (matapp && !mglevels->R) PetscCall(MatDuplicate(mglevels->B, MAT_DO_NOT_COPY_VALUES, &mglevels-… in PCMGMCycle_Private()
40 …if (matapp) PetscCall((*mglevels->matresidual)(mglevels->A, mglevels->B, mglevels->X, mglevels->R)… in PCMGMCycle_Private()
41 else PetscCall((*mglevels->residual)(mglevels->A, mglevels->b, mglevels->x, mglevels->r)); in PCMGMCycle_Private()
43 …if (matapp) PetscCall((*mglevels->matresidualtranspose)(mglevels->A, mglevels->B, mglevels->X, mgl… in PCMGMCycle_Private()
44 …else PetscCall((*mglevels->residualtranspose)(mglevels->A, mglevels->b, mglevels->x, mglevels->r)); in PCMGMCycle_Private()
46 if (mglevels->eventresidual) PetscCall(PetscLogEventEnd(mglevels->eventresidual, 0, 0, 0, 0)); in PCMGMCycle_Private()
49 if (mglevels->level == mglevels->levels - 1 && mg->ttol && reason) { in PCMGMCycle_Private()
52 PetscCall(VecNorm(mglevels->r, NORM_2, &rnorm)); in PCMGMCycle_Private()
66 …if (mglevels->eventinterprestrict) PetscCall(PetscLogEventBegin(mglevels->eventinterprestrict, 0, … in PCMGMCycle_Private()
68 if (matapp) PetscCall(MatMatRestrict(mglevels->restrct, mglevels->R, &mgc->B)); in PCMGMCycle_Private()
69 else PetscCall(MatRestrict(mglevels->restrct, mglevels->r, mgc->b)); in PCMGMCycle_Private()
71 if (matapp) PetscCall(MatMatRestrict(mglevels->interpolate, mglevels->R, &mgc->B)); in PCMGMCycle_Private()
72 else PetscCall(MatRestrict(mglevels->interpolate, mglevels->r, mgc->b)); in PCMGMCycle_Private()
74 …if (mglevels->eventinterprestrict) PetscCall(PetscLogEventEnd(mglevels->eventinterprestrict, 0, 0,… in PCMGMCycle_Private()
85 …if (mglevels->eventinterprestrict) PetscCall(PetscLogEventBegin(mglevels->eventinterprestrict, 0, … in PCMGMCycle_Private()
87 …if (matapp) PetscCall(MatMatInterpolateAdd(mglevels->interpolate, mgc->X, mglevels->X, &mglevels->… in PCMGMCycle_Private()
88 else PetscCall(MatInterpolateAdd(mglevels->interpolate, mgc->x, mglevels->x, mglevels->x)); in PCMGMCycle_Private()
90 PetscCall(MatInterpolateAdd(mglevels->restrct, mgc->x, mglevels->x, mglevels->x)); in PCMGMCycle_Private()
92 …if (mglevels->eventinterprestrict) PetscCall(PetscLogEventEnd(mglevels->eventinterprestrict, 0, 0,… in PCMGMCycle_Private()
93 …if (mglevels->eventsmoothsolve) PetscCall(PetscLogEventBegin(mglevels->eventsmoothsolve, 0, 0, 0, … in PCMGMCycle_Private()
96 PetscCall(KSPMatSolve(mglevels->smoothu, mglevels->B, mglevels->X)); /* post smooth */ in PCMGMCycle_Private()
97 PetscCall(KSPCheckSolve(mglevels->smoothu, pc, NULL)); in PCMGMCycle_Private()
99 PetscCall(KSPSolve(mglevels->smoothu, mglevels->b, mglevels->x)); /* post smooth */ in PCMGMCycle_Private()
100 PetscCall(KSPCheckSolve(mglevels->smoothu, pc, mglevels->x)); in PCMGMCycle_Private()
104 PetscCall(KSPSolveTranspose(mglevels->smoothd, mglevels->b, mglevels->x)); /* post smooth */ in PCMGMCycle_Private()
105 PetscCall(KSPCheckSolve(mglevels->smoothd, pc, mglevels->x)); in PCMGMCycle_Private()
107 if (mglevels->cr) { in PCMGMCycle_Private()
114 PetscCall(KSPGetOperators(mglevels->cr, &crA, NULL)); in PCMGMCycle_Private()
115 PetscCall(KSPSetNoisy_Private(crA, mglevels->crx)); in PCMGMCycle_Private()
116 PetscCall(KSPSolve(mglevels->cr, mglevels->crb, mglevels->crx)); /* compatible relaxation */ in PCMGMCycle_Private()
117 PetscCall(KSPCheckSolve(mglevels->cr, pc, mglevels->crx)); in PCMGMCycle_Private()
119 …if (mglevels->eventsmoothsolve) PetscCall(PetscLogEventEnd(mglevels->eventsmoothsolve, 0, 0, 0, 0)… in PCMGMCycle_Private()
127 PC_MG_Levels **mglevels = mg->levels; in PCApplyRichardson_MG() local
130 PetscInt levels = mglevels[0]->levels, i; in PCApplyRichardson_MG()
135 if (!mglevels[i]->A) { in PCApplyRichardson_MG()
136 PetscCall(KSPGetOperators(mglevels[i]->smoothu, &mglevels[i]->A, NULL)); in PCApplyRichardson_MG()
137 PetscCall(PetscObjectReference((PetscObject)mglevels[i]->A)); in PCApplyRichardson_MG()
141 PetscCall(KSPGetPC(mglevels[levels - 1]->smoothd, &tpc)); in PCApplyRichardson_MG()
143 PetscCall(KSPGetPC(mglevels[levels - 1]->smoothu, &tpc)); in PCApplyRichardson_MG()
146 PetscCall(VecDestroy(&mglevels[levels - 1]->b)); in PCApplyRichardson_MG()
147 mglevels[levels - 1]->b = b; in PCApplyRichardson_MG()
149 if (!mglevels[levels - 1]->b) { in PCApplyRichardson_MG()
152 PetscCall(KSPCreateVecs(mglevels[levels - 1]->smoothd, 1, &vec, 0, NULL)); in PCApplyRichardson_MG()
153 mglevels[levels - 1]->b = *vec; in PCApplyRichardson_MG()
156 PetscCall(VecCopy(b, mglevels[levels - 1]->b)); in PCApplyRichardson_MG()
158 mglevels[levels - 1]->x = x; in PCApplyRichardson_MG()
170 PetscCall((*mglevels[levels - 1]->residual)(mglevels[levels - 1]->A, b, x, w)); in PCApplyRichardson_MG()
180 … PetscCall(KSPSetTolerances(mglevels[i]->smoothu, 0, PETSC_CURRENT, PETSC_CURRENT, PETSC_CURRENT)); in PCApplyRichardson_MG()
181 if (mglevels[i]->smoothu != mglevels[i]->smoothd) { in PCApplyRichardson_MG()
183 PetscCall(KSPSetInitialGuessNonzero(mglevels[i]->smoothd, PETSC_TRUE)); in PCApplyRichardson_MG()
184 … PetscCall(KSPSetTolerances(mglevels[i]->smoothd, 0, PETSC_CURRENT, PETSC_CURRENT, PETSC_CURRENT)); in PCApplyRichardson_MG()
190 PetscCall(PCMGMCycle_Private(pc, mglevels + levels - 1, PETSC_FALSE, PETSC_FALSE, reason)); in PCApplyRichardson_MG()
195 if (!changed && !changeu) mglevels[levels - 1]->b = NULL; in PCApplyRichardson_MG()
202 PC_MG_Levels **mglevels = mg->levels; in PCReset_MG() local
206 if (mglevels) { in PCReset_MG()
207 n = mglevels[0]->levels; in PCReset_MG()
209 PetscCall(VecDestroy(&mglevels[i + 1]->r)); in PCReset_MG()
210 PetscCall(VecDestroy(&mglevels[i]->b)); in PCReset_MG()
211 PetscCall(VecDestroy(&mglevels[i]->x)); in PCReset_MG()
212 PetscCall(MatDestroy(&mglevels[i + 1]->R)); in PCReset_MG()
213 PetscCall(MatDestroy(&mglevels[i]->B)); in PCReset_MG()
214 PetscCall(MatDestroy(&mglevels[i]->X)); in PCReset_MG()
215 PetscCall(VecDestroy(&mglevels[i]->crx)); in PCReset_MG()
216 PetscCall(VecDestroy(&mglevels[i]->crb)); in PCReset_MG()
217 PetscCall(MatDestroy(&mglevels[i + 1]->restrct)); in PCReset_MG()
218 PetscCall(MatDestroy(&mglevels[i + 1]->interpolate)); in PCReset_MG()
219 PetscCall(MatDestroy(&mglevels[i + 1]->inject)); in PCReset_MG()
220 PetscCall(VecDestroy(&mglevels[i + 1]->rscale)); in PCReset_MG()
222 PetscCall(VecDestroy(&mglevels[n - 1]->crx)); in PCReset_MG()
223 PetscCall(VecDestroy(&mglevels[n - 1]->crb)); in PCReset_MG()
226 PetscCall(VecDestroy(&mglevels[n - 1]->b)); in PCReset_MG()
227 PetscCall(MatDestroy(&mglevels[n - 1]->B)); in PCReset_MG()
230 PetscCall(MatDestroy(&mglevels[i]->coarseSpace)); in PCReset_MG()
231 PetscCall(MatDestroy(&mglevels[i]->A)); in PCReset_MG()
232 if (mglevels[i]->smoothd != mglevels[i]->smoothu) PetscCall(KSPReset(mglevels[i]->smoothd)); in PCReset_MG()
233 PetscCall(KSPReset(mglevels[i]->smoothu)); in PCReset_MG()
234 if (mglevels[i]->cr) PetscCall(KSPReset(mglevels[i]->cr)); in PCReset_MG()
343 PC_MG_Levels **mglevels = mg->levels; in PCMGSetLevels_MG() local
357 if (mglevels) { in PCMGSetLevels_MG()
358 mgctype = mglevels[0]->cycles; in PCMGSetLevels_MG()
361 n = mglevels[0]->levels; in PCMGSetLevels_MG()
363 … if (mglevels[i]->smoothd != mglevels[i]->smoothu) PetscCall(KSPDestroy(&mglevels[i]->smoothd)); in PCMGSetLevels_MG()
364 PetscCall(KSPDestroy(&mglevels[i]->smoothu)); in PCMGSetLevels_MG()
365 PetscCall(KSPDestroy(&mglevels[i]->cr)); in PCMGSetLevels_MG()
366 PetscCall(PetscFree(mglevels[i])); in PCMGSetLevels_MG()
373 PetscCall(PetscMalloc1(levels, &mglevels)); in PCMGSetLevels_MG()
379 PetscCall(PetscNew(&mglevels[i])); in PCMGSetLevels_MG()
381 mglevels[i]->level = i; in PCMGSetLevels_MG()
382 mglevels[i]->levels = levels; in PCMGSetLevels_MG()
383 mglevels[i]->cycles = mgctype; in PCMGSetLevels_MG()
386 mglevels[i]->eventsmoothsetup = 0; in PCMGSetLevels_MG()
387 mglevels[i]->eventsmoothsolve = 0; in PCMGSetLevels_MG()
388 mglevels[i]->eventresidual = 0; in PCMGSetLevels_MG()
389 mglevels[i]->eventinterprestrict = 0; in PCMGSetLevels_MG()
393 PetscCall(KSPCreate(comm, &mglevels[i]->smoothd)); in PCMGSetLevels_MG()
394 PetscCall(KSPSetNestLevel(mglevels[i]->smoothd, pc->kspnestlevel)); in PCMGSetLevels_MG()
395 PetscCall(KSPSetErrorIfNotConverged(mglevels[i]->smoothd, pc->erroriffailure)); in PCMGSetLevels_MG()
396 …PetscCall(PetscObjectIncrementTabLevel((PetscObject)mglevels[i]->smoothd, (PetscObject)pc, levels … in PCMGSetLevels_MG()
397 PetscCall(KSPSetOptionsPrefix(mglevels[i]->smoothd, prefix)); in PCMGSetLevels_MG()
398 …PetscCall(PetscObjectComposedDataSetInt((PetscObject)mglevels[i]->smoothd, PetscMGLevelId, mglevel… in PCMGSetLevels_MG()
400 PetscCall(KSPAppendOptionsPrefix(mglevels[0]->smoothd, "mg_coarse_")); in PCMGSetLevels_MG()
403 PetscCall(KSPSetType(mglevels[0]->smoothd, KSPPREONLY)); in PCMGSetLevels_MG()
404 PetscCall(KSPGetPC(mglevels[0]->smoothd, &ipc)); in PCMGSetLevels_MG()
415 PetscCall(KSPSetType(mglevels[i]->smoothd, KSPCHEBYSHEV)); in PCMGSetLevels_MG()
416 PetscCall(KSPSetConvergenceTest(mglevels[i]->smoothd, KSPConvergedSkip, NULL, NULL)); in PCMGSetLevels_MG()
417 PetscCall(KSPSetNormType(mglevels[i]->smoothd, KSP_NORM_NONE)); in PCMGSetLevels_MG()
418 PetscCall(KSPGetPC(mglevels[i]->smoothd, &ipc)); in PCMGSetLevels_MG()
420 …PetscCall(KSPSetTolerances(mglevels[i]->smoothd, PETSC_CURRENT, PETSC_CURRENT, PETSC_CURRENT, mg->… in PCMGSetLevels_MG()
425 …PetscOptionsFindPairPrefix_Private(((PetscObject)mglevels[i]->smoothd)->options, ((PetscObject)mgl… in PCMGSetLevels_MG()
429 PetscCall(KSPSetOptionsPrefix(mglevels[i]->smoothd, tprefix)); in PCMGSetLevels_MG()
432 PetscCall(KSPAppendOptionsPrefix(mglevels[i]->smoothd, tprefix)); in PCMGSetLevels_MG()
436 PetscCall(KSPAppendOptionsPrefix(mglevels[i]->smoothd, tprefix)); in PCMGSetLevels_MG()
440 mglevels[i]->smoothu = mglevels[i]->smoothd; in PCMGSetLevels_MG()
447 mg->levels = mglevels; in PCMGSetLevels_MG()
510 PC_MG_Levels **mglevels = mg->levels; in PCDestroy_MG() local
515 if (mglevels) { in PCDestroy_MG()
516 n = mglevels[0]->levels; in PCDestroy_MG()
518 … if (mglevels[i]->smoothd != mglevels[i]->smoothu) PetscCall(KSPDestroy(&mglevels[i]->smoothd)); in PCDestroy_MG()
519 PetscCall(KSPDestroy(&mglevels[i]->smoothu)); in PCDestroy_MG()
520 PetscCall(KSPDestroy(&mglevels[i]->cr)); in PCDestroy_MG()
521 PetscCall(PetscFree(mglevels[i])); in PCDestroy_MG()
553 PC_MG_Levels **mglevels = mg->levels; in PCApply_MG_Internal() local
555 PetscInt levels = mglevels[0]->levels, i; in PCApply_MG_Internal()
563 if (!mglevels[i]->A) { in PCApply_MG_Internal()
564 PetscCall(KSPGetOperators(mglevels[i]->smoothu, &mglevels[i]->A, NULL)); in PCApply_MG_Internal()
565 PetscCall(PetscObjectReference((PetscObject)mglevels[i]->A)); in PCApply_MG_Internal()
569 PetscCall(KSPGetPC(mglevels[levels - 1]->smoothd, &tpc)); in PCApply_MG_Internal()
571 PetscCall(KSPGetPC(mglevels[levels - 1]->smoothu, &tpc)); in PCApply_MG_Internal()
575 PetscCall(MatDestroy(&mglevels[levels - 1]->B)); in PCApply_MG_Internal()
576 mglevels[levels - 1]->B = B; in PCApply_MG_Internal()
578 PetscCall(VecDestroy(&mglevels[levels - 1]->b)); in PCApply_MG_Internal()
579 mglevels[levels - 1]->b = b; in PCApply_MG_Internal()
583 if (mglevels[levels - 1]->B) { in PCApply_MG_Internal()
587 PetscCall(MatGetSize(mglevels[levels - 1]->B, NULL, &N1)); in PCApply_MG_Internal()
589 …PetscCall(PetscObjectTypeCompare((PetscObject)mglevels[levels - 1]->B, ((PetscObject)B)->type_name… in PCApply_MG_Internal()
590 if (N1 != N2 || !flg) PetscCall(MatDestroy(&mglevels[levels - 1]->B)); in PCApply_MG_Internal()
592 if (!mglevels[levels - 1]->B) { in PCApply_MG_Internal()
593 PetscCall(MatDuplicate(B, MAT_COPY_VALUES, &mglevels[levels - 1]->B)); in PCApply_MG_Internal()
595 PetscCall(MatCopy(B, mglevels[levels - 1]->B, SAME_NONZERO_PATTERN)); in PCApply_MG_Internal()
598 if (!mglevels[levels - 1]->b) { in PCApply_MG_Internal()
601 PetscCall(KSPCreateVecs(mglevels[levels - 1]->smoothd, 1, &vec, 0, NULL)); in PCApply_MG_Internal()
602 mglevels[levels - 1]->b = *vec; in PCApply_MG_Internal()
605 PetscCall(VecCopy(b, mglevels[levels - 1]->b)); in PCApply_MG_Internal()
609 mglevels[levels - 1]->X = X; in PCApply_MG_Internal()
611 mglevels[levels - 1]->x = x; in PCApply_MG_Internal()
616 if (matapp && levels > 1 && mglevels[levels - 2]->X) { in PCApply_MG_Internal()
620 PetscCall(MatGetSize(mglevels[levels - 2]->X, NULL, &Xc)); in PCApply_MG_Internal()
621 PetscCall(MatGetSize(mglevels[levels - 1]->B, NULL, &Bc)); in PCApply_MG_Internal()
622 …PetscCall(PetscObjectTypeCompare((PetscObject)mglevels[levels - 2]->X, ((PetscObject)mglevels[leve… in PCApply_MG_Internal()
624 PetscCall(MatDestroy(&mglevels[levels - 1]->R)); in PCApply_MG_Internal()
626 PetscCall(MatDestroy(&mglevels[i]->R)); in PCApply_MG_Internal()
627 PetscCall(MatDestroy(&mglevels[i]->B)); in PCApply_MG_Internal()
628 PetscCall(MatDestroy(&mglevels[i]->X)); in PCApply_MG_Internal()
636 …for (i = 0; i < mg->cyclesperpcapply; i++) PetscCall(PCMGMCycle_Private(pc, mglevels + levels - 1,… in PCApply_MG_Internal()
638 PetscCall(PCMGACycle_Private(pc, mglevels, transpose, matapp)); in PCApply_MG_Internal()
640 PetscCall(PCMGKCycle_Private(pc, mglevels, transpose, matapp)); in PCApply_MG_Internal()
642 PetscCall(PCMGFCycle_Private(pc, mglevels, transpose, matapp)); in PCApply_MG_Internal()
647 mglevels[levels - 1]->B = NULL; in PCApply_MG_Internal()
649 mglevels[levels - 1]->b = NULL; in PCApply_MG_Internal()
688 PC_MG_Levels **mglevels; in PCSetFromOptions_MG() local
704 mglevels = mg->levels; in PCSetFromOptions_MG()
706 mgctype = (PCMGCycleType)mglevels[0]->cycles; in PCSetFromOptions_MG()
735 levels = mglevels[0]->levels; in PCSetFromOptions_MG()
738 …PetscCall(PetscLogEventRegister(eventname, ((PetscObject)pc)->classid, &mglevels[i]->eventsmoothse… in PCSetFromOptions_MG()
740 …PetscCall(PetscLogEventRegister(eventname, ((PetscObject)pc)->classid, &mglevels[i]->eventsmoothso… in PCSetFromOptions_MG()
743 …PetscCall(PetscLogEventRegister(eventname, ((PetscObject)pc)->classid, &mglevels[i]->eventresidual… in PCSetFromOptions_MG()
745 …PetscCall(PetscLogEventRegister(eventname, ((PetscObject)pc)->classid, &mglevels[i]->eventinterpre… in PCSetFromOptions_MG()
773 PC_MG_Levels **mglevels = mg->levels; in PCView_MG() local
774 PetscInt levels = mglevels ? mglevels[0]->levels : 0, i; in PCView_MG()
782 const char *cyclename = levels ? (mglevels[0]->cycles == PC_MG_CYCLE_V ? "v" : "w") : "unknown"; in PCView_MG()
806 PetscCall(KSPView(mglevels[i]->smoothd, viewer)); in PCView_MG()
808 if (i && mglevels[i]->smoothd == mglevels[i]->smoothu) { in PCView_MG()
813 PetscCall(KSPView(mglevels[i]->smoothu, viewer)); in PCView_MG()
816 if (i && mglevels[i]->cr) { in PCView_MG()
819 PetscCall(KSPView(mglevels[i]->cr, viewer)); in PCView_MG()
825 PetscCall(KSPView(mglevels[i]->smoothd, viewer)); in PCView_MG()
826 …if (i && mglevels[i]->smoothd != mglevels[i]->smoothu) PetscCall(KSPView(mglevels[i]->smoothu, vie… in PCView_MG()
836 if (!mglevels[i]->smoothu || (mglevels[i]->smoothu == mglevels[i]->smoothd)) { in PCView_MG()
838 PetscCall(KSPView(mglevels[i]->smoothd, viewer)); in PCView_MG()
843 PetscCall(KSPView(mglevels[i]->smoothd, viewer)); in PCView_MG()
846 PetscCall(KSPView(mglevels[i]->smoothu, viewer)); in PCView_MG()
864 PC_MG_Levels **mglevels = mg->levels; in PCSetUp_MG() local
876 …PetscCheck(mglevels, PetscObjectComm((PetscObject)pc), PETSC_ERR_ARG_WRONGSTATE, "Must set MG leve… in PCSetUp_MG()
877 n = mglevels[0]->levels; in PCSetUp_MG()
888 mglevels = mg->levels; in PCSetUp_MG()
895 PetscCall(KSPGetOperatorsSet(mglevels[n - 1]->smoothd, NULL, &opsset)); in PCSetUp_MG()
898 PetscCall(KSPGetOperators(mglevels[n - 1]->smoothd, NULL, &mmat)); in PCSetUp_MG()
902 PetscCall(KSPGetPC(mglevels[n - 1]->smoothd, &cpc)); in PCSetUp_MG()
904 PetscCall(KSPGetPC(mglevels[n - 1]->smoothu, &cpc)); in PCSetUp_MG()
917 PetscCall(KSPCreate(PetscObjectComm((PetscObject)pc), &mglevels[i]->cr)); in PCSetUp_MG()
918 PetscCall(KSPSetNestLevel(mglevels[i]->cr, pc->kspnestlevel)); in PCSetUp_MG()
919 PetscCall(KSPSetErrorIfNotConverged(mglevels[i]->cr, PETSC_FALSE)); in PCSetUp_MG()
920 PetscCall(PetscObjectIncrementTabLevel((PetscObject)mglevels[i]->cr, (PetscObject)pc, n - i)); in PCSetUp_MG()
921 PetscCall(KSPSetOptionsPrefix(mglevels[i]->cr, prefix)); in PCSetUp_MG()
922 …PetscCall(PetscObjectComposedDataSetInt((PetscObject)mglevels[i]->cr, PetscMGLevelId, mglevels[i]-… in PCSetUp_MG()
923 PetscCall(KSPSetType(mglevels[i]->cr, KSPCHEBYSHEV)); in PCSetUp_MG()
924 PetscCall(KSPSetConvergenceTest(mglevels[i]->cr, KSPConvergedSkip, NULL, NULL)); in PCSetUp_MG()
925 PetscCall(KSPSetNormType(mglevels[i]->cr, KSP_NORM_PRECONDITIONED)); in PCSetUp_MG()
926 PetscCall(KSPGetPC(mglevels[i]->cr, &ipc)); in PCSetUp_MG()
935 …PetscCall(KSPSetTolerances(mglevels[i]->cr, PETSC_CURRENT, PETSC_CURRENT, PETSC_CURRENT, mg->defau… in PCSetUp_MG()
936 PetscCall(KSPSetInitialGuessNonzero(mglevels[i]->cr, PETSC_TRUE)); in PCSetUp_MG()
938 PetscCall(KSPAppendOptionsPrefix(mglevels[i]->cr, crprefix)); in PCSetUp_MG()
946 PetscCall(KSPSetOperators(mglevels[n - 1]->smoothd, pc->mat, pc->pmat)); in PCSetUp_MG()
949 PetscCall(KSPSetOperators(mglevels[n - 1]->smoothd, pc->pmat, pc->pmat)); in PCSetUp_MG()
954 if (!(mglevels[i]->interpolate || mglevels[i]->restrct)) { in PCSetUp_MG()
960 PetscCall(KSPGetOperators(mglevels[n - 1]->smoothd, &dA, &dB)); in PCSetUp_MG()
966 PetscCall(KSPSetDM(mglevels[n - 1]->smoothd, pc->dm)); in PCSetUp_MG()
967 PetscCall(KSPSetDMActive(mglevels[n - 1]->smoothd, KSP_DMACTIVE_ALL, PETSC_FALSE)); in PCSetUp_MG()
968 if (mglevels[n - 1]->smoothd != mglevels[n - 1]->smoothu) { in PCSetUp_MG()
969 PetscCall(KSPSetDM(mglevels[n - 1]->smoothu, pc->dm)); in PCSetUp_MG()
970 PetscCall(KSPSetDMActive(mglevels[n - 1]->smoothu, KSP_DMACTIVE_ALL, PETSC_FALSE)); in PCSetUp_MG()
972 if (mglevels[n - 1]->cr) { in PCSetUp_MG()
973 PetscCall(KSPSetDM(mglevels[n - 1]->cr, pc->dm)); in PCSetUp_MG()
974 PetscCall(KSPSetDMActive(mglevels[n - 1]->cr, KSP_DMACTIVE_ALL, PETSC_FALSE)); in PCSetUp_MG()
986 if (!mglevels[i + 1]->restrct && !mglevels[i + 1]->interpolate) { in PCSetUp_MG()
987 …puteCoarseSpace_Internal(pc, i + 1, mg->coarseSpaceType, mg->Nc, NULL, &mglevels[i + 1]->coarseSpa… in PCSetUp_MG()
988 PetscCall(PCMGSetInterpolation(pc, i + 1, mglevels[i + 1]->coarseSpace)); in PCSetUp_MG()
1003 PetscCall(KSPSetDM(mglevels[i]->smoothd, dms[i])); in PCSetUp_MG()
1004 …if (!needRestricts) PetscCall(KSPSetDMActive(mglevels[i]->smoothd, KSP_DMACTIVE_ALL, PETSC_FALSE)); in PCSetUp_MG()
1005 PetscCall(KSPSetDMActive(mglevels[i]->smoothd, KSP_DMACTIVE_RHS, PETSC_FALSE)); in PCSetUp_MG()
1006 if (mglevels[i]->smoothd != mglevels[i]->smoothu) { in PCSetUp_MG()
1007 PetscCall(KSPSetDM(mglevels[i]->smoothu, dms[i])); in PCSetUp_MG()
1008 …if (!needRestricts) PetscCall(KSPSetDMActive(mglevels[i]->smoothu, KSP_DMACTIVE_ALL, PETSC_FALSE)); in PCSetUp_MG()
1009 PetscCall(KSPSetDMActive(mglevels[i]->smoothu, KSP_DMACTIVE_RHS, PETSC_FALSE)); in PCSetUp_MG()
1011 if (mglevels[i]->cr) { in PCSetUp_MG()
1012 PetscCall(KSPSetDM(mglevels[i]->cr, dms[i])); in PCSetUp_MG()
1013 … if (!needRestricts) PetscCall(KSPSetDMActive(mglevels[i]->cr, KSP_DMACTIVE_ALL, PETSC_FALSE)); in PCSetUp_MG()
1014 PetscCall(KSPSetDMActive(mglevels[i]->cr, KSP_DMACTIVE_RHS, PETSC_FALSE)); in PCSetUp_MG()
1016 if (!mglevels[i + 1]->interpolate) { in PCSetUp_MG()
1024 if (dmhasrestrict && !mglevels[i + 1]->restrct) { in PCSetUp_MG()
1030 if (dmhasinject && !mglevels[i + 1]->inject) { in PCSetUp_MG()
1051 …PetscCheck(mglevels[i + 1]->restrct || mglevels[i + 1]->interpolate, PetscObjectComm((PetscObject)… in PCSetUp_MG()
1052 …if (!mglevels[i + 1]->interpolate) PetscCall(PCMGSetInterpolation(pc, i + 1, mglevels[i + 1]->rest… in PCSetUp_MG()
1053 …if (!mglevels[i + 1]->restrct) PetscCall(PCMGSetRestriction(pc, i + 1, mglevels[i + 1]->interpolat… in PCSetUp_MG()
1054 if (reuse == MAT_REUSE_MATRIX) PetscCall(KSPGetOperators(mglevels[i]->smoothd, &A, &B)); in PCSetUp_MG()
1055 …if (doA) PetscCall(MatGalerkin(mglevels[i + 1]->restrct, dA, mglevels[i + 1]->interpolate, reuse, … in PCSetUp_MG()
1056 …if (doB) PetscCall(MatGalerkin(mglevels[i + 1]->restrct, dB, mglevels[i + 1]->interpolate, reuse, … in PCSetUp_MG()
1062 PetscCall(KSPGetOperators(mglevels[i]->smoothd, &A, NULL)); in PCSetUp_MG()
1069 PetscCall(KSPGetOperators(mglevels[i]->smoothd, NULL, &B)); in PCSetUp_MG()
1073 PetscCall(KSPSetOperators(mglevels[i]->smoothd, A, B)); in PCSetUp_MG()
1085mglevels[i]->coarseSpace) PetscCall(PCMGComputeCoarseSpace_Internal(pc, i, mg->coarseSpaceType, mg… in PCSetUp_MG()
1086 …daptInterpolator_Internal(pc, i, mglevels[i - 1]->smoothu, mglevels[i]->smoothu, mglevels[i - 1]->… in PCSetUp_MG()
1097 PetscCall(KSPGetDM(mglevels[i + 1]->smoothd, &dmfine)); in PCSetUp_MG()
1098 PetscCall(KSPGetDM(mglevels[i]->smoothd, &dmcoarse)); in PCSetUp_MG()
1107 for (i = 0; i < n; i++) PetscCall(KSPSetFromOptions(mglevels[i]->smoothd)); in PCSetUp_MG()
1109 …if (mglevels[i]->smoothu && (mglevels[i]->smoothu != mglevels[i]->smoothd)) PetscCall(KSPSetFromOp… in PCSetUp_MG()
1110 if (mglevels[i]->cr) PetscCall(KSPSetFromOptions(mglevels[i]->cr)); in PCSetUp_MG()
1118 if (!mglevels[i]->b) { in PCSetUp_MG()
1120 PetscCall(KSPCreateVecs(mglevels[i]->smoothd, 1, &vec, 0, NULL)); in PCSetUp_MG()
1125 if (!mglevels[i]->r && i) { in PCSetUp_MG()
1126 PetscCall(VecDuplicate(mglevels[i]->b, &tvec)); in PCSetUp_MG()
1130 if (!mglevels[i]->x) { in PCSetUp_MG()
1131 PetscCall(VecDuplicate(mglevels[i]->b, &tvec)); in PCSetUp_MG()
1136 PetscCall(VecDuplicate(mglevels[i]->b, &mglevels[i]->crx)); in PCSetUp_MG()
1137 PetscCall(VecDuplicate(mglevels[i]->b, &mglevels[i]->crb)); in PCSetUp_MG()
1138 PetscCall(VecZeroEntries(mglevels[i]->crb)); in PCSetUp_MG()
1141 if (n != 1 && !mglevels[n - 1]->r) { in PCSetUp_MG()
1145 PetscCall(KSPCreateVecs(mglevels[n - 1]->smoothd, 1, &vec, 0, NULL)); in PCSetUp_MG()
1151 PetscCall(VecDuplicate(mglevels[n - 1]->r, &mglevels[n - 1]->crx)); in PCSetUp_MG()
1152 PetscCall(VecDuplicate(mglevels[n - 1]->r, &mglevels[n - 1]->crb)); in PCSetUp_MG()
1153 PetscCall(VecZeroEntries(mglevels[n - 1]->crb)); in PCSetUp_MG()
1160 …if (mglevels[i]->smoothd->setupstage != KSP_SETUP_NEW) mglevels[i]->smoothd->setupstage = KSP_SETU… in PCSetUp_MG()
1165 …if (mglevels[n - 1]->smoothd->setupstage != KSP_SETUP_NEW) mglevels[n - 1]->smoothd->setupstage = … in PCSetUp_MG()
1168 …if (mglevels[i]->smoothu == mglevels[i]->smoothd || mg->am == PC_MG_FULL || mg->am == PC_MG_KASKAD… in PCSetUp_MG()
1170 PetscCall(KSPSetInitialGuessNonzero(mglevels[i]->smoothd, PETSC_TRUE)); in PCSetUp_MG()
1172 if (mglevels[i]->cr) PetscCall(KSPSetInitialGuessNonzero(mglevels[i]->cr, PETSC_TRUE)); in PCSetUp_MG()
1173 …if (mglevels[i]->eventsmoothsetup) PetscCall(PetscLogEventBegin(mglevels[i]->eventsmoothsetup, 0, … in PCSetUp_MG()
1174 PetscCall(KSPSetUp(mglevels[i]->smoothd)); in PCSetUp_MG()
1175 if (mglevels[i]->smoothd->reason) pc->failedreason = PC_SUBPC_ERROR; in PCSetUp_MG()
1176 …if (mglevels[i]->eventsmoothsetup) PetscCall(PetscLogEventEnd(mglevels[i]->eventsmoothsetup, 0, 0,… in PCSetUp_MG()
1177 if (!mglevels[i]->residual) { in PCSetUp_MG()
1180 PetscCall(KSPGetOperators(mglevels[i]->smoothd, &mat, NULL)); in PCSetUp_MG()
1183 if (!mglevels[i]->residualtranspose) { in PCSetUp_MG()
1186 PetscCall(KSPGetOperators(mglevels[i]->smoothd, &mat, NULL)); in PCSetUp_MG()
1191 if (mglevels[i]->smoothu && mglevels[i]->smoothu != mglevels[i]->smoothd) { in PCSetUp_MG()
1195 PetscCall(KSPGetOperatorsSet(mglevels[i]->smoothu, &opsset, NULL)); in PCSetUp_MG()
1197 PetscCall(KSPGetOperators(mglevels[i]->smoothd, &downmat, &downpmat)); in PCSetUp_MG()
1198 PetscCall(KSPSetOperators(mglevels[i]->smoothu, downmat, downpmat)); in PCSetUp_MG()
1201 PetscCall(KSPSetInitialGuessNonzero(mglevels[i]->smoothu, PETSC_TRUE)); in PCSetUp_MG()
1202 …if (mglevels[i]->eventsmoothsetup) PetscCall(PetscLogEventBegin(mglevels[i]->eventsmoothsetup, 0, … in PCSetUp_MG()
1203 PetscCall(KSPSetUp(mglevels[i]->smoothu)); in PCSetUp_MG()
1204 if (mglevels[i]->smoothu->reason) pc->failedreason = PC_SUBPC_ERROR; in PCSetUp_MG()
1205 …if (mglevels[i]->eventsmoothsetup) PetscCall(PetscLogEventEnd(mglevels[i]->eventsmoothsetup, 0, 0,… in PCSetUp_MG()
1207 if (mglevels[i]->cr) { in PCSetUp_MG()
1211 PetscCall(KSPGetOperatorsSet(mglevels[i]->cr, &opsset, NULL)); in PCSetUp_MG()
1213 PetscCall(KSPGetOperators(mglevels[i]->smoothd, &downmat, &downpmat)); in PCSetUp_MG()
1214 PetscCall(KSPSetOperators(mglevels[i]->cr, downmat, downpmat)); in PCSetUp_MG()
1217 PetscCall(KSPSetInitialGuessNonzero(mglevels[i]->cr, PETSC_TRUE)); in PCSetUp_MG()
1218 …if (mglevels[i]->eventsmoothsetup) PetscCall(PetscLogEventBegin(mglevels[i]->eventsmoothsetup, 0, … in PCSetUp_MG()
1219 PetscCall(KSPSetUp(mglevels[i]->cr)); in PCSetUp_MG()
1220 if (mglevels[i]->cr->reason) pc->failedreason = PC_SUBPC_ERROR; in PCSetUp_MG()
1221 …if (mglevels[i]->eventsmoothsetup) PetscCall(PetscLogEventEnd(mglevels[i]->eventsmoothsetup, 0, 0,… in PCSetUp_MG()
1225 …if (mglevels[0]->eventsmoothsetup) PetscCall(PetscLogEventBegin(mglevels[0]->eventsmoothsetup, 0, … in PCSetUp_MG()
1226 PetscCall(KSPSetUp(mglevels[0]->smoothd)); in PCSetUp_MG()
1227 if (mglevels[0]->smoothd->reason) pc->failedreason = PC_SUBPC_ERROR; in PCSetUp_MG()
1228 …if (mglevels[0]->eventsmoothsetup) PetscCall(PetscLogEventEnd(mglevels[0]->eventsmoothsetup, 0, 0,… in PCSetUp_MG()
1246 for (i = 1; i < n; i++) PetscCall(MatView(mglevels[i]->restrct, viewer)); in PCSetUp_MG()
1248 PetscCall(KSPGetPC(mglevels[i]->smoothd, &pc)); in PCSetUp_MG()
1309 PC_MG_Levels **mglevels = mg->levels; in PCMGGetGridComplexity() local
1326 PetscCall(KSPGetOperators(mglevels[lev]->smoothd, NULL, &dB)); in PCMGGetGridComplexity()
1417 PC_MG_Levels **mglevels = mg->levels; in PCMGSetCycleType() local
1423 …PetscCheck(mglevels, PetscObjectComm((PetscObject)pc), PETSC_ERR_ORDER, "Must set MG levels with P… in PCMGSetCycleType()
1424 levels = mglevels[0]->levels; in PCMGSetCycleType()
1425 for (i = 0; i < levels; i++) mglevels[i]->cycles = n; in PCMGSetCycleType()
1467 PC_MG_Levels **mglevels = mg->levels; in PCSetReusePreconditioner_MG() local
1474 if (mglevels) { in PCSetReusePreconditioner_MG()
1475 levels = mglevels[0]->levels; in PCSetReusePreconditioner_MG()
1476 PetscCall(KSPGetPC(mglevels[levels - 1]->smoothd, &tpc)); in PCSetReusePreconditioner_MG()
1478 PetscCall(KSPGetPC(mglevels[levels - 1]->smoothu, &tpc)); in PCSetReusePreconditioner_MG()
1782 PC_MG_Levels **mglevels = mg->levels; in PCMGSetNumberSmooth() local
1788 …PetscCheck(mglevels, PetscObjectComm((PetscObject)pc), PETSC_ERR_ORDER, "Must set MG levels with P… in PCMGSetNumberSmooth()
1789 levels = mglevels[0]->levels; in PCMGSetNumberSmooth()
1792 … PetscCall(KSPSetTolerances(mglevels[i]->smoothu, PETSC_CURRENT, PETSC_CURRENT, PETSC_CURRENT, n)); in PCMGSetNumberSmooth()
1793 … PetscCall(KSPSetTolerances(mglevels[i]->smoothd, PETSC_CURRENT, PETSC_CURRENT, PETSC_CURRENT, n)); in PCMGSetNumberSmooth()
1822 PC_MG_Levels **mglevels = mg->levels; in PCMGSetDistinctSmoothUp() local
1828 …PetscCheck(mglevels, PetscObjectComm((PetscObject)pc), PETSC_ERR_ORDER, "Must set MG levels with P… in PCMGSetDistinctSmoothUp()
1829 levels = mglevels[0]->levels; in PCMGSetDistinctSmoothUp()
1835 PetscCall(KSPGetOptionsPrefix(mglevels[i]->smoothd, &prefix)); in PCMGSetDistinctSmoothUp()
1846 PC_MG_Levels **mglevels = mg->levels; in PCGetInterpolations_MG() local
1851 …PetscCheck(mglevels, PetscObjectComm((PetscObject)pc), PETSC_ERR_ARG_WRONGSTATE, "Must set MG leve… in PCGetInterpolations_MG()
1854 mat[l - 1] = mglevels[l]->interpolate; in PCGetInterpolations_MG()
1866 PC_MG_Levels **mglevels = mg->levels; in PCGetCoarseOperators_MG() local
1871 …PetscCheck(mglevels, PetscObjectComm((PetscObject)pc), PETSC_ERR_ARG_WRONGSTATE, "Must set MG leve… in PCGetCoarseOperators_MG()
1874 PetscCall(KSPGetOperators(mglevels[l]->smoothd, NULL, &mat[l])); in PCGetCoarseOperators_MG()