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