Program listing for file kernel/src/modelingTools/NewtonEulerR.hpp#
Return to documentation for this file
1#ifndef NEWTONEULERRELATION_H
2#define NEWTONEULERRELATION_H
3
4#include "PluginTypes.hpp"
5#include "Relation.hpp"
6
7
8
9class NewtonEulerR : public Relation {
10public:
11
12 enum NewtonEulerRDS { z, q0, velocity, dotq, p0, p1, p2, DSlinkSize };
13
14protected:
15
16 ACCEPT_SERIALIZATION(NewtonEulerR);
17
18
19
20
21
22 SP::SimpleMatrix _jachq;
23
24
25 SP::SimpleMatrix _jachqDot;
26
27
28 SP::SimpleMatrix _dotjachq;
29
30 SP::SimpleMatrix _jachlambda;
31 SP::SimpleMatrix _jacglambda;
32
33
34 SP::SiconosVector _e;
35
36
37
38 SP::SiconosVector _contactForce;
39
40
41 SP::SimpleMatrix _jachqT;
42
43
44 SP::SimpleMatrix _T;
45
46
47 NewtonEulerR(RELATION::SUBTYPES lagType)
48 : Relation(RELATION::NewtonEuler, lagType)
49 {
50 }
51
52public:
53
54 NewtonEulerR() : Relation(RELATION::NewtonEuler, RELATION::NonLinearR){};
55
56
57 virtual ~NewtonEulerR(){};
58
59
60
61
62 inline SP::SimpleMatrix jachq() const { return _jachq; }
63
64
65
66 void setJachq(SP::SimpleMatrix newJachq);
67
68 inline SP::SimpleMatrix jachqDot() const { return _jachqDot; }
69 inline SP::SimpleMatrix dotJachq() const
70 {
71 assert(_dotjachq);
72 return _dotjachq;
73 }
74
75 inline SP::SiconosVector secondOrderTimeDerivativeTerms()
76 {
77 assert(_secondOrderTimeDerivativeTerms);
78 return _secondOrderTimeDerivativeTerms;
79 };
80
81 inline SP::SimpleMatrix jachlambda() const { return _jachlambda; }
82 inline SP::SimpleMatrix jacglambda() const { return _jacglambda; }
83 inline void setE(SP::SiconosVector newE) { _e = newE; }
84
85 inline SP::SimpleMatrix jachqT() const { return _jachqT; }
86 inline void setJachqT(SP::SimpleMatrix newJachqT) { _jachqT = newJachqT; }
87 inline SP::SimpleMatrix H() const override{ return _jachqT; }
88
89
90 void setJachqPtr(SP::SimpleMatrix newPtr);
91
92
93 SP::PluggedObject _plugindotjacqh;
94
95
96 SP::SiconosVector _secondOrderTimeDerivativeTerms;
97
98
99 void initialize(Interaction &inter) override;
100
101
102 void checkSize(Interaction &inter) override;
103
104
105 virtual void computeh(double time, const BlockVector &q0, SiconosVector &y);
106
107
108
109 virtual void computeJachlambda(double time, Interaction &inter) { ; }
110
111 virtual void computeJachq(double time, Interaction &inter, SP::BlockVector q0)
112 {
113 ;
114 }
115
116
117 virtual void computeJachqDot(double time, Interaction &inter)
118 {
119
120 assert(0);
121 }
122 virtual void computeDotJachq(double time, const BlockVector &workQ,
123 BlockVector &workZ, const BlockVector &workQdot);
124
125
126 virtual void computeJacglambda(double time, Interaction &inter) { ; }
127
128 virtual void computeJacgq(double time, Interaction &inter) { ; }
129
130 virtual void computeJacgqDot(double time, Interaction &inter) { ; }
131
132
133 virtual void computeJachqT(Interaction &inter, SP::BlockVector q0);
134
135
136 void computeJach(double time, Interaction &inter) override;
137
138
139 void computeJacg(double time, Interaction &inter) override
140 {
141 computeJacgq(time, inter);
142 computeJacgqDot(time, inter);
143 computeJacglambda(time, inter);
144 }
145
146
147 void computeSecondOrderTimeDerivativeTerms(double time, Interaction &inter,
148 VectorOfBlockVectors &DSlink,
149 SP::DynamicalSystem ds1,
150 SP::DynamicalSystem ds2);
151
152
153 void computeOutput(double time, Interaction &inter,
154 unsigned int derivativeNumber = 0) override;
155
156
157 void computeInput(double time, Interaction &inter,
158 unsigned int level = 0) override;
159
160
161 inline SP::SimpleMatrix C() const override { return _jachq; }
162
163 virtual inline SP::SimpleMatrix D() const { return _jachlambda; }
164
165 virtual inline SP::SimpleMatrix B() const { return _jacglambda; }
166
167
168 inline SP::SiconosVector contactForce() const { return _contactForce; };
169
170 void display() const override {}
171
172 ACCEPT_STD_VISITORS();
173};
174#endif