Lines Matching refs:gridctx
56 GridCtx *gridctx; member
453 …for (level = 0; level <= fine_level; level++) PetscCall(VecDestroy(&pc_ml->gridctx[level].coords)); in PCReset_ML()
473 if (pc_ml->gridctx) { 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()
483 PetscCall(PetscFree(pc_ml->gridctx)); in PCReset_ML()
514 GridCtx *gridctx; in PCSetUp_ML() local
538 gridctx = pc_ml->gridctx; in PCSetUp_ML()
541 gridctx[fine_level].A = A; in PCSetUp_ML()
577 PetscCall(MatWrapML_SeqAIJ(mlmat, MAT_REUSE_MATRIX, &gridctx[level].A)); in PCSetUp_ML()
583 PetscCall(MatWrapML_MPIAIJ(mlmat, MAT_REUSE_MATRIX, &gridctx[level].A)); 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()
592 PetscCall(PCMGSetResidual(pc, fine_level, PCMGResidualDefault, gridctx[fine_level].A)); in PCSetUp_ML()
593 PetscCall(KSPSetOperators(gridctx[fine_level].ksp, gridctx[level].A, gridctx[fine_level].A)); in PCSetUp_ML()
824 PetscCall(PetscMalloc1(Nlevels, &gridctx)); in PCSetUp_ML()
826 pc_ml->gridctx = gridctx; in PCSetUp_ML()
830 gridctx[fine_level].A = A; 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()
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()
862 PetscCall(MatCreateVecs(gridctx[level].A, &gridctx[level].x, &gridctx[level].b)); in PCSetUp_ML()
863 PetscCall(MatCreateVecs(gridctx[level1].A, NULL, &gridctx[level1].r)); 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()
866 PetscCall(PCMGSetR(pc, level1, gridctx[level1].r)); in PCSetUp_ML()
869 PetscCall(PCMGGetCoarseSolve(pc, &gridctx[level].ksp)); in PCSetUp_ML()
871 PetscCall(PCMGGetSmoother(pc, level, &gridctx[level].ksp)); in PCSetUp_ML()
874 PetscCall(PCMGGetSmoother(pc, fine_level, &gridctx[fine_level].ksp)); 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()
885 PetscCall(PCMGSetResidual(pc, fine_level, PCMGResidualDefault, gridctx[fine_level].A)); in PCSetUp_ML()
886 PetscCall(KSPSetOperators(gridctx[fine_level].ksp, gridctx[level].A, gridctx[fine_level].A)); 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()
1130 pc_ml->gridctx = 0; in PCCreate_ML()