Actual source code: taoapp_petsc.h

  1: #ifndef TAOPETSCAPP_H
  2: #define TAOPETSCAPP_H


 5:  #include taoappobject.h
  6: #include "../../vector/taovec_petsc.h"
  7: #include "../../matrix/taomat_petsc.h"
  8: #include "petscksp.h"

 10: //#include "taoapp.h"

 12: typedef struct _p_TAO_SOLVER* TAO_SOLVER;
 13: typedef struct _p_TAOAPPLICATION* TAO_APPLICATION;


 16: class TaoPetscApplication: public TaoApplication{

 18:  protected:


 21:   MPI_Comm comm;
 22:  public:
 23:   TaoPetscApplication(MPI_Comm comm);
 24:   TaoPetscApplication(){};
 25:   int Setup();

 27:   ~TaoPetscApplication();
 28:   int TakeDown();

 30:   TAO_SOLVER tao;
 31:   TAO_APPLICATION papp;

 33:   int Monitor();
 34:   int Monitor2(TaoVec *xx, TaoVec *gl, TaoVec *dx,TaoTruth *flag);

 36:   /* Function Evaluation */
 37:   int InitializeVariables(TaoVec *x);

 39:   TaoVecPetsc *taox;    /* The Variable Vector */
 40:   int GetVariableVector(TaoVec **xx);
 41:   int EvaluateObjectiveFunction(TaoVec *xx, double *ff);

 43:   /* Gradient Evaluation */
 44:   int EvaluateGradient(TaoVec *xx, TaoVec *gg);

 46:   /* Function and Gradient */
 47:   int EvaluateObjectiveAndGradient(TaoVec *xx, double *ff, TaoVec *gg);


 50:   /* Hessian Evaluation */
 51:   TaoMatPetsc *taoh;    /* The Hessian Matrix */
 52:   int GetHessianMatrix(TaoMat **HH);
 53:   int EvaluateHessian(TaoVec *xx, TaoMat *HH);

 55:   int HessianSolve(TaoVec *vv, TaoVec *ww, TaoTruth *flag);

 57:   /* Set Variable Bounds */
 58:   int EvaluateVariableBounds(TaoVec *, TaoVec *);

 60:   KSP ksptmp;
 61:   int GetLinearSolver(TaoMat *, int, TaoLinearSolver **);

 63:   /* Routines below this are very preliminary */
 64:   TaoMatPetsc *taoj;    /* The Jacobian Matrix */
 65:   int GetJacobianMatrix(TaoMat **JJ);
 66:   int EvaluateJacobian(TaoVec *xx, TaoMat *JJ);

 68:   TaoVecPetsc *taofv;
 69:   int GetConstraintVector(TaoVec** rr);
 70:   int EvaluateConstraints(TaoVec *xx, TaoVec *RR);
 71: 
 72:   virtual int GetInequalityConstraints(TaoVec**, TaoMat **, TaoVec **);

 74:   TaoVecPetsc *taofvll;
 75:   TaoVecPetsc *taofvuu;
 76:   TaoMatPetsc *taoAA;

 78:   int CreateATDAMatrix(TaoMat *,TaoVec*,TaoVec*, TaoMat**);

 80: };

 82: int TaoAppGetTaoPetscApp(TAO_APPLICATION, TaoPetscApplication**);


 85: #endif