DOpE
controlvector.h
Go to the documentation of this file.
1 
24 #ifndef _CONTROL_VECTOR_H_
25 #define _CONTROL_VECTOR_H_
26 
27 #include "spacetimehandler_base.h"
28 
29 #include <lac/vector.h>
30 #include <lac/block_vector_base.h>
31 #include <lac/block_vector.h>
32 
33 #include <vector>
34 #include <iostream>
35 #include <sstream>
36 
37 
38 namespace DOpE
39 {
40 
47 template<typename VECTOR>
49  {
50  public:
51  //TODO: Currently we only consider one fixed control
52  // for all timesteps, if more is desired one needs to augment the
53  // Spacetimehandler to have a time discretization for the control,
54  // Then one can update this vector similar to the statevector
55  // with different meshes for Vectors.
56  // Note that this requires to keep track of the interpolation
57  // between state and control time points...
58  ControlVector(const ControlVector& ref);
59  ControlVector(const SpaceTimeHandlerBase<VECTOR>* STH, std::string behavior);
61 
73  void SetTime(double t, const TimeIterator& interval) const;
82  void SetTimeDoFNumber(unsigned int time_point) const;
86  VECTOR& GetSpacialVector();
90  const VECTOR& GetSpacialVector() const;
97  const dealii::Vector<double>& GetSpacialVectorCopy() const;
98 
104  void operator=(double value);
111  void operator=(const ControlVector& dq);
119  void operator+=(const ControlVector& dq);
125  void operator*=(double a);
133  double operator*(const ControlVector& dq) const;
142  void add(double s, const ControlVector& dq);
149  void equ(double s, const ControlVector& dq);
157  void max(const ControlVector& dq);
165  void min(const ControlVector& dq);
166 
170  void comp_mult(const ControlVector& dq);
171 
175  void comp_invert();
176 
185  void init_by_sign(double smaller, double larger, double unclear, double TOL = 1.e-10);
186 
192  void PrintInfos(std::stringstream& out);
196  void UnLockCopy() const { _lock = false; }
197 
206  std::string GetBehavior() const { return _behavior; }
207 
211  const SpaceTimeHandlerBase<VECTOR>* GetSpaceTimeHandler() const { return _STH; }
212 
217  void ReInit();
218 
227  double Norm(std::string name,std::string restriction = "all") const;
228 
229  private:
234  void ReSizeSpace(unsigned int ndofs, const std::vector<unsigned int>& dofs_per_block);
235 
236  std::vector<VECTOR* > _control;
237  mutable VECTOR _local_control;
238  mutable dealii::Vector<double> _copy_control;
239 
240  mutable int _accessor;
241  mutable bool _lock;
242 
243  const SpaceTimeHandlerBase<VECTOR>* _STH;
244  std::string _behavior;
245  unsigned int _sfh_ticket;
246  };
247 
248 
249 }
250 #endif
void PrintInfos(std::stringstream &out)
Definition: controlvector.cc:542
void UnLockCopy() const
Definition: controlvector.h:196
const dealii::Vector< double > & GetSpacialVectorCopy() const
Definition: controlvector.cc:132
void init_by_sign(double smaller, double larger, double unclear, double TOL=1.e-10)
Definition: controlvector.cc:508
~ControlVector()
Definition: controlvector.cc:85
void operator+=(const ControlVector &dq)
Definition: controlvector.cc:302
Definition: spacetimehandler_base.h:47
void operator*=(double a)
Definition: controlvector.cc:322
Definition: timeiterator.h:63
Definition: controlvector.h:48
void SetTimeDoFNumber(unsigned int time_point) const
Definition: controlvector.cc:103
void add(double s, const ControlVector &dq)
Definition: controlvector.cc:363
void ReInit()
Definition: controlvector.cc:60
double operator*(const ControlVector &dq) const
Definition: controlvector.cc:340
void comp_invert()
Definition: controlvector.cc:486
const SpaceTimeHandlerBase< VECTOR > * GetSpaceTimeHandler() const
Definition: controlvector.h:211
VECTOR & GetSpacialVector()
Definition: controlvector.cc:118
void min(const ControlVector &dq)
Definition: controlvector.cc:433
void operator=(double value)
Definition: controlvector.cc:239
ControlVector(const ControlVector &ref)
Definition: controlvector.cc:37
void comp_mult(const ControlVector &dq)
Definition: controlvector.cc:459
double Norm(std::string name, std::string restriction="all") const
Definition: controlvector.cc:581
void equ(double s, const ControlVector &dq)
Definition: controlvector.cc:384
void max(const ControlVector &dq)
Definition: controlvector.cc:405
void SetTime(double t, const TimeIterator &interval) const
Definition: controlvector.cc:110
std::string GetBehavior() const
Definition: controlvector.h:206