xref: /petsc/src/tao/pde_constrained/impls/lcl/lcl.h (revision a7e14dcfba0d07adf6226a919460249440ec94c7)
1*a7e14dcfSSatish Balay #ifndef __TAO_LCL_H
2*a7e14dcfSSatish Balay #define __TAO_LCL_H
3*a7e14dcfSSatish Balay 
4*a7e14dcfSSatish Balay #include "tao-private/taosolver_impl.h"
5*a7e14dcfSSatish Balay #include "petscis.h"
6*a7e14dcfSSatish Balay #define LCL_FORWARD1        0
7*a7e14dcfSSatish Balay #define LCL_ADJOINT1        1
8*a7e14dcfSSatish Balay #define LCL_FORWARD2        2
9*a7e14dcfSSatish Balay #define LCL_ADJOINT2        3
10*a7e14dcfSSatish Balay 
11*a7e14dcfSSatish Balay typedef struct {
12*a7e14dcfSSatish Balay   Mat M;    /* Quasi-newton hessian matrix */
13*a7e14dcfSSatish Balay   Vec dbar;   /* Reduced gradient */
14*a7e14dcfSSatish Balay   Vec GL;
15*a7e14dcfSSatish Balay   Vec GAugL;
16*a7e14dcfSSatish Balay   Vec GL_U;   /* Gradient of lagrangian */
17*a7e14dcfSSatish Balay   Vec GL_V;   /* Gradient of lagrangian */
18*a7e14dcfSSatish Balay   Vec GAugL_U; /* Augmented lagrangian gradient */
19*a7e14dcfSSatish Balay   Vec GAugL_V; /* Augmented lagrangian gradient */
20*a7e14dcfSSatish Balay   Vec GL_U0;   /* Gradient of lagrangian */
21*a7e14dcfSSatish Balay   Vec GL_V0;   /* Gradient of lagrangian */
22*a7e14dcfSSatish Balay   Vec GAugL_U0; /* Augmented lagrangian gradient */
23*a7e14dcfSSatish Balay   Vec GAugL_V0; /* Augmented lagrangian gradient */
24*a7e14dcfSSatish Balay 
25*a7e14dcfSSatish Balay   IS UIS;   /* Index set to state */
26*a7e14dcfSSatish Balay   IS UID;   /* Index set to design */
27*a7e14dcfSSatish Balay   IS UIM;   /* Full index set to all constraints */
28*a7e14dcfSSatish Balay   VecScatter state_scatter;
29*a7e14dcfSSatish Balay   VecScatter design_scatter;
30*a7e14dcfSSatish Balay 
31*a7e14dcfSSatish Balay   Vec U;    /* State variable */
32*a7e14dcfSSatish Balay   Vec V;    /* Design variable */
33*a7e14dcfSSatish Balay   Vec U0;    /* State variable */
34*a7e14dcfSSatish Balay   Vec V0;    /* Design variable */
35*a7e14dcfSSatish Balay   Vec V1;    /* Design variable */
36*a7e14dcfSSatish Balay 
37*a7e14dcfSSatish Balay   Vec DU;   /* State step */
38*a7e14dcfSSatish Balay   Vec DV;   /* Design step */
39*a7e14dcfSSatish Balay   Vec DL;   /* Multipliers step */
40*a7e14dcfSSatish Balay 
41*a7e14dcfSSatish Balay   Vec GU;   /* Gradient wrt U */
42*a7e14dcfSSatish Balay   Vec GV;   /* Gradient wrt V */
43*a7e14dcfSSatish Balay   Vec GU0;   /* Gradient wrt U */
44*a7e14dcfSSatish Balay   Vec GV0;   /* Gradient wrt V */
45*a7e14dcfSSatish Balay 
46*a7e14dcfSSatish Balay   Vec W;    /* work vector */
47*a7e14dcfSSatish Balay   Vec X0;
48*a7e14dcfSSatish Balay   Vec G0;
49*a7e14dcfSSatish Balay   Vec WU;   /* state work vector */
50*a7e14dcfSSatish Balay   Vec WV;   /* design work vector */
51*a7e14dcfSSatish Balay   Vec r;
52*a7e14dcfSSatish Balay   Vec s;
53*a7e14dcfSSatish Balay   Vec g1,g2;
54*a7e14dcfSSatish Balay   Vec con1;
55*a7e14dcfSSatish Balay 
56*a7e14dcfSSatish Balay   PetscInt m; /* number of constraints */
57*a7e14dcfSSatish Balay   PetscInt n; /* number of variables */
58*a7e14dcfSSatish Balay 
59*a7e14dcfSSatish Balay   Mat jacobian_state0;   /* Jacobian wrt U */
60*a7e14dcfSSatish Balay   Mat jacobian_state0_pre; /* preconditioning matrix wrt U */
61*a7e14dcfSSatish Balay   Mat jacobian_design0;   /* Jacobian wrt V */
62*a7e14dcfSSatish Balay   Mat jacobian_state_inv0; /* Inverse of Jacobian wrt U */
63*a7e14dcfSSatish Balay   Mat R;
64*a7e14dcfSSatish Balay 
65*a7e14dcfSSatish Balay   Vec lamda;   /* Lagrange Multiplier */
66*a7e14dcfSSatish Balay   Vec lamda0;   /* Lagrange Multiplier */
67*a7e14dcfSSatish Balay   Vec lamda1;   /* Lagrange Multiplier */
68*a7e14dcfSSatish Balay 
69*a7e14dcfSSatish Balay   Vec WL;   /* Work vector */
70*a7e14dcfSSatish Balay   PetscReal rho; /* Penalty parameter */
71*a7e14dcfSSatish Balay   PetscReal rho0;
72*a7e14dcfSSatish Balay   PetscReal rhomax;
73*a7e14dcfSSatish Balay   PetscReal eps1,eps2;
74*a7e14dcfSSatish Balay   PetscReal aug,aug0,lgn,lgn0;
75*a7e14dcfSSatish Balay   PetscInt    subset_type;
76*a7e14dcfSSatish Balay   PetscInt    solve_type;
77*a7e14dcfSSatish Balay   MatStructure statematflag,designmatflag;
78*a7e14dcfSSatish Balay   PetscBool recompute_jacobian_flag;
79*a7e14dcfSSatish Balay   PetscInt phase2_niter;
80*a7e14dcfSSatish Balay   PetscBool verbose;
81*a7e14dcfSSatish Balay   PetscReal tau[4];
82*a7e14dcfSSatish Balay 
83*a7e14dcfSSatish Balay 
84*a7e14dcfSSatish Balay } TAO_LCL;
85*a7e14dcfSSatish Balay 
86*a7e14dcfSSatish Balay 
87*a7e14dcfSSatish Balay #endif
88