1acbee50cSBarry Smith /* 2acbee50cSBarry Smith Context for a Newton trust region method for solving a system 3acbee50cSBarry Smith of nonlinear equations 4acbee50cSBarry Smith */ 5acbee50cSBarry Smith 66524c165SJacob Faibussowitsch #ifndef __SNES_TR_H 7acbee50cSBarry Smith #define __SNES_TR_H 8af0996ceSBarry Smith #include <petsc/private/snesimpl.h> 9acbee50cSBarry Smith 10acbee50cSBarry Smith typedef struct { 11acbee50cSBarry Smith PetscReal delta; /* trust region parameter */ 124a221d59SStefano Zampini PetscReal delta0; /* initial radius for trust region */ 134a221d59SStefano Zampini PetscReal deltaM; /* maximum radius for trust region */ 14*4b0a5c37SStefano Zampini PetscReal kmdc; /* sufficient decrease parameter */ 154a221d59SStefano Zampini 164a221d59SStefano Zampini /* 174a221d59SStefano Zampini Given rho = (fk - fkp1) / (m(0) - m(pk)) 184a221d59SStefano Zampini 194a221d59SStefano Zampini The radius is modified as: 204a221d59SStefano Zampini rho < eta2 -> delta *= t1 214a221d59SStefano Zampini rho > eta3 -> delta *= t2 224a221d59SStefano Zampini delta = min(delta,deltaM) 234a221d59SStefano Zampini 244a221d59SStefano Zampini The step is accepted if rho > eta1 254a221d59SStefano Zampini */ 264a221d59SStefano Zampini PetscReal eta1; 274a221d59SStefano Zampini PetscReal eta2; 284a221d59SStefano Zampini PetscReal eta3; 294a221d59SStefano Zampini PetscReal t1; 304a221d59SStefano Zampini PetscReal t2; 314a221d59SStefano Zampini 324a221d59SStefano Zampini SNESNewtonTRFallbackType fallback; /* enum to distinguish fallback in case Newton step is outside of the trust region */ 334a221d59SStefano Zampini 34c9368356SGlenn Hammond PetscErrorCode (*precheck)(SNES, Vec, Vec, PetscBool *, void *); 35c9368356SGlenn Hammond void *precheckctx; 36c9368356SGlenn Hammond PetscErrorCode (*postcheck)(SNES, Vec, Vec, Vec, PetscBool *, PetscBool *, void *); 377cb011f5SBarry Smith void *postcheckctx; 3804d7464bSBarry Smith } SNES_NEWTONTR; 39acbee50cSBarry Smith 40acbee50cSBarry Smith #endif 41