xref: /petsc/src/snes/impls/ntrdc/ntrdcimpl.h (revision 0baf8eba40dbc839082666f9f7396a225d6f663c)
1 /*
2    Context for a Newton trust region method for solving a system
3    of nonlinear equations
4  */
5 
6 #pragma once
7 #include <petsc/private/snesimpl.h>
8 
9 typedef struct {
10   /* ---- Parameters used by the trust region method  ---- */
11   PetscReal mu;     /* used to compute trust region parameter */
12   PetscReal eta;    /* used to compute trust region parameter */
13   PetscReal delta;  /* trust region parameter */
14   PetscReal delta0; /* used to initialize trust region parameter */
15   PetscReal delta1; /* used to compute trust region parameter */
16   PetscReal delta2; /* used to compute trust region parameter */
17   PetscReal delta3; /* used to compute trust region parameter */
18 
19   PetscReal deltatol; /* trust region tolerance */
20 
21   PetscReal eta1;   /* Heeho's new TR-dogleg */
22   PetscReal eta2;   /* Heeho's new TR-dogleg */
23   PetscReal eta3;   /* Heeho's new TR-dogleg */
24   PetscReal t1;     /* Heeho's new TR-dogleg */
25   PetscReal t2;     /* Heeho's new TR-dogleg */
26   PetscReal deltaM; /* Heeho's new TR-dogleg */
27   /* currently using fixed array for the block size because of memory leak */
28   /* PetscReal      *inorms;         Heeho's new TR-dogleg, stores largest inf norm */
29   /* PetscInt       bs;              Heeho's new TR-dogleg, solution vector block size */
30 
31   PetscReal sigma;                 /* used to determine termination */
32   PetscBool itflag;                /* flag for convergence testing */
33   PetscBool use_cauchy;            /* flag to use/not use Cauchy step and direction (S&D) */
34   PetscBool auto_scale_multiphase; /* flag to use/not use autoscaling for Cauchy S&D for multiphase*/
35   PetscReal auto_scale_max;        /* max cap value for auto-scaling must be > 1 */
36   PetscBool rho_satisfied;         /* flag for whether inner iteration satisfied rho */
37   PetscReal rnorm0, ttol;          /* used for KSP convergence test */
38   PetscErrorCode (*precheck)(SNES, Vec, Vec, PetscBool *, void *);
39   void *precheckctx;
40   PetscErrorCode (*postcheck)(SNES, Vec, Vec, Vec, PetscBool *, PetscBool *, void *);
41   void *postcheckctx;
42 } SNES_NEWTONTRDC;
43