DOpE
instatoptproblemcontainer.h
Go to the documentation of this file.
1 
24 #ifndef INSTAT_OPT_PROBLEM_CONTAINER_
25 #define INSTAT_OPT_PROBLEM_CONTAINER_
26 
27 #include "optproblemcontainer.h"
28 
29 namespace DOpE
30 {
59  template<template<typename BASE_PROB, typename SPARSITYPATTERN, typename VECTOR,int dopedim, int dealdim, template<int, int> class FE, template<int, int> class DH> class PRIMALTSPROBLEM,
60  template<typename BASE_PROB, typename SPARSITYPATTERN, typename VECTOR,int dopedim, int dealdim, template<int, int> class FE, template<int, int> class DH> class ADJOINTTSPROBLEM,
61  typename FUNCTIONAL_INTERFACE, typename FUNCTIONAL, typename PDE,
62  typename DD, typename CONSTRAINTS, typename SPARSITYPATTERN,
63  typename VECTOR, int dopedim, int dealdim,
64  template<int, int> class FE = FESystem,
65  template<int, int> class DH = dealii::DoFHandler>
66  class InstatOptProblemContainer : public OptProblemContainer<FUNCTIONAL_INTERFACE,FUNCTIONAL,PDE,DD,CONSTRAINTS,
67  SPARSITYPATTERN,VECTOR,dopedim,dealdim,FE, DH>
68 {
69  public:
70  InstatOptProblemContainer(FUNCTIONAL& functional,PDE& pde,CONSTRAINTS& constraints,
72  : OptProblemContainer<FUNCTIONAL_INTERFACE,FUNCTIONAL,PDE,DD,CONSTRAINTS,SPARSITYPATTERN,VECTOR,dopedim,dealdim,FE, DH>(
73  functional,pde,constraints,STH), ts_state_problem_(NULL), ts_adjoint_problem_(NULL),
74  ts_tangent_problem_(NULL), ts_adjoint_hessian_problem_(NULL)
75  {
76  }
77 
79  {
80  if(ts_state_problem_ != NULL)
81  {
82  delete ts_state_problem_;
83  }
84  if(ts_adjoint_problem_ != NULL)
85  {
86  delete ts_adjoint_problem_;
87  }
88  if(ts_tangent_problem_ != NULL)
89  {
90  delete ts_tangent_problem_;
91  }
92  if(ts_adjoint_hessian_problem_ != NULL)
93  {
94  delete ts_adjoint_hessian_problem_;
95  }
96  }
97 
98  void ReInit(std::string algo_type)
99  {
100  if(ts_state_problem_ != NULL)
101  {
102  delete ts_state_problem_;
103  ts_state_problem_ = NULL;
104  }
105  if(ts_adjoint_problem_ != NULL)
106  {
107  delete ts_adjoint_problem_;
108  ts_adjoint_problem_ = NULL;
109  }
110  if(ts_tangent_problem_ != NULL)
111  {
112  delete ts_tangent_problem_;
113  ts_tangent_problem_ = NULL;
114  }
115  if(ts_adjoint_hessian_problem_ != NULL)
116  {
117  delete ts_adjoint_hessian_problem_;
118  ts_adjoint_hessian_problem_ = NULL;
119  }
121 
122  }
123 
124  std::string GetName() const
125  {
126  return "InstatOptProblemContainer";
127  }
128 
129  /*******************************************************************************************/
133  PRIMALTSPROBLEM<StateProblem<
135  PDE, DD, SPARSITYPATTERN, VECTOR, dealdim>,
136  SPARSITYPATTERN, VECTOR, dopedim, dealdim, FE, DH>& GetStateProblem()
137  {
138  if(ts_state_problem_ == NULL)
139  {
140  ts_state_problem_ = new PRIMALTSPROBLEM<StateProblem<
142  PDE, DD, SPARSITYPATTERN, VECTOR, dealdim>,
143  SPARSITYPATTERN, VECTOR, dopedim, dealdim, FE, DH>(OptProblemContainer<FUNCTIONAL_INTERFACE,FUNCTIONAL,PDE,DD,CONSTRAINTS,
144  SPARSITYPATTERN,VECTOR,dopedim,dealdim,FE, DH>::GetStateProblem());
145  }
146  return *ts_state_problem_;
147  }
148  /*******************************************************************************************/
149 
150  //FIXME: This should use the GetAdjointProblem of OptProblemContainer once availiable simillar for all calls
151  // to ADJOINTTSPROBLEM ...
155  ADJOINTTSPROBLEM<OptProblemContainer<FUNCTIONAL_INTERFACE,FUNCTIONAL,PDE,DD,CONSTRAINTS,SPARSITYPATTERN,VECTOR,dopedim,dealdim,FE, DH>,
156  SPARSITYPATTERN, VECTOR, dopedim, dealdim, FE, DH>& GetAdjointProblem()
157  {
158  if(ts_adjoint_problem_ == NULL)
159  {
160  ts_adjoint_problem_ = new ADJOINTTSPROBLEM<OptProblemContainer<FUNCTIONAL_INTERFACE,FUNCTIONAL,PDE,DD,CONSTRAINTS,SPARSITYPATTERN,VECTOR,dopedim,dealdim,FE, DH>,
161  SPARSITYPATTERN, VECTOR, dopedim, dealdim, FE, DH>(OptProblemContainer<FUNCTIONAL_INTERFACE,FUNCTIONAL,PDE,DD,CONSTRAINTS,
162  SPARSITYPATTERN,VECTOR,dopedim,dealdim,FE, DH>::GetBaseProblem());
163  }
164  return *ts_adjoint_problem_;
165  }
166 
167  /*******************************************************************************************/
168  //FIXME: This should use the GetTangentProblem of OptProblemContainer once availiable simillar for all
169  // other related calls
173  PRIMALTSPROBLEM<OptProblemContainer<FUNCTIONAL_INTERFACE,FUNCTIONAL,PDE,DD,CONSTRAINTS,SPARSITYPATTERN,VECTOR,dopedim,dealdim,FE, DH>,
174  SPARSITYPATTERN, VECTOR, dopedim, dealdim, FE, DH>& GetTangentProblem()
175  {
176  if(ts_tangent_problem_ == NULL)
177  {
178  ts_tangent_problem_ = new PRIMALTSPROBLEM<OptProblemContainer<FUNCTIONAL_INTERFACE,FUNCTIONAL,PDE,DD,CONSTRAINTS,SPARSITYPATTERN,VECTOR,dopedim,dealdim,FE, DH>,
179  SPARSITYPATTERN, VECTOR, dopedim, dealdim, FE, DH>(OptProblemContainer<FUNCTIONAL_INTERFACE,FUNCTIONAL,PDE,DD,CONSTRAINTS,
180  SPARSITYPATTERN,VECTOR,dopedim,dealdim,FE, DH>::GetBaseProblem());
181  }
182  return *ts_tangent_problem_;
183  }
184  /*******************************************************************************************/
185 
186  //FIXME: This should use the GetAdjointHessianProblem of OptProblemContainer once availiable simillar for all
187  // other related calls
191  ADJOINTTSPROBLEM<OptProblemContainer<FUNCTIONAL_INTERFACE,FUNCTIONAL,PDE,DD,CONSTRAINTS,SPARSITYPATTERN,VECTOR,dopedim,dealdim,FE, DH>,
192  SPARSITYPATTERN, VECTOR, dopedim, dealdim, FE, DH>& GetAdjointHessianProblem()
193  {
194  if(ts_adjoint_hessian_problem_ == NULL)
195  {
196  ts_adjoint_hessian_problem_ = new ADJOINTTSPROBLEM<OptProblemContainer<FUNCTIONAL_INTERFACE,FUNCTIONAL,PDE,DD,CONSTRAINTS,SPARSITYPATTERN,VECTOR,dopedim,dealdim,FE, DH>,
197  SPARSITYPATTERN, VECTOR, dopedim, dealdim, FE, DH>(OptProblemContainer<FUNCTIONAL_INTERFACE,FUNCTIONAL,PDE,DD,CONSTRAINTS,
198  SPARSITYPATTERN,VECTOR,dopedim,dealdim,FE, DH>::GetBaseProblem());
199  }
200  return *ts_adjoint_hessian_problem_;
201  }
202 
203 private:
204  PRIMALTSPROBLEM<StateProblem<
206  PDE, DD, SPARSITYPATTERN, VECTOR, dealdim>,
207  SPARSITYPATTERN, VECTOR, dopedim, dealdim, FE, DH>* ts_state_problem_;
208  ADJOINTTSPROBLEM<OptProblemContainer<FUNCTIONAL_INTERFACE,FUNCTIONAL,PDE,DD,CONSTRAINTS,SPARSITYPATTERN,VECTOR,dopedim,dealdim,FE, DH>,
209  SPARSITYPATTERN, VECTOR, dopedim, dealdim, FE, DH>* ts_adjoint_problem_;
210  PRIMALTSPROBLEM<OptProblemContainer<FUNCTIONAL_INTERFACE,FUNCTIONAL,PDE,DD,CONSTRAINTS,SPARSITYPATTERN,VECTOR,dopedim,dealdim,FE, DH>,
211  SPARSITYPATTERN, VECTOR, dopedim, dealdim, FE, DH>* ts_tangent_problem_;
212  ADJOINTTSPROBLEM<OptProblemContainer<FUNCTIONAL_INTERFACE,FUNCTIONAL,PDE,DD,CONSTRAINTS,SPARSITYPATTERN,VECTOR,dopedim,dealdim,FE, DH>,
213  SPARSITYPATTERN, VECTOR, dopedim, dealdim, FE, DH>* ts_adjoint_hessian_problem_;
214 };
215 }
216 #endif
Definition: stateproblem.h:48
Definition: instatoptproblemcontainer.h:66
std::string GetName() const
Definition: instatoptproblemcontainer.h:124
PRIMALTSPROBLEM< OptProblemContainer< FUNCTIONAL_INTERFACE, FUNCTIONAL, PDE, DD, CONSTRAINTS, SPARSITYPATTERN, VECTOR, dopedim, dealdim, FE, DH >, SPARSITYPATTERN, VECTOR, dopedim, dealdim, FE, DH > & GetTangentProblem()
Definition: instatoptproblemcontainer.h:174
void ReInit(std::string algo_type)
Definition: optproblemcontainer.h:1508
void ReInit(std::string algo_type)
Definition: instatoptproblemcontainer.h:98
PRIMALTSPROBLEM< StateProblem< OptProblemContainer< FUNCTIONAL_INTERFACE, FUNCTIONAL, PDE, DD, CONSTRAINTS, SPARSITYPATTERN, VECTOR, dopedim, dealdim, FE, DH >, PDE, DD, SPARSITYPATTERN, VECTOR, dealdim >, SPARSITYPATTERN, VECTOR, dopedim, dealdim, FE, DH > & GetStateProblem()
Definition: instatoptproblemcontainer.h:136
Definition: optproblemcontainer.h:101
~InstatOptProblemContainer()
Definition: instatoptproblemcontainer.h:78
InstatOptProblemContainer(FUNCTIONAL &functional, PDE &pde, CONSTRAINTS &constraints, SpaceTimeHandler< FE, DH, SPARSITYPATTERN, VECTOR, dopedim, dealdim > &STH)
Definition: instatoptproblemcontainer.h:70
Definition: spacetimehandler.h:71
OptProblemContainer< FUNCTIONAL_INTERFACE, FUNCTIONAL, PDE, DD, CONSTRAINTS, SPARSITYPATTERN, VECTOR, dopedim, dealdim, FE, DH > & GetBaseProblem()
Definition: optproblemcontainer.h:145
ADJOINTTSPROBLEM< OptProblemContainer< FUNCTIONAL_INTERFACE, FUNCTIONAL, PDE, DD, CONSTRAINTS, SPARSITYPATTERN, VECTOR, dopedim, dealdim, FE, DH >, SPARSITYPATTERN, VECTOR, dopedim, dealdim, FE, DH > & GetAdjointProblem()
Definition: instatoptproblemcontainer.h:156
ADJOINTTSPROBLEM< OptProblemContainer< FUNCTIONAL_INTERFACE, FUNCTIONAL, PDE, DD, CONSTRAINTS, SPARSITYPATTERN, VECTOR, dopedim, dealdim, FE, DH >, SPARSITYPATTERN, VECTOR, dopedim, dealdim, FE, DH > & GetAdjointHessianProblem()
Definition: instatoptproblemcontainer.h:192