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