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