Program listing for file kernel/src/modelingTools/Lagrangian2d3DR.hpp

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

 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