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 { 10*3201ab8dSStefano Zampini PetscReal delta; /* trust region radius */ 11*3201ab8dSStefano Zampini 12*3201ab8dSStefano Zampini PetscObjectParameterDeclare(PetscReal, delta0); /* initial radius for trust region */ 13*3201ab8dSStefano Zampini PetscObjectParameterDeclare(PetscReal, deltaM); /* maximum radius for trust region */ 14*3201ab8dSStefano Zampini PetscObjectParameterDeclare(PetscReal, deltam); /* minimum radius for trust region */ 15*3201ab8dSStefano Zampini 164b0a5c37SStefano Zampini PetscReal kmdc; /* sufficient decrease parameter */ 174a221d59SStefano Zampini 184a221d59SStefano Zampini /* 194a221d59SStefano Zampini Given rho = (fk - fkp1) / (m(0) - m(pk)) 204a221d59SStefano Zampini 214a221d59SStefano Zampini The radius is modified as: 224a221d59SStefano Zampini rho < eta2 -> delta *= t1 234a221d59SStefano Zampini rho > eta3 -> delta *= t2 244a221d59SStefano Zampini delta = min(delta,deltaM) 254a221d59SStefano Zampini 264a221d59SStefano Zampini The step is accepted if rho > eta1 27*3201ab8dSStefano Zampini The iterative process is halted if delta < deltam 284a221d59SStefano Zampini */ 29*3201ab8dSStefano Zampini PetscObjectParameterDeclare(PetscReal, eta1); 30*3201ab8dSStefano Zampini PetscObjectParameterDeclare(PetscReal, eta2); 31*3201ab8dSStefano Zampini PetscObjectParameterDeclare(PetscReal, eta3); 32*3201ab8dSStefano Zampini PetscObjectParameterDeclare(PetscReal, t1); 33*3201ab8dSStefano Zampini PetscObjectParameterDeclare(PetscReal, t2); 344a221d59SStefano Zampini 3524fb275aSStefano Zampini /* Use quasi-Newton models for J and (possibly different) Jp */ 3624fb275aSStefano Zampini SNESNewtonTRQNType qn; 3724fb275aSStefano Zampini Mat qnB; 3824fb275aSStefano Zampini Mat qnB_pre; 3924fb275aSStefano Zampini 4024fb275aSStefano Zampini /* The type of norm for the trust region */ 4124fb275aSStefano Zampini NormType norm; 4224fb275aSStefano Zampini 434a221d59SStefano Zampini SNESNewtonTRFallbackType fallback; /* enum to distinguish fallback in case Newton step is outside of the trust region */ 444a221d59SStefano Zampini 45c9368356SGlenn Hammond PetscErrorCode (*precheck)(SNES, Vec, Vec, PetscBool *, void *); 46c9368356SGlenn Hammond void *precheckctx; 47c9368356SGlenn Hammond PetscErrorCode (*postcheck)(SNES, Vec, Vec, Vec, PetscBool *, PetscBool *, void *); 487cb011f5SBarry Smith void *postcheckctx; 4904d7464bSBarry Smith } SNES_NEWTONTR; 50