PDEOptLinearPDEConstrainedObj.hpp
Go to the documentation of this file.
00001 #ifndef PDEOPT_LINEARPDECONSTRAINEDOBJ_H
00002 #define PDEOPT_LINEARPDECONSTRAINEDOBJ_H
00003 
00004 #include "PDEOptPDEConstrainedObjBase.hpp"
00005 #include "SundanceExpr.hpp"
00006 #include "SundanceFunctional.hpp"
00007 #include "SundanceLinearProblem.hpp"
00008 
00009 namespace Sundance
00010 {
00011 using namespace Playa;
00012 
00013 
00014 /**
00015  * LinearPDEConstrainedObj is a base class for objective functions of the
00016  * reduced-space variable where the constraint is a linear PDE in the
00017  * state variables. 
00018  */
00019 class LinearPDEConstrainedObj : public PDEConstrainedObjBase
00020 {
00021 public:
00022   /**  */
00023   LinearPDEConstrainedObj(
00024     const Functional& lagrangian,
00025     const Expr& stateVars,
00026     const Expr& stateVarVals,
00027     const Expr& adjointVars,
00028     const Expr& adjointVarVals,
00029     const Expr& designVars,
00030     const Expr& designVarVals,
00031     const LinearSolver<double>& solver,
00032     int verb=0);
00033 
00034   /**  */
00035   LinearPDEConstrainedObj(
00036     const Functional& lagrangian,
00037     const Array<Expr>& stateVars,
00038     const Array<Expr>& stateVarVals,
00039     const Array<Expr>& adjointVars,
00040     const Array<Expr>& adjointVarVals,
00041     const Expr& designVars,
00042     const Expr& designVarVals,
00043     const Array<LinearSolver<double> >& solvers,
00044     int verb=0);
00045 
00046   /**  */
00047   LinearPDEConstrainedObj(
00048     const Functional& lagrangian,
00049     const Expr& stateVars,
00050     const Expr& stateVarVals,
00051     const Expr& adjointVars,
00052     const Expr& adjointVarVals,
00053     const Expr& designVars,
00054     const Expr& designVarVals,
00055     const LinearSolver<double>& solver,
00056     const RCP<IterCallbackBase>& iterCallback,
00057     int verb=0);
00058 
00059   /**  */
00060   LinearPDEConstrainedObj(
00061     const Functional& lagrangian,
00062     const Array<Expr>& stateVars,
00063     const Array<Expr>& stateVarVals,
00064     const Array<Expr>& adjointVars,
00065     const Array<Expr>& adjointVarVals,
00066     const Expr& designVars,
00067     const Expr& designVarVals,
00068     const Array<LinearSolver<double> >& solvers,
00069     const RCP<IterCallbackBase>& iterCallback,
00070     int verb=0);
00071 
00072   /** virtual dtor */
00073   virtual ~LinearPDEConstrainedObj(){;}
00074 
00075 
00076 
00077   /** Solve the sequence of state equations, followed by postprocessing.
00078    * At the end of this call, the system is ready for evaluation of
00079    * the objective function or solution of the adjoint equations. */
00080   void solveState(const Vector<double>& x) const;
00081 
00082   /** Solve the sequence of state equations, then do postprocessing,
00083    * then finally the adjoint equations in <b>reverse</b> order. 
00084    * At the end of this call, the system is ready for evaluation
00085    * of the objective function and its gradient. */
00086   void solveStateAndAdjoint(const Vector<double>& x) const;
00087 
00088   /** Set up the linear equations */
00089   void initEquations(
00090     const Array<Expr>& stateVars,
00091     const Array<Expr>& adjointVars,
00092     const Array<Array<Expr> >& fixedVarsInStateEqns,
00093     const Array<Array<Expr> >& fixedVarsInStateEqnsVals,
00094     const Array<Array<Expr> >& fixedVarsInAdjointEqns,
00095     const Array<Array<Expr> >& fixedVarsInAdjointEqnsVals
00096     );
00097 
00098 
00099 private:
00100 
00101   Array<LinearProblem> stateProbs_;
00102 
00103   Array<LinearProblem> adjointProbs_;
00104 
00105   Array<LinearSolver<double> > solvers_;
00106 
00107 };
00108 
00109 }
00110 
00111 #endif

Site Contact