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