Lines Matching refs:levels
49 if (mglevels->level == mglevels->levels - 1 && mg->ttol && reason) { in PCMGMCycle_Private()
127 PC_MG_Levels **mglevels = mg->levels; in PCApplyRichardson_MG()
130 PetscInt levels = mglevels[0]->levels, i; in PCApplyRichardson_MG() local
134 for (i = 0; i < levels; i++) { 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()
179 for (i = 1; i < levels; i++) { 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()
207 n = mglevels[0]->levels; in PCReset_MG()
339 PetscErrorCode PCMGSetLevels_MG(PC pc, PetscInt levels, MPI_Comm *comms) in PCMGSetLevels_MG() argument
343 PC_MG_Levels **mglevels = mg->levels; in PCMGSetLevels_MG()
354 PetscValidLogicalCollectiveInt(pc, levels, 2); in PCMGSetLevels_MG()
355 if (mg->nlevels == levels) PetscFunctionReturn(PETSC_SUCCESS); in PCMGSetLevels_MG()
361 n = mglevels[0]->levels; in PCMGSetLevels_MG()
368 PetscCall(PetscFree(mg->levels)); in PCMGSetLevels_MG()
371 mg->nlevels = levels; in PCMGSetLevels_MG()
373 PetscCall(PetscMalloc1(levels, &mglevels)); in PCMGSetLevels_MG()
378 for (i = 0; i < levels; i++) { in PCMGSetLevels_MG()
382 mglevels[i]->levels = levels; in PCMGSetLevels_MG()
396 …Call(PetscObjectIncrementTabLevel((PetscObject)mglevels[i]->smoothd, (PetscObject)pc, levels - i)); in PCMGSetLevels_MG()
399 if (i == 0 && levels > 1) { // coarse grid in PCMGSetLevels_MG()
422 if (i == levels - 1 && levels > 1) { // replace 'mg_finegrid_' with 'mg_levels_X_' in PCMGSetLevels_MG()
447 mg->levels = mglevels; in PCMGSetLevels_MG()
498 PetscErrorCode PCMGSetLevels(PC pc, PetscInt levels, MPI_Comm *comms) in PCMGSetLevels() argument
503 PetscTryMethod(pc, "PCMGSetLevels_C", (PC, PetscInt, MPI_Comm *), (pc, levels, comms)); in PCMGSetLevels()
510 PC_MG_Levels **mglevels = mg->levels; in PCDestroy_MG()
516 n = mglevels[0]->levels; in PCDestroy_MG()
523 PetscCall(PetscFree(mg->levels)); in PCDestroy_MG()
553 PC_MG_Levels **mglevels = mg->levels; in PCApply_MG_Internal()
555 PetscInt levels = mglevels[0]->levels, i; in PCApply_MG_Internal() local
562 for (i = 0; i < levels; i++) { 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 …etscCall(PetscObjectTypeCompare((PetscObject)mglevels[levels - 2]->X, ((PetscObject)mglevels[level… in PCApply_MG_Internal()
624 PetscCall(MatDestroy(&mglevels[levels - 1]->R)); in PCApply_MG_Internal()
625 for (i = 0; i < levels - 1; i++) { in PCApply_MG_Internal()
636 …for (i = 0; i < mg->cyclesperpcapply; i++) PetscCall(PCMGMCycle_Private(pc, mglevels + levels - 1,… in PCApply_MG_Internal()
647 mglevels[levels - 1]->B = NULL; in PCApply_MG_Internal()
649 mglevels[levels - 1]->b = NULL; in PCApply_MG_Internal()
685 PetscInt levels, cycles; in PCSetFromOptions_MG() local
695 levels = PetscMax(mg->nlevels, 1); in PCSetFromOptions_MG()
697 …PetscCall(PetscOptionsInt("-pc_mg_levels", "Number of Levels", "PCMGSetLevels", levels, &levels, &… in PCSetFromOptions_MG()
698 if (!flg && !mg->levels && pc->dm) { in PCSetFromOptions_MG()
699 PetscCall(DMGetRefineLevel(pc->dm, &levels)); in PCSetFromOptions_MG()
700 levels++; in PCSetFromOptions_MG()
703 PetscCall(PCMGSetLevels(pc, levels, NULL)); in PCSetFromOptions_MG()
704 mglevels = mg->levels; in PCSetFromOptions_MG()
735 levels = mglevels[0]->levels; in PCSetFromOptions_MG()
736 for (i = 0; i < levels; i++) { in PCSetFromOptions_MG()
773 PC_MG_Levels **mglevels = mg->levels; in PCView_MG()
774 PetscInt levels = mglevels ? mglevels[0]->levels : 0, i; in PCView_MG() local
782 const char *cyclename = levels ? (mglevels[0]->cycles == PC_MG_CYCLE_V ? "v" : "w") : "unknown"; in PCView_MG()
784 …if (levels == 1) PetscCall(PetscViewerASCIIPrintf(viewer, " WARNING: Multigrid is being run with … in PCView_MG()
785 …ewer, " type is %s, levels=%" PetscInt_FMT " cycles=%s\n", PCMGTypes[mg->am], levels, cyclename)); in PCView_MG()
799 for (i = 0; i < levels; i++) { in PCView_MG()
824 for (i = levels - 1; i >= 0; i--) { in PCView_MG()
835 for (i = levels - 1; i >= 0; i--) { in PCView_MG()
864 PC_MG_Levels **mglevels = mg->levels; in PCSetUp_MG()
877 n = mglevels[0]->levels; in PCSetUp_MG()
880 PetscInt levels; in PCSetUp_MG() local
882 PetscCall(DMGetRefineLevel(pc->dm, &levels)); in PCSetUp_MG()
883 levels++; in PCSetUp_MG()
884 if (levels > n) { /* the problem is now being solved on a finer grid */ in PCSetUp_MG()
885 PetscCall(PCMGSetLevels(pc, levels, NULL)); in PCSetUp_MG()
886 n = levels; in PCSetUp_MG()
888 mglevels = mg->levels; in PCSetUp_MG()
1255 PetscErrorCode PCMGGetLevels_MG(PC pc, PetscInt *levels) in PCMGGetLevels_MG() argument
1260 *levels = mg->nlevels; in PCMGGetLevels_MG()
1279 PetscErrorCode PCMGGetLevels(PC pc, PetscInt *levels) in PCMGGetLevels() argument
1283 PetscAssertPointer(levels, 2); in PCMGGetLevels()
1284 *levels = 0; in PCMGGetLevels()
1285 PetscTryMethod(pc, "PCMGGetLevels_C", (PC, PetscInt *), (pc, levels)); in PCMGGetLevels()
1309 PC_MG_Levels **mglevels = mg->levels; in PCMGGetGridComplexity()
1417 PC_MG_Levels **mglevels = mg->levels; in PCMGSetCycleType()
1418 PetscInt i, levels; in PCMGSetCycleType() local
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()
1468 PetscInt levels; in PCSetReusePreconditioner_MG() local
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()
1783 PetscInt i, levels; in PCMGSetNumberSmooth() local
1789 levels = mglevels[0]->levels; in PCMGSetNumberSmooth()
1791 for (i = 1; i < levels; i++) { in PCMGSetNumberSmooth()
1822 PC_MG_Levels **mglevels = mg->levels; in PCMGSetDistinctSmoothUp()
1823 PetscInt i, levels; in PCMGSetDistinctSmoothUp() local
1829 levels = mglevels[0]->levels; in PCMGSetDistinctSmoothUp()
1831 for (i = 1; i < levels; i++) { in PCMGSetDistinctSmoothUp()
1846 PC_MG_Levels **mglevels = mg->levels; in PCGetInterpolations_MG()
1866 PC_MG_Levels **mglevels = mg->levels; in PCGetCoarseOperators_MG()