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

  1#ifndef FirstOrderLinearR_H
  2#define FirstOrderLinearR_H
  3
  4#include "FirstOrderR.hpp"
  5
  6typedef void (*FOMatPtr1)(double, unsigned int, unsigned int, double *, unsigned int,
  7                          double *);
  8
  9
 10typedef void (*FOMatPtr2)(double, unsigned int, double *, unsigned int, double *);
 11
 12
 13typedef void (*FOVecPtr)(double, unsigned int, double *, unsigned int, double *);
 14
 15
 16class FirstOrderLinearR : public FirstOrderR {
 17
 18protected:
 19
 20  ACCEPT_SERIALIZATION(FirstOrderLinearR);
 21
 22
 23  SP::SiconosVector _e{nullptr};
 24
 25
 26  void initialize(Interaction &inter) override;
 27
 28
 29  void checkSize(Interaction &inter) override;
 30
 31public:
 32
 33  FirstOrderLinearR() : FirstOrderR(RELATION::LinearR){};
 34
 35
 36  FirstOrderLinearR(const std::string &Cname, const std::string &Bname);
 37
 38
 39  FirstOrderLinearR(const std::string &Cname, const std::string &Dname,
 40                    const std::string &Fname, const std::string &Ename,
 41                    const std::string &Bname);
 42
 43
 44  FirstOrderLinearR(SP::SimpleMatrix C, SP::SimpleMatrix B);
 45
 46
 47  FirstOrderLinearR(SP::SimpleMatrix C, SP::SimpleMatrix D, SP::SimpleMatrix F,
 48                    SP::SiconosVector e, SP::SimpleMatrix B);
 49
 50
 51  virtual ~FirstOrderLinearR() noexcept = default;
 52
 53
 54  void setComputeCFunction(const std::string &pluginPath, const std::string &functionName)
 55  {
 56    setComputeJachxFunction(pluginPath, functionName);
 57  }
 58
 59
 60  void setComputeDFunction(const std::string &pluginPath, const std::string &functionName)
 61  {
 62    setComputeJachlambdaFunction(pluginPath, functionName);
 63  }
 64
 65
 66  void setComputeBFunction(const std::string &pluginPath, const std::string &functionName)
 67  {
 68    setComputeJacglambdaFunction(pluginPath, functionName);
 69  }
 70
 71  virtual void computeC(double time, BlockVector &z, SimpleMatrix &C);
 72
 73
 74  virtual void computeD(double time, BlockVector &z, SimpleMatrix &D);
 75
 76
 77  virtual void computeF(double time, BlockVector &z, SimpleMatrix &F);
 78
 79
 80  virtual void computee(double time, BlockVector &z, SiconosVector &e);
 81
 82
 83  virtual void computeB(double time, BlockVector &z, SimpleMatrix &B);
 84
 85
 86  virtual void computeh(double time, const BlockVector &x, const SiconosVector &lambda,
 87                        BlockVector &z, SiconosVector &y);
 88
 89
 90  virtual void computeg(double time, const SiconosVector &lambda, BlockVector &z,
 91                        BlockVector &r);
 92
 93
 94  void computeOutput(double time, Interaction &inter, unsigned int level = 0) override;
 95
 96
 97  void computeInput(double time, Interaction &inter, unsigned int level = 0) override;
 98
 99
100  void display() const override;
101
102
103  inline void setePtr(SP::SiconosVector newe) { _e = newe; }
104
105
106  inline SP::SiconosVector e() const { return _e; }
107
108
109  bool isLinear() override { return true; }
110
111
112
113  void computeJach(double time, Interaction &inter) override{};
114  void computeJacg(double time, Interaction &inter) override{};
115
116  ACCEPT_STD_VISITORS();
117};
118
119TYPEDEF_SPTR(FirstOrderLinearR)
120
121#endif