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  }
114  if(_ts_adjoint_hessian_problem != NULL)
115  {
116  delete _ts_adjoint_hessian_problem;
117  }
119 
120  }
121 
122  std::string GetName() const
123  {
124  return "InstatOptProblemContainer";
125  }
126 
127  /*******************************************************************************************/
131  PRIMALTSPROBLEM<StateProblem<
133  PDE, DD, SPARSITYPATTERN, VECTOR, dealdim>,
134  SPARSITYPATTERN, VECTOR, dopedim, dealdim, FE, DH>& GetStateProblem()
135  {
136  if(_ts_state_problem == NULL)
137  {
138  _ts_state_problem = new PRIMALTSPROBLEM<StateProblem<
140  PDE, DD, SPARSITYPATTERN, VECTOR, dealdim>,
141  SPARSITYPATTERN, VECTOR, dopedim, dealdim, FE, DH>(OptProblemContainer<FUNCTIONAL_INTERFACE,FUNCTIONAL,PDE,DD,CONSTRAINTS,
142  SPARSITYPATTERN,VECTOR,dopedim,dealdim,FE, DH>::GetStateProblem());
143  }
144  return *_ts_state_problem;
145  }
146  /*******************************************************************************************/
147 
148  //FIXME: This should use the GetAdjointProblem of OptProblemContainer once availiable simillar for all calls
149  // to ADJOINTTSPROBLEM ...
153  ADJOINTTSPROBLEM<OptProblemContainer<FUNCTIONAL_INTERFACE,FUNCTIONAL,PDE,DD,CONSTRAINTS,SPARSITYPATTERN,VECTOR,dopedim,dealdim,FE, DH>,
154  SPARSITYPATTERN, VECTOR, dopedim, dealdim, FE, DH>& GetAdjointProblem()
155  {
156  if(_ts_adjoint_problem == NULL)
157  {
158  _ts_adjoint_problem = new ADJOINTTSPROBLEM<OptProblemContainer<FUNCTIONAL_INTERFACE,FUNCTIONAL,PDE,DD,CONSTRAINTS,SPARSITYPATTERN,VECTOR,dopedim,dealdim,FE, DH>,
159  SPARSITYPATTERN, VECTOR, dopedim, dealdim, FE, DH>(OptProblemContainer<FUNCTIONAL_INTERFACE,FUNCTIONAL,PDE,DD,CONSTRAINTS,
160  SPARSITYPATTERN,VECTOR,dopedim,dealdim,FE, DH>::GetBaseProblem());
161  }
162  return *_ts_adjoint_problem;
163  }
164 
165  /*******************************************************************************************/
166  //FIXME: This should use the GetTangentProblem of OptProblemContainer once availiable simillar for all
167  // other related calls
171  PRIMALTSPROBLEM<OptProblemContainer<FUNCTIONAL_INTERFACE,FUNCTIONAL,PDE,DD,CONSTRAINTS,SPARSITYPATTERN,VECTOR,dopedim,dealdim,FE, DH>,
172  SPARSITYPATTERN, VECTOR, dopedim, dealdim, FE, DH>& GetTangentProblem()
173  {
174  if(_ts_tangent_problem == NULL)
175  {
176  _ts_tangent_problem = new PRIMALTSPROBLEM<OptProblemContainer<FUNCTIONAL_INTERFACE,FUNCTIONAL,PDE,DD,CONSTRAINTS,SPARSITYPATTERN,VECTOR,dopedim,dealdim,FE, DH>,
177  SPARSITYPATTERN, VECTOR, dopedim, dealdim, FE, DH>(OptProblemContainer<FUNCTIONAL_INTERFACE,FUNCTIONAL,PDE,DD,CONSTRAINTS,
178  SPARSITYPATTERN,VECTOR,dopedim,dealdim,FE, DH>::GetBaseProblem());
179  }
180  return *_ts_tangent_problem;
181  }
182  /*******************************************************************************************/
183 
184  //FIXME: This should use the GetAdjointHessianProblem of OptProblemContainer once availiable simillar for all
185  // other related calls
189  ADJOINTTSPROBLEM<OptProblemContainer<FUNCTIONAL_INTERFACE,FUNCTIONAL,PDE,DD,CONSTRAINTS,SPARSITYPATTERN,VECTOR,dopedim,dealdim,FE, DH>,
190  SPARSITYPATTERN, VECTOR, dopedim, dealdim, FE, DH>& GetAdjointHessianProblem()
191  {
192  if(_ts_adjoint_hessian_problem == NULL)
193  {
194  _ts_adjoint_hessian_problem = new ADJOINTTSPROBLEM<OptProblemContainer<FUNCTIONAL_INTERFACE,FUNCTIONAL,PDE,DD,CONSTRAINTS,SPARSITYPATTERN,VECTOR,dopedim,dealdim,FE, DH>,
195  SPARSITYPATTERN, VECTOR, dopedim, dealdim, FE, DH>(OptProblemContainer<FUNCTIONAL_INTERFACE,FUNCTIONAL,PDE,DD,CONSTRAINTS,
196  SPARSITYPATTERN,VECTOR,dopedim,dealdim,FE, DH>::GetBaseProblem());
197  }
198  return *_ts_adjoint_hessian_problem;
199  }
200 
201 private:
202  PRIMALTSPROBLEM<StateProblem<
204  PDE, DD, SPARSITYPATTERN, VECTOR, dealdim>,
205  SPARSITYPATTERN, VECTOR, dopedim, dealdim, FE, DH>* _ts_state_problem;
206  ADJOINTTSPROBLEM<OptProblemContainer<FUNCTIONAL_INTERFACE,FUNCTIONAL,PDE,DD,CONSTRAINTS,SPARSITYPATTERN,VECTOR,dopedim,dealdim,FE, DH>,
207  SPARSITYPATTERN, VECTOR, dopedim, dealdim, FE, DH>* _ts_adjoint_problem;
208  PRIMALTSPROBLEM<OptProblemContainer<FUNCTIONAL_INTERFACE,FUNCTIONAL,PDE,DD,CONSTRAINTS,SPARSITYPATTERN,VECTOR,dopedim,dealdim,FE, DH>,
209  SPARSITYPATTERN, VECTOR, dopedim, dealdim, FE, DH>* _ts_tangent_problem;
210  ADJOINTTSPROBLEM<OptProblemContainer<FUNCTIONAL_INTERFACE,FUNCTIONAL,PDE,DD,CONSTRAINTS,SPARSITYPATTERN,VECTOR,dopedim,dealdim,FE, DH>,
211  SPARSITYPATTERN, VECTOR, dopedim, dealdim, FE, DH>* _ts_adjoint_hessian_problem;
212 };
213 }
214 #endif
Definition: stateproblem.h:48
Definition: instatoptproblemcontainer.h:66
std::string GetName() const
Definition: instatoptproblemcontainer.h:122
PRIMALTSPROBLEM< OptProblemContainer< FUNCTIONAL_INTERFACE, FUNCTIONAL, PDE, DD, CONSTRAINTS, SPARSITYPATTERN, VECTOR, dopedim, dealdim, FE, DH >, SPARSITYPATTERN, VECTOR, dopedim, dealdim, FE, DH > & GetTangentProblem()
Definition: instatoptproblemcontainer.h:172
void ReInit(std::string algo_type)
Definition: optproblemcontainer.h:1360
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:134
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:154
ADJOINTTSPROBLEM< OptProblemContainer< FUNCTIONAL_INTERFACE, FUNCTIONAL, PDE, DD, CONSTRAINTS, SPARSITYPATTERN, VECTOR, dopedim, dealdim, FE, DH >, SPARSITYPATTERN, VECTOR, dopedim, dealdim, FE, DH > & GetAdjointHessianProblem()
Definition: instatoptproblemcontainer.h:190