Program listing for file kernel/src/modelingTools/FirstOrderLinearDS.hpp#
Return to documentation for this file
1#ifndef FirstOrderLinearDS_H
2#define FirstOrderLinearDS_H
3
4#include "FirstOrderNonLinearDS.hpp"
5
6
7class FirstOrderLinearDS : public FirstOrderNonLinearDS {
8protected:
9
10 ACCEPT_SERIALIZATION(FirstOrderLinearDS);
11
12
13 SP::SiconosMatrix _A;
14
15
16 SP::SiconosVector _b;
17
18
19 SP::PluggedObject _pluginA;
20
21
22 SP::PluggedObject _pluginb;
23
24
25 bool _hasConstantA;
26
27
28 bool _hasConstantB;
29
30
31 FirstOrderLinearDS() : FirstOrderNonLinearDS(){};
32
33
34 void _zeroPlugin() override;
35
36public:
37
38 typedef void (*LDSPtrFunction)(double, unsigned int, double *, unsigned int,
39 double *);
40
41
42 FirstOrderLinearDS(SP::SiconosVector newX0, const std::string &APlugin,
43 const std::string &bPlugin);
44
45
46 FirstOrderLinearDS(SP::SiconosVector newX0, SP::SiconosMatrix newA);
47
48
49 FirstOrderLinearDS(SP::SiconosVector newX0);
50
51
52 FirstOrderLinearDS(SP::SiconosVector newX0, SP::SiconosMatrix newA,
53 SP::SiconosVector newB);
54
55
56 FirstOrderLinearDS(const FirstOrderLinearDS &FOLDS);
57
58
59 virtual ~FirstOrderLinearDS(){};
60
61
62 void initRhs(double time) override;
63
64
65 void computeRhs(double time) override;
66
67
68 void computeJacobianRhsx(double time) override;
69
70
71
72 inline SP::SiconosMatrix A() const { return _A; }
73
74
75 SP::SiconosMatrix jacobianfx() const override{ return _A; };
76
77
78 inline void setAPtr(SP::SiconosMatrix newA)
79 {
80 _A = newA;
81 _hasConstantA = true;
82 }
83
84
85 void setA(const SiconosMatrix &newA);
86
87
88 inline SP::SiconosVector b() const { return _b; }
89
90
91 inline void setbPtr(SP::SiconosVector b)
92 {
93 _b = b;
94 _hasConstantB = true;
95 }
96
97
98 void setb(const SiconosVector &b);
99
100 inline bool hasConstantA() const { return _hasConstantA; }
101
102 inline bool hasConstantB() const { return _hasConstantB; }
103
104
105
106 void updatePlugins(double time) override;
107
108
109 void setComputeAFunction(const std::string &pluginPath,
110 const std::string &functionName);
111
112
113 void setComputeAFunction(LDSPtrFunction fct);
114
115
116 void setComputebFunction(const std::string &pluginPath,
117 const std::string &functionName);
118
119
120 void setComputebFunction(LDSPtrFunction fct);
121 void clearComputebFunction();
122
123
124 virtual void computeA(double time);
125
126
127 virtual void computeb(double time);
128
129
130 inline SP::PluggedObject getPluginA() const { return _pluginA; };
131
132
133 inline SP::PluggedObject getPluginB() const { return _pluginb; };
134
135
136 inline void setPluginA(SP::PluggedObject newPluginA)
137 {
138 _pluginA = newPluginA;
139 };
140
141
142 inline void setPluginB(SP::PluggedObject newPluginB)
143 {
144 _pluginb = newPluginB;
145 };
146
147
148 void display(bool brief = true) const override;
149
150
151 bool isLinear() override { return true; }
152
153 ACCEPT_STD_VISITORS();
154};
155
156#endif