1acbee50cSBarry Smith /* 2acbee50cSBarry Smith Context for a Newton trust region method for solving a system 3acbee50cSBarry Smith of nonlinear equations 4acbee50cSBarry Smith */ 5acbee50cSBarry Smith 6*a4963045SJacob 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 314a221d59SStefano Zampini SNESNewtonTRFallbackType fallback; /* enum to distinguish fallback in case Newton step is outside of the trust region */ 324a221d59SStefano 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; 38