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