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