xref: /petsc/src/snes/impls/ntrdc/ntrdcimpl.h (revision 5c6496ba940341816c82c3b7fcda2e06e7ddfa20)
1 
2 /*
3    Context for a Newton trust region method for solving a system
4    of nonlinear equations
5  */
6 
7 #if !defined(__SNES_TR_H)
8 #define __SNES_TR_H
9 #include <petsc/private/snesimpl.h>
10 
11 typedef struct {
12   /* ---- Parameters used by the trust region method  ---- */
13   PetscReal      mu;             /* used to compute trust region parameter */
14   PetscReal      eta;            /* used to compute trust region parameter */
15   PetscReal      delta;          /* trust region parameter */
16   PetscReal      delta0;         /* used to initialize trust region parameter */
17   PetscReal      delta1;         /* used to compute trust region parameter */
18   PetscReal      delta2;         /* used to compute trust region parameter */
19   PetscReal      delta3;         /* used to compute trust region parameter */
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 detemine 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 muste 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 
44 #endif
45