Lines Matching full:pc
6 #include <../src/ksp/pc/impls/factor/factor.h> /*I "petscpc.h" I*/
13 static PetscErrorCode PCSetFromOptions_Cholesky(PC pc, PetscOptionItems PetscOptionsObject) in PCSetFromOptions_Cholesky() argument
17 PetscCall(PCSetFromOptions_Factor(pc, PetscOptionsObject)); in PCSetFromOptions_Cholesky()
22 static PetscErrorCode PCSetUp_Cholesky(PC pc) in PCSetUp_Cholesky() argument
25 PC_Cholesky *dir = (PC_Cholesky *)pc->data; in PCSetUp_Cholesky()
31 pc->failedreason = PC_NOERROR; in PCSetUp_Cholesky()
32 if (dir->hdr.reusefill && pc->setupcalled) ((PC_Factor *)dir)->info.fill = dir->hdr.actualfill; in PCSetUp_Cholesky()
34 PetscCall(PCGetOptionsPrefix(pc, &prefix)); in PCSetUp_Cholesky()
35 PetscCall(MatSetOptionsPrefixFactor(pc->pmat, prefix)); in PCSetUp_Cholesky()
37 PetscCall(MatSetErrorIfFailure(pc->pmat, pc->erroriffailure)); in PCSetUp_Cholesky()
41 PetscCall(MatGetFactorType(pc->pmat, &ftype)); in PCSetUp_Cholesky()
46 PetscCall(PCFactorSetDefaultOrdering_Factor(pc)); in PCSetUp_Cholesky()
47 PetscCall(MatGetOrdering(pc->pmat, ((PC_Factor *)dir)->ordering, &dir->row, &dir->col)); in PCSetUp_Cholesky()
51 PetscCall(MatCholeskyFactor(pc->pmat, dir->row, &((PC_Factor *)dir)->info)); in PCSetUp_Cholesky()
52 PetscCall(MatFactorGetError(pc->pmat, &err)); in PCSetUp_Cholesky()
54 pc->failedreason = (PCFailedReason)err; in PCSetUp_Cholesky()
58 ((PC_Factor *)dir)->fact = pc->pmat; in PCSetUp_Cholesky()
62 if (!pc->setupcalled) { in PCSetUp_Cholesky()
65 PetscCall(PCFactorSetUpMatSolverType(pc)); in PCSetUp_Cholesky()
70 PetscCall(PCFactorSetDefaultOrdering_Factor(pc)); in PCSetUp_Cholesky()
73 PetscCall(MatGetOrdering(pc->pmat, ((PC_Factor *)dir)->ordering, &dir->row, &dir->col)); in PCSetUp_Cholesky()
82 …PetscCall(PetscOptionsHasName(((PetscObject)pc)->options, ((PetscObject)pc)->prefix, "-pc_factor_n… in PCSetUp_Cholesky()
85 …PetscCall(PetscOptionsGetReal(((PetscObject)pc)->options, ((PetscObject)pc)->prefix, "-pc_factor_n… in PCSetUp_Cholesky()
86 PetscCall(MatReorderForNonzeroDiagonal(pc->pmat, tol, dir->row, dir->row)); in PCSetUp_Cholesky()
90 …PetscCall(MatCholeskyFactorSymbolic(((PC_Factor *)dir)->fact, pc->pmat, dir->row, &((PC_Factor *)d… in PCSetUp_Cholesky()
93 } else if (pc->flag != SAME_NONZERO_PATTERN) { in PCSetUp_Cholesky()
95 PetscCall(PCFactorSetUpMatSolverType(pc)); in PCSetUp_Cholesky()
104 PetscCall(PCFactorSetDefaultOrdering_Factor(pc)); in PCSetUp_Cholesky()
107 PetscCall(MatGetOrdering(pc->pmat, ((PC_Factor *)dir)->ordering, &dir->row, &dir->col)); in PCSetUp_Cholesky()
111 …PetscCall(PetscOptionsHasName(((PetscObject)pc)->options, ((PetscObject)pc)->prefix, "-pc_factor_n… in PCSetUp_Cholesky()
114 …PetscCall(PetscOptionsGetReal(((PetscObject)pc)->options, ((PetscObject)pc)->prefix, "-pc_factor_n… in PCSetUp_Cholesky()
115 PetscCall(MatReorderForNonzeroDiagonal(pc->pmat, tol, dir->row, dir->row)); in PCSetUp_Cholesky()
120 …PetscCall(MatCholeskyFactorSymbolic(((PC_Factor *)dir)->fact, pc->pmat, dir->row, &((PC_Factor *)d… in PCSetUp_Cholesky()
127 pc->failedreason = PC_NOERROR; in PCSetUp_Cholesky()
132 pc->failedreason = (PCFailedReason)err; in PCSetUp_Cholesky()
136 …PetscCall(MatCholeskyFactorNumeric(((PC_Factor *)dir)->fact, pc->pmat, &((PC_Factor *)dir)->info)); in PCSetUp_Cholesky()
139 pc->failedreason = (PCFailedReason)err; in PCSetUp_Cholesky()
143 PetscCall(PCFactorGetMatSolverType(pc, &stype)); in PCSetUp_Cholesky()
147 PetscCall(PCFactorSetMatSolverType(pc, solverpackage)); in PCSetUp_Cholesky()
152 static PetscErrorCode PCReset_Cholesky(PC pc) in PCReset_Cholesky() argument
154 PC_Cholesky *dir = (PC_Cholesky *)pc->data; in PCReset_Cholesky()
163 static PetscErrorCode PCDestroy_Cholesky(PC pc) in PCDestroy_Cholesky() argument
165 PC_Cholesky *dir = (PC_Cholesky *)pc->data; in PCDestroy_Cholesky()
168 PetscCall(PCReset_Cholesky(pc)); in PCDestroy_Cholesky()
171 PetscCall(PCFactorClearComposedFunctions(pc)); in PCDestroy_Cholesky()
172 PetscCall(PetscFree(pc->data)); in PCDestroy_Cholesky()
176 static PetscErrorCode PCApply_Cholesky(PC pc, Vec x, Vec y) in PCApply_Cholesky() argument
178 PC_Cholesky *dir = (PC_Cholesky *)pc->data; in PCApply_Cholesky()
182 PetscCall(MatSolve(pc->pmat, x, y)); in PCApply_Cholesky()
189 static PetscErrorCode PCMatApply_Cholesky(PC pc, Mat X, Mat Y) in PCMatApply_Cholesky() argument
191 PC_Cholesky *dir = (PC_Cholesky *)pc->data; in PCMatApply_Cholesky()
195 PetscCall(MatMatSolve(pc->pmat, X, Y)); in PCMatApply_Cholesky()
202 static PetscErrorCode PCApplySymmetricLeft_Cholesky(PC pc, Vec x, Vec y) in PCApplySymmetricLeft_Cholesky() argument
204 PC_Cholesky *dir = (PC_Cholesky *)pc->data; in PCApplySymmetricLeft_Cholesky()
208 PetscCall(MatForwardSolve(pc->pmat, x, y)); in PCApplySymmetricLeft_Cholesky()
215 static PetscErrorCode PCApplySymmetricRight_Cholesky(PC pc, Vec x, Vec y) in PCApplySymmetricRight_Cholesky() argument
217 PC_Cholesky *dir = (PC_Cholesky *)pc->data; in PCApplySymmetricRight_Cholesky()
221 PetscCall(MatBackwardSolve(pc->pmat, x, y)); in PCApplySymmetricRight_Cholesky()
228 static PetscErrorCode PCApplyTranspose_Cholesky(PC pc, Vec x, Vec y) in PCApplyTranspose_Cholesky() argument
230 PC_Cholesky *dir = (PC_Cholesky *)pc->data; in PCApplyTranspose_Cholesky()
234 PetscCall(MatSolveTranspose(pc->pmat, x, y)); in PCApplyTranspose_Cholesky()
241 static PetscErrorCode PCMatApplyTranspose_Cholesky(PC pc, Mat X, Mat Y) in PCMatApplyTranspose_Cholesky() argument
243 PC_Cholesky *dir = (PC_Cholesky *)pc->data; in PCMatApplyTranspose_Cholesky()
247 PetscCall(MatMatSolveTranspose(pc->pmat, X, Y)); in PCMatApplyTranspose_Cholesky()
262 + pc - the preconditioner context
272 PetscErrorCode PCFactorSetReuseOrdering(PC pc, PetscBool flag) in PCFactorSetReuseOrdering() argument
275 PetscValidHeaderSpecific(pc, PC_CLASSID, 1); in PCFactorSetReuseOrdering()
276 PetscValidLogicalCollectiveBool(pc, flag, 2); in PCFactorSetReuseOrdering()
277 PetscTryMethod(pc, "PCFactorSetReuseOrdering_C", (PC, PetscBool), (pc, flag)); in PCFactorSetReuseOrdering()
305 .seealso: [](ch_ksp), `PCCreate()`, `PCSetType()`, `PCType`, `PC`,
311 PETSC_EXTERN PetscErrorCode PCCreate_Cholesky(PC pc) in PCCreate_Cholesky() argument
317 pc->data = (void *)dir; in PCCreate_Cholesky()
318 PetscCall(PCFactorInitialize(pc, MAT_FACTOR_CHOLESKY)); in PCCreate_Cholesky()
322 pc->ops->destroy = PCDestroy_Cholesky; in PCCreate_Cholesky()
323 pc->ops->reset = PCReset_Cholesky; in PCCreate_Cholesky()
324 pc->ops->apply = PCApply_Cholesky; in PCCreate_Cholesky()
325 pc->ops->matapply = PCMatApply_Cholesky; in PCCreate_Cholesky()
326 pc->ops->applysymmetricleft = PCApplySymmetricLeft_Cholesky; in PCCreate_Cholesky()
327 pc->ops->applysymmetricright = PCApplySymmetricRight_Cholesky; in PCCreate_Cholesky()
328 pc->ops->applytranspose = PCApplyTranspose_Cholesky; in PCCreate_Cholesky()
329 pc->ops->matapplytranspose = PCMatApplyTranspose_Cholesky; in PCCreate_Cholesky()
330 pc->ops->setup = PCSetUp_Cholesky; in PCCreate_Cholesky()
331 pc->ops->setfromoptions = PCSetFromOptions_Cholesky; in PCCreate_Cholesky()
332 pc->ops->view = PCView_Factor; in PCCreate_Cholesky()
333 pc->ops->applyrichardson = NULL; in PCCreate_Cholesky()