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