Program listing for file mechanics/src/joints/CouplerJointR.hpp#
Return to documentation for this file
1#ifndef CouplerJointRELATION_H
2#define CouplerJointRELATION_H
3
4#include <MechanicsFwd.hpp>
5#include <SiconosFwd.hpp>
6#include <NewtonEulerR.hpp>
7#include <NewtonEulerJointR.hpp>
8#include <Tools.hpp>
9
10
11class CouplerJointR : public NewtonEulerJointR
12{
13protected:
14
15 ACCEPT_SERIALIZATION(CouplerJointR);
16
17 SP::NewtonEulerJointR _joint1, _joint2;
18 SP::SiconosVector _ref1, _ref2;
19
20 unsigned int _dof1, _dof2;
21 unsigned int _ref1_index, _ref2_index;
22 double _ratio, _offset;
23
24
25 virtual void _normalDoF(SiconosVector& ans, const BlockVector& q0, int axis,
26 bool absoluteRef=true);
27
28
29 void makeBlockVectors(SP::SiconosVector q1, SP::SiconosVector q2,
30 BlockVector& q01, BlockVector& q02);
31
32public:
33
34
35 CouplerJointR();
36
37
38 CouplerJointR(SP::NewtonEulerJointR joint1, unsigned int dof1,
39 SP::NewtonEulerJointR joint2, unsigned int dof2,
40 double ratio,
41 SP::SiconosVector ref1=SP::SiconosVector(), unsigned int ref1_index=0,
42 SP::SiconosVector ref2=SP::SiconosVector(), unsigned int ref2_index=0);
43
44
45 CouplerJointR(SP::NewtonEulerJointR joint1, unsigned int dof1,
46 SP::NewtonEulerJointR joint2, unsigned int dof2,
47 double ratio,
48 SP::NewtonEulerDS refds1, unsigned int ref1_index,
49 SP::NewtonEulerDS refds2, unsigned int ref2_index);
50
51
52 virtual void computeh(double time, const BlockVector& q0, SiconosVector& y);
53
54 virtual void computeJachq(double time, Interaction& inter, SP::BlockVector q0);
55
56
57 unsigned int dof1() { return _dof1; }
58
59
60 unsigned int dof2() { return _dof2; }
61
62
63 SP::NewtonEulerJointR joint1() { return _joint1; }
64
65
66 SP::NewtonEulerJointR joint2() { return _joint2; }
67
68
69 void setReferences(SP::NewtonEulerJointR joint1, unsigned int dof1,
70 SP::NewtonEulerJointR joint2, unsigned int dof2,
71 SP::SiconosVector ref1, unsigned int ref1_index,
72 SP::SiconosVector ref2, unsigned int ref2_index);
73
74
75 void setReferences(SP::NewtonEulerJointR joint1, unsigned int dof1,
76 SP::NewtonEulerJointR joint2, unsigned int dof2,
77 SP::NewtonEulerDS refds1, unsigned int ref1_index,
78 SP::NewtonEulerDS refds2, unsigned int ref2_index);
79
80
81 void setRatio(double ratio);
82
83
84 void setBasePositions(SP::SiconosVector q1,
85 SP::SiconosVector q2=SP::SiconosVector());
86
87
88 virtual unsigned int numberOfConstraints() { return 1; }
89
90
91 virtual unsigned int numberOfDoF() { return 1; }
92
93
94 virtual DoF_Type typeOfDoF(unsigned int axis) {
95 if (axis<1) return DOF_TYPE_LINEAR;
96 else return DOF_TYPE_INVALID;
97 };
98
99
100 virtual void computehDoF(double time, const BlockVector& q0, SiconosVector& y,
101 unsigned int axis);
102
103
104 virtual void computeJachqDoF(double time, Interaction& inter,
105 SP::BlockVector q0, SimpleMatrix& jachq,
106 unsigned int axis);
107
108
109 virtual ~CouplerJointR() {};
110};
111#endif