PETSC_EXTERN PetscErrorCode PCCreate_ILU(PC pc) { PetscErrorCode ierr; PC_ILU *ilu; PetscFunctionBegin; ierr = PetscNewLog(pc,&ilu);CHKERRQ(ierr); pc->data = (void*)ilu; ierr = PCFactorInitialize(pc);CHKERRQ(ierr); ((PC_Factor*)ilu)->factortype = MAT_FACTOR_ILU; ((PC_Factor*)ilu)->info.levels = 0.; ((PC_Factor*)ilu)->info.fill = 1.0; ilu->col = 0; ilu->row = 0; ierr = PetscStrallocpy(MATORDERINGNATURAL,(char**)&((PC_Factor*)ilu)->ordering);CHKERRQ(ierr); ((PC_Factor*)ilu)->info.dt = PETSC_DEFAULT; ((PC_Factor*)ilu)->info.dtcount = PETSC_DEFAULT; ((PC_Factor*)ilu)->info.dtcol = PETSC_DEFAULT; pc->ops->reset = PCReset_ILU; pc->ops->destroy = PCDestroy_ILU; pc->ops->apply = PCApply_ILU; pc->ops->applytranspose = PCApplyTranspose_ILU; pc->ops->setup = PCSetUp_ILU; pc->ops->setfromoptions = PCSetFromOptions_ILU; pc->ops->view = PCView_ILU; pc->ops->applysymmetricleft = PCApplySymmetricLeft_ILU; pc->ops->applysymmetricright = PCApplySymmetricRight_ILU; pc->ops->applyrichardson = 0; ierr = PetscObjectComposeFunction((PetscObject)pc,"PCFactorSetDropTolerance_C",PCFactorSetDropTolerance_ILU);CHKERRQ(ierr); ierr = PetscObjectComposeFunction((PetscObject)pc,"PCFactorReorderForNonzeroDiagonal_C",PCFactorReorderForNonzeroDiagonal_ILU);CHKERRQ(ierr); PetscFunctionReturn(0); }
PETSC_EXTERN PetscErrorCode PCCreate_Cholesky(PC pc) { PetscErrorCode ierr; PC_Cholesky *dir; PetscFunctionBegin; ierr = PetscNewLog(pc,&dir); CHKERRQ(ierr); pc->data = (void*)dir; ierr = PCFactorInitialize(pc); CHKERRQ(ierr); ((PC_Factor*)dir)->factortype = MAT_FACTOR_CHOLESKY; ((PC_Factor*)dir)->info.fill = 5.0; dir->col = 0; dir->row = 0; ierr = PetscStrallocpy(MATORDERINGNATURAL,(char**)&((PC_Factor*)dir)->ordering); CHKERRQ(ierr); pc->ops->destroy = PCDestroy_Cholesky; pc->ops->reset = PCReset_Cholesky; pc->ops->apply = PCApply_Cholesky; pc->ops->applytranspose = PCApplyTranspose_Cholesky; pc->ops->setup = PCSetUp_Cholesky; pc->ops->setfromoptions = PCSetFromOptions_Cholesky; pc->ops->view = PCView_Cholesky; pc->ops->applyrichardson = 0; PetscFunctionReturn(0); }