Actual source code: ipm.h

  1: #ifndef __TAO_IPM_H
  3: #include <petsc/private/taoimpl.h>

  5: /*
  6:  Context for Interior-Point Method
  7: */

  9: typedef struct {
 10:   PetscInt      mi, me, n, nxb, nib, nb, nslack;
 11:   PetscInt      nuser_inequalities;
 12:   PetscInt      nxlb, nxub, niub, nilb;
 13:   PetscScalar   sig, mu, taumin, dec;
 14:   PetscScalar   muaff;
 15:   TaoLineSearch lag_ls;
 16:   Vec           work, rhs_x, save_x;
 17:   Vec           lambdai, dlambdai, rhs_lambdai, save_lambdai;
 18:   Vec           lambdae, dlambdae, rhs_lambdae, save_lambdae;
 19:   Vec           s, ds, rhs_s, save_s;
 20:   Vec           ci;
 21:   Vec           Zero_nb, One_nb, Inf_nb;
 22:   PetscScalar   kkt_f;           /* d'*x + (1/2)*x'*H*x; */
 23:   Vec           rd;              /* H*x + d + Ae'*lambdae - Ai'*lambdai */
 24:   Vec           rpe;             /* residual  Ae*x - be */
 25:   Vec           rpi;             /*           Ai*x - yi - bi */
 26:   Vec           complementarity; /* yi.*lambdai */
 27:   PetscScalar   phi;
 28:   Mat           L;  /* diag(lambdai) */
 29:   Mat           Y;  /* diag(yi) */
 30:   Mat           Ai; /* JacI (lb)
 31:               -JacI (ub)
 32:               I (xlb)
 33:               -I (xub) */
 34:   Mat           K;  /* [ H , 0,   Ae',-Ai'];
 35:             [Ae , 0,   0  , 0];
 36:             [Ai ,-Imi, 0 ,  0];
 37:             [ 0 , L ,  0 ,  Y ];  */

 39:   Vec         bigrhs;  /* rhs [x; lambdae; yi; lambdai] */
 40:   Vec         bigstep; /* [dx; dyi; dlambdae; dlambdai] */
 41:   PetscBool   monitorkkt;
 42:   PetscScalar alpha1, alpha2;
 43:   PetscScalar pushs, pushnu;
 44:   IS          isxl, isxu, isil, isiu;
 45:   VecScatter  ci_scat, xl_scat, xu_scat;
 46:   VecScatter  step1, step2, step3, step4;
 47:   VecScatter  rhs1, rhs2, rhs3, rhs4;
 48: } TAO_IPM;

 50: #endif /* ifndef __TAO_IPM_H */