xref: /petsc/src/tao/constrained/impls/admm/admm.h (revision 6285c0a3eab9179dbf0b284c36c7c0086124b8a4)
1*6285c0a3SHansol  Suh #if !defined(TAOADMM_H)
2*6285c0a3SHansol  Suh #define TAOADMM_H
3*6285c0a3SHansol  Suh #include <petsc/private/taoimpl.h>
4*6285c0a3SHansol  Suh 
5*6285c0a3SHansol  Suh typedef struct _TaoADMMOps *TaoADMMOps;
6*6285c0a3SHansol  Suh 
7*6285c0a3SHansol  Suh struct _TaoADMMOps {
8*6285c0a3SHansol  Suh   PetscErrorCode (*misfitobjgrad)(Tao, Vec, PetscReal*, Vec, void*);
9*6285c0a3SHansol  Suh   PetscErrorCode (*misfithess)(Tao, Vec, Mat, Mat,  void*);
10*6285c0a3SHansol  Suh   PetscErrorCode (*misfitjac)(Tao, Vec, Mat, Mat,  void*);
11*6285c0a3SHansol  Suh   PetscErrorCode (*regobjgrad)(Tao, Vec, PetscReal*, Vec, void*);
12*6285c0a3SHansol  Suh   PetscErrorCode (*reghess)(Tao, Vec, Mat, Mat,  void*);
13*6285c0a3SHansol  Suh   PetscErrorCode (*regjac)(Tao, Vec, Mat, Mat,  void*);
14*6285c0a3SHansol  Suh };
15*6285c0a3SHansol  Suh 
16*6285c0a3SHansol  Suh typedef struct {
17*6285c0a3SHansol  Suh   PETSCHEADER(struct _TaoADMMOps);
18*6285c0a3SHansol  Suh   Tao       subsolverX, subsolverZ, parent;
19*6285c0a3SHansol  Suh   Vec       residual,y,yold,y0,yhat,yhatold,constraint;
20*6285c0a3SHansol  Suh   Vec       z,zold,Ax,Bz,Axold,Bzold,Bz0;
21*6285c0a3SHansol  Suh   Vec       workLeft,workJacobianRight,workJacobianRight2; /*Ax,Bz,y,constraint are workJacobianRight sized. workLeft is solution sized */
22*6285c0a3SHansol  Suh   Mat       Hx,Hxpre,Hz,Hzpre,ATA,BTB,JA,JApre,JB,JBpre;
23*6285c0a3SHansol  Suh   void*     regobjgradP;
24*6285c0a3SHansol  Suh   void*     reghessP;
25*6285c0a3SHansol  Suh   void*     regjacobianP;
26*6285c0a3SHansol  Suh   void*     misfitobjgradP;
27*6285c0a3SHansol  Suh   void*     misfithessP;
28*6285c0a3SHansol  Suh   void*     misfitjacobianP;
29*6285c0a3SHansol  Suh   PetscReal gamma,last_misfit_val,last_reg_val,l1epsilon;
30*6285c0a3SHansol  Suh   PetscReal lambda,mu,muold,orthval,mueps,tol,mumin;
31*6285c0a3SHansol  Suh   PetscReal Bzdiffnorm,dualres,resnorm,const_norm;
32*6285c0a3SHansol  Suh   PetscReal gatol_admm,catol_admm;
33*6285c0a3SHansol  Suh   PetscInt  T;                                             /*T is adaptive iteration cutoff */
34*6285c0a3SHansol  Suh   PetscBool xJI, zJI;                                      /* Bool to check whether A,B Jacobians are NULL-set identity */
35*6285c0a3SHansol  Suh   PetscBool Hxchange, Hzchange;                            /* Bool to check whether Hx,Hz change wrt to x and z */
36*6285c0a3SHansol  Suh   PetscBool Hxbool, Hzbool;                                /* Bool to make sure Hessian gets updated only once for Hchange False case */
37*6285c0a3SHansol  Suh   TaoADMMUpdateType      update;                        /* update policy for mu */
38*6285c0a3SHansol  Suh   TaoADMMRegularizerType regswitch;                           /* regularization policy */
39*6285c0a3SHansol  Suh } TAO_ADMM;
40*6285c0a3SHansol  Suh 
41*6285c0a3SHansol  Suh #endif
42