Skip to main content
`Ctrl`+`K`

# DMCreateInterpolation

Gets the interpolation matrix between two `DM` objects. The resulting matrix map degrees of freedom in the vector obtained by `DMCreateGlobalVector()` on the coarse `DM` to similar vectors on the fine grid `DM`.

## Synopsis

    #include "petscdm.h"
    #include "petscdmlabel.h"
    #include "petscds.h"
    PetscErrorCode DMCreateInterpolation(DM dmc, DM dmf, Mat *mat, Vec *vec)

Collective

## Input Parameters

- dmc - the `DM` object

- dmf - the second, finer `DM` object

## Output Parameters

- mat - the interpolation

- vec - the scaling (optional, pass `NULL` if not needed), see `DMCreateInterpolationScale()`

## Notes

For `DMDA` objects this only works for “uniform refinement”, that is the refined mesh was obtained `DMRefine()` or the coarse mesh was obtained by DMCoarsen(). The coordinates set into the `DMDA` are completely ignored in computing the interpolation.

For `DMDA` objects you can use this interpolation (more precisely the interpolation from the `DMGetCoordinateDM()`) to interpolate the mesh coordinate vectors EXCEPT in the periodic case where it does not make sense since the coordinate vectors are not periodic.

## See Also

DM Basics, `DM`, `DMDestroy()`, `DMView()`, `DMCreateGlobalVector()`, `DMCreateColoring()`, `DMCreateMatrix()`, `DMCreateMassMatrix()`, `DMRefine()`, `DMCoarsen()`, `DMCreateRestriction()`, `DMCreateInterpolationScale()`

## Level

developer

## Location

src/dm/interface/dm.c

## Examples

src/snes/tutorials/ex36.c
src/ksp/ksp/tutorials/ex35.cxx
src/ksp/ksp/tutorials/ex36.cxx
src/ksp/ksp/tutorials/ex73.c
src/dm/impls/stag/tutorials/ex4.c
src/dm/tutorials/ex3.c
src/ksp/ksp/tutorials/ex65.c
src/ksp/ksp/tutorials/ex42.c
src/snes/tutorials/ex48.c
src/snes/tutorials/ex11.c

## Implementations

DMCreateInterpolation_Composite() in src/dm/impls/composite/pack.c
DMCreateInterpolation_DA() in src/dm/impls/da/dainterp.c
DMCreateInterpolation_pforest() in src/dm/impls/forest/p4est/pforest.h
DMCreateInterpolation_Moab() in src/dm/impls/moab/dmmbmg.cxx
DMCreateInterpolation_Plex() in src/dm/impls/plex/plex.c
DMCreateInterpolation_Redundant() in src/dm/impls/redundant/dmredundant.c
DMCreateInterpolation_Stag() in src/dm/impls/stag/stag.c
DMCreateInterpolation_SNESVI() in src/snes/impls/vi/rs/virs.c

Index of all DM routines
Table of Contents for all manual pages
Index of all manual pages