Actual source code: pounders.h

  1: #ifndef TAO_MFQNLS_H
  2: #define TAO_MFQNLS_H
  3: #include <petsc/private/taoimpl.h>
  4: #include <petscblaslapack.h>

  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;

 44:   PetscReal delta; /* Trust region radius (>0) */
 45:   PetscReal delta0;
 46:   PetscBool usegqt;
 47:   Mat       Hs;
 48:   Vec       b;

 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 */

 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 */

 82:   Tao       subtao;
 83:   Vec       subxl,subxu,subx,subpdel,subndel,subb;
 84:   Mat       subH;

 86: } TAO_POUNDERS;

 88: PetscErrorCode gqt(PetscInt,PetscReal*,PetscInt,PetscReal*,PetscReal,PetscReal,PetscReal,PetscInt,PetscReal*,PetscReal*,PetscReal*,PetscInt*,PetscInt*,PetscReal *,PetscReal *,PetscReal*);

 90: #endif /* ifndef TAO_MFQNLS */