Program listing for file kernel/src/modelingTools/NewtonEuler1DR.hpp#
Return to documentation for this file
1#ifndef NEWTONEULERIMPACT_H
2#define NEWTONEULERIMPACT_H
3
4#include "NewtonEulerDS.hpp"
5#include "NewtonEulerR.hpp"
6
7
8class NewtonEuler1DR : public NewtonEulerR {
9protected:
10 ACCEPT_SERIALIZATION(NewtonEuler1DR);
11
12
13 SP::SiconosVector _Pc1;
14 SP::SiconosVector _Pc2;
15
16
17 SP::SiconosVector _relPc1;
18 SP::SiconosVector _relPc2;
19
20
21 SP::SiconosVector _Nc;
22
23
24 SP::SiconosVector _relNc;
25
26
27 SP::SimpleMatrix _rotationAbsoluteToContactFrame;
28
29
30 SP::SimpleMatrix _rotationBodyToAbsoluteFrame;
31
32
33 SP::SimpleMatrix _NPG1;
34 SP::SimpleMatrix _NPG2;
35
36
37 SP::SimpleMatrix _AUX1;
38 SP::SimpleMatrix _AUX2;
39
40
41 void setpc1(SP::SiconosVector npc) { _Pc1 = npc; };
42
43
44 void setpc2(SP::SiconosVector npc) { _Pc2 = npc; };
45
46
47 void setnc(SP::SiconosVector nnc) { _Nc = nnc; };
48
49private:
50 void NIcomputeJachqTFromContacts(SP::SiconosVector q1);
51 void NIcomputeJachqTFromContacts(SP::SiconosVector q1, SP::SiconosVector q2);
52
53public:
54
55 bool _isOnContact = false;
56
57
58 NewtonEuler1DR()
59 : NewtonEulerR(), _Pc1(new SiconosVector(3)), _Pc2(new SiconosVector(3)),
60 _relPc1(new SiconosVector(3)), _relPc2(new SiconosVector(3)),
61 _Nc(new SiconosVector(3)), _relNc(new SiconosVector(3))
62 {
63
64 }
65
66
67 virtual ~NewtonEuler1DR(){};
68
69 void computeJachq(double time, Interaction &inter,
70 SP::BlockVector q0) override;
71
72 void initialize(Interaction &inter) override;
73
74
75 void computeJachqT(Interaction &inter, SP::BlockVector q0) override;
76
77
78 void computeh(double time, const BlockVector &q0, SiconosVector &y) override;
79
80
81 void computehFromRelativeContactPoints(double time, const BlockVector &q0, SiconosVector &y);
82
83
84 double distance() const;
85
86 inline SP::SiconosVector pc1() const { return _Pc1; }
87 inline SP::SiconosVector pc2() const { return _Pc2; }
88 inline SP::SiconosVector nc() const { return _Nc; }
89
90 inline SP::SiconosVector relPc1() const { return _relPc1; }
91 inline SP::SiconosVector relPc2() const { return _relPc2; }
92 inline SP::SiconosVector relNc() const { return _relNc; }
93
94
95 void setRelPc1(SP::SiconosVector npc) { _relPc1 = npc; };
96
97
98 void setRelPc2(SP::SiconosVector npc) { _relPc2 = npc; };
99
100
101 void setRelNc(SP::SiconosVector nnc) { _relNc = nnc; };
102 void display() const override{}
103
104 ACCEPT_STD_VISITORS();
105};
106#endif