Lines Matching refs:pc

18   PC            pc;  in PCMult_Eisenstat()  local
22 PetscCall(MatShellGetContext(mat, &pc)); in PCMult_Eisenstat()
23 eis = (PC_Eisenstat *)pc->data; in PCMult_Eisenstat()
25 PetscCall(MatFactorGetError(eis->A, (MatFactorError *)&pc->failedreason)); in PCMult_Eisenstat()
31 PC pc; in PCNorm_Eisenstat() local
35 PetscCall(MatShellGetContext(mat, &pc)); in PCNorm_Eisenstat()
36 eis = (PC_Eisenstat *)pc->data; in PCNorm_Eisenstat()
41 static PetscErrorCode PCApply_Eisenstat(PC pc, Vec x, Vec y) in PCApply_Eisenstat() argument
43 PC_Eisenstat *eis = (PC_Eisenstat *)pc->data; in PCApply_Eisenstat()
48 PetscCall(MatHasOperation(pc->pmat, MATOP_MULT_DIAGONAL_BLOCK, &hasop)); in PCApply_Eisenstat()
50 PetscCall(MatMultDiagonalBlock(pc->pmat, x, y)); in PCApply_Eisenstat()
58 static PetscErrorCode PCApplyTranspose_Eisenstat(PC pc, Vec x, Vec y) in PCApplyTranspose_Eisenstat() argument
60 PC_Eisenstat *eis = (PC_Eisenstat *)pc->data; in PCApplyTranspose_Eisenstat()
65 …PetscCheck(set && sym, PetscObjectComm((PetscObject)pc), PETSC_ERR_SUP, "Can only apply transpose … in PCApplyTranspose_Eisenstat()
67 PetscCall(MatHasOperation(pc->pmat, MATOP_MULT_DIAGONAL_BLOCK, &hasop)); in PCApplyTranspose_Eisenstat()
69 PetscCall(MatMultDiagonalBlock(pc->pmat, x, y)); in PCApplyTranspose_Eisenstat()
77 static PetscErrorCode PCPreSolve_Eisenstat(PC pc, KSP ksp, Vec b, Vec x) in PCPreSolve_Eisenstat() argument
79 PC_Eisenstat *eis = (PC_Eisenstat *)pc->data; in PCPreSolve_Eisenstat()
83 if (pc->presolvedone < 2) { in PCPreSolve_Eisenstat()
84 …PetscCheck(pc->mat == pc->pmat, PetscObjectComm((PetscObject)pc), PETSC_ERR_SUP, "Cannot have diff… in PCPreSolve_Eisenstat()
86 eis->A = pc->mat; in PCPreSolve_Eisenstat()
87 pc->mat = eis->shell; in PCPreSolve_Eisenstat()
90 if (!eis->b[pc->presolvedone - 1]) PetscCall(VecDuplicate(b, &eis->b[pc->presolvedone - 1])); in PCPreSolve_Eisenstat()
95 PetscCall(VecCopy(x, eis->b[pc->presolvedone - 1])); in PCPreSolve_Eisenstat()
96 …PetscCall(MatSOR(eis->A, eis->b[pc->presolvedone - 1], eis->omega, SOR_APPLY_UPPER, 0.0, 1, 1, x)); in PCPreSolve_Eisenstat()
97 PetscCall(MatFactorGetError(eis->A, (MatFactorError *)&pc->failedreason)); in PCPreSolve_Eisenstat()
101 PetscCall(VecCopy(b, eis->b[pc->presolvedone - 1])); in PCPreSolve_Eisenstat()
104 …PetscCall(MatSOR(eis->A, eis->b[pc->presolvedone - 1], eis->omega, (MatSORType)(SOR_ZERO_INITIAL_G… in PCPreSolve_Eisenstat()
105 PetscCall(MatFactorGetError(eis->A, (MatFactorError *)&pc->failedreason)); in PCPreSolve_Eisenstat()
109 static PetscErrorCode PCPostSolve_Eisenstat(PC pc, KSP ksp, Vec b, Vec x) in PCPostSolve_Eisenstat() argument
111 PC_Eisenstat *eis = (PC_Eisenstat *)pc->data; in PCPostSolve_Eisenstat()
115 PetscCall(VecCopy(eis->b[pc->presolvedone], b)); in PCPostSolve_Eisenstat()
118 PetscCall(VecCopy(x, eis->b[pc->presolvedone])); in PCPostSolve_Eisenstat()
119 …PetscCall(MatSOR(eis->A, eis->b[pc->presolvedone], eis->omega, (MatSORType)(SOR_ZERO_INITIAL_GUESS… in PCPostSolve_Eisenstat()
120 PetscCall(MatFactorGetError(eis->A, (MatFactorError *)&pc->failedreason)); in PCPostSolve_Eisenstat()
121 if (!pc->presolvedone) pc->mat = eis->A; in PCPostSolve_Eisenstat()
125 static PetscErrorCode PCReset_Eisenstat(PC pc) in PCReset_Eisenstat() argument
127 PC_Eisenstat *eis = (PC_Eisenstat *)pc->data; in PCReset_Eisenstat()
137 static PetscErrorCode PCDestroy_Eisenstat(PC pc) in PCDestroy_Eisenstat() argument
140 PetscCall(PCReset_Eisenstat(pc)); in PCDestroy_Eisenstat()
141 PetscCall(PetscObjectComposeFunction((PetscObject)pc, "PCEisenstatSetOmega_C", NULL)); in PCDestroy_Eisenstat()
142 PetscCall(PetscObjectComposeFunction((PetscObject)pc, "PCEisenstatSetNoDiagonalScaling_C", NULL)); in PCDestroy_Eisenstat()
143 PetscCall(PetscObjectComposeFunction((PetscObject)pc, "PCEisenstatGetOmega_C", NULL)); in PCDestroy_Eisenstat()
144 PetscCall(PetscObjectComposeFunction((PetscObject)pc, "PCEisenstatGetNoDiagonalScaling_C", NULL)); in PCDestroy_Eisenstat()
145 PetscCall(PetscObjectComposeFunction((PetscObject)pc, "PCPreSolveChangeRHS_C", NULL)); in PCDestroy_Eisenstat()
146 PetscCall(PetscFree(pc->data)); in PCDestroy_Eisenstat()
150 static PetscErrorCode PCSetFromOptions_Eisenstat(PC pc, PetscOptionItems PetscOptionsObject) in PCSetFromOptions_Eisenstat() argument
152 PC_Eisenstat *eis = (PC_Eisenstat *)pc->data; in PCSetFromOptions_Eisenstat()
159 if (flg) PetscCall(PCEisenstatSetOmega(pc, omega)); in PCSetFromOptions_Eisenstat()
161 if (set) PetscCall(PCEisenstatSetNoDiagonalScaling(pc, flg)); in PCSetFromOptions_Eisenstat()
166 static PetscErrorCode PCView_Eisenstat(PC pc, PetscViewer viewer) in PCView_Eisenstat() argument
168 PC_Eisenstat *eis = (PC_Eisenstat *)pc->data; in PCView_Eisenstat()
184 static PetscErrorCode PCSetUp_Eisenstat(PC pc) in PCSetUp_Eisenstat() argument
188 PC_Eisenstat *eis = (PC_Eisenstat *)pc->data; in PCSetUp_Eisenstat()
191 if (!pc->setupcalled) { in PCSetUp_Eisenstat()
192 PetscCall(MatGetSize(pc->mat, &M, &N)); in PCSetUp_Eisenstat()
193 PetscCall(MatGetLocalSize(pc->mat, &m, &n)); in PCSetUp_Eisenstat()
194 PetscCall(MatIsSymmetricKnown(pc->mat, &set, &sym)); in PCSetUp_Eisenstat()
195 PetscCall(MatCreate(PetscObjectComm((PetscObject)pc), &eis->shell)); in PCSetUp_Eisenstat()
199 PetscCall(MatShellSetContext(eis->shell, pc)); in PCSetUp_Eisenstat()
205 if (!pc->setupcalled) PetscCall(MatCreateVecs(pc->pmat, &eis->diag, NULL)); in PCSetUp_Eisenstat()
206 PetscCall(MatGetDiagonal(pc->pmat, eis->diag)); in PCSetUp_Eisenstat()
210 static PetscErrorCode PCEisenstatSetOmega_Eisenstat(PC pc, PetscReal omega) in PCEisenstatSetOmega_Eisenstat() argument
212 PC_Eisenstat *eis = (PC_Eisenstat *)pc->data; in PCEisenstatSetOmega_Eisenstat()
215 …PetscCheck(omega > 0.0 && omega < 2.0, PetscObjectComm((PetscObject)pc), PETSC_ERR_ARG_OUTOFRANGE,… in PCEisenstatSetOmega_Eisenstat()
220 static PetscErrorCode PCEisenstatSetNoDiagonalScaling_Eisenstat(PC pc, PetscBool flg) in PCEisenstatSetNoDiagonalScaling_Eisenstat() argument
222 PC_Eisenstat *eis = (PC_Eisenstat *)pc->data; in PCEisenstatSetNoDiagonalScaling_Eisenstat()
229 static PetscErrorCode PCEisenstatGetOmega_Eisenstat(PC pc, PetscReal *omega) in PCEisenstatGetOmega_Eisenstat() argument
231 PC_Eisenstat *eis = (PC_Eisenstat *)pc->data; in PCEisenstatGetOmega_Eisenstat()
238 static PetscErrorCode PCEisenstatGetNoDiagonalScaling_Eisenstat(PC pc, PetscBool *flg) in PCEisenstatGetNoDiagonalScaling_Eisenstat() argument
240 PC_Eisenstat *eis = (PC_Eisenstat *)pc->data; in PCEisenstatGetNoDiagonalScaling_Eisenstat()
273 PetscErrorCode PCEisenstatSetOmega(PC pc, PetscReal omega) in PCEisenstatSetOmega() argument
276 PetscValidHeaderSpecific(pc, PC_CLASSID, 1); in PCEisenstatSetOmega()
277 PetscValidLogicalCollectiveReal(pc, omega, 2); in PCEisenstatSetOmega()
278 PetscTryMethod(pc, "PCEisenstatSetOmega_C", (PC, PetscReal), (pc, omega)); in PCEisenstatSetOmega()
304 PetscErrorCode PCEisenstatSetNoDiagonalScaling(PC pc, PetscBool flg) in PCEisenstatSetNoDiagonalScaling() argument
307 PetscValidHeaderSpecific(pc, PC_CLASSID, 1); in PCEisenstatSetNoDiagonalScaling()
308 PetscTryMethod(pc, "PCEisenstatSetNoDiagonalScaling_C", (PC, PetscBool), (pc, flg)); in PCEisenstatSetNoDiagonalScaling()
340 PetscErrorCode PCEisenstatGetOmega(PC pc, PetscReal *omega) in PCEisenstatGetOmega() argument
343 PetscValidHeaderSpecific(pc, PC_CLASSID, 1); in PCEisenstatGetOmega()
344 PetscUseMethod(pc, "PCEisenstatGetOmega_C", (PC, PetscReal *), (pc, omega)); in PCEisenstatGetOmega()
372 PetscErrorCode PCEisenstatGetNoDiagonalScaling(PC pc, PetscBool *flg) in PCEisenstatGetNoDiagonalScaling() argument
375 PetscValidHeaderSpecific(pc, PC_CLASSID, 1); in PCEisenstatGetNoDiagonalScaling()
376 PetscUseMethod(pc, "PCEisenstatGetNoDiagonalScaling_C", (PC, PetscBool *), (pc, flg)); in PCEisenstatGetNoDiagonalScaling()
380 static PetscErrorCode PCPreSolveChangeRHS_Eisenstat(PC pc, PetscBool *change) in PCPreSolveChangeRHS_Eisenstat() argument
410 PETSC_EXTERN PetscErrorCode PCCreate_Eisenstat(PC pc) in PCCreate_Eisenstat() argument
417 pc->ops->apply = PCApply_Eisenstat; in PCCreate_Eisenstat()
418 pc->ops->applytranspose = PCApplyTranspose_Eisenstat; in PCCreate_Eisenstat()
419 pc->ops->presolve = PCPreSolve_Eisenstat; in PCCreate_Eisenstat()
420 pc->ops->postsolve = PCPostSolve_Eisenstat; in PCCreate_Eisenstat()
421 pc->ops->applyrichardson = NULL; in PCCreate_Eisenstat()
422 pc->ops->setfromoptions = PCSetFromOptions_Eisenstat; in PCCreate_Eisenstat()
423 pc->ops->destroy = PCDestroy_Eisenstat; in PCCreate_Eisenstat()
424 pc->ops->reset = PCReset_Eisenstat; in PCCreate_Eisenstat()
425 pc->ops->view = PCView_Eisenstat; in PCCreate_Eisenstat()
426 pc->ops->setup = PCSetUp_Eisenstat; in PCCreate_Eisenstat()
428 pc->data = eis; in PCCreate_Eisenstat()
435 …PetscCall(PetscObjectComposeFunction((PetscObject)pc, "PCEisenstatSetOmega_C", PCEisenstatSetOmega… in PCCreate_Eisenstat()
436 …PetscCall(PetscObjectComposeFunction((PetscObject)pc, "PCEisenstatSetNoDiagonalScaling_C", PCEisen… in PCCreate_Eisenstat()
437 …PetscCall(PetscObjectComposeFunction((PetscObject)pc, "PCEisenstatGetOmega_C", PCEisenstatGetOmega… in PCCreate_Eisenstat()
438 …PetscCall(PetscObjectComposeFunction((PetscObject)pc, "PCEisenstatGetNoDiagonalScaling_C", PCEisen… in PCCreate_Eisenstat()
439 …PetscCall(PetscObjectComposeFunction((PetscObject)pc, "PCPreSolveChangeRHS_C", PCPreSolveChangeRHS… in PCCreate_Eisenstat()