xref: /petsc/src/tao/constrained/impls/admm/admm.h (revision 7f5c9be9901da95929aa3055320a45e2378ab860)
16285c0a3SHansol  Suh #if !defined(TAOADMM_H)
26285c0a3SHansol  Suh #define TAOADMM_H
36285c0a3SHansol  Suh #include <petsc/private/taoimpl.h>
46285c0a3SHansol  Suh 
56285c0a3SHansol  Suh typedef struct _TaoADMMOps *TaoADMMOps;
66285c0a3SHansol  Suh 
76285c0a3SHansol  Suh struct _TaoADMMOps {
86285c0a3SHansol  Suh   PetscErrorCode (*misfitobjgrad)(Tao, Vec, PetscReal*, Vec, void*);
96285c0a3SHansol  Suh   PetscErrorCode (*misfithess)(Tao, Vec, Mat, Mat,  void*);
106285c0a3SHansol  Suh   PetscErrorCode (*misfitjac)(Tao, Vec, Mat, Mat,  void*);
116285c0a3SHansol  Suh   PetscErrorCode (*regobjgrad)(Tao, Vec, PetscReal*, Vec, void*);
126285c0a3SHansol  Suh   PetscErrorCode (*reghess)(Tao, Vec, Mat, Mat,  void*);
136285c0a3SHansol  Suh   PetscErrorCode (*regjac)(Tao, Vec, Mat, Mat,  void*);
146285c0a3SHansol  Suh };
156285c0a3SHansol  Suh 
166285c0a3SHansol  Suh typedef struct {
176285c0a3SHansol  Suh   PETSCHEADER(struct _TaoADMMOps);
186285c0a3SHansol  Suh   Tao                    subsolverX, subsolverZ, parent;
196285c0a3SHansol  Suh   Vec                    residual,y,yold,y0,yhat,yhatold,constraint;
206285c0a3SHansol  Suh   Vec                    z,zold,Ax,Bz,Axold,Bzold,Bz0;
216285c0a3SHansol  Suh   Vec                    workLeft,workJacobianRight,workJacobianRight2; /*Ax,Bz,y,constraint are workJacobianRight sized. workLeft is solution sized */
226285c0a3SHansol  Suh   Mat                    Hx,Hxpre,Hz,Hzpre,ATA,BTB,JA,JApre,JB,JBpre;
236285c0a3SHansol  Suh   void*                  regobjgradP;
246285c0a3SHansol  Suh   void*                  reghessP;
256285c0a3SHansol  Suh   void*                  regjacobianP;
266285c0a3SHansol  Suh   void*                  misfitobjgradP;
276285c0a3SHansol  Suh   void*                  misfithessP;
286285c0a3SHansol  Suh   void*                  misfitjacobianP;
296285c0a3SHansol  Suh   PetscReal              gamma,last_misfit_val,last_reg_val,l1epsilon;
306285c0a3SHansol  Suh   PetscReal              lambda,mu,muold,orthval,mueps,tol,mumin;
316285c0a3SHansol  Suh   PetscReal              Bzdiffnorm,dualres,resnorm,const_norm;
326285c0a3SHansol  Suh   PetscReal              gatol_admm,catol_admm;
33*7f5c9be9SBarry Smith   PetscInt               T;                                             /* adaptive iteration cutoff */
346285c0a3SHansol  Suh   PetscBool              xJI, zJI;                                      /* Bool to check whether A,B Jacobians are NULL-set identity */
356285c0a3SHansol  Suh   PetscBool              Hxchange, Hzchange;                            /* Bool to check whether Hx,Hz change wrt to x and z */
366285c0a3SHansol  Suh   PetscBool              Hxbool, Hzbool;                                /* Bool to make sure Hessian gets updated only once for Hchange False case */
376285c0a3SHansol  Suh   TaoADMMUpdateType      update;                                        /* update policy for mu */
386285c0a3SHansol  Suh   TaoADMMRegularizerType regswitch;                                     /* regularization policy */
396285c0a3SHansol  Suh } TAO_ADMM;
406285c0a3SHansol  Suh 
416285c0a3SHansol  Suh #endif
42