xref: /petsc/src/tao/constrained/impls/almm/almm.h (revision d2522c19e8fa9bca20aaca277941d9a63e71db6a)
1 #if !defined(TAOALMM_H)
2 #define TAOALMM_H
3 #include <petsc/private/taoimpl.h>
4 
5 typedef struct {
6   Tao subsolver, parent;          /* subsolver for aug-lag subproblem */
7   PetscErrorCode (*sub_obj)(Tao); /* subsolver objective function */
8   TaoALMMType type;               /* subsolver objective type */
9 
10   IS         *Pis, *Yis;           /* index sets to separate primal and dual vector spaces */
11   VecScatter *Pscatter, *Yscatter; /* scatter objects to write into combined vector spaces */
12 
13   Mat  Ae, Ai;                        /* aliased constraint Jacobians (do not destroy!) */
14   Vec  Px, LgradX, Ce, Ci, G;         /* aliased vectors (do not destroy!) */
15   Vec  Ps, LgradS, Yi, Ye;            /* sub-vectors for primal variables */
16   Vec *Parr, P, PL, PU, *Yarr, Y, C;  /* arrays and vectors for combined vector spaces */
17   Vec  Xwork, Cework, Ciwork, Cizero; /* work vectors */
18 
19   PetscReal Lval, fval, gnorm, cnorm, cenorm, cinorm, cnorm_old; /* scalar variables */
20   PetscReal mu0, mu, mu_fac, mu_pow_good, mu_pow_bad;            /* penalty parameters */
21   PetscReal ytol0, ytol, gtol0, gtol;                            /* convergence parameters */
22   PetscReal mu_max, ye_min, yi_min, ye_max, yi_max;              /* parameter safeguards */
23 
24   PetscBool info;
25 } TAO_ALMM;
26 
27 PETSC_INTERN PetscErrorCode TaoALMMGetType_Private(Tao, TaoALMMType *);
28 PETSC_INTERN PetscErrorCode TaoALMMSetType_Private(Tao, TaoALMMType);
29 PETSC_INTERN PetscErrorCode TaoALMMGetSubsolver_Private(Tao, Tao *);
30 PETSC_INTERN PetscErrorCode TaoALMMSetSubsolver_Private(Tao, Tao);
31 PETSC_INTERN PetscErrorCode TaoALMMGetMultipliers_Private(Tao, Vec *);
32 PETSC_INTERN PetscErrorCode TaoALMMSetMultipliers_Private(Tao, Vec);
33 PETSC_INTERN PetscErrorCode TaoALMMGetPrimalIS_Private(Tao, IS *, IS *);
34 PETSC_INTERN PetscErrorCode TaoALMMGetDualIS_Private(Tao, IS *, IS *);
35 PETSC_INTERN PetscErrorCode TaoALMMSubsolverObjective_Private(Tao, Vec, PetscReal *, void *);
36 PETSC_INTERN PetscErrorCode TaoALMMSubsolverObjectiveAndGradient_Private(Tao, Vec, PetscReal *, Vec, void *);
37 
38 #endif
39