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