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

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

  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