:orphan: # DMCreateInterpolationScale Forms L = 1/(R*1) where 1 is the vector of all ones, and R is the transpose of the interpolation between the `DM`. xcoarse = diag(L)*R*xfine preserves scale and is thus suitable for state (versus residual) restriction. In other words xcoarse is the coarse representation of xfine. ## Synopsis ``` #include "petscdm.h" #include "petscdmlabel.h" #include "petscds.h" PetscErrorCode DMCreateInterpolationScale(DM dac, DM daf, Mat mat, Vec *scale) ``` ## Input Parameters - ***dac -*** `DM` that defines a coarse mesh - ***daf -*** `DM` that defines a fine mesh - ***mat -*** the restriction (or interpolation operator) from fine to coarse ## Output Parameter - ***scale -*** the scaled vector ## Developer Note If the fine-scale `DMDA` has the -dm_bind_below option set to true, then `DMCreateInterpolationScale()` calls `MatSetBindingPropagates()` on the restriction/interpolation operator to set the bindingpropagates flag to true. ## See Also [](ch_dmbase), `DM`, `MatRestrict()`, `MatInterpolate()`, `DMCreateInterpolation()`, DMCreateRestriction()`, `DMCreateGlobalVector()` ## Level advanced ## Location src/dm/interface/dm.c --- [Edit on GitLab](https://gitlab.com/petsc/petsc/-/edit/release/src/dm/interface/dm.c) [Index of all DM routines](index.md) [Table of Contents for all manual pages](/manualpages/index.md) [Index of all manual pages](/manualpages/singleindex.md)