petsc-3.14.5 2021-03-03
Report Typos and Errors

# 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,DM,void*),PetscErrorCode (*interphook)(DM,Mat,DM,void*),void *ctx)

Logically Collective

### Input Arguments

| coarse | - nonlinear solver context on which to run a hook when restricting to a coarser level
| refinehook | - function to run when setting up a coarser 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

       refinehook(DM coarse,DM fine,void *ctx);

| coarse | - coarse level DM
| fine | - fine level DM to interpolate problem to
| ctx | - optional user-defined function context

### Calling sequence for interphook

       interphook(DM coarse,Mat interp,DM fine,void *ctx)

| 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 needs to be passed to fine grids while grid sequencing

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

This function is currently not available from Fortran.

### See Also

DMCoarsenHookAdd(), SNESFASGetInterpolation(), SNESFASGetInjection(), PetscObjectCompose(), PetscContainerCreate()

### Level

advanced

### Location

src/dm/interface/dm.c

### Examples

src/snes/tutorials/ex48.c.html
Index of all DM routines
Table of Contents for all manual pages
Index of all manual pages