xref: /petsc/src/tao/constrained/impls/ipm/ipm.h (revision b33856dc408ad55ad91c3f2dd314e931791c37c8)
1 #ifndef __TAO_IPM_H
2 #define __TAO_IPM_H
3 #include <petsc-private/taoimpl.h>
4 
5 /*
6  Context for Interior-Point Method
7 */
8 
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 lamdai, dlamdai, rhs_lamdai, save_lamdai;
18   Vec lamdae, dlamdae, rhs_lamdae, save_lamdae;
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'*lamdae - Ai'*lamdai */
24   Vec rpe; /* residual  Ae*x - be */
25   Vec rpi; /*           Ai*x - yi - bi */
26   Vec complementarity; /* yi.*lamdai */
27   PetscScalar phi;
28   MatStructure Hflag; /*flag for nonzero change in hessian */
29   MatStructure Aiflag,Aeflag;
30   Mat L; /* diag(lamdai) */
31   Mat Y; /* diag(yi) */
32   Mat Ai;  /* JacI (lb)
33               -JacI (ub)
34               I (xlb)
35               -I (xub) */
36   Mat K; /* [ H , 0,   Ae',-Ai'];
37             [Ae , 0,   0  , 0];
38             [Ai ,-Imi, 0 ,  0];
39             [ 0 , L ,  0 ,  Y ];  */
40 
41   Vec bigrhs; /* rhs [x; lamdae; yi; lamdai] */
42   Vec bigstep; /* [dx; dyi; dlamdae; dlamdai] */
43   PetscBool monitorkkt;
44   PetscScalar alpha1,alpha2;
45   PetscScalar pushs,pushnu;
46   IS isxl,isxu,isil,isiu;
47   VecScatter ci_scat,xl_scat,xu_scat;
48   VecScatter step1,step2,step3,step4;
49   VecScatter rhs1,rhs2,rhs3,rhs4;
50 } TAO_IPM;
51 
52 #endif /* ifndef __TAO_IPM_H */
53