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