Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043 #ifndef PDEOPT_LINEARPDECONSTRAINEDOBJ_H
00044 #define PDEOPT_LINEARPDECONSTRAINEDOBJ_H
00045
00046 #include "PDEOptPDEConstrainedObjBase.hpp"
00047 #include "SundanceExpr.hpp"
00048 #include "SundanceFunctional.hpp"
00049 #include "SundanceLinearProblem.hpp"
00050
00051 namespace Sundance
00052 {
00053 using namespace Playa;
00054
00055
00056
00057
00058
00059
00060
00061 class LinearPDEConstrainedObj : public PDEConstrainedObjBase
00062 {
00063 public:
00064
00065 LinearPDEConstrainedObj(
00066 const Functional& lagrangian,
00067 const Expr& stateVars,
00068 const Expr& stateVarVals,
00069 const Expr& adjointVars,
00070 const Expr& adjointVarVals,
00071 const Expr& designVars,
00072 const Expr& designVarVals,
00073 const LinearSolver<double>& solver,
00074 int verb=0);
00075
00076
00077 LinearPDEConstrainedObj(
00078 const Functional& lagrangian,
00079 const Array<Expr>& stateVars,
00080 const Array<Expr>& stateVarVals,
00081 const Array<Expr>& adjointVars,
00082 const Array<Expr>& adjointVarVals,
00083 const Expr& designVars,
00084 const Expr& designVarVals,
00085 const Array<LinearSolver<double> >& solvers,
00086 int verb=0);
00087
00088
00089 LinearPDEConstrainedObj(
00090 const Functional& lagrangian,
00091 const Expr& stateVars,
00092 const Expr& stateVarVals,
00093 const Expr& adjointVars,
00094 const Expr& adjointVarVals,
00095 const Expr& designVars,
00096 const Expr& designVarVals,
00097 const LinearSolver<double>& solver,
00098 const RCP<IterCallbackBase>& iterCallback,
00099 int verb=0);
00100
00101
00102 LinearPDEConstrainedObj(
00103 const Functional& lagrangian,
00104 const Array<Expr>& stateVars,
00105 const Array<Expr>& stateVarVals,
00106 const Array<Expr>& adjointVars,
00107 const Array<Expr>& adjointVarVals,
00108 const Expr& designVars,
00109 const Expr& designVarVals,
00110 const Array<LinearSolver<double> >& solvers,
00111 const RCP<IterCallbackBase>& iterCallback,
00112 int verb=0);
00113
00114
00115 virtual ~LinearPDEConstrainedObj(){;}
00116
00117
00118
00119
00120
00121
00122 void solveState(const Vector<double>& x) const;
00123
00124
00125
00126
00127
00128 void solveStateAndAdjoint(const Vector<double>& x) const;
00129
00130
00131 void initEquations(
00132 const Array<Expr>& stateVars,
00133 const Array<Expr>& adjointVars,
00134 const Array<Array<Expr> >& fixedVarsInStateEqns,
00135 const Array<Array<Expr> >& fixedVarsInStateEqnsVals,
00136 const Array<Array<Expr> >& fixedVarsInAdjointEqns,
00137 const Array<Array<Expr> >& fixedVarsInAdjointEqnsVals
00138 );
00139
00140
00141 private:
00142
00143 Array<LinearProblem> stateProbs_;
00144
00145 Array<LinearProblem> adjointProbs_;
00146
00147 Array<LinearSolver<double> > solvers_;
00148
00149 };
00150
00151 }
00152
00153 #endif