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

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

  1#ifndef NEWTONEULERRELATION_H
  2#define NEWTONEULERRELATION_H
  3
  4#include "PluginTypes.hpp"
  5#include "Relation.hpp"
  6
  7
  8
  9class NewtonEulerR : public Relation {
 10public:
 11
 12  enum NewtonEulerRDS { z, q0, velocity, dotq, p0, p1, p2, DSlinkSize };
 13
 14protected:
 15
 16  ACCEPT_SERIALIZATION(NewtonEulerR);
 17
 18
 19
 20
 21
 22  SP::SimpleMatrix _jachq;
 23
 24
 25  SP::SimpleMatrix _jachqDot;
 26
 27
 28  SP::SimpleMatrix _dotjachq;
 29
 30  SP::SimpleMatrix _jachlambda;
 31  SP::SimpleMatrix _jacglambda;
 32
 33
 34  SP::SiconosVector _e;
 35
 36
 37
 38  SP::SiconosVector _contactForce;
 39
 40
 41  SP::SimpleMatrix _jachqT;
 42
 43
 44  SP::SimpleMatrix _T;
 45
 46
 47  NewtonEulerR(RELATION::SUBTYPES lagType)
 48      : Relation(RELATION::NewtonEuler, lagType)
 49  {
 50  }
 51
 52public:
 53
 54  NewtonEulerR() : Relation(RELATION::NewtonEuler, RELATION::NonLinearR){};
 55
 56
 57  virtual ~NewtonEulerR(){};
 58
 59
 60
 61
 62  inline SP::SimpleMatrix jachq() const { return _jachq; }
 63
 64
 65
 66  void setJachq(SP::SimpleMatrix newJachq);
 67
 68  inline SP::SimpleMatrix jachqDot() const { return _jachqDot; }
 69  inline SP::SimpleMatrix dotJachq() const
 70  {
 71    assert(_dotjachq);
 72    return _dotjachq;
 73  }
 74
 75  inline SP::SiconosVector secondOrderTimeDerivativeTerms()
 76  {
 77    assert(_secondOrderTimeDerivativeTerms);
 78    return _secondOrderTimeDerivativeTerms;
 79  };
 80
 81  inline SP::SimpleMatrix jachlambda() const { return _jachlambda; }
 82  inline SP::SimpleMatrix jacglambda() const { return _jacglambda; }
 83  inline void setE(SP::SiconosVector newE) { _e = newE; }
 84
 85  inline SP::SimpleMatrix jachqT() const { return _jachqT; }
 86  inline void setJachqT(SP::SimpleMatrix newJachqT) { _jachqT = newJachqT; }
 87  inline SP::SimpleMatrix H() const  override{ return _jachqT; }
 88
 89
 90  void setJachqPtr(SP::SimpleMatrix newPtr);
 91
 92
 93  SP::PluggedObject _plugindotjacqh;
 94
 95
 96  SP::SiconosVector _secondOrderTimeDerivativeTerms;
 97
 98
 99  void initialize(Interaction &inter) override;
100
101
102  void checkSize(Interaction &inter) override;
103
104
105  virtual void computeh(double time, const BlockVector &q0, SiconosVector &y);
106
107
108
109  virtual void computeJachlambda(double time, Interaction &inter) { ; }
110
111  virtual void computeJachq(double time, Interaction &inter, SP::BlockVector q0)
112  {
113    ;
114  }
115
116
117  virtual void computeJachqDot(double time, Interaction &inter)
118  {
119
120    assert(0);
121  }
122  virtual void computeDotJachq(double time, const BlockVector &workQ,
123                               BlockVector &workZ, const BlockVector &workQdot);
124
125
126  virtual void computeJacglambda(double time, Interaction &inter) { ; }
127
128  virtual void computeJacgq(double time, Interaction &inter) { ; }
129
130  virtual void computeJacgqDot(double time, Interaction &inter) { ; }
131
132
133  virtual void computeJachqT(Interaction &inter, SP::BlockVector q0);
134
135
136  void computeJach(double time, Interaction &inter) override;
137
138
139  void computeJacg(double time, Interaction &inter) override
140  {
141    computeJacgq(time, inter);
142    computeJacgqDot(time, inter);
143    computeJacglambda(time, inter);
144  }
145
146
147  void computeSecondOrderTimeDerivativeTerms(double time, Interaction &inter,
148                                             VectorOfBlockVectors &DSlink,
149                                             SP::DynamicalSystem ds1,
150                                             SP::DynamicalSystem ds2);
151
152
153  void computeOutput(double time, Interaction &inter,
154                     unsigned int derivativeNumber = 0) override;
155
156
157  void computeInput(double time, Interaction &inter,
158                    unsigned int level = 0) override;
159
160
161  inline SP::SimpleMatrix C() const override { return _jachq; }
162
163  virtual inline SP::SimpleMatrix D() const { return _jachlambda; }
164
165  virtual inline SP::SimpleMatrix B() const { return _jacglambda; }
166
167
168  inline SP::SiconosVector contactForce() const { return _contactForce; };
169
170  void display() const override {}
171
172  ACCEPT_STD_VISITORS();
173};
174#endif