Lines Matching full:pc
1 #include <../src/ksp/pc/impls/factor/icc/icc.h> /*I "petscpc.h" I*/
3 static PetscErrorCode PCSetUp_ICC(PC pc) in PCSetUp_ICC() argument
5 PC_ICC *icc = (PC_ICC *)pc->data; in PCSetUp_ICC()
14 pc->failedreason = PC_NOERROR; in PCSetUp_ICC()
16 PetscCall(PCGetOptionsPrefix(pc, &prefix)); in PCSetUp_ICC()
17 PetscCall(MatSetOptionsPrefixFactor(pc->pmat, prefix)); in PCSetUp_ICC()
19 PetscCall(MatSetErrorIfFailure(pc->pmat, pc->erroriffailure)); in PCSetUp_ICC()
20 if (!pc->setupcalled) { in PCSetUp_ICC()
21 PetscCall(PCFactorSetUpMatSolverType(pc)); in PCSetUp_ICC()
24 PetscCall(PCFactorSetDefaultOrdering_Factor(pc)); in PCSetUp_ICC()
25 PetscCall(MatGetOrdering(pc->pmat, ((PC_Factor *)icc)->ordering, &perm, &cperm)); in PCSetUp_ICC()
27 …PetscCall(MatICCFactorSymbolic(((PC_Factor *)icc)->fact, pc->pmat, perm, &((PC_Factor *)icc)->info… in PCSetUp_ICC()
28 } else if (pc->flag != SAME_NONZERO_PATTERN) { in PCSetUp_ICC()
30 PetscCall(PCFactorSetUpMatSolverType(pc)); in PCSetUp_ICC()
33 PetscCall(PCFactorSetDefaultOrdering_Factor(pc)); in PCSetUp_ICC()
34 PetscCall(MatGetOrdering(pc->pmat, ((PC_Factor *)icc)->ordering, &perm, &cperm)); in PCSetUp_ICC()
36 …PetscCall(MatICCFactorSymbolic(((PC_Factor *)icc)->fact, pc->pmat, perm, &((PC_Factor *)icc)->info… in PCSetUp_ICC()
46 pc->failedreason = (PCFailedReason)err; in PCSetUp_ICC()
50 …PetscCall(MatCholeskyFactorNumeric(((PC_Factor *)icc)->fact, pc->pmat, &((PC_Factor *)icc)->info)); in PCSetUp_ICC()
53 pc->failedreason = (PCFailedReason)err; in PCSetUp_ICC()
56 PetscCall(PCFactorGetMatSolverType(pc, &stype)); in PCSetUp_ICC()
61 PetscCall(PCFactorSetMatSolverType(pc, solverpackage)); in PCSetUp_ICC()
66 static PetscErrorCode PCReset_ICC(PC pc) in PCReset_ICC() argument
68 PC_ICC *icc = (PC_ICC *)pc->data; in PCReset_ICC()
75 static PetscErrorCode PCDestroy_ICC(PC pc) in PCDestroy_ICC() argument
77 PC_ICC *icc = (PC_ICC *)pc->data; in PCDestroy_ICC()
80 PetscCall(PCReset_ICC(pc)); in PCDestroy_ICC()
83 PetscCall(PCFactorClearComposedFunctions(pc)); in PCDestroy_ICC()
84 PetscCall(PetscFree(pc->data)); in PCDestroy_ICC()
88 static PetscErrorCode PCApply_ICC(PC pc, Vec x, Vec y) in PCApply_ICC() argument
90 PC_ICC *icc = (PC_ICC *)pc->data; in PCApply_ICC()
97 static PetscErrorCode PCMatApply_ICC(PC pc, Mat X, Mat Y) in PCMatApply_ICC() argument
99 PC_ICC *icc = (PC_ICC *)pc->data; in PCMatApply_ICC()
106 static PetscErrorCode PCApplySymmetricLeft_ICC(PC pc, Vec x, Vec y) in PCApplySymmetricLeft_ICC() argument
108 PC_ICC *icc = (PC_ICC *)pc->data; in PCApplySymmetricLeft_ICC()
115 static PetscErrorCode PCApplySymmetricRight_ICC(PC pc, Vec x, Vec y) in PCApplySymmetricRight_ICC() argument
117 PC_ICC *icc = (PC_ICC *)pc->data; in PCApplySymmetricRight_ICC()
124 static PetscErrorCode PCSetFromOptions_ICC(PC pc, PetscOptionItems PetscOptionsObject) in PCSetFromOptions_ICC() argument
126 PC_ICC *icc = (PC_ICC *)pc->data; in PCSetFromOptions_ICC()
132 PetscCall(PCSetFromOptions_Factor(pc, PetscOptionsObject)); in PCSetFromOptions_ICC()
140 if (flg) PetscCall(PCFactorSetDropTolerance(pc,dt[0],dt[1],(PetscInt)dt[2])); in PCSetFromOptions_ICC()
163 … applied, for matrices with block size 1 only. Call `PCFactorSetShiftType`(pc,`MAT_SHIFT_POSITIVE_…
166 .seealso: [](ch_ksp), `PCCreate()`, `PCSetType()`, `PCType`, `PC`, `PCSOR`, `MatOrderingType`, `PCI…
172 PETSC_EXTERN PetscErrorCode PCCreate_ICC(PC pc) in PCCreate_ICC() argument
178 pc->data = (void *)icc; in PCCreate_ICC()
179 PetscCall(PCFactorInitialize(pc, MAT_FACTOR_ICC)); in PCCreate_ICC()
185 pc->ops->apply = PCApply_ICC; in PCCreate_ICC()
186 pc->ops->matapply = PCMatApply_ICC; in PCCreate_ICC()
187 pc->ops->applytranspose = PCApply_ICC; in PCCreate_ICC()
188 pc->ops->matapplytranspose = PCMatApply_ICC; in PCCreate_ICC()
189 pc->ops->setup = PCSetUp_ICC; in PCCreate_ICC()
190 pc->ops->reset = PCReset_ICC; in PCCreate_ICC()
191 pc->ops->destroy = PCDestroy_ICC; in PCCreate_ICC()
192 pc->ops->setfromoptions = PCSetFromOptions_ICC; in PCCreate_ICC()
193 pc->ops->view = PCView_Factor; in PCCreate_ICC()
194 pc->ops->applysymmetricleft = PCApplySymmetricLeft_ICC; in PCCreate_ICC()
195 pc->ops->applysymmetricright = PCApplySymmetricRight_ICC; in PCCreate_ICC()