Object held by a DM that contains all the callback functions and their contexts needed by a SNES


struct _p_DMSNES {
  PetscContainer functionctxcontainer;
  PetscContainer jacobianctxcontainer;
  void          *mffunctionctx;
  void          *gsctx;
  void          *pctx;
  void          *objectivectx;

  void *data;

  /* See developer note for DMSNES above */
  DM originaldm;


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()





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