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 */ 12*4a221d59SStefano Zampini PetscReal delta0; /* initial radius for trust region */ 13*4a221d59SStefano Zampini PetscReal deltaM; /* maximum radius for trust region */ 14*4a221d59SStefano Zampini 15*4a221d59SStefano Zampini /* 16*4a221d59SStefano Zampini Given rho = (fk - fkp1) / (m(0) - m(pk)) 17*4a221d59SStefano Zampini 18*4a221d59SStefano Zampini The radius is modified as: 19*4a221d59SStefano Zampini rho < eta2 -> delta *= t1 20*4a221d59SStefano Zampini rho > eta3 -> delta *= t2 21*4a221d59SStefano Zampini delta = min(delta,deltaM) 22*4a221d59SStefano Zampini 23*4a221d59SStefano Zampini The step is accepted if rho > eta1 24*4a221d59SStefano Zampini */ 25*4a221d59SStefano Zampini PetscReal eta1; 26*4a221d59SStefano Zampini PetscReal eta2; 27*4a221d59SStefano Zampini PetscReal eta3; 28*4a221d59SStefano Zampini PetscReal t1; 29*4a221d59SStefano Zampini PetscReal t2; 30*4a221d59SStefano Zampini 31*4a221d59SStefano Zampini SNESNewtonTRFallbackType fallback; /* enum to distinguish fallback in case Newton step is outside of the trust region */ 32*4a221d59SStefano Zampini 33c9368356SGlenn Hammond PetscErrorCode (*precheck)(SNES, Vec, Vec, PetscBool *, void *); 34c9368356SGlenn Hammond void *precheckctx; 35c9368356SGlenn Hammond PetscErrorCode (*postcheck)(SNES, Vec, Vec, Vec, PetscBool *, PetscBool *, void *); 367cb011f5SBarry Smith void *postcheckctx; 3704d7464bSBarry Smith } SNES_NEWTONTR; 38acbee50cSBarry Smith 39acbee50cSBarry Smith #endif 40