Actual source code: lcl.h

      1: #ifndef __TAO_LCL_H

      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

     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 */

     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;

     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 */

     37:   Vec DU;   /* State step */
     38:   Vec DV;   /* Design step */
     39:   Vec DL;   /* Multipliers step */

     41:   Vec GU;   /* Gradient wrt U */
     42:   Vec GV;   /* Gradient wrt V */
     43:   Vec GU0;   /* Gradient wrt U */
     44:   Vec GV0;   /* Gradient wrt V */

     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;

     56:   PetscInt m; /* number of constraints */
     57:   PetscInt n; /* number of variables */

     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;

     65:   Vec lamda;   /* Lagrange Multiplier */
     66:   Vec lamda0;   /* Lagrange Multiplier */
     67:   Vec lamda1;   /* Lagrange Multiplier */

     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];

     83: } TAO_LCL;

     86: #endif