Actual source code: none.c
1: /*
2: Identity preconditioner, simply copies vector x to y.
3: */
4: #include <petsc/private/pcimpl.h>
6: static PetscErrorCode PCApply_None(PC pc, Vec x, Vec y)
7: {
8: PetscFunctionBegin;
9: PetscCall(VecCopy(x, y));
10: PetscFunctionReturn(PETSC_SUCCESS);
11: }
13: static PetscErrorCode PCMatApply_None(PC pc, Mat X, Mat Y)
14: {
15: PetscFunctionBegin;
16: PetscCall(MatCopy(X, Y, SAME_NONZERO_PATTERN));
17: PetscFunctionReturn(PETSC_SUCCESS);
18: }
20: /*MC
21: PCNONE - This is used when you wish to employ a nonpreconditioned
22: Krylov method.
24: Level: beginner
26: Developer Note:
27: This is implemented by a `VecCopy()`. It would be nice if the `KSP` implementations could be organized to avoid this copy without making them
28: more complex.
30: .seealso: [](ch_ksp), `PCCreate()`, `PCSetType()`, `PCType`, `PC`
31: M*/
33: PETSC_EXTERN PetscErrorCode PCCreate_None(PC pc)
34: {
35: PetscFunctionBegin;
36: pc->ops->apply = PCApply_None;
37: pc->ops->matapply = PCMatApply_None;
38: pc->ops->applytranspose = PCApply_None;
39: pc->ops->destroy = NULL;
40: pc->ops->setup = NULL;
41: pc->ops->view = NULL;
42: pc->ops->applysymmetricleft = PCApply_None;
43: pc->ops->applysymmetricright = PCApply_None;
45: pc->data = NULL;
46: PetscFunctionReturn(PETSC_SUCCESS);
47: }