/*@C SNESSetObjective - Sets the objective function minimized by some of the SNES linesearch methods. Logically Collective on SNES Input Parameters: + snes - the SNES context . obj - objective evaluation routine; see SNESObjectiveFunction for details - ctx - [optional] user-defined context for private data for the function evaluation routine (may be NULL) Level: intermediately Note: This is not used in the SNESLINESEARCHCP line search. If not provided then this defaults to the two norm of the function evaluation (set with SNESSetFunction()) .keywords: SNES, nonlinear, set, objective .seealso: SNESGetObjective(), SNESComputeObjective(), SNESSetFunction(), SNESSetJacobian(), SNESObjectiveFunction @*/ PetscErrorCode SNESSetObjective(SNES snes,PetscErrorCode (*obj)(SNES,Vec,PetscReal*,void*),void *ctx) { PetscErrorCode ierr; DM dm; PetscFunctionBegin; PetscValidHeaderSpecific(snes,SNES_CLASSID,1); ierr = SNESGetDM(snes,&dm);CHKERRQ(ierr); ierr = DMSNESSetObjective(dm,obj,ctx);CHKERRQ(ierr); PetscFunctionReturn(0); }
/*@C DMDASNESSetObjectiveLocal - set a local residual evaluation function Logically Collective Input Arguments: + dm - DM to associate callback with . func - local objective evaluation - ctx - optional context for local residual evaluation Calling sequence for func: + info - DMDALocalInfo defining the subdomain to evaluate the residual on . x - dimensional pointer to state at which to evaluate residual . ob - eventual objective value - ctx - optional context passed above Level: beginner .seealso: DMSNESSetFunction(), DMDASNESSetJacobian(), DMDACreate1d(), DMDACreate2d(), DMDACreate3d() @*/ PetscErrorCode DMDASNESSetObjectiveLocal(DM dm,DMDASNESObjective func,void *ctx) { PetscErrorCode ierr; DMSNES sdm; DMSNES_DA *dmdasnes; PetscFunctionBegin; PetscValidHeaderSpecific(dm,DM_CLASSID,1); ierr = DMGetDMSNESWrite(dm,&sdm);CHKERRQ(ierr); ierr = DMDASNESGetContext(dm,sdm,&dmdasnes);CHKERRQ(ierr); dmdasnes->objectivelocal = func; dmdasnes->objectivelocalctx = ctx; ierr = DMSNESSetObjective(dm,SNESComputeObjective_DMDA,dmdasnes);CHKERRQ(ierr); PetscFunctionReturn(0); }