DOpE
higher_order_dwrc.h
Go to the documentation of this file.
1 
24 #ifndef HIGHER_ORDER_DWRC_H_
25 #define HIGHER_ORDER_DWRC_H_
26 
27 #include "dwrdatacontainer.h"
28 #include <deal.II/fe/fe_tools.h>
29 
30 namespace DOpE
31 {
37  template<class STH, class IDC, class EDC, class FDC, typename VECTOR>
38  class HigherOrderDWRContainer : public DWRDataContainer<STH, IDC, EDC, FDC,
39  VECTOR>
40  {
41  public:
53  HigherOrderDWRContainer(STH& higher_order_sth, IDC& higher_order_idc,
54  DOpEtypes::VectorStorageType state_behavior, ParameterReader &param_reader,
57  : DWRDataContainer<STH, IDC, EDC, FDC, VECTOR>(ee_terms), sth_higher_order_(
58  higher_order_sth), idc_higher_order_(higher_order_idc), res_eval_(res_eval),
59  PI_h_u_(NULL), PI_h_z_(NULL)
60  {
61  if (this->GetEETerms() == DOpEtypes::primal_only
62  || this->GetEETerms() == DOpEtypes::mixed
64  {
65  PI_h_z_ = new StateVector<VECTOR>(&GetHigherOrderSTH(),
66  state_behavior, param_reader);
67  }
68  if (this->GetEETerms() == DOpEtypes::dual_only
69  || this->GetEETerms() == DOpEtypes::mixed
71  {
72  PI_h_u_ = new StateVector<VECTOR>(&GetHigherOrderSTH(),
73  state_behavior, param_reader);
74  }
75  if (this->GetEETerms() == DOpEtypes::mixed_control)
76  {
77  throw DOpEException("Wrong Constructor for type 'mixed_control'",
78  "HigherOrderDWRContainer::HigherOrderDWRContainer");
79  }
80  }
81 
82  virtual
84  {
85  if (PI_h_z_ != NULL)
86  delete PI_h_z_;
87  if (PI_h_u_ != NULL)
88  delete PI_h_u_;
89  }
90 
91  std::string
92  GetName() const
93  {
94  return "DWR-Estimator";
95  }
96 
97  template<class STH2>
98  void
99  Initialize(STH2* sth, unsigned int state_n_blocks,
100  std::vector<unsigned int>& state_block_component)
101  {
102  _sth = dynamic_cast<STH*>(sth);
103  _state_n_blocks = state_n_blocks;
104  _state_block_component = &state_block_component;
105  }
106 
111  void
112  ReInit(unsigned int n_elements);
113 
114  STH&
116  {
117  return GetHigherOrderSTH();
118  }
119 
120  const STH&
121  GetWeightSTH() const
122  {
123  return GetHigherOrderSTH();
124  }
125 
126  IDC&
128  {
129  return GetHigherOrderIDC();
130  }
131 
132  const IDC&
133  GetWeightIDC() const
134  {
135  return GetHigherOrderIDC();
136  }
137 
140  {
141  return *PI_h_u_;
142  }
143 
146  {
147  return *PI_h_z_;
148  }
151  {
152  throw DOpEException("There is no Control in PDE Problems!",
153  "HigherOrderDWRContainer::GetPI_h_q");
154  }
155 
161  void
163  {
164  VECTOR u_high;
165  u_high.reinit(GetPI_h_u().GetSpacialVector());
166 
167  dealii::FETools::extrapolate(
168  GetSTH().GetStateDoFHandler().GetDEALDoFHandler(),
169  u.GetSpacialVector(),
170  GetHigherOrderSTH().GetStateDoFHandler().GetDEALDoFHandler(),
171  GetHigherOrderSTH().GetStateDoFConstraints(),
172  GetPI_h_u().GetSpacialVector());
173  dealii::FETools::interpolate(
174  GetSTH().GetStateDoFHandler().GetDEALDoFHandler(),
175  u.GetSpacialVector(),
176  GetHigherOrderSTH().GetStateDoFHandler().GetDEALDoFHandler(),
177  GetHigherOrderSTH().GetStateDoFConstraints(), u_high);
178  GetPI_h_u().GetSpacialVector().add(-1., u_high);
179  }
180 
181  void
182  PreparePI_h_u(const VECTOR& u)
183  {
184  VECTOR u_high;
185  u_high.reinit(GetPI_h_u().GetSpacialVector());
186 
187  dealii::FETools::extrapolate(
188  GetSTH().GetStateDoFHandler().GetDEALDoFHandler(), u,
189  GetHigherOrderSTH().GetStateDoFHandler().GetDEALDoFHandler(),
190  GetHigherOrderSTH().GetStateDoFConstraints(),
191  GetPI_h_u().GetSpacialVector());
192  dealii::FETools::interpolate(
193  GetSTH().GetStateDoFHandler().GetDEALDoFHandler(), u,
194  GetHigherOrderSTH().GetStateDoFHandler().GetDEALDoFHandler(),
195  GetHigherOrderSTH().GetStateDoFConstraints(), u_high);
196  GetPI_h_u().GetSpacialVector().add(-1., u_high);
197  }
198 
204  void
206  {
207  VECTOR z_high;
208  z_high.reinit(GetPI_h_z().GetSpacialVector());
209 
210  dealii::FETools::extrapolate(
211  GetSTH().GetStateDoFHandler().GetDEALDoFHandler(),
212  z.GetSpacialVector(),
213  GetHigherOrderSTH().GetStateDoFHandler().GetDEALDoFHandler(),
214  GetHigherOrderSTH().GetStateDoFConstraints(),
215  GetPI_h_z().GetSpacialVector());
216 
217  dealii::FETools::interpolate(
218  GetSTH().GetStateDoFHandler().GetDEALDoFHandler(),
219  z.GetSpacialVector(),
220  GetHigherOrderSTH().GetStateDoFHandler().GetDEALDoFHandler(),
221  GetHigherOrderSTH().GetStateDoFConstraints(), z_high);
222 
223  GetPI_h_z().GetSpacialVector().add(-1., z_high);
224 
225  }
231  void
233  {
234  throw DOpEException("There is no Control in PDE Problems!",
235  "HigherOrderDWRContainer::PreparePI_h_q");
236 
237  }
238 
242  virtual EDC&
244  {
245  return GetHigherOrderIDC().GetElementDataContainer();
246  }
247 
251  virtual FDC&
253  {
254  return GetHigherOrderIDC().GetFaceDataContainer();
255  }
256 
260  bool
261  NeedDual() const
262  {
263  return true;
264  }
265 
271  {
273  }
274 
280  {
281 // return DOpEtypes::strong_residual;
282  return res_eval_;
283  }
284 
289  inline void
290  ResidualModifier(double& /*res*/)
291  {
292 
293  }
294  inline void
295  VectorResidualModifier(dealii::Vector<double>& /*res*/)
296  {
297 
298  }
299 
300  protected:
301  STH&
303  {
304  return *_sth;
305  }
306 
307  STH&
309  {
310  return sth_higher_order_;
311  }
312 
313  const STH&
315  {
316  return sth_higher_order_;
317  }
318 
319  IDC&
321  {
322  return idc_higher_order_;
323  }
324 
325  const IDC&
327  {
328  return idc_higher_order_;
329  }
330 
331  private:
332  unsigned int _state_n_blocks;
333  std::vector<unsigned int>* _state_block_component;
334 
335  STH& sth_higher_order_;
336  STH* _sth;
337  IDC& idc_higher_order_;
338 
339  const DOpEtypes::ResidualEvaluation res_eval_;
340 
341  StateVector<VECTOR> * PI_h_u_, *PI_h_z_;
342  };
343 
344  template<class STH, class IDC, class EDC, class FDC, typename VECTOR>
345  void
347  unsigned int n_elements)
348  {
350 
351  GetHigherOrderSTH().ReInit(_state_n_blocks, *_state_block_component);
352  if (this->GetEETerms() == DOpEtypes::primal_only
353  || this->GetEETerms() == DOpEtypes::mixed)
354  {
355  GetPI_h_z().ReInit();
356  }
357  if (this->GetEETerms() == DOpEtypes::dual_only
358  || this->GetEETerms() == DOpEtypes::mixed)
359  {
360  GetPI_h_u().ReInit();
361  }
362  }
363 }
364 
365 #endif /* HIGHER_ORDER_DWRC_H_ */
Definition: dopetypes.h:68
const STH & GetHigherOrderSTH() const
Definition: higher_order_dwrc.h:314
void ReInit(unsigned int n_elements)
Definition: higher_order_dwrc.h:346
virtual ~HigherOrderDWRContainer()
Definition: higher_order_dwrc.h:83
StateVector< VECTOR > & GetPI_h_u()
Definition: higher_order_dwrc.h:139
virtual DOpEtypes::ResidualEvaluation GetResidualEvaluation() const
Definition: higher_order_dwrc.h:279
HigherOrderDWRContainer(STH &higher_order_sth, IDC &higher_order_idc, DOpEtypes::VectorStorageType state_behavior, ParameterReader &param_reader, DOpEtypes::EETerms ee_terms=DOpEtypes::EETerms::mixed, DOpEtypes::ResidualEvaluation res_eval=DOpEtypes::strong_residual)
Definition: higher_order_dwrc.h:53
void PreparePI_h_q(const ControlVector< VECTOR > &)
Definition: higher_order_dwrc.h:232
void ResidualModifier(double &)
Definition: higher_order_dwrc.h:290
virtual FDC & GetFaceWeight() const
Definition: higher_order_dwrc.h:252
VECTOR & GetSpacialVector()
Definition: statevector.cc:383
void Initialize(STH2 *sth, unsigned int state_n_blocks, std::vector< unsigned int > &state_block_component)
Definition: higher_order_dwrc.h:99
STH & GetSTH()
Definition: higher_order_dwrc.h:302
Definition: parameterreader.h:36
IDC & GetHigherOrderIDC()
Definition: higher_order_dwrc.h:320
const IDC & GetHigherOrderIDC() const
Definition: higher_order_dwrc.h:326
Definition: dopetypes.h:68
std::string GetName() const
Definition: higher_order_dwrc.h:92
bool NeedDual() const
Definition: higher_order_dwrc.h:261
Definition: controlvector.h:49
STH & GetHigherOrderSTH()
Definition: higher_order_dwrc.h:308
Definition: dopetypes.h:68
Definition: higher_order_dwrc.h:38
Definition: dopetypes.h:93
IDC & GetWeightIDC()
Definition: higher_order_dwrc.h:127
DOpEtypes::EETerms GetEETerms() const
Definition: dwrdatacontainer.h:365
void PreparePI_h_u(const VECTOR &u)
Definition: higher_order_dwrc.h:182
EETerms
Definition: dopetypes.h:66
void PreparePI_h_z(const StateVector< VECTOR > &z)
Definition: higher_order_dwrc.h:205
virtual DOpEtypes::WeightComputation GetWeightComputation() const
Definition: higher_order_dwrc.h:270
Definition: dopetypes.h:68
Definition: statevector.h:50
virtual EDC & GetElementWeight() const
Definition: higher_order_dwrc.h:243
ResidualEvaluation
Definition: dopetypes.h:91
StateVector< VECTOR > & GetPI_h_z()
Definition: higher_order_dwrc.h:145
VectorStorageType
Definition: dopetypes.h:120
WeightComputation
Definition: dopetypes.h:80
void PreparePI_h_u(const StateVector< VECTOR > &u)
Definition: higher_order_dwrc.h:162
virtual void ReInit(unsigned int n_elements)
Definition: dwrdatacontainer.h:530
const STH & GetWeightSTH() const
Definition: higher_order_dwrc.h:121
STH & GetWeightSTH()
Definition: higher_order_dwrc.h:115
Definition: dopeexception.h:35
ControlVector< VECTOR > & GetPI_h_q()
Definition: higher_order_dwrc.h:150
Definition: dwrdatacontainer.h:545
void VectorResidualModifier(dealii::Vector< double > &)
Definition: higher_order_dwrc.h:295
const IDC & GetWeightIDC() const
Definition: higher_order_dwrc.h:133