xref: /petsc/src/tao/leastsquares/impls/pounders/pounders.h (revision 7d5fd1e4d9337468ad3f05b65b7facdcd2dfd2a4)
1 #ifndef TAO_MFQNLS_H
2 #define TAO_MFQNLS_H
3 #include <petsc/private/taoimpl.h>
4 #include <petscblaslapack.h>
5 
6 typedef struct {
7   PetscInt     npmax;  /* Max number of interpolation points (>n+1) (def: 2n+1) */
8   PetscInt     nmax; /* Max(n*(n+1)/2, 5*npmax) */
9   PetscInt     m,n;
10   Vec          *Xhist;
11   Vec          *Fhist;
12   PetscReal    *Fres; /* (nfmax) */
13   PetscReal    *RES; /* npxm */
14   PetscReal    *work; /* (n) */
15   PetscReal    *work2; /* (n) */
16   PetscReal    *work3; /* (n) */
17   PetscReal    *xmin; /* (n) */
18   PetscReal    *mwork; /* (m) */
19   PetscReal    *Disp; /* nxn */
20   PetscReal    *Fdiff;/* nxm */
21   PetscReal    *H; /* model hessians (mxnxn) */
22   PetscReal    *Hres;  /* nxn */
23   PetscReal    *Gres;  /* n */
24   PetscReal    *Gdel; /* mxn */
25   PetscReal    *Hdel; /* mxnxn */
26   PetscReal    *Gpoints; /* nxn */
27   PetscReal    *C; /* m */
28   PetscReal    *Xsubproblem; /* n */
29   PetscInt     *indices; /* 1,2,3...m */
30   PetscInt     minindex;
31   PetscInt     nmodelpoints;
32   PetscInt     *model_indices; /* n */
33   PetscInt     last_nmodelpoints;
34   PetscInt     *last_model_indices; /* n */
35   PetscInt     *interp_indices; /* n */
36   PetscBLASInt *iwork; /* n */
37   PetscReal    *w; /* nxn */
38   PetscInt     nHist;
39   VecScatter   scatterf,scatterx;
40   Vec          localf, localx, localfmin, localxmin;
41   Vec           workxvec,workfvec;
42   PetscMPIInt   size;
43 
44   PetscReal delta; /* Trust region radius (>0) */
45   PetscReal delta0;
46   PetscBool usegqt;
47   Mat       Hs;
48   Vec       b;
49 
50   PetscReal deltamax;
51   PetscReal deltamin;
52   PetscReal c1; /* Factor for checking validity */
53   PetscReal c2; /* Factor for linear poisedness */
54   PetscReal theta1; /* Pivot threshold for validity */
55   PetscReal theta2; /* Pivot threshold for additional points */
56   PetscReal gamma0; /* parameter for shrinking trust region (<1) */
57   PetscReal gamma1; /* parameter for enlarging trust region (>2) */
58   PetscReal eta0;   /* parameter 1 for accepting point (0 <= eta0 < eta1)*/
59   PetscReal eta1;   /* parameter 2 for accepting point (eta0 < eta1 < 1)*/
60   PetscReal gqt_rtol;   /* parameter used by gqt */
61   PetscInt gqt_maxits; /* parameter used by gqt */
62 
63   /* QR factorization data */
64   PetscInt  q_is_I;
65   PetscReal *Q; /* npmax x npmax */
66   PetscReal *Q_tmp; /* npmax x npmax */
67   PetscReal *tau; /* scalar factors of H(i) */
68   PetscReal *tau_tmp; /* scalar factors of H(i) */
69   PetscReal *npmaxwork; /* work vector of length npmax */
70   PetscBLASInt *npmaxiwork; /* integer work vector of length npmax */
71   /* morepoints and getquadnlsmfq */
72   PetscReal *L;   /* n*(n+1)/2 x npmax */
73   PetscReal *L_tmp;   /* n*(n+1)/2 x npmax */
74   PetscReal *L_save;   /* n*(n+1)/2 x npmax */
75   PetscReal *Z;   /* npmax x npmax-(n+1) */
76   PetscReal *M;   /* npmax x n+1 */
77   PetscReal *N;   /* npmax x n*(n+1)/2  */
78   PetscReal *alpha; /* n+1 */
79   PetscReal *beta; /*  r(n+1)/2 */
80   PetscReal *omega; /* npmax - np - 1 */
81 
82   Tao       subtao;
83   Vec       subxl,subxu,subx,subpdel,subndel,subb;
84   Mat       subH;
85 
86 } TAO_POUNDERS;
87 
88 PetscErrorCode gqt(PetscInt,PetscReal*,PetscInt,PetscReal*,PetscReal,PetscReal,PetscReal,PetscInt,PetscReal*,PetscReal*,PetscReal*,PetscInt*,PetscInt*,PetscReal *,PetscReal *,PetscReal*);
89 
90 #endif /* ifndef TAO_MFQNLS */
91