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_NONLINEARPDECONSTRAINEDOBJ_H
00044 #define PDEOPT_NONLINEARPDECONSTRAINEDOBJ_H
00045
00046 #include "PDEOptPDEConstrainedObjBase.hpp"
00047 #include "SundanceExpr.hpp"
00048 #include "PlayaNOXSolver.hpp"
00049 #include "SundanceFunctional.hpp"
00050 #include "SundanceNonlinearProblem.hpp"
00051
00052 namespace Sundance
00053 {
00054 using namespace Playa;
00055
00056
00057
00058
00059
00060
00061
00062 class NonlinearPDEConstrainedObj : public PDEConstrainedObjBase
00063 {
00064 public:
00065
00066 NonlinearPDEConstrainedObj(
00067 const Functional& lagrangian,
00068 const Expr& stateVars,
00069 const Expr& stateVarVals,
00070 const Expr& adjointVars,
00071 const Expr& adjointVarVals,
00072 const Expr& designVars,
00073 const Expr& designVarVals,
00074 const NOXSolver& solver,
00075 const LinearSolver<double>& adjSolver,
00076 int verb=0);
00077
00078
00079 NonlinearPDEConstrainedObj(
00080 const Functional& lagrangian,
00081 const Array<Expr>& stateVars,
00082 const Array<Expr>& stateVarVals,
00083 const Array<Expr>& adjointVars,
00084 const Array<Expr>& adjointVarVals,
00085 const Expr& designVars,
00086 const Expr& designVarVals,
00087 const NOXSolver& solver,
00088 const LinearSolver<double>& adjSolver,
00089 int verb=0);
00090
00091
00092 NonlinearPDEConstrainedObj(
00093 const Functional& lagrangian,
00094 const Expr& stateVars,
00095 const Expr& stateVarVals,
00096 const Expr& adjointVars,
00097 const Expr& adjointVarVals,
00098 const Expr& designVars,
00099 const Expr& designVarVals,
00100 const NOXSolver& solver,
00101 const LinearSolver<double>& adjSolver,
00102 const RCP<IterCallbackBase>& iterCallback,
00103 int verb=0);
00104
00105
00106 NonlinearPDEConstrainedObj(
00107 const Functional& lagrangian,
00108 const Array<Expr>& stateVars,
00109 const Array<Expr>& stateVarVals,
00110 const Array<Expr>& adjointVars,
00111 const Array<Expr>& adjointVarVals,
00112 const Expr& designVars,
00113 const Expr& designVarVals,
00114 const NOXSolver& solver,
00115 const LinearSolver<double>& adjSolver,
00116 const RCP<IterCallbackBase>& iterCallback,
00117 int verb=0);
00118
00119
00120 virtual ~NonlinearPDEConstrainedObj(){;}
00121
00122
00123
00124
00125
00126
00127 void solveState(const Vector<double>& x) const;
00128
00129
00130
00131
00132
00133 void solveStateAndAdjoint(const Vector<double>& x) const;
00134
00135
00136 void initEquations(
00137 const Array<Expr>& stateVars,
00138 const Array<Expr>& adjointVars,
00139 const Array<Array<Expr> >& fixedVarsInStateEqns,
00140 const Array<Array<Expr> >& fixedVarsInStateEqnsVals,
00141 const Array<Array<Expr> >& fixedVarsInAdjointEqns,
00142 const Array<Array<Expr> >& fixedVarsInAdjointEqnsVals
00143 );
00144
00145
00146 private:
00147
00148 Array<NonlinearProblem> stateProbs_;
00149
00150 Array<LinearProblem> adjointProbs_;
00151
00152 NOXSolver solver_;
00153
00154 LinearSolver<double> adjSolver_;
00155 };
00156
00157 }
00158
00159 #endif