DMSNES#
Object held by a DM that contains all the callback functions and their contexts needed by a SNES
Synopsis#
struct _p_DMSNES {
PETSCHEADER(struct _DMSNESOps);
PetscContainer functionctxcontainer;
PetscContainer jacobianctxcontainer;
void *mffunctionctx;
void *gsctx;
void *pctx;
void *objectivectx;
void *data;
/* See developer note for DMSNES above */
DM originaldm;
};
Notes#
Users provides callback functions and their contexts to SNES using, for example, SNESSetFunction(). These values are stored
in a DMSNES that is contained in the DM associated with the SNES. If no DM was provided by
the user with SNESSetDM() it is automatically created by SNESGetDM() with DMShellCreate().
Users very rarely need to worked directly with the DMSNES object, rather they work with the SNES and the DM they created
Multiple DM can share a single DMSNES, often each DM is associated with
a grid refinement level. DMGetDMSNES() returns the DMSNES associated with a DM. DMGetDMSNESWrite() returns a unique
DMSNES that is only associated with the current DM, making a copy of the shared DMSNES if needed (copy-on-write).
See DMKSP for details on why there is a needed for DMSNES instead of simply storing the user callbacks directly in the DM or the TS
Developer Note#
The originaldm inside the DMSNES is NOT reference counted (to prevent a reference count loop between a DM and a DMSNES).
The DM on which this context was first created is cached here to implement one-way
copy-on-write. When DMGetDMSNESWrite() sees a request using a different DM, it makes a copy of the TSDM. Thus, if a user
only interacts directly with one level, e.g., using TSSetIFunction(), then coarse levels of a multilevel item
integrator are built, then the user changes the routine with another call to TSSetIFunction(), it automatically
propagates to all the levels. If instead, they get out a specific level and set the function on that level,
subsequent changes to the original level will no longer propagate to that level.
See Also#
TS: Scalable ODE and DAE Solvers, SNES, SNESCreate(), DM, DMGetDMSNESWrite(), DMGetDMSNES(), DMKSP, DMTS, DMSNESSetFunction(), DMSNESGetFunction(),
DMSNESSetFunctionContextDestroy(), DMSNESSetMFFunction(), DMSNESSetNGS(), DMSNESGetNGS(), DMSNESSetJacobian(), DMSNESGetJacobian(),
DMSNESSetJacobianContextDestroy(), DMSNESSetPicard(), DMSNESGetPicard(), DMSNESSetObjective(), DMSNESGetObjective(), DMCopyDMSNES()
Level#
developer
Location#
include/petsc/private/snesimpl.h
Index of all SNES routines
Table of Contents for all manual pages
Index of all manual pages