:orphan:
# KSPSetDM
Sets the `DM` that may be used by some preconditioners
## Synopsis
```
#include "petscksp.h"
PetscErrorCode KSPSetDM(KSP ksp, DM dm)
```
Logically Collective
## Input Parameters
- ***ksp -*** the `KSP`
- ***dm -*** the `DM`, cannot be `NULL` to remove a previously set `DM`
## Notes
If this is used then the `KSP` will attempt to use the `DM` to create the matrix and use the routine set with
`DMKSPSetComputeOperators()`. Use `KSPSetDMActive`(ksp,`PETSC_FALSE`) to instead use the matrix you've provided with
`KSPSetOperators()`.
A `DM` can only be used for solving one problem at a time because information about the problem is stored on the `DM`,
even when not using interfaces like `DMKSPSetComputeOperators()`. Use `DMClone()` to get a distinct `DM` when solving
different problems using the same function space.
## See Also
[](ch_ksp), `KSP`, `DM`, `KSPGetDM()`, `KSPSetDMActive()`, `KSPSetComputeOperators()`, `KSPSetComputeRHS()`, `KSPSetComputeInitialGuess()`, `DMKSPSetComputeOperators()`, `DMKSPSetComputeRHS()`, `DMKSPSetComputeInitialGuess()`
## Level
intermediate
## Location
src/ksp/ksp/interface/iterativ.c
## Examples
src/dm/impls/stag/tutorials/ex4.c
src/dm/impls/stag/tutorials/ex8.c
src/ksp/ksp/tutorials/ex22f.F90
src/ksp/ksp/tutorials/ex25.c
src/ksp/ksp/tutorials/ex28.c
src/ksp/ksp/tutorials/ex29.c
src/ksp/ksp/tutorials/ex32.c
src/ksp/ksp/tutorials/ex34.c
src/ksp/ksp/tutorials/ex35.cxx
src/ksp/ksp/tutorials/ex36.cxx
src/ksp/ksp/tutorials/ex43.c
---
[Edit on GitLab](https://gitlab.com/petsc/petsc/-/edit/release/src/ksp/ksp/interface/iterativ.c)
[Index of all KSP routines](index.md)
[Table of Contents for all manual pages](/manualpages/index.md)
[Index of all manual pages](/manualpages/singleindex.md)