Actual source code: bmrm.h

  1: #pragma once

  3: #include <petsc/private/taoimpl.h>
  4: #include <petscmath.h>

  6: #define BMRM_INFTY 1e30 /* single precision: ~\pm 10^{38.53}; PetscReal precision: ~\pm 10^{308.25} */
  7: #define ALPHA_MIN  1e-10
  8: #define ALPHA_MAX  1e10
  9: #define EPS_SV     1e-15
 10: #define EPS        1e-20
 11: #define TOL_LAM    1e-15
 12: #define TOL_R      1e-10
 13: #define INCRE_DIM  1000

 15: /* Context for BMRM solver */
 16: typedef struct {
 17:   VecScatter scatter; /* Scatter context  */
 18:   Vec        local_w;
 19:   PetscReal  lambda;
 20: } TAO_BMRM;

 22: typedef struct Vec_Chain {
 23:   Vec               V;
 24:   struct Vec_Chain *next;
 25: } Vec_Chain;

 27: /* Context for Dai-Fletcher solver */
 28: typedef struct {
 29:   PetscInt   maxProjIter;
 30:   PetscInt   maxPGMIter;
 31:   PetscInt  *ipt, *ipt2, *uv;
 32:   PetscReal *g, *y, *tempv, *d, *Qd, *t, *xplus, *tplus, *sk, *yk;

 34:   PetscInt dim;

 36:   PetscInt cur_num_cp;

 38:   /* Variables (i.e. Lagrangian multipliers) */
 39:   PetscReal *x;

 41:   /* Linear part of the objective function  */
 42:   PetscReal *f;

 44:   /* Hessian of the QP */
 45:   PetscReal **Q;

 47:   /* Constraint matrix  */
 48:   PetscReal *a;

 50:   /* RHS of the equality constraint */
 51:   PetscReal b;

 53:   /* Lower bound vector for the variables */
 54:   PetscReal *l;

 56:   /* Upper bound vector for the variables */
 57:   PetscReal *u;

 59:   /* Tolerance for optimization error */
 60:   PetscReal tol;
 61: } TAO_DF;