MBDyn-1.7.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups
vehj4.h
Go to the documentation of this file.
1 /* $Header: /var/cvs/mbdyn/mbdyn/mbdyn-1.0/mbdyn/struct/vehj4.h,v 1.11 2017/01/12 14:46:44 masarati 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 /* Deformable hinges */
33 
34 
35 #ifndef VEHJ4_H
36 #define VEHJ4_H
37 
38 #include "joint.h"
39 #include "constltp.h"
40 
41 extern const char* psConstLawNames[];
42 
43 /* DeformableAxialJoint - begin */
44 
46 virtual public Elem, public Joint, public ConstitutiveLaw1DOwner {
47 protected:
50  mutable Mat3x3 tilde_R1h;
51  mutable Mat3x3 tilde_R2h;
52 
53  bool bFirstRes;
54 
56 
57  // from constitutive law
59 
62 
63  // after aggregation
65 
68 
69  /* Jacobian matrix helpers */
70  virtual void
72 
73  void
75 
76  virtual void
78  FullSubMatrixHandler& WMB, doublereal dCoef);
79 
80  virtual void AfterPredict(void) = 0;
81 
82 public:
83  /* Costruttore non banale */
84  DeformableAxialJoint(unsigned int uL,
85  const DofOwner* pDO,
86  const ConstitutiveLaw1D* pCL,
87  const StructNode* pN1,
88  const StructNode* pN2,
89  const Mat3x3& tilde_R1h,
90  const Mat3x3& tilde_R2h,
91  flag fOut);
92 
93  /* Distruttore */
94  virtual ~DeformableAxialJoint(void);
95 
96  /* Tipo di Joint */
97  virtual Joint::Type GetJointType(void) const {
99  };
100 
101  /* Contributo al file di restart */
102  virtual std::ostream& Restart(std::ostream& out) const;
103 
104  virtual void Output(OutputHandler& OH) const;
105 
106  /* Aggiorna le deformazioni ecc. */
107  virtual void AfterPredict(VectorHandler& X, VectorHandler& XP);
108 
109  void SetValue(DataManager *pDM,
111  SimulationEntity::Hints *ph = 0);
112  virtual void SetInitialValue(VectorHandler& /* X */ );
113 
114  /* inverse dynamics capable element */
115  virtual bool bInverseDynamics(void) const;
116 
117  virtual Hint *
118  ParseHint(DataManager *pDM, const char *s) const;
119 
120  /* Tipo di DeformableHinge */
121  virtual ConstLawType::Type GetConstLawType(void) const = 0;
122 
123  virtual unsigned int iGetNumDof(void) const {
124  return 0;
125  };
126 
127  virtual void
128  WorkSpaceDim(integer* piNumRows, integer* piNumCols) const {
129  *piNumRows = 6;
130  *piNumCols = 6;
131  };
132 
133  /* funzioni usate nell'assemblaggio iniziale */
134 
135  virtual unsigned int iGetInitialNumDof(void) const {
136  return 0;
137  };
138 
139  /* *******PER IL SOLUTORE PARALLELO******** */
140  /* Fornisce il tipo e la label dei nodi che sono connessi all'elemento
141  * utile per l'assemblaggio della matrice di connessione fra i dofs */
142  virtual void GetConnectedNodes(std::vector<const Node *>& connectedNodes) const {
143  connectedNodes.resize(2);
144  connectedNodes[0] = pNode1;
145  connectedNodes[1] = pNode2;
146  };
147  /* ************************************************ */
148 
149  virtual unsigned int iGetNumPrivData(void) const;
150  virtual unsigned int iGetPrivDataIdx(const char *s) const;
151  virtual doublereal dGetPrivData(unsigned int i) const;
152 };
153 
154 /* DeformableAxialJoint - end */
155 
156 
157 /* ElasticAxialJoint - begin */
158 
159 class ElasticAxialJoint : virtual public Elem, public DeformableAxialJoint {
160 protected:
163 
164  virtual void AfterPredict(void);
165  virtual void AssMat(FullSubMatrixHandler& WM, doublereal dCoef);
166  virtual void AssVec(SubVectorHandler& WorkVec);
167 
168 public:
169  ElasticAxialJoint(unsigned int uL,
170  const DofOwner* pDO,
171  const ConstitutiveLaw1D* pCL,
172  const StructNode* pN1,
173  const StructNode* pN2,
174  const Mat3x3& tilde_R1h,
175  const Mat3x3& tilde_R2h,
176  flag fOut);
177 
178  virtual ~ElasticAxialJoint(void);
179 
180  virtual void
181  AfterConvergence(const VectorHandler& X, const VectorHandler& XP);
182 
183  /* Tipo di DeformableHinge */
184  virtual ConstLawType::Type GetConstLawType(void) const {
185  return ConstLawType::ELASTIC;
186  };
187 
188 #ifdef MBDYN_X_WORKAROUND_GCC_3_2
189  virtual void SetValue(DataManager *pDM,
191  SimulationEntity::Hints *ph = 0)
192  {
193  DeformableAxialJoint::SetValue(pDM, X, XP, ph);
194  };
195 
196  virtual Hint *
197  ParseHint(DataManager *pDM, const char *s) const
198  {
199  return DeformableAxialJoint::ParseHint(pDM, s);
200  };
201 #endif /* MBDYN_X_WORKAROUND_GCC_3_2 */
202 
203  /* assemblaggio jacobiano */
204  virtual VariableSubMatrixHandler&
206  doublereal dCoef,
207  const VectorHandler& XCurr,
208  const VectorHandler& XPrimeCurr);
209 
210  /* assemblaggio jacobiano */
211  virtual void
213  VariableSubMatrixHandler& WorkMatB,
214  const VectorHandler& XCurr,
215  const VectorHandler& XPrimeCurr);
216 
217  /* assemblaggio residuo */
218  virtual SubVectorHandler&
219  AssRes(SubVectorHandler& WorkVec,
220  doublereal dCoef,
221  const VectorHandler& XCurr,
222  const VectorHandler& XPrimeCurr);
223 
224  /* Inverse Dynamics Jacobian matrix assembly */
227  const VectorHandler& XCurr);
228 
229  /* Inverse Dynamics residual assembly */
231  AssRes(SubVectorHandler& WorkVec,
232  const VectorHandler& XCurr,
233  const VectorHandler& XPrimeCurr,
234  const VectorHandler& XPrimePrimeCurr,
236 
237  /* Inverse Dynamics update */
239 
240  virtual void AfterConvergence(const VectorHandler& X,
241  const VectorHandler& XP,
242  const VectorHandler& XPP);
243 
244  virtual void InitialWorkSpaceDim(integer* piNumRows,
245  integer* piNumCols) const {
246  *piNumRows = 6;
247  *piNumCols = 6;
248  };
249 
250  /* Contributo allo jacobiano durante l'assemblaggio iniziale */
251  virtual VariableSubMatrixHandler&
253  const VectorHandler& XCurr);
254 
255  /* Contributo al residuo durante l'assemblaggio iniziale */
256  virtual SubVectorHandler&
257  InitialAssRes(SubVectorHandler& WorkVec, const VectorHandler& XCurr);
258 
259 #if 0
260  virtual unsigned int iGetNumPrivData(void) const {
262  };
263 
264  virtual unsigned int iGetPrivDataIdx(const char *s) const {
266  };
267 
268  virtual doublereal dGetPrivData(unsigned int i) const {
270  };
271 #endif
272 };
273 
274 /* ElasticAxialJoint - end */
275 
276 
277 /* ViscousAxialJoint - begin */
278 
279 class ViscousAxialJoint : virtual public Elem, public DeformableAxialJoint {
280 protected:
282 
283  virtual void AfterPredict(void);
284  virtual void AssMats(FullSubMatrixHandler& WMA,
286  doublereal dCoef);
287  virtual void AssVec(SubVectorHandler& WorkVec);
288 
289 public:
290  ViscousAxialJoint(unsigned int uL,
291  const DofOwner* pDO,
292  const ConstitutiveLaw1D* pCL,
293  const StructNode* pN1,
294  const StructNode* pN2,
295  const Mat3x3& tilde_R1h,
296  const Mat3x3& tilde_R2h,
297  flag fOut);
298 
299  virtual ~ViscousAxialJoint(void);
300 
301  virtual void
302  AfterConvergence(const VectorHandler& X, const VectorHandler& XP);
303 
304  /* Tipo di DeformableHinge */
305  virtual ConstLawType::Type GetConstLawType(void) const {
306  return ConstLawType::VISCOUS;
307  };
308 
309 #ifdef MBDYN_X_WORKAROUND_GCC_3_2
310  virtual void SetValue(DataManager *pDM,
312  SimulationEntity::Hints *ph = 0)
313  {
314  DeformableAxialJoint::SetValue(pDM, X, XP, ph);
315  };
316 
317  virtual Hint *
318  ParseHint(DataManager *pDM, const char *s) const
319  {
320  return DeformableAxialJoint::ParseHint(pDM, s);
321  };
322 #endif /* MBDYN_X_WORKAROUND_GCC_3_2 */
323 
324  /* assemblaggio jacobiano */
325  virtual VariableSubMatrixHandler&
327  doublereal dCoef,
328  const VectorHandler& XCurr,
329  const VectorHandler& XPrimeCurr);
330 
331  /* assemblaggio jacobiano */
332  virtual void
334  VariableSubMatrixHandler& WorkMatB,
335  const VectorHandler& XCurr,
336  const VectorHandler& XPrimeCurr);
337 
338  /* assemblaggio residuo */
339  virtual SubVectorHandler&
340  AssRes(SubVectorHandler& WorkVec,
341  doublereal dCoef,
342  const VectorHandler& XCurr,
343  const VectorHandler& XPrimeCurr);
344 
345  /* Inverse Dynamics residual assembly */
347  AssRes(SubVectorHandler& WorkVec,
348  const VectorHandler& XCurr,
349  const VectorHandler& XPrimeCurr,
350  const VectorHandler& XPrimePrimeCurr,
352 
353  virtual void InitialWorkSpaceDim(integer* piNumRows,
354  integer* piNumCols) const {
355  *piNumRows = 6;
356  *piNumCols = 12;
357  };
358 
359  /* Contributo allo jacobiano durante l'assemblaggio iniziale */
360  virtual VariableSubMatrixHandler&
362  const VectorHandler& XCurr);
363 
364  /* Contributo al residuo durante l'assemblaggio iniziale */
365  virtual SubVectorHandler&
366  InitialAssRes(SubVectorHandler& WorkVec, const VectorHandler& XCurr);
367 
368 #if 0
369  virtual unsigned int iGetNumPrivData(void) const {
371  };
372 
373  virtual unsigned int iGetPrivDataIdx(const char *s) const {
375  };
376 
377  virtual doublereal dGetPrivData(unsigned int i) const {
379  };
380 #endif
381 };
382 
383 /* ViscousAxialJoint - end */
384 
385 
386 /* ViscoElasticAxialJoint - begin */
387 
389 : virtual public Elem, public DeformableAxialJoint {
390 protected:
393 
395 
396  virtual void AssMats(FullSubMatrixHandler& WMA,
398  doublereal dCoef);
399 
400  virtual void AfterPredict(void);
401  virtual void AssVec(SubVectorHandler& WorkVec);
402 
403 public:
404  ViscoElasticAxialJoint(unsigned int uL,
405  const DofOwner* pDO,
406  const ConstitutiveLaw1D* pCL,
407  const StructNode* pN1,
408  const StructNode* pN2,
409  const Mat3x3& tilde_R1h,
410  const Mat3x3& tilde_R2h,
411  flag fOut);
412 
414 
415  virtual void
416  AfterConvergence(const VectorHandler& X, const VectorHandler& XP);
417 
418  /* Tipo di DeformableHinge */
419  virtual ConstLawType::Type GetConstLawType(void) const {
421  };
422 
423 #ifdef MBDYN_X_WORKAROUND_GCC_3_2
424  virtual void SetValue(DataManager *pDM,
426  SimulationEntity::Hints *ph = 0)
427  {
428  DeformableAxialJoint::SetValue(pDM, X, XP, ph);
429  };
430 
431  virtual Hint *
432  ParseHint(DataManager *pDM, const char *s) const
433  {
434  return DeformableAxialJoint::ParseHint(pDM, s);
435  };
436 #endif /* MBDYN_X_WORKAROUND_GCC_3_2 */
437 
438  /* assemblaggio jacobiano */
439  virtual VariableSubMatrixHandler&
441  doublereal dCoef,
442  const VectorHandler& XCurr,
443  const VectorHandler& XPrimeCurr);
444 
445  virtual void
447  VariableSubMatrixHandler& WorkMatB,
448  const VectorHandler& XCurr,
449  const VectorHandler& XPrimeCurr);
450 
451  /* assemblaggio residuo */
452  virtual SubVectorHandler&
453  AssRes(SubVectorHandler& WorkVec,
454  doublereal dCoef,
455  const VectorHandler& XCurr,
456  const VectorHandler& XPrimeCurr);
457 
458  /* Inverse Dynamics residual assembly */
460  AssRes(SubVectorHandler& WorkVec,
461  const VectorHandler& XCurr,
462  const VectorHandler& XPrimeCurr,
463  const VectorHandler& XPrimePrimeCurr,
465 
466  virtual void InitialWorkSpaceDim(integer* piNumRows,
467  integer* piNumCols) const {
468  *piNumRows = 6;
469  *piNumCols = 12;
470  };
471 
472  /* Contributo allo jacobiano durante l'assemblaggio iniziale */
473  virtual VariableSubMatrixHandler&
475  const VectorHandler& XCurr);
476 
477  /* Contributo al residuo durante l'assemblaggio iniziale */
478  virtual SubVectorHandler&
479  InitialAssRes(SubVectorHandler& WorkVec, const VectorHandler& XCurr);
480 
481 #if 0
482  virtual unsigned int iGetNumPrivData(void) const {
484  };
485 
486  virtual unsigned int iGetPrivDataIdx(const char *s) const {
488  };
489 
490  virtual doublereal dGetPrivData(unsigned int i) const {
492  };
493 #endif
494 };
495 
496 /* ViscoElasticAxialJoint - end */
497 
498 #endif // VEHJ4_H
499 
Definition: hint.h:38
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Definition: vehj4.cc:453
virtual ~DeformableAxialJoint(void)
Definition: vehj4.cc:113
doublereal dM
Definition: vehj4.h:58
Type
Definition: joint.h:66
virtual unsigned int iGetPrivDataIdx(const char *s) const
Definition: vehj4.cc:233
virtual void AssMats(FullSubMatrixHandler &WMA, FullSubMatrixHandler &WMB, doublereal dCoef)
Definition: vehj4.cc:746
virtual void AfterPredict(void)
Definition: vehj4.cc:656
virtual bool bInverseDynamics(void) const
Definition: vehj4.cc:199
ViscoElasticAxialJoint(unsigned int uL, const DofOwner *pDO, const ConstitutiveLaw1D *pCL, const StructNode *pN1, const StructNode *pN2, const Mat3x3 &tilde_R1h, const Mat3x3 &tilde_R2h, flag fOut)
Definition: vehj4.cc:934
long int flag
Definition: mbdyn.h:43
virtual Joint::Type GetJointType(void) const
Definition: vehj4.h:97
virtual ConstLawType::Type GetConstLawType(void) const =0
void Update(const VectorHandler &XCurr, InverseDynamics::Order iOrder=InverseDynamics::INVERSE_DYNAMICS)
Definition: vehj4.cc:520
Definition: matvec3.h:98
virtual VariableSubMatrixHandler & InitialAssJac(VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
Definition: vehj4.cc:1168
virtual VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Definition: vehj4.cc:994
virtual void AfterPredict(void)=0
virtual void AfterConvergence(const VectorHandler &X, const VectorHandler &XP)
Definition: vehj4.cc:956
virtual void AssVec(SubVectorHandler &WorkVec)
Definition: vehj4.cc:817
virtual VariableSubMatrixHandler & InitialAssJac(VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
Definition: vehj4.cc:838
doublereal dTol
Definition: vehj4.h:55
virtual std::ostream & Restart(std::ostream &out) const
Definition: vehj4.cc:120
~ViscoElasticAxialJoint(void)
Definition: vehj4.cc:950
virtual void AfterConvergence(const VectorHandler &X, const VectorHandler &XP)
Definition: vehj4.cc:323
virtual void AssMatMDEPrime(FullSubMatrixHandler &WMA, FullSubMatrixHandler &WMB, doublereal dCoef)
Definition: vehj4.cc:72
virtual void AssVec(SubVectorHandler &WorkVec)
Definition: vehj4.cc:1139
virtual void AssVec(SubVectorHandler &WorkVec)
Definition: vehj4.cc:535
const StructNode * pNode1
Definition: vehj4.h:48
doublereal dThetaRef
Definition: vehj4.h:391
virtual SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
Definition: vehj4.cc:599
doublereal dMDEPrime
Definition: vehj4.h:61
virtual void Output(OutputHandler &OH) const
Definition: vehj4.cc:134
std::vector< Hint * > Hints
Definition: simentity.h:89
virtual ~ElasticAxialJoint(void)
Definition: vehj4.cc:317
virtual void AfterConvergence(const VectorHandler &X, const VectorHandler &XP)
Definition: vehj4.cc:649
Mat3x3 tilde_R2h
Definition: vehj4.h:51
virtual void AfterPredict(void)
Definition: vehj4.cc:401
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Definition: vehj4.cc:756
virtual unsigned int iGetInitialNumDof(void) const
Definition: vehj4.h:135
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: vehj4.h:466
virtual unsigned int iGetNumPrivData(void) const
Definition: vehj4.cc:227
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: vehj4.h:244
virtual void AssMats(FullSubMatrixHandler &WMA, FullSubMatrixHandler &WMB, doublereal dCoef)
Definition: vehj4.cc:1067
virtual void AssMats(VariableSubMatrixHandler &WorkMatA, VariableSubMatrixHandler &WorkMatB, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Definition: vehj4.cc:367
const StructNode * pNode2
Definition: vehj4.h:49
virtual unsigned int iGetNumDof(void) const
Definition: vehj4.h:123
virtual VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Definition: vehj4.cc:331
ElasticAxialJoint(unsigned int uL, const DofOwner *pDO, const ConstitutiveLaw1D *pCL, const StructNode *pN1, const StructNode *pN2, const Mat3x3 &tilde_R1h, const Mat3x3 &tilde_R2h, flag fOut)
Definition: vehj4.cc:301
doublereal dThetaRef
Definition: vehj4.h:161
virtual ConstLawType::Type GetConstLawType(void) const
Definition: vehj4.h:184
ViscousAxialJoint(unsigned int uL, const DofOwner *pDO, const ConstitutiveLaw1D *pCL, const StructNode *pN1, const StructNode *pN2, const Mat3x3 &tilde_R1h, const Mat3x3 &tilde_R2h, flag fOut)
Definition: vehj4.cc:628
virtual VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Definition: vehj4.cc:673
doublereal dThetaCurr
Definition: vehj4.h:162
doublereal dOmega
Definition: vehj4.h:281
virtual ConstLawType::Type GetConstLawType(void) const
Definition: vehj4.h:419
virtual VariableSubMatrixHandler & InitialAssJac(VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
Definition: vehj4.cc:567
virtual Hint * ParseHint(DataManager *pDM, const char *s) const
Definition: vehj4.cc:205
void SetValue(DataManager *pDM, VectorHandler &X, VectorHandler &XP, SimulationEntity::Hints *ph=0)
Definition: vehj4.cc:163
Mat3x3 tilde_R1h
Definition: vehj4.h:50
virtual void AssMatM(FullSubMatrixHandler &WMA, doublereal dCoef)
Definition: vehj4.cc:47
const char * psConstLawNames[]
Definition: enums.cc:225
doublereal dOmega
Definition: vehj4.h:394
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Definition: vehj4.cc:1078
doublereal dMDE
Definition: vehj4.h:60
Mat3x3 MDEPrime
Definition: vehj4.h:67
Definition: elem.h:75
doublereal dThetaCurr
Definition: vehj4.h:392
virtual ~ViscousAxialJoint(void)
Definition: vehj4.cc:643
DeformableAxialJoint(unsigned int uL, const DofOwner *pDO, const ConstitutiveLaw1D *pCL, const StructNode *pN1, const StructNode *pN2, const Mat3x3 &tilde_R1h, const Mat3x3 &tilde_R2h, flag fOut)
Definition: vehj4.cc:88
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: vehj4.h:128
virtual SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
Definition: vehj4.cc:891
void AssMatMDE(FullSubMatrixHandler &WMA, doublereal dCoef)
Definition: vehj4.cc:59
Definition: joint.h:50
virtual void AssMat(FullSubMatrixHandler &WM, doublereal dCoef)
Definition: vehj4.cc:423
double doublereal
Definition: colamd.c:52
long int integer
Definition: colamd.c:51
virtual ConstLawType::Type GetConstLawType(void) const
Definition: vehj4.h:305
virtual void SetInitialValue(VectorHandler &)
Definition: vehj4.cc:192
virtual doublereal dGetPrivData(unsigned int i) const
Definition: vehj4.cc:262
virtual void GetConnectedNodes(std::vector< const Node * > &connectedNodes) const
Definition: vehj4.h:142
virtual SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
Definition: vehj4.cc:1221
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: vehj4.h:353
virtual void AfterPredict(void)
Definition: vehj4.cc:963