xref: /petsc/src/tao/constrained/impls/ipm/pdipm.h (revision aad13602431b2aae7f9a4915734a4ba0e9437f10)
1*aad13602SShrirang Abhyankar 
2*aad13602SShrirang Abhyankar #ifndef __TAO_PDIPM_H
3*aad13602SShrirang Abhyankar #define __TAO_PDIPM_H
4*aad13602SShrirang Abhyankar #include <petsc/private/taoimpl.h>
5*aad13602SShrirang Abhyankar 
6*aad13602SShrirang Abhyankar /*
7*aad13602SShrirang Abhyankar  Context for Primal-Dual Interior-Point Method
8*aad13602SShrirang Abhyankar  See the document pdipm.pdf
9*aad13602SShrirang Abhyankar */
10*aad13602SShrirang Abhyankar 
11*aad13602SShrirang Abhyankar typedef struct {
12*aad13602SShrirang Abhyankar   /* Sizes (n = local, N = global) */
13*aad13602SShrirang Abhyankar   PetscInt nx,Nx;           /* Decision variables nx = nxfixed + nxub + nxlb + nxbox + nxfree */
14*aad13602SShrirang Abhyankar   PetscInt nxfixed,Nxfixed; /* Fixed decision variables */
15*aad13602SShrirang Abhyankar   PetscInt nxlb,Nxlb;       /* Decision variables with lower bounds only */
16*aad13602SShrirang Abhyankar   PetscInt nxub,Nxub;       /* Decision variables with upper bounds only */
17*aad13602SShrirang Abhyankar   PetscInt nxbox,Nxbox;     /* Decision variables with box constraints */
18*aad13602SShrirang Abhyankar   PetscInt nxfree,Nxfree;   /* Free variables */
19*aad13602SShrirang Abhyankar   PetscInt ng,Ng;           /* user equality constraints g(x) = 0. */
20*aad13602SShrirang Abhyankar   PetscInt nh,Nh;           /* user inequality constraints h(x) >= 0. */
21*aad13602SShrirang Abhyankar   PetscInt nce,Nce;         /* total equality constraints. nce = ng + nxfixed */
22*aad13602SShrirang Abhyankar   PetscInt nci,Nci;         /* total inequality constraints nci = nh + nxlb + nxub + 2*nxbox */
23*aad13602SShrirang Abhyankar   PetscInt n,N;             /* Big KKT system size n = nx + nce + 2*nci */
24*aad13602SShrirang Abhyankar 
25*aad13602SShrirang Abhyankar   /* Vectors */
26*aad13602SShrirang Abhyankar   Vec      X;               /* R^n   - Big KKT system vector [x; lambdae; lambdai; z] */
27*aad13602SShrirang Abhyankar   Vec      x;               /* R^nx - work vector, same layout as tao->solution */
28*aad13602SShrirang Abhyankar   Vec      lambdae;         /* R^nce - vector, shares local arrays with X */
29*aad13602SShrirang Abhyankar   Vec      lambdai;         /* R^nci - vector, shares local arrays with X */
30*aad13602SShrirang Abhyankar   Vec      z;               /* R^nci - vector, shares local arrays with X */
31*aad13602SShrirang Abhyankar 
32*aad13602SShrirang Abhyankar   /* Work vectors */
33*aad13602SShrirang Abhyankar   Vec      lambdae_xfixed; /* Equality constraints lagrangian multipler vector for fixed variables */
34*aad13602SShrirang Abhyankar   Vec      lambdai_xb; /* User inequality constraints lagrangian multipler vector */
35*aad13602SShrirang Abhyankar 
36*aad13602SShrirang Abhyankar   /* Lagrangian equality and inequality Vec */
37*aad13602SShrirang Abhyankar   Vec      ce,ci; /* equality and inequality constraints */
38*aad13602SShrirang Abhyankar 
39*aad13602SShrirang Abhyankar   /* Offsets for subvectors */
40*aad13602SShrirang Abhyankar   PetscInt  off_lambdae,off_lambdai,off_z;
41*aad13602SShrirang Abhyankar 
42*aad13602SShrirang Abhyankar   /* Scalars */
43*aad13602SShrirang Abhyankar   PetscReal L;     /* Lagrangian = f(x) - lambdae^T*ce(x) - lambdai^T*(ci(x) - z) - mu*sum_{i=1}^{Nci}(log(z_i)) */
44*aad13602SShrirang Abhyankar   PetscReal gradL; /* gradient of L w.r.t. x */
45*aad13602SShrirang Abhyankar 
46*aad13602SShrirang Abhyankar   /* Matrices */
47*aad13602SShrirang Abhyankar   Mat Jce_xfixed; /* Jacobian of equality constraints cebound(x) = J(nxfixed) */
48*aad13602SShrirang Abhyankar   Mat Jci_xb; /* Jacobian of inequality constraints Jci = [tao->jacobian_inequality ; J(nxub); J(nxlb); J(nxbx)] */
49*aad13602SShrirang Abhyankar   Mat K;      /* KKT matrix */
50*aad13602SShrirang Abhyankar 
51*aad13602SShrirang Abhyankar   /* Parameters */
52*aad13602SShrirang Abhyankar   PetscReal mu;     /* Barrier parameter */
53*aad13602SShrirang Abhyankar   PetscReal mu_update_factor; /* Multiplier for mu update */
54*aad13602SShrirang Abhyankar 
55*aad13602SShrirang Abhyankar   /* Tolerances */
56*aad13602SShrirang Abhyankar 
57*aad13602SShrirang Abhyankar   /* Index sets for types of bounds on variables */
58*aad13602SShrirang Abhyankar   IS  isxub;    /* Finite upper bound only -inf < x < ub   */
59*aad13602SShrirang Abhyankar   IS  isxlb;    /* Finite lower bound only  lb <= x < inf  */
60*aad13602SShrirang Abhyankar   IS  isxfixed; /* Fixed variables          lb  = x = ub   */
61*aad13602SShrirang Abhyankar   IS  isxbox;   /* Boxed variables          lb <= x <= ub  */
62*aad13602SShrirang Abhyankar   IS  isxfree;  /* Free variables         -inf <= x <= inf */
63*aad13602SShrirang Abhyankar 
64*aad13602SShrirang Abhyankar   /* Index sets for PC fieldsplit */
65*aad13602SShrirang Abhyankar   IS  is1,is2;
66*aad13602SShrirang Abhyankar 
67*aad13602SShrirang Abhyankar   /* Options */
68*aad13602SShrirang Abhyankar   PetscBool monitorkkt;           /* Monitor KKT */
69*aad13602SShrirang Abhyankar   PetscReal push_init_slack;      /* Push initial slack variables (z) away from bounds */
70*aad13602SShrirang Abhyankar   PetscReal push_init_lambdai;    /* Push initial inequality variables (lambdai) away from bounds */
71*aad13602SShrirang Abhyankar   PetscBool solve_reduced_kkt;    /* Solve Reduced KKT with fieldsplit */
72*aad13602SShrirang Abhyankar 
73*aad13602SShrirang Abhyankar   SNES           snes; /* Nonlinear solver */
74*aad13602SShrirang Abhyankar   Mat            jac_equality_trans,jac_inequality_trans; /* working matrices */
75*aad13602SShrirang Abhyankar 
76*aad13602SShrirang Abhyankar   PetscReal      obj;  /* Objective function */
77*aad13602SShrirang Abhyankar 
78*aad13602SShrirang Abhyankar   /* Offsets for parallel assembly */
79*aad13602SShrirang Abhyankar   PetscInt       *nce_all;
80*aad13602SShrirang Abhyankar } TAO_PDIPM;
81*aad13602SShrirang Abhyankar 
82*aad13602SShrirang Abhyankar PETSC_INTERN PetscErrorCode TaoSNESFunction_PDIPM(SNES,Vec,Vec,void*);
83*aad13602SShrirang Abhyankar 
84*aad13602SShrirang Abhyankar #endif /* ifndef __TAO_PDIPM_H */
85