Skip to main content
`Ctrl`+`K`

# 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`.

## 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

## Note

xcoarse = diag(L)Rxfine preserves scale and is thus suitable for state (versus residual) restriction. In other words xcoarse is the coarse representation of xfine.

## 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

DM Basics, `DM`, `MatRestrict()`, `MatInterpolate()`, `DMCreateInterpolation()`, `DMCreateRestriction()`, `DMCreateGlobalVector()`

## Level

advanced

## Location

src/dm/interface/dm.c

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