Program listing for file kernel/src/modelingTools/DynamicalSystem.hpp#
Return to documentation for this file
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