Program listing for file kernel/src/modelingTools/Lagrangian2d3DR.hpp#
Return to documentation for this file
1#ifndef Lagrangian2d3DR_H
2#define Lagrangian2d3DR_H
3
4#include "LagrangianDS.hpp"
5#include "LagrangianScleronomousR.hpp"
6
7using namespace RELATION;
8
9
10class Lagrangian2d3DR : public LagrangianScleronomousR {
11protected:
12
13 ACCEPT_SERIALIZATION(Lagrangian2d3DR);
14
15
16 SP::SiconosVector _Pc1;
17 SP::SiconosVector _Pc2;
18
19
20 SP::SiconosVector _Nc;
21
22
23 SP::SiconosVector _relNc;
24
25
26 SP::SimpleMatrix _RotationAbsToContactFrame;
27
28
29 SP::SimpleMatrix _rotationMatrixAbsToBody;
30
31
32 SP::SimpleMatrix _NPG1;
33 SP::SimpleMatrix _NPG2;
34
35
36 SP::SimpleMatrix _AUX1;
37 SP::SimpleMatrix _AUX2;
38
39
40 void setpc1(SP::SiconosVector npc) { _Pc1 = npc; };
41
42
43 void setpc2(SP::SiconosVector npc) { _Pc2 = npc; };
44
45
46 void setnc(SP::SiconosVector nnc) { _Nc = nnc; };
47
48public:
49
50 bool _isOnContact = false;
51
52
53 Lagrangian2d3DR()
54 : LagrangianScleronomousR(), _Pc1(new SiconosVector(2)),
55 _Pc2(new SiconosVector(2)), _Nc(new SiconosVector(2))
56 {
57
58 }
59
60
61 virtual ~Lagrangian2d3DR() noexcept {};
62
63 void initialize(Interaction &inter) override;
64
65
66 void computeh(const BlockVector &q, BlockVector &z,
67 SiconosVector &y) override;
68
69
70 void computeJachq(const BlockVector &q, BlockVector &z) override;
71
72
73 double distance() const;
74
75 inline SP::SiconosVector pc1() const { return _Pc1; }
76 inline SP::SiconosVector pc2() const { return _Pc2; }
77 inline SP::SiconosVector nc() const { return _Nc; }
78
79 inline SP::SiconosVector relNc() const { return _relNc; }
80
81
82 void setRelNc(SP::SiconosVector nnc) { _relNc = nnc; };
83 void display() const override;
84
85 ACCEPT_STD_VISITORS();
86};
87TYPEDEF_SPTR(Lagrangian2d3DR)
88#endif