Program listing for file kernel/src/modelingTools/DynamicalSystem.hpp#

  1#ifndef DynamicalSystem_H
  2#define DynamicalSystem_H
  3
  4#include "SiconosPointers.hpp"
  5#include "SiconosFwd.hpp"
  6
  7#include "SSLH.hpp"
  8#include "SiconosException.hpp"
  9
 10#include "SiconosVector.hpp"
 11#include "SimpleMatrix.hpp"
 12#include "SiconosMemory.hpp"
 13#include "DynamicalSystemTypes.hpp"
 14#include "PluggedObject.hpp"
 15#include "PluginTypes.hpp"
 16#include "SiconosVisitor.hpp"
 17
 18#include <iostream>
 19
 20
 21class DynamicalSystem
 22{
 23
 24public:
 25
 26  enum DSWorkVectorId {local_buffer, freeresidu, free, acce_memory, acce_like, sizeWorkV};
 27
 28private:
 29  ACCEPT_SERIALIZATION(DynamicalSystem);
 30
 31
 32  static size_t __count;
 33
 34protected:
 35
 36
 37  size_t _number;
 38
 39
 40  unsigned int _n;
 41
 42
 43  SP::SiconosVector _x0;
 44
 45
 46  SP::SiconosVector _r;
 47
 48
 49  VectorOfVectors _x;
 50
 51
 52  SP::SiconosMatrix _jacxRhs;
 53
 54
 55  SP::SiconosVector _z;
 56
 57
 58  SiconosMemory _xMemory;
 59
 60
 61  unsigned int _stepsInMemory;
 62
 63
 64
 65
 66  DynamicalSystem();
 67
 68
 69  DynamicalSystem(unsigned int dimension);
 70
 71
 72  DynamicalSystem(const DynamicalSystem & ds);
 73
 74
 75  virtual void _zeroPlugin() = 0;
 76
 77
 78  void _init();
 79
 80public:
 81
 82
 83  virtual ~DynamicalSystem() {};
 84
 85
 86  virtual void initRhs(double time) = 0 ;
 87
 88
 89  virtual void initializeNonSmoothInput(unsigned int level) = 0;
 90
 91
 92  void update(double time);
 93
 94
 95  virtual void computeRhs(double time) = 0;
 96
 97
 98  virtual void computeJacobianRhsx(double time) = 0;
 99
100
101  virtual void resetAllNonSmoothParts() = 0;
102
103
104  virtual void resetNonSmoothPart(unsigned int level) = 0;
105
106
107  inline size_t number() const
108  {
109    return _number;
110  }
111
112
113  inline size_t setNumber(size_t new_number)
114  {
115    size_t old_n = _number;
116    _number = new_number;
117    return old_n;
118  }
119
120
121  inline unsigned int n() const
122  {
123    return _n;
124  }
125
126
127  virtual inline unsigned int dimension() const
128  {
129    return _n;
130  };
131
132
133  inline SP::SiconosVector x0() const
134  {
135    return _x0;
136  };
137
138
139  inline const SiconosVector getX0() const
140  {
141    return *_x0;
142  }
143
144
145  void setX0(const SiconosVector& newValue);
146
147
148  void setX0Ptr(SP::SiconosVector newPtr);
149
150
151  inline SP::SiconosVector x() const
152  {
153    return _x[0];
154  }
155
156
157  inline const SiconosVector& getx() const
158  {
159    return *(_x[0]);
160  }
161
162
163  void setX(const SiconosVector& newValue);
164
165
166  void setXPtr(SP::SiconosVector newPtr);
167
168
169  inline SP::SiconosVector r() const
170  {
171    return _r;
172  }
173
174
175  inline const SiconosVector getR() const
176  {
177    return *_r;
178  }
179
180
181  void setR(const SiconosVector& newValue );
182
183
184  void setRPtr(SP::SiconosVector newPtr);
185
186
187  inline SP::SiconosVector rhs() const
188  {
189    return _x[1];
190  }
191
192
193  inline SiconosVector& getRhs() const
194  {
195    return *(_x[1]);
196  }
197
198
199  virtual void setRhs(const SiconosVector& newValue);
200
201
202  virtual void setRhsPtr(SP::SiconosVector newPtr);
203
204
205  inline SP::SiconosMatrix jacobianRhsx() const
206  {
207    return _jacxRhs;
208  }
209
210
211  void setJacobianRhsx(const SiconosMatrix& newValue);
212
213
214  void setJacobianRhsxPtr(SP::SiconosMatrix newPtr);
215
216
217  inline SP::SiconosVector z() const
218  {
219    return _z;
220  }
221
222
223  inline const SiconosVector& getz() const
224  {
225    return *_z;
226  }
227
228
229  void setz(const SiconosVector& newValue) ;
230
231
232  void setzPtr(SP::SiconosVector newPtr);
233
234
235  inline SiconosMemory& xMemory()
236  {
237    return _xMemory;
238  }
239
240
241  inline const SiconosMemory& xMemory() const
242  {
243    return _xMemory;
244  }
245
246
247  inline unsigned int stepsInMemory() const
248  {
249    return _stepsInMemory;
250  }
251
252
253  inline void setStepsInMemory(unsigned int steps)
254  {
255    _stepsInMemory = steps;
256  }
257
258
259  virtual void initMemory(unsigned int steps);
260
261
262  virtual void swapInMemory() = 0;
263
264
265  virtual void updatePlugins(double time) = 0;
266
267
268  static inline size_t resetCount(size_t new_count=0)
269  {
270    size_t old_count = __count;
271    __count = new_count;
272    return old_count;
273  };
274
275
276  virtual void resetToInitialState() = 0;
277
278
279  virtual bool isLinear()
280  {
281    return false;
282  };
283
284
285  virtual void display(bool brief = true) const = 0;
286
287  VIRTUAL_ACCEPT_VISITORS(DynamicalSystem);
288
289};
290
291
292#endif