Skip to main content
`Ctrl`+`K`

# DMRefineHookAdd

adds a callback to be run when interpolating a nonlinear problem to a finer grid

## Synopsis

    #include "petscdm.h"
    #include "petscdmlabel.h"
    #include "petscds.h"
    PetscErrorCode DMRefineHookAdd(DM coarse, PetscErrorCode (*refinehook)(DM coarse, DM fine, void *ctx), PetscErrorCode (*interphook)(DM coarse, Mat interp, DM fine, void *ctx), void *ctx)

Logically Collective; No Fortran Support

## Input Parameters

- coarse - `DM` on which to run a hook when interpolating to a finer level

- refinehook - function to run when setting up the finer level

- interphook - function to run to update data on finer levels (once per `SNESSolve()`)

- ctx - [optional] user-defined context for provide data for the hooks (may be `NULL`)

## Calling sequence of `refinehook`

- coarse - coarse level `DM`

- fine - fine level `DM` to interpolate problem to

- ctx - optional user-defined function context

## Calling sequence of `interphook`

- coarse - coarse level `DM`

- interp - matrix interpolating a coarse-level solution to the finer grid

- fine - fine level `DM` to update

- ctx - optional user-defined function context

## Notes

This function is only needed if auxiliary data that is attached to the `DM`s via, for example, `PetscObjectCompose()`, needs to be passed to fine grids while grid sequencing.

The actual interpolation is done when `DMInterpolate()` is called.

If this function is called multiple times, the hooks will be run in the order they are added.

## See Also

DM Basics, `DM`, `DMCoarsenHookAdd()`, `DMInterpolate()`, `SNESFASGetInterpolation()`, `SNESFASGetInjection()`, `PetscObjectCompose()`, `PetscContainerCreate()`

## Level

advanced

## Location

src/dm/interface/dm.c

## Examples

src/snes/tutorials/ex48.c

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