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