00001 #ifndef PDEOPT_NONLINEARPDECONSTRAINEDOBJ_H
00002 #define PDEOPT_NONLINEARPDECONSTRAINEDOBJ_H
00003
00004 #include "PDEOptPDEConstrainedObjBase.hpp"
00005 #include "SundanceExpr.hpp"
00006 #include "PlayaNOXSolver.hpp"
00007 #include "SundanceFunctional.hpp"
00008 #include "SundanceNonlinearProblem.hpp"
00009
00010 namespace Sundance
00011 {
00012 using namespace Playa;
00013
00014
00015
00016
00017
00018
00019
00020 class NonlinearPDEConstrainedObj : public PDEConstrainedObjBase
00021 {
00022 public:
00023
00024 NonlinearPDEConstrainedObj(
00025 const Functional& lagrangian,
00026 const Expr& stateVars,
00027 const Expr& stateVarVals,
00028 const Expr& adjointVars,
00029 const Expr& adjointVarVals,
00030 const Expr& designVars,
00031 const Expr& designVarVals,
00032 const NOXSolver& solver,
00033 const LinearSolver<double>& adjSolver,
00034 int verb=0);
00035
00036
00037 NonlinearPDEConstrainedObj(
00038 const Functional& lagrangian,
00039 const Array<Expr>& stateVars,
00040 const Array<Expr>& stateVarVals,
00041 const Array<Expr>& adjointVars,
00042 const Array<Expr>& adjointVarVals,
00043 const Expr& designVars,
00044 const Expr& designVarVals,
00045 const NOXSolver& solver,
00046 const LinearSolver<double>& adjSolver,
00047 int verb=0);
00048
00049
00050 NonlinearPDEConstrainedObj(
00051 const Functional& lagrangian,
00052 const Expr& stateVars,
00053 const Expr& stateVarVals,
00054 const Expr& adjointVars,
00055 const Expr& adjointVarVals,
00056 const Expr& designVars,
00057 const Expr& designVarVals,
00058 const NOXSolver& solver,
00059 const LinearSolver<double>& adjSolver,
00060 const RCP<IterCallbackBase>& iterCallback,
00061 int verb=0);
00062
00063
00064 NonlinearPDEConstrainedObj(
00065 const Functional& lagrangian,
00066 const Array<Expr>& stateVars,
00067 const Array<Expr>& stateVarVals,
00068 const Array<Expr>& adjointVars,
00069 const Array<Expr>& adjointVarVals,
00070 const Expr& designVars,
00071 const Expr& designVarVals,
00072 const NOXSolver& solver,
00073 const LinearSolver<double>& adjSolver,
00074 const RCP<IterCallbackBase>& iterCallback,
00075 int verb=0);
00076
00077
00078 virtual ~NonlinearPDEConstrainedObj(){;}
00079
00080
00081
00082
00083
00084
00085 void solveState(const Vector<double>& x) const;
00086
00087
00088
00089
00090
00091 void solveStateAndAdjoint(const Vector<double>& x) const;
00092
00093
00094 void initEquations(
00095 const Array<Expr>& stateVars,
00096 const Array<Expr>& adjointVars,
00097 const Array<Array<Expr> >& fixedVarsInStateEqns,
00098 const Array<Array<Expr> >& fixedVarsInStateEqnsVals,
00099 const Array<Array<Expr> >& fixedVarsInAdjointEqns,
00100 const Array<Array<Expr> >& fixedVarsInAdjointEqnsVals
00101 );
00102
00103
00104 private:
00105
00106 Array<NonlinearProblem> stateProbs_;
00107
00108 Array<LinearProblem> adjointProbs_;
00109
00110 NOXSolver solver_;
00111
00112 LinearSolver<double> adjSolver_;
00113 };
00114
00115 }
00116
00117 #endif