Program listing for file mechanics/src/joints/CouplerJointR.hpp

Program listing for file mechanics/src/joints/CouplerJointR.hpp#

  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