1 #pragma once 2 #include <petsc/private/taoimpl.h> 3 4 /* 5 Context for Interior-Point Method 6 */ 7 8 typedef struct { 9 PetscInt mi, me, n, nxb, nib, nb, nslack; 10 PetscInt nuser_inequalities; 11 PetscInt nxlb, nxub, niub, nilb; 12 PetscScalar sig, mu, taumin, dec; 13 PetscScalar muaff; 14 TaoLineSearch lag_ls; 15 Vec work, rhs_x, save_x; 16 Vec lambdai, dlambdai, rhs_lambdai, save_lambdai; 17 Vec lambdae, dlambdae, rhs_lambdae, save_lambdae; 18 Vec s, ds, rhs_s, save_s; 19 Vec ci; 20 Vec Zero_nb, One_nb, Inf_nb; 21 PetscScalar kkt_f; /* d'*x + (1/2)*x'*H*x; */ 22 Vec rd; /* H*x + d + Ae'*lambdae - Ai'*lambdai */ 23 Vec rpe; /* residual Ae*x - be */ 24 Vec rpi; /* Ai*x - yi - bi */ 25 Vec complementarity; /* yi.*lambdai */ 26 PetscScalar phi; 27 Mat L; /* diag(lambdai) */ 28 Mat Y; /* diag(yi) */ 29 Mat Ai; /* JacI (lb) 30 -JacI (ub) 31 I (xlb) 32 -I (xub) */ 33 Mat K; /* [ H , 0, Ae',-Ai']; 34 [Ae , 0, 0 , 0]; 35 [Ai ,-Imi, 0 , 0]; 36 [ 0 , L , 0 , Y ]; */ 37 38 Vec bigrhs; /* rhs [x; lambdae; yi; lambdai] */ 39 Vec bigstep; /* [dx; dyi; dlambdae; dlambdai] */ 40 PetscBool monitorkkt; 41 PetscScalar alpha1, alpha2; 42 PetscScalar pushs, pushnu; 43 IS isxl, isxu, isil, isiu; 44 VecScatter ci_scat, xl_scat, xu_scat; 45 VecScatter step1, step2, step3, step4; 46 VecScatter rhs1, rhs2, rhs3, rhs4; 47 } TAO_IPM; 48