Program listing for file kernel/src/modelingTools/FirstOrderLinearDS.hpp

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

  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