Lines Matching refs:level
449 PetscInt level, fine_level = pc_ml->Nlevels - 1, dim = pc_ml->dim; in PCReset_ML() local
453 …for (level = 0; level <= fine_level; level++) PetscCall(VecDestroy(&pc_ml->gridctx[level].coords)); in PCReset_ML()
474 for (level = 0; level < fine_level; level++) { in PCReset_ML()
475 if (pc_ml->gridctx[level].A) PetscCall(MatDestroy(&pc_ml->gridctx[level].A)); in PCReset_ML()
476 if (pc_ml->gridctx[level].P) PetscCall(MatDestroy(&pc_ml->gridctx[level].P)); in PCReset_ML()
477 if (pc_ml->gridctx[level].R) PetscCall(MatDestroy(&pc_ml->gridctx[level].R)); in PCReset_ML()
478 if (pc_ml->gridctx[level].x) PetscCall(VecDestroy(&pc_ml->gridctx[level].x)); in PCReset_ML()
479 if (pc_ml->gridctx[level].b) PetscCall(VecDestroy(&pc_ml->gridctx[level].b)); in PCReset_ML()
480 if (pc_ml->gridctx[level + 1].r) PetscCall(VecDestroy(&pc_ml->gridctx[level + 1].r)); in PCReset_ML()
512 PetscInt nlocal_allcols, Nlevels, mllevel, level, level1, m, fine_level, bs; in PCSetUp_ML() local
573 level = fine_level - 1; in PCSetUp_ML()
577 PetscCall(MatWrapML_SeqAIJ(mlmat, MAT_REUSE_MATRIX, &gridctx[level].A)); in PCSetUp_ML()
578 level--; in PCSetUp_ML()
583 PetscCall(MatWrapML_MPIAIJ(mlmat, MAT_REUSE_MATRIX, &gridctx[level].A)); in PCSetUp_ML()
584 level--; in PCSetUp_ML()
588 for (level = 0; level < fine_level; level++) { in PCSetUp_ML()
589 if (level > 0) PetscCall(PCMGSetResidual(pc, level, PCMGResidualDefault, gridctx[level].A)); in PCSetUp_ML()
590 PetscCall(KSPSetOperators(gridctx[level].ksp, gridctx[level].A, gridctx[level].A)); in PCSetUp_ML()
593 PetscCall(KSPSetOperators(gridctx[fine_level].ksp, gridctx[level].A, gridctx[fine_level].A)); in PCSetUp_ML()
814 for (level = 1; level <= fine_level; level++) { in PCSetUp_ML()
815 PetscCall(PCMGGetSmoother(pc, level, &smoother)); in PCSetUp_ML()
832 level = fine_level - 1; in PCSetUp_ML()
837 PetscCall(MatWrapML_SeqAIJ(mlmat, MAT_INITIAL_MATRIX, &gridctx[level].P)); in PCSetUp_ML()
839 PetscCall(MatWrapML_SeqAIJ(mlmat, MAT_INITIAL_MATRIX, &gridctx[level].R)); in PCSetUp_ML()
842 PetscCall(MatWrapML_SeqAIJ(mlmat, MAT_INITIAL_MATRIX, &gridctx[level].A)); in PCSetUp_ML()
843 level--; in PCSetUp_ML()
848 PetscCall(MatWrapML_SHELL(mlmat, MAT_INITIAL_MATRIX, &gridctx[level].P)); in PCSetUp_ML()
850 PetscCall(MatWrapML_SHELL(mlmat, MAT_INITIAL_MATRIX, &gridctx[level].R)); in PCSetUp_ML()
853 PetscCall(MatWrapML_MPIAIJ(mlmat, MAT_INITIAL_MATRIX, &gridctx[level].A)); in PCSetUp_ML()
854 level--; in PCSetUp_ML()
859 for (level = 0; level < fine_level; level++) { in PCSetUp_ML()
860 level1 = level + 1; in PCSetUp_ML()
862 PetscCall(MatCreateVecs(gridctx[level].A, &gridctx[level].x, &gridctx[level].b)); in PCSetUp_ML()
864 PetscCall(PCMGSetX(pc, level, gridctx[level].x)); in PCSetUp_ML()
865 PetscCall(PCMGSetRhs(pc, level, gridctx[level].b)); in PCSetUp_ML()
868 if (level == 0) { in PCSetUp_ML()
869 PetscCall(PCMGGetCoarseSolve(pc, &gridctx[level].ksp)); in PCSetUp_ML()
871 PetscCall(PCMGGetSmoother(pc, level, &gridctx[level].ksp)); in PCSetUp_ML()
877 for (level = 0; level < fine_level; level++) { in PCSetUp_ML()
878 level1 = level + 1; in PCSetUp_ML()
880 PetscCall(PCMGSetInterpolation(pc, level1, gridctx[level].P)); in PCSetUp_ML()
881 PetscCall(PCMGSetRestriction(pc, level1, gridctx[level].R)); in PCSetUp_ML()
882 if (level > 0) PetscCall(PCMGSetResidual(pc, level, PCMGResidualDefault, gridctx[level].A)); in PCSetUp_ML()
883 PetscCall(KSPSetOperators(gridctx[level].ksp, gridctx[level].A, gridctx[level].A)); in PCSetUp_ML()
886 PetscCall(KSPSetOperators(gridctx[fine_level].ksp, gridctx[level].A, gridctx[fine_level].A)); in PCSetUp_ML()
895 level = fine_level; in PCSetUp_ML()
898 MPI_Comm comm = ((PetscObject)gridctx[level].A)->comm; in PCSetUp_ML()
900 PetscCall(MatGetBlockSize(gridctx[level].A, &bs)); in PCSetUp_ML()
901 PetscCall(MatGetLocalSize(gridctx[level].A, NULL, &nloc)); in PCSetUp_ML()
904 PetscCall(VecCreate(comm, &gridctx[level].coords)); in PCSetUp_ML()
905 PetscCall(VecSetSizes(gridctx[level].coords, dim * nloc, PETSC_DECIDE)); in PCSetUp_ML()
906 PetscCall(VecSetType(gridctx[level].coords, VECMPI)); in PCSetUp_ML()
907 PetscCall(VecGetArray(gridctx[level].coords, &array)); in PCSetUp_ML()
927 PetscCall(KSPGetPC(gridctx[level].ksp, &subpc)); in PCSetUp_ML()
929 PetscCall(VecRestoreArray(gridctx[level].coords, &array)); in PCSetUp_ML()
930 level--; in PCSetUp_ML()