xref: /petsc/src/snes/impls/tr/trimpl.h (revision 24fb275a903e9bebce5912ebf565c452b0b415de)
1acbee50cSBarry Smith /*
2acbee50cSBarry Smith    Context for a Newton trust region method for solving a system
3acbee50cSBarry Smith    of nonlinear equations
4acbee50cSBarry Smith  */
5acbee50cSBarry Smith 
6a4963045SJacob Faibussowitsch #pragma once
7af0996ceSBarry Smith #include <petsc/private/snesimpl.h>
8acbee50cSBarry Smith 
9acbee50cSBarry Smith typedef struct {
10acbee50cSBarry Smith   PetscReal delta;  /* trust region parameter */
114a221d59SStefano Zampini   PetscReal delta0; /* initial radius for trust region */
124a221d59SStefano Zampini   PetscReal deltaM; /* maximum radius for trust region */
134b0a5c37SStefano Zampini   PetscReal kmdc;   /* sufficient decrease parameter */
144a221d59SStefano Zampini 
154a221d59SStefano Zampini   /*
164a221d59SStefano Zampini     Given rho = (fk - fkp1) / (m(0) - m(pk))
174a221d59SStefano Zampini 
184a221d59SStefano Zampini     The radius is modified as:
194a221d59SStefano Zampini       rho < eta2 -> delta *= t1
204a221d59SStefano Zampini       rho > eta3 -> delta *= t2
214a221d59SStefano Zampini       delta = min(delta,deltaM)
224a221d59SStefano Zampini 
234a221d59SStefano Zampini     The step is accepted if rho > eta1
244a221d59SStefano Zampini   */
254a221d59SStefano Zampini   PetscReal eta1;
264a221d59SStefano Zampini   PetscReal eta2;
274a221d59SStefano Zampini   PetscReal eta3;
284a221d59SStefano Zampini   PetscReal t1;
294a221d59SStefano Zampini   PetscReal t2;
304a221d59SStefano Zampini 
31*24fb275aSStefano Zampini   /* Use quasi-Newton models for J and (possibly different) Jp */
32*24fb275aSStefano Zampini   SNESNewtonTRQNType qn;
33*24fb275aSStefano Zampini   Mat                qnB;
34*24fb275aSStefano Zampini   Mat                qnB_pre;
35*24fb275aSStefano Zampini 
36*24fb275aSStefano Zampini   /* The type of norm for the trust region */
37*24fb275aSStefano Zampini   NormType norm;
38*24fb275aSStefano Zampini 
394a221d59SStefano Zampini   SNESNewtonTRFallbackType fallback; /* enum to distinguish fallback in case Newton step is outside of the trust region */
404a221d59SStefano Zampini 
41c9368356SGlenn Hammond   PetscErrorCode (*precheck)(SNES, Vec, Vec, PetscBool *, void *);
42c9368356SGlenn Hammond   void *precheckctx;
43c9368356SGlenn Hammond   PetscErrorCode (*postcheck)(SNES, Vec, Vec, Vec, PetscBool *, PetscBool *, void *);
447cb011f5SBarry Smith   void *postcheckctx;
4504d7464bSBarry Smith } SNES_NEWTONTR;
46