MBDyn-1.7.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups
genj.h
Go to the documentation of this file.
1 /* $Header: /var/cvs/mbdyn/mbdyn/mbdyn-1.0/mbdyn/struct/genj.h,v 1.59 2017/05/12 17:29:26 morandini Exp $ */
2 /*
3  * MBDyn (C) is a multibody analysis code.
4  * http://www.mbdyn.org
5  *
6  * Copyright (C) 1996-2017
7  *
8  * Pierangelo Masarati <masarati@aero.polimi.it>
9  * Paolo Mantegazza <mantegazza@aero.polimi.it>
10  *
11  * Dipartimento di Ingegneria Aerospaziale - Politecnico di Milano
12  * via La Masa, 34 - 20156 Milano, Italy
13  * http://www.aero.polimi.it
14  *
15  * Changing this copyright notice is forbidden.
16  *
17  * This program is free software; you can redistribute it and/or modify
18  * it under the terms of the GNU General Public License as published by
19  * the Free Software Foundation (version 2 of the License).
20  *
21  *
22  * This program is distributed in the hope that it will be useful,
23  * but WITHOUT ANY WARRANTY; without even the implied warranty of
24  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25  * GNU General Public License for more details.
26  *
27  * You should have received a copy of the GNU General Public License
28  * along with this program; if not, write to the Free Software
29  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
30  */
31 
32 /* Vincoli generali */
33 
34 
35 #ifndef GENJ_H
36 #define GENJ_H
37 
38 #include "joint.h"
39 #include "drive.h"
40 
41 #ifndef MBDYN_X_DISTANCE_JOINT
42 /* DistanceJoint - begin */
43 
44 class DistanceJoint : virtual public Elem, public Joint, public DriveOwner {
45  private:
48  mutable Vec3 v;
50 
51  public:
52  /* Costruttore non banale */
53  DistanceJoint(unsigned int uL, const DofOwner* pDO,
54  const StructDispNode* pN1, const StructDispNode* pN2,
55  const DriveCaller* pDC, flag fOut);
56 
57  ~DistanceJoint(void);
58 
59  /* Tipo di Joint */
60  virtual Joint::Type GetJointType(void) const {
61  return Joint::DISTANCE;
62  };
63 
64  /* Contributo al file di restart */
65  virtual std::ostream& Restart(std::ostream& out) const;
66 
67  virtual unsigned int iGetNumDof(void) const {
68  return 4;
69  };
70  virtual DofOrder::Order GetDofType(unsigned int i) const
71  {
72  ASSERT(i >= 0 && i < 4);
73  return DofOrder::ALGEBRAIC;
74  };
75 
76  virtual DofOrder::Order GetEqType(unsigned int i) const
77  {
79  };
80 
81  virtual void WorkSpaceDim(integer* piNumRows, integer* piNumCols) const
82  { *piNumRows = 10; *piNumCols = 10; };
83 
85  doublereal dCoef,
86  const VectorHandler& XCurr,
87  const VectorHandler& XPrimeCurr);
89  doublereal dCoef,
90  const VectorHandler& XCurr,
91  const VectorHandler& XPrimeCurr);
92 
93  virtual void Output(OutputHandler& OH) const;
94 
95 
96  /* funzioni usate nell'assemblaggio iniziale */
97 
98  virtual unsigned int iGetInitialNumDof(void) const { return 8; };
99  virtual void InitialWorkSpaceDim(integer* piNumRows,
100  integer* piNumCols) const
101  { *piNumRows = 20; *piNumCols = 20; };
102 
103  /* Contributo allo jacobiano durante l'assemblaggio iniziale */
105  const VectorHandler& XCurr);
106 
107  /* Contributo al residuo durante l'assemblaggio iniziale */
109  const VectorHandler& XCurr);
110 
111  /* Setta il valore iniziale delle proprie variabili */
112  virtual void SetInitialValue(VectorHandler& X);
113  virtual void SetValue(DataManager *pDM,
115  SimulationEntity::Hints *ph = 0);
116 
117  /* Dati privati */
118  virtual unsigned int iGetNumPrivData(void) const;
119  virtual unsigned int iGetPrivDataIdx(const char *s) const;
120  virtual doublereal dGetPrivData(unsigned int i) const;
121 
122  /* *******PER IL SOLUTORE PARALLELO******** */
123  /* Fornisce il tipo e la label dei nodi che sono connessi all'elemento
124  utile per l'assemblaggio della matrice di connessione fra i dofs */
125  virtual void GetConnectedNodes(std::vector<const Node *>& connectedNodes) const {
126  connectedNodes.resize(2);
127  connectedNodes[0] = pNode1;
128  connectedNodes[1] = pNode2;
129  };
130  /* ************************************************ */
131 
132 };
133 
134 /* DistanceJoint - end */
135 
136 
137 /* DistanceJointWithOffset - begin */
138 
140 virtual public Elem, public Joint, public DriveOwner {
141  private:
146  mutable Vec3 v;
148 
149  public:
150  /* Costruttore non banale */
151  DistanceJointWithOffset(unsigned int uL, const DofOwner* pDO,
152  const StructNode* pN1, const StructNode* pN2,
153  const Vec3& f1Tmp, const Vec3& f2Tmp,
154  const DriveCaller* pDC, flag fOut);
155 
157 
158  /* Tipo di Joint */
159  virtual Joint::Type GetJointType(void) const {
161  };
162 
163  /* Contributo al file di restart */
164  virtual std::ostream& Restart(std::ostream& out) const;
165 
166  virtual unsigned int iGetNumDof(void) const {
167  return 4;
168  };
169 
170  virtual DofOrder::Order GetDofType(unsigned int i) const
171  {
172  ASSERT(i >= 0 && i < 4);
173  return DofOrder::ALGEBRAIC;
174  };
175 
176  virtual DofOrder::Order GetEqType(unsigned int i) const
177  {
178  return DofOrder::DIFFERENTIAL;
179  };
180 
181  virtual void WorkSpaceDim(integer* piNumRows, integer* piNumCols) const {
182  *piNumRows = 16;
183  *piNumCols = 16;
184  };
185 
187  doublereal dCoef,
188  const VectorHandler& XCurr,
189  const VectorHandler& XPrimeCurr);
191  doublereal dCoef,
192  const VectorHandler& XCurr,
193  const VectorHandler& XPrimeCurr);
194 
195  virtual void Output(OutputHandler& OH) const;
196 
197 
198  /* funzioni usate nell'assemblaggio iniziale */
199 
200  virtual unsigned int iGetInitialNumDof(void) const { return 8; };
201  virtual void InitialWorkSpaceDim(integer* piNumRows,
202  integer* piNumCols) const
203  { *piNumRows = 32; *piNumCols = 32; };
204 
205  /* Contributo allo jacobiano durante l'assemblaggio iniziale */
207  const VectorHandler& XCurr);
208 
209  /* Contributo al residuo durante l'assemblaggio iniziale */
211  const VectorHandler& XCurr);
212 
213  /* Setta il valore iniziale delle proprie variabili */
214  virtual void SetInitialValue(VectorHandler& X);
215  virtual void SetValue(DataManager *pDM,
217  SimulationEntity::Hints *ph = 0);
218 
219  /* Dati privati */
220  virtual unsigned int iGetNumPrivData(void) const;
221  virtual unsigned int iGetPrivDataIdx(const char *s) const;
222  virtual doublereal dGetPrivData(unsigned int i) const;
223 
224  /* *******PER IL SOLUTORE PARALLELO******** */
225  /* Fornisce il tipo e la label dei nodi che sono connessi all'elemento
226  utile per l'assemblaggio della matrice di connessione fra i dofs */
227  virtual void GetConnectedNodes(std::vector<const Node *>& connectedNodes) const {
228  connectedNodes.resize(2);
229  connectedNodes[0] = pNode1;
230  connectedNodes[1] = pNode2;
231  };
232  /* ************************************************ */
233 
234 };
235 
236 /* DistanceJointWithOffset - end */
237 #endif
238 
239 
240 /* ClampJoint - begin */
241 
242 class ClampJoint : virtual public Elem, public Joint {
243  private:
244  const StructNode* pNode; /* nodo incastrato */
245  Vec3 XClamp; /* posizione imposta */
246  Mat3x3 RClamp; /* assetto imposto */
247  Vec3 F; /* forza di reazione */
248  Vec3 M; /* momento di reazione */
249 
250  public:
251  /* Costruttore definitivo (da mettere a punto) */
252  ClampJoint(unsigned int uL, const DofOwner*pD, const StructNode* pN,
253  const Vec3& X0, const Mat3x3& R0, flag fOut);
254 
255  /* Distruttore + o - banale */
256  virtual ~ClampJoint(void);
257 
258  /* Tipo di Joint */
259  virtual Joint::Type GetJointType(void) const {
260  return Joint::CLAMP;
261  };
262 
263  /*Funzione che legge lo stato iniziale dal file di input*/
264  void ReadInitialState(MBDynParser& HP);
265 
266  /* Contributo al file di restart */
267  virtual std::ostream& Restart(std::ostream& out) const;
268 
269  /* Funzioni obbligatorie, per la gestione dei dof */
270  virtual unsigned int iGetNumDof(void) const {
271  return 6;
272  };
273  virtual std::ostream& DescribeDof(std::ostream& out,
274  const char *prefix = "",
275  bool bInitial = false) const;
276  virtual void DescribeDof(std::vector<std::string>& desc,
277  bool bInitial = false, int i = -1) const;
278  virtual std::ostream& DescribeEq(std::ostream& out,
279  const char *prefix = "",
280  bool bInitial = false) const;
281  virtual void DescribeEq(std::vector<std::string>& desc,
282  bool bInitial = false, int i = -1) const;
283  virtual DofOrder::Order GetDofType(unsigned int i) const
284  {
285  ASSERT(i >= 0 && i < 6);
286  return DofOrder::ALGEBRAIC;
287  };
288 
289  virtual DofOrder::Order GetEqType(unsigned int i) const {
290  ASSERT(i >= 0 && i < iGetNumDof());
291  return DofOrder::ALGEBRAIC;
292  }
293 
294  virtual void WorkSpaceDim(integer* piNumRows, integer* piNumCols) const
295  { *piNumRows = 12; *piNumCols = 12; };
296 
297  /* Assemblaggio matrice jacobiana */
299  doublereal dCoef,
300  const VectorHandler& XCurr,
301  const VectorHandler& XPrimeCurr);
302 
303 
304  /* Inverse Dynamics: AssJac() */
306  const VectorHandler& XCurr);
307 
308  /* assemblaggio matrici per autovalori */
309  void AssMats(VariableSubMatrixHandler& WorkMatA,
310  VariableSubMatrixHandler& WorkMatB,
311  const VectorHandler& XCurr,
312  const VectorHandler& XPrimeCurr);
313 
314  /* Assemblaggio residuo */
316  doublereal dCoef,
317  const VectorHandler& XCurr,
318  const VectorHandler& XPrimeCurr);
319 
320  /* inverse dynamics capable element */
321  virtual bool bInverseDynamics(void) const;
322 
323  /* Inverse Dynamics: AssRes */
325  const VectorHandler& XCurr,
326  const VectorHandler& XPrimeCurr,
327  const VectorHandler& XPrimePrimeCurr,
329 
330  /* Inverse Dynamics update */
332 
333  virtual void Output(OutputHandler& OH) const;
334 
335 
336  /* funzioni usate nell'assemblaggio iniziale */
337 
338  virtual unsigned int iGetInitialNumDof(void) const { return 12; };
339  virtual void InitialWorkSpaceDim(integer* piNumRows,
340  integer* piNumCols) const
341  { *piNumRows = 24; *piNumCols = 24; };
342 
343  /* Contributo allo jacobiano durante l'assemblaggio iniziale */
345  const VectorHandler& XCurr);
346 
347  /* Contributo al residuo durante l'assemblaggio iniziale */
349  const VectorHandler& XCurr);
350 
351  virtual void SetValue(DataManager *pDM,
353  SimulationEntity::Hints *ph = 0);
354  /* Metodi per l'estrazione di dati "privati".
355  * Si suppone che l'estrattore li sappia interpretare.
356  * Come default non ci sono dati privati estraibili */
357  virtual unsigned int iGetNumPrivData(void) const;
358  virtual unsigned int iGetPrivDataIdx(const char *s) const;
359  virtual doublereal dGetPrivData(unsigned int i) const;
360 
361  /* *******PER IL SOLUTORE PARALLELO******** */
362  /* Fornisce il tipo e la label dei nodi che sono connessi all'elemento
363  utile per l'assemblaggio della matrice di connessione fra i dofs */
364  virtual void GetConnectedNodes(std::vector<const Node *>& connectedNodes) const {
365  connectedNodes.resize(1);
366  connectedNodes[0] = pNode;
367  };
368  /* ************************************************ */
369 };
370 
371 /* ClampJoint - end */
372 
373 #endif /* GENJ_H */
VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Definition: genj.cc:111
void AssMats(VariableSubMatrixHandler &WorkMatA, VariableSubMatrixHandler &WorkMatB, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Definition: genj.cc:1433
Mat3x3 RClamp
Definition: genj.h:246
Type
Definition: joint.h:66
virtual void Output(OutputHandler &OH) const
Definition: genj.cc:268
SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
Definition: genj.cc:1604
SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
Definition: genj.cc:1046
SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Definition: genj.cc:796
SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Definition: genj.cc:202
long int flag
Definition: mbdyn.h:43
VariableSubMatrixHandler & InitialAssJac(VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
Definition: genj.cc:1557
virtual std::ostream & Restart(std::ostream &out) const
Definition: genj.cc:669
virtual void GetConnectedNodes(std::vector< const Node * > &connectedNodes) const
Definition: genj.h:227
Definition: matvec3.h:98
virtual doublereal dGetPrivData(unsigned int i) const
Definition: genj.cc:88
virtual unsigned int iGetPrivDataIdx(const char *s) const
Definition: genj.cc:76
virtual std::ostream & Restart(std::ostream &out) const
Definition: genj.cc:100
const StructNode * pNode
Definition: genj.h:244
virtual void SetValue(DataManager *pDM, VectorHandler &X, VectorHandler &XP, SimulationEntity::Hints *ph=0)
Definition: genj.cc:547
virtual DofOrder::Order GetDofType(unsigned int i) const
Definition: genj.h:170
~DistanceJoint(void)
Definition: genj.cc:62
virtual DofOrder::Order GetEqType(unsigned int i) const
Definition: genj.h:76
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: genj.h:81
virtual unsigned int iGetInitialNumDof(void) const
Definition: genj.h:200
virtual std::ostream & DescribeDof(std::ostream &out, const char *prefix="", bool bInitial=false) const
Definition: genj.cc:1231
virtual unsigned int iGetInitialNumDof(void) const
Definition: genj.h:338
virtual Joint::Type GetJointType(void) const
Definition: genj.h:60
doublereal dAlpha
Definition: genj.h:49
std::vector< Hint * > Hints
Definition: simentity.h:89
Vec3 XClamp
Definition: genj.h:245
virtual DofOrder::Order GetEqType(unsigned int i) const
Definition: genj.h:176
virtual unsigned int iGetPrivDataIdx(const char *s) const
Definition: genj.cc:1673
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: genj.h:201
Vec3 F
Definition: genj.h:247
virtual void SetInitialValue(VectorHandler &X)
Definition: genj.cc:1116
virtual unsigned int iGetNumDof(void) const
Definition: genj.h:270
virtual unsigned int iGetPrivDataIdx(const char *s) const
Definition: genj.cc:644
virtual unsigned int iGetInitialNumDof(void) const
Definition: genj.h:98
VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Definition: genj.cc:1378
const StructNode * pNode1
Definition: genj.h:142
void Update(const VectorHandler &XCurr, InverseDynamics::Order iOrder=InverseDynamics::INVERSE_DYNAMICS)
Definition: genj.cc:1533
DistanceJointWithOffset(unsigned int uL, const DofOwner *pDO, const StructNode *pN1, const StructNode *pN2, const Vec3 &f1Tmp, const Vec3 &f2Tmp, const DriveCaller *pDC, flag fOut)
Definition: genj.cc:608
const StructDispNode * pNode1
Definition: genj.h:46
virtual Joint::Type GetJointType(void) const
Definition: genj.h:259
const StructNode * pNode2
Definition: genj.h:143
SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
Definition: genj.cc:447
virtual bool bInverseDynamics(void) const
Definition: genj.cc:1489
ClampJoint(unsigned int uL, const DofOwner *pD, const StructNode *pN, const Vec3 &X0, const Mat3x3 &R0, flag fOut)
Definition: genj.cc:1212
virtual unsigned int iGetNumDof(void) const
Definition: genj.h:67
Vec3 v
Definition: genj.h:48
virtual ~ClampJoint(void)
Definition: genj.cc:1224
virtual void SetValue(DataManager *pDM, VectorHandler &X, VectorHandler &XP, SimulationEntity::Hints *ph=0)
Definition: genj.cc:1151
VariableSubMatrixHandler & InitialAssJac(VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
Definition: genj.cc:878
virtual unsigned int iGetNumPrivData(void) const
Definition: genj.cc:638
SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Definition: genj.cc:1447
~DistanceJointWithOffset(void)
Definition: genj.cc:631
#define ASSERT(expression)
Definition: colamd.c:977
DistanceJoint(unsigned int uL, const DofOwner *pDO, const StructDispNode *pN1, const StructDispNode *pN2, const DriveCaller *pDC, flag fOut)
Definition: genj.cc:49
virtual unsigned int iGetNumPrivData(void) const
Definition: genj.cc:1667
Vec3 M
Definition: genj.h:248
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: genj.h:339
virtual Joint::Type GetJointType(void) const
Definition: genj.h:159
virtual DofOrder::Order GetEqType(unsigned int i) const
Definition: genj.h:289
virtual std::ostream & DescribeEq(std::ostream &out, const char *prefix="", bool bInitial=false) const
Definition: genj.cc:1302
const StructDispNode * pNode2
Definition: genj.h:47
VariableSubMatrixHandler & InitialAssJac(VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
Definition: genj.cc:290
Definition: elem.h:75
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: genj.h:181
virtual void Output(OutputHandler &OH) const
Definition: genj.cc:1545
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: genj.h:294
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: genj.h:99
doublereal dAlpha
Definition: genj.h:147
virtual DofOrder::Order GetDofType(unsigned int i) const
Definition: genj.h:70
virtual void SetValue(DataManager *pDM, VectorHandler &X, VectorHandler &XP, SimulationEntity::Hints *ph=0)
Definition: genj.cc:1654
Definition: joint.h:50
void ReadInitialState(MBDynParser &HP)
Definition: genj.cc:1360
double doublereal
Definition: colamd.c:52
virtual void Output(OutputHandler &OH) const
Definition: genj.cc:859
virtual std::ostream & Restart(std::ostream &out) const
Definition: genj.cc:1368
long int integer
Definition: colamd.c:51
virtual void GetConnectedNodes(std::vector< const Node * > &connectedNodes) const
Definition: genj.h:125
virtual unsigned int iGetNumDof(void) const
Definition: genj.h:166
VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Definition: genj.cc:684
virtual void SetInitialValue(VectorHandler &X)
Definition: genj.cc:521
virtual doublereal dGetPrivData(unsigned int i) const
Definition: genj.cc:656
virtual DofOrder::Order GetDofType(unsigned int i) const
Definition: genj.h:283
virtual void GetConnectedNodes(std::vector< const Node * > &connectedNodes) const
Definition: genj.h:364
virtual unsigned int iGetNumPrivData(void) const
Definition: genj.cc:70
virtual doublereal dGetPrivData(unsigned int i) const
Definition: genj.cc:1716